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}