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}