Loading libs/binder/trusty/rust/binder_rpc_test/main.rs +10 −3 Original line number Diff line number Diff line Loading @@ -23,14 +23,21 @@ use trusty_std::ffi::{CString, FallibleCString}; test::init!(); const SERVICE_PORT: &str = "com.android.trusty.binderRpcTestService.V1"; const RUST_SERVICE_PORT: &str = "com.android.trusty.rust.binderRpcTestService.V1"; fn get_service() -> Strong<dyn IBinderRpcTest> { let port = CString::try_new(SERVICE_PORT).expect("Failed to allocate port name"); fn get_service(port: &str) -> Strong<dyn IBinderRpcTest> { let port = CString::try_new(port).expect("Failed to allocate port name"); RpcSession::new().setup_trusty_client(port.as_c_str()).expect("Failed to create session") } #[test] fn ping() { let srv = get_service(); let srv = get_service(SERVICE_PORT); assert_eq!(srv.as_binder().ping_binder(), Ok(())); } #[test] fn ping_rust() { let srv = get_service(RUST_SERVICE_PORT); assert_eq!(srv.as_binder().ping_binder(), Ok(())); } libs/binder/trusty/rust/binder_rpc_test/service/main.rs 0 → 100644 +159 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ use binder::{BinderFeatures, Interface, ParcelFileDescriptor, SpIBinder, Status, Strong}; use binder_rpc_test_aidl::aidl::IBinderRpcCallback::IBinderRpcCallback; use binder_rpc_test_aidl::aidl::IBinderRpcSession::IBinderRpcSession; use binder_rpc_test_aidl::aidl::IBinderRpcTest::{BnBinderRpcTest, IBinderRpcTest}; use rpcbinder::RpcServer; use std::rc::Rc; use tipc::{service_dispatcher, wrap_service, Manager, PortCfg}; const RUST_SERVICE_PORT: &str = "com.android.trusty.rust.binderRpcTestService.V1"; #[derive(Debug, Default)] struct TestService; impl Interface for TestService {} impl IBinderRpcTest for TestService { fn sendString(&self, _: &str) -> Result<(), Status> { todo!() } fn doubleString(&self, _: &str) -> Result<String, Status> { todo!() } fn getClientPort(&self) -> Result<i32, Status> { todo!() } fn countBinders(&self) -> Result<Vec<i32>, Status> { todo!() } fn getNullBinder(&self) -> Result<SpIBinder, Status> { todo!() } fn pingMe(&self, _: &SpIBinder) -> Result<i32, Status> { todo!() } fn repeatBinder(&self, _: Option<&SpIBinder>) -> Result<Option<SpIBinder>, Status> { todo!() } fn holdBinder(&self, _: Option<&SpIBinder>) -> Result<(), Status> { todo!() } fn getHeldBinder(&self) -> Result<Option<SpIBinder>, Status> { todo!() } fn nestMe(&self, _: &Strong<(dyn IBinderRpcTest + 'static)>, _: i32) -> Result<(), Status> { todo!() } fn alwaysGiveMeTheSameBinder(&self) -> Result<SpIBinder, Status> { todo!() } fn openSession(&self, _: &str) -> Result<Strong<(dyn IBinderRpcSession + 'static)>, Status> { todo!() } fn getNumOpenSessions(&self) -> Result<i32, Status> { todo!() } fn lock(&self) -> Result<(), Status> { todo!() } fn unlockInMsAsync(&self, _: i32) -> Result<(), Status> { todo!() } fn lockUnlock(&self) -> Result<(), Status> { todo!() } fn sleepMs(&self, _: i32) -> Result<(), Status> { todo!() } fn sleepMsAsync(&self, _: i32) -> Result<(), Status> { todo!() } fn doCallback( &self, _: &Strong<(dyn IBinderRpcCallback + 'static)>, _: bool, _: bool, _: &str, ) -> Result<(), Status> { todo!() } fn doCallbackAsync( &self, _: &Strong<(dyn IBinderRpcCallback + 'static)>, _: bool, _: bool, _: &str, ) -> Result<(), Status> { todo!() } fn die(&self, _: bool) -> Result<(), Status> { todo!() } fn scheduleShutdown(&self) -> Result<(), Status> { todo!() } fn useKernelBinderCallingId(&self) -> Result<(), Status> { todo!() } fn echoAsFile(&self, _: &str) -> Result<ParcelFileDescriptor, Status> { todo!() } fn concatFiles(&self, _: &[ParcelFileDescriptor]) -> Result<ParcelFileDescriptor, Status> { todo!() } fn blockingSendFdOneway(&self, _: &ParcelFileDescriptor) -> Result<(), Status> { todo!() } fn blockingRecvFd(&self) -> Result<ParcelFileDescriptor, Status> { todo!() } fn blockingSendIntOneway(&self, _: i32) -> Result<(), Status> { todo!() } fn blockingRecvInt(&self) -> Result<i32, Status> { todo!() } } wrap_service!(TestRpcServer(RpcServer: UnbufferedService)); service_dispatcher! { enum TestDispatcher { TestRpcServer, } } fn main() { let mut dispatcher = TestDispatcher::<1>::new().expect("Could not create test dispatcher"); let service = BnBinderRpcTest::new_binder(TestService::default(), BinderFeatures::default()); let rpc_server = TestRpcServer::new(RpcServer::new_per_session(move |_uuid| Some(service.as_binder()))); let cfg = PortCfg::new(RUST_SERVICE_PORT) .expect("Could not create port config") .allow_ta_connect() .allow_ns_connect(); dispatcher.add_service(Rc::new(rpc_server), cfg).expect("Could not add service to dispatcher"); Manager::<_, _, 1, 4>::new_with_dispatcher(dispatcher, []) .expect("Could not create service manager") .run_event_loop() .expect("Test event loop failed"); } libs/binder/trusty/rust/binder_rpc_test/service/manifest.json 0 → 100644 +10 −0 Original line number Diff line number Diff line { "uuid": "4741fc65-8b65-4893-ba55-b182c003c8b7", "app_name": "rust_binder_rpc_test_service", "min_heap": 16384, "min_stack": 16384, "mgmt_flags": { "non_critical_app": true, "restart_on_exit": true } } libs/binder/trusty/rust/binder_rpc_test/service/rules.mk 0 → 100644 +33 −0 Original line number Diff line number Diff line # Copyright (C) 2023 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # LOCAL_DIR := $(GET_LOCAL_DIR) LIBBINDER_DIR := $(LOCAL_DIR)/../../../.. MODULE := $(LOCAL_DIR) MODULE_SRCS := $(LOCAL_DIR)/main.rs MODULE_CRATE_NAME := binder_rpc_test_service MODULE_LIBRARY_DEPS += \ $(LIBBINDER_DIR)/trusty/rust \ $(LIBBINDER_DIR)/trusty/rust/rpcbinder \ $(LOCAL_DIR)/../aidl \ trusty/user/base/lib/tipc/rust \ MANIFEST := $(LOCAL_DIR)/manifest.json include make/trusted_app.mk libs/binder/trusty/usertests-inc.mk +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ TRUSTY_USER_TESTS += \ frameworks/native/libs/binder/trusty/binderRpcTest \ frameworks/native/libs/binder/trusty/binderRpcTest/service \ frameworks/native/libs/binder/trusty/rust/binder_rpc_test/service \ TRUSTY_RUST_USER_TESTS += \ frameworks/native/libs/binder/trusty/rust/binder_rpc_test \ Loading Loading
libs/binder/trusty/rust/binder_rpc_test/main.rs +10 −3 Original line number Diff line number Diff line Loading @@ -23,14 +23,21 @@ use trusty_std::ffi::{CString, FallibleCString}; test::init!(); const SERVICE_PORT: &str = "com.android.trusty.binderRpcTestService.V1"; const RUST_SERVICE_PORT: &str = "com.android.trusty.rust.binderRpcTestService.V1"; fn get_service() -> Strong<dyn IBinderRpcTest> { let port = CString::try_new(SERVICE_PORT).expect("Failed to allocate port name"); fn get_service(port: &str) -> Strong<dyn IBinderRpcTest> { let port = CString::try_new(port).expect("Failed to allocate port name"); RpcSession::new().setup_trusty_client(port.as_c_str()).expect("Failed to create session") } #[test] fn ping() { let srv = get_service(); let srv = get_service(SERVICE_PORT); assert_eq!(srv.as_binder().ping_binder(), Ok(())); } #[test] fn ping_rust() { let srv = get_service(RUST_SERVICE_PORT); assert_eq!(srv.as_binder().ping_binder(), Ok(())); }
libs/binder/trusty/rust/binder_rpc_test/service/main.rs 0 → 100644 +159 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ use binder::{BinderFeatures, Interface, ParcelFileDescriptor, SpIBinder, Status, Strong}; use binder_rpc_test_aidl::aidl::IBinderRpcCallback::IBinderRpcCallback; use binder_rpc_test_aidl::aidl::IBinderRpcSession::IBinderRpcSession; use binder_rpc_test_aidl::aidl::IBinderRpcTest::{BnBinderRpcTest, IBinderRpcTest}; use rpcbinder::RpcServer; use std::rc::Rc; use tipc::{service_dispatcher, wrap_service, Manager, PortCfg}; const RUST_SERVICE_PORT: &str = "com.android.trusty.rust.binderRpcTestService.V1"; #[derive(Debug, Default)] struct TestService; impl Interface for TestService {} impl IBinderRpcTest for TestService { fn sendString(&self, _: &str) -> Result<(), Status> { todo!() } fn doubleString(&self, _: &str) -> Result<String, Status> { todo!() } fn getClientPort(&self) -> Result<i32, Status> { todo!() } fn countBinders(&self) -> Result<Vec<i32>, Status> { todo!() } fn getNullBinder(&self) -> Result<SpIBinder, Status> { todo!() } fn pingMe(&self, _: &SpIBinder) -> Result<i32, Status> { todo!() } fn repeatBinder(&self, _: Option<&SpIBinder>) -> Result<Option<SpIBinder>, Status> { todo!() } fn holdBinder(&self, _: Option<&SpIBinder>) -> Result<(), Status> { todo!() } fn getHeldBinder(&self) -> Result<Option<SpIBinder>, Status> { todo!() } fn nestMe(&self, _: &Strong<(dyn IBinderRpcTest + 'static)>, _: i32) -> Result<(), Status> { todo!() } fn alwaysGiveMeTheSameBinder(&self) -> Result<SpIBinder, Status> { todo!() } fn openSession(&self, _: &str) -> Result<Strong<(dyn IBinderRpcSession + 'static)>, Status> { todo!() } fn getNumOpenSessions(&self) -> Result<i32, Status> { todo!() } fn lock(&self) -> Result<(), Status> { todo!() } fn unlockInMsAsync(&self, _: i32) -> Result<(), Status> { todo!() } fn lockUnlock(&self) -> Result<(), Status> { todo!() } fn sleepMs(&self, _: i32) -> Result<(), Status> { todo!() } fn sleepMsAsync(&self, _: i32) -> Result<(), Status> { todo!() } fn doCallback( &self, _: &Strong<(dyn IBinderRpcCallback + 'static)>, _: bool, _: bool, _: &str, ) -> Result<(), Status> { todo!() } fn doCallbackAsync( &self, _: &Strong<(dyn IBinderRpcCallback + 'static)>, _: bool, _: bool, _: &str, ) -> Result<(), Status> { todo!() } fn die(&self, _: bool) -> Result<(), Status> { todo!() } fn scheduleShutdown(&self) -> Result<(), Status> { todo!() } fn useKernelBinderCallingId(&self) -> Result<(), Status> { todo!() } fn echoAsFile(&self, _: &str) -> Result<ParcelFileDescriptor, Status> { todo!() } fn concatFiles(&self, _: &[ParcelFileDescriptor]) -> Result<ParcelFileDescriptor, Status> { todo!() } fn blockingSendFdOneway(&self, _: &ParcelFileDescriptor) -> Result<(), Status> { todo!() } fn blockingRecvFd(&self) -> Result<ParcelFileDescriptor, Status> { todo!() } fn blockingSendIntOneway(&self, _: i32) -> Result<(), Status> { todo!() } fn blockingRecvInt(&self) -> Result<i32, Status> { todo!() } } wrap_service!(TestRpcServer(RpcServer: UnbufferedService)); service_dispatcher! { enum TestDispatcher { TestRpcServer, } } fn main() { let mut dispatcher = TestDispatcher::<1>::new().expect("Could not create test dispatcher"); let service = BnBinderRpcTest::new_binder(TestService::default(), BinderFeatures::default()); let rpc_server = TestRpcServer::new(RpcServer::new_per_session(move |_uuid| Some(service.as_binder()))); let cfg = PortCfg::new(RUST_SERVICE_PORT) .expect("Could not create port config") .allow_ta_connect() .allow_ns_connect(); dispatcher.add_service(Rc::new(rpc_server), cfg).expect("Could not add service to dispatcher"); Manager::<_, _, 1, 4>::new_with_dispatcher(dispatcher, []) .expect("Could not create service manager") .run_event_loop() .expect("Test event loop failed"); }
libs/binder/trusty/rust/binder_rpc_test/service/manifest.json 0 → 100644 +10 −0 Original line number Diff line number Diff line { "uuid": "4741fc65-8b65-4893-ba55-b182c003c8b7", "app_name": "rust_binder_rpc_test_service", "min_heap": 16384, "min_stack": 16384, "mgmt_flags": { "non_critical_app": true, "restart_on_exit": true } }
libs/binder/trusty/rust/binder_rpc_test/service/rules.mk 0 → 100644 +33 −0 Original line number Diff line number Diff line # Copyright (C) 2023 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # LOCAL_DIR := $(GET_LOCAL_DIR) LIBBINDER_DIR := $(LOCAL_DIR)/../../../.. MODULE := $(LOCAL_DIR) MODULE_SRCS := $(LOCAL_DIR)/main.rs MODULE_CRATE_NAME := binder_rpc_test_service MODULE_LIBRARY_DEPS += \ $(LIBBINDER_DIR)/trusty/rust \ $(LIBBINDER_DIR)/trusty/rust/rpcbinder \ $(LOCAL_DIR)/../aidl \ trusty/user/base/lib/tipc/rust \ MANIFEST := $(LOCAL_DIR)/manifest.json include make/trusted_app.mk
libs/binder/trusty/usertests-inc.mk +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ TRUSTY_USER_TESTS += \ frameworks/native/libs/binder/trusty/binderRpcTest \ frameworks/native/libs/binder/trusty/binderRpcTest/service \ frameworks/native/libs/binder/trusty/rust/binder_rpc_test/service \ TRUSTY_RUST_USER_TESTS += \ frameworks/native/libs/binder/trusty/rust/binder_rpc_test \ Loading