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