1ca0551cfSopenharmony_ci/* 2ca0551cfSopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3ca0551cfSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ca0551cfSopenharmony_ci * you may not use this file except in compliance with the License. 5ca0551cfSopenharmony_ci * You may obtain a copy of the License at 6ca0551cfSopenharmony_ci * 7ca0551cfSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ca0551cfSopenharmony_ci * 9ca0551cfSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ca0551cfSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ca0551cfSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ca0551cfSopenharmony_ci * See the License for the specific language governing permissions and 13ca0551cfSopenharmony_ci * limitations under the License. 14ca0551cfSopenharmony_ci */ 15ca0551cfSopenharmony_ci 16ca0551cfSopenharmony_ciextern crate ipc_rust; 17ca0551cfSopenharmony_ciextern crate rust_idl_ipc_test_service; 18ca0551cfSopenharmony_ci 19ca0551cfSopenharmony_ciuse std::ptr; 20ca0551cfSopenharmony_ciuse std::ffi::{c_char, CString}; 21ca0551cfSopenharmony_ci 22ca0551cfSopenharmony_ciuse ipc_rust::{FromRemoteObj, RemoteObjRef, get_service}; 23ca0551cfSopenharmony_ciuse rust_idl_ipc_test_service::{IIdlTestService}; 24ca0551cfSopenharmony_ci 25ca0551cfSopenharmony_ciconst IPC_TEST_SERVICE_ID: i32 = 1118; 26ca0551cfSopenharmony_ci 27ca0551cfSopenharmony_ci#[repr(C)] 28ca0551cfSopenharmony_cistruct TokenInfoParams { 29ca0551cfSopenharmony_ci dcaps_num: i32, 30ca0551cfSopenharmony_ci perms_num: i32, 31ca0551cfSopenharmony_ci acls_num: i32, 32ca0551cfSopenharmony_ci dcaps: *const *const c_char, 33ca0551cfSopenharmony_ci perms: *const *const c_char, 34ca0551cfSopenharmony_ci acls: *const *const c_char, 35ca0551cfSopenharmony_ci process_name: *const c_char, 36ca0551cfSopenharmony_ci apl_str: *const c_char, 37ca0551cfSopenharmony_ci} 38ca0551cfSopenharmony_ci 39ca0551cfSopenharmony_ciextern "C" { 40ca0551cfSopenharmony_ci fn GetAccessTokenId(tokenInfo: *mut TokenInfoParams) -> u64; 41ca0551cfSopenharmony_ci fn SetSelfTokenID(tokenID: u64) -> i32; 42ca0551cfSopenharmony_ci} 43ca0551cfSopenharmony_ci 44ca0551cfSopenharmony_cifn get_test_service() -> RemoteObjRef<dyn IIdlTestService> 45ca0551cfSopenharmony_ci{ 46ca0551cfSopenharmony_ci let object = get_service(IPC_TEST_SERVICE_ID).expect("get itest service failed"); 47ca0551cfSopenharmony_ci let remote = <dyn IIdlTestService as FromRemoteObj>::from(object); 48ca0551cfSopenharmony_ci let remote = match remote { 49ca0551cfSopenharmony_ci Ok(x) => x, 50ca0551cfSopenharmony_ci Err(error) => { 51ca0551cfSopenharmony_ci println!("convert RemoteObj to TestProxy failed: {}", error); 52ca0551cfSopenharmony_ci panic!(); 53ca0551cfSopenharmony_ci } 54ca0551cfSopenharmony_ci }; 55ca0551cfSopenharmony_ci remote 56ca0551cfSopenharmony_ci} 57ca0551cfSopenharmony_ci 58ca0551cfSopenharmony_ci/// init access token for client 59ca0551cfSopenharmony_ci#[test] 60ca0551cfSopenharmony_cifn init_access_token() { 61ca0551cfSopenharmony_ci let name = CString::new("com.ipc.test").expect("process name is invalid"); 62ca0551cfSopenharmony_ci let apl = CString::new("normal").expect("apl string is invalid"); 63ca0551cfSopenharmony_ci let mut param = TokenInfoParams { 64ca0551cfSopenharmony_ci dcaps_num: 0, 65ca0551cfSopenharmony_ci perms_num: 0, 66ca0551cfSopenharmony_ci acls_num: 0, 67ca0551cfSopenharmony_ci dcaps: ptr::null(), 68ca0551cfSopenharmony_ci perms: ptr::null(), 69ca0551cfSopenharmony_ci acls: ptr::null(), 70ca0551cfSopenharmony_ci process_name: name.as_ptr(), 71ca0551cfSopenharmony_ci apl_str: apl.as_ptr(), 72ca0551cfSopenharmony_ci }; 73ca0551cfSopenharmony_ci 74ca0551cfSopenharmony_ci unsafe { 75ca0551cfSopenharmony_ci let token_id = GetAccessTokenId(&mut param as *mut TokenInfoParams); 76ca0551cfSopenharmony_ci SetSelfTokenID(token_id); 77ca0551cfSopenharmony_ci } 78ca0551cfSopenharmony_ci} 79ca0551cfSopenharmony_ci 80ca0551cfSopenharmony_ci#[test] 81ca0551cfSopenharmony_cifn idl_ipc_test_basic_001() { 82ca0551cfSopenharmony_ci let remote = get_test_service(); 83ca0551cfSopenharmony_ci remote.idl_ipc_test_basic_001().expect("should success"); 84ca0551cfSopenharmony_ci assert_eq!(true, true); 85ca0551cfSopenharmony_ci} 86ca0551cfSopenharmony_ci 87ca0551cfSopenharmony_ci#[test] 88ca0551cfSopenharmony_cifn idl_ipc_test_basic_002() { 89ca0551cfSopenharmony_ci let remote = get_test_service(); 90ca0551cfSopenharmony_ci remote.idl_ipc_test_basic_002().expect("should success"); 91ca0551cfSopenharmony_ci assert_eq!(true, true); 92ca0551cfSopenharmony_ci} 93ca0551cfSopenharmony_ci 94ca0551cfSopenharmony_ci#[test] 95ca0551cfSopenharmony_cifn idl_ipc_test_basic_101() { 96ca0551cfSopenharmony_ci let remote = get_test_service(); 97ca0551cfSopenharmony_ci let anchor = remote.idl_ipc_test_basic_101(&true).expect("should success"); 98ca0551cfSopenharmony_ci assert!(!anchor); 99ca0551cfSopenharmony_ci} 100ca0551cfSopenharmony_ci 101ca0551cfSopenharmony_ci#[test] 102ca0551cfSopenharmony_cifn idl_ipc_test_basic_102() { 103ca0551cfSopenharmony_ci let remote = get_test_service(); 104ca0551cfSopenharmony_ci let anchor = remote.idl_ipc_test_basic_102(&12).expect("should success"); 105ca0551cfSopenharmony_ci println!("idl_ipc_test_basic_102: {}", anchor); 106ca0551cfSopenharmony_ci assert_eq!(anchor, 24); 107ca0551cfSopenharmony_ci} 108ca0551cfSopenharmony_ci 109ca0551cfSopenharmony_ci#[test] 110ca0551cfSopenharmony_cifn idl_ipc_test_basic_103() { 111ca0551cfSopenharmony_ci let remote = get_test_service(); 112ca0551cfSopenharmony_ci let anchor = remote.idl_ipc_test_basic_103(&24).expect("should success"); 113ca0551cfSopenharmony_ci assert_eq!(anchor, 48); 114ca0551cfSopenharmony_ci} 115ca0551cfSopenharmony_ci 116ca0551cfSopenharmony_ci#[test] 117ca0551cfSopenharmony_cifn idl_ipc_test_basic_104() { 118ca0551cfSopenharmony_ci let remote = get_test_service(); 119ca0551cfSopenharmony_ci let anchor = remote.idl_ipc_test_basic_104(&48).expect("should success"); 120ca0551cfSopenharmony_ci assert_eq!(anchor, 96); 121ca0551cfSopenharmony_ci} 122ca0551cfSopenharmony_ci 123ca0551cfSopenharmony_ci#[test] 124ca0551cfSopenharmony_cifn idl_ipc_test_basic_105() { 125ca0551cfSopenharmony_ci let remote = get_test_service(); 126ca0551cfSopenharmony_ci let anchor = remote.idl_ipc_test_basic_105(&96).expect("should success"); 127ca0551cfSopenharmony_ci assert_eq!(anchor, 192); 128ca0551cfSopenharmony_ci} 129ca0551cfSopenharmony_ci 130ca0551cfSopenharmony_ci#[test] 131ca0551cfSopenharmony_cifn idl_ipc_test_basic_106() { 132ca0551cfSopenharmony_ci let remote = get_test_service(); 133ca0551cfSopenharmony_ci let anchor = remote.idl_ipc_test_basic_106(&1.7).expect("should success"); 134ca0551cfSopenharmony_ci assert!((anchor - 1.7 * 2.0).abs() < 0.1); 135ca0551cfSopenharmony_ci} 136ca0551cfSopenharmony_ci 137ca0551cfSopenharmony_ci#[test] 138ca0551cfSopenharmony_cifn idl_ipc_test_basic_107() { 139ca0551cfSopenharmony_ci let remote = get_test_service(); 140ca0551cfSopenharmony_ci let anchor = remote.idl_ipc_test_basic_107(&3.4).expect("should success"); 141ca0551cfSopenharmony_ci assert!((anchor - 3.4 * 2.0).abs() < 0.1); 142ca0551cfSopenharmony_ci} 143ca0551cfSopenharmony_ci 144ca0551cfSopenharmony_ci#[test] 145ca0551cfSopenharmony_cifn idl_ipc_test_basic_108() { 146ca0551cfSopenharmony_ci let remote = get_test_service(); 147ca0551cfSopenharmony_ci let anchor = remote.idl_ipc_test_basic_108("Basic").expect("should success"); 148ca0551cfSopenharmony_ci assert_eq!(anchor, "BasicBasic"); 149ca0551cfSopenharmony_ci} 150ca0551cfSopenharmony_ci 151ca0551cfSopenharmony_ci#[test] 152ca0551cfSopenharmony_cifn idl_ipc_test_basic_199() { 153ca0551cfSopenharmony_ci let remote = get_test_service(); 154ca0551cfSopenharmony_ci let anchor = remote.idl_ipc_test_basic_199(&true, &96, &1.7, &3.4, "Basic").expect("should success"); 155ca0551cfSopenharmony_ci assert!(anchor); 156ca0551cfSopenharmony_ci}