Loading libs/binder/Status.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -211,6 +211,12 @@ status_t Status::writeToParcel(Parcel* parcel) const { return status; } status_t Status::writeOverParcel(Parcel* parcel) const { parcel->setDataSize(0); parcel->setDataPosition(0); return writeToParcel(parcel); } void Status::setException(int32_t ex, const String8& message) { mException = ex; mErrorCode = ex == EX_TRANSACTION_FAILED ? FAILED_TRANSACTION : NO_ERROR; Loading libs/binder/include/binder/Status.h +4 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,10 @@ public: status_t readFromParcel(const Parcel& parcel); status_t writeToParcel(Parcel* parcel) const; // Convenience API to replace a Parcel with a status value, w/o requiring // calling multiple APIs (makes generated code smaller). status_t writeOverParcel(Parcel* parcel) const; // Set one of the pre-defined exception types defined above. void setException(int32_t ex, const String8& message); // Set a service specific exception with error code. Loading libs/binder/tests/Android.bp +35 −8 Original line number Diff line number Diff line Loading @@ -37,7 +37,11 @@ cc_test { srcs: ["binderDriverInterfaceTest.cpp"], header_libs: ["libbinder_headers"], compile_multilib: "32", multilib: { lib32: { suffix: "" } }, multilib: { lib32: { suffix: "", }, }, cflags: ["-DBINDER_IPC_32BIT=1"], test_suites: ["vts"], } Loading @@ -52,7 +56,10 @@ cc_test { }, header_libs: ["libbinder_headers"], srcs: ["binderDriverInterfaceTest.cpp"], test_suites: ["device-tests", "vts"], test_suites: [ "device-tests", "vts", ], } cc_test { Loading @@ -69,7 +76,11 @@ cc_test { "libgmock", ], compile_multilib: "32", multilib: { lib32: { suffix: "" } }, multilib: { lib32: { suffix: "", }, }, cflags: ["-DBINDER_IPC_32BIT=1"], test_suites: ["vts"], require_root: true, Loading @@ -84,7 +95,11 @@ cc_test { enabled: false, }, }, srcs: ["binderParcelUnitTest.cpp", "binderBinderUnitTest.cpp"], srcs: [ "binderParcelUnitTest.cpp", "binderBinderUnitTest.cpp", "binderStatusUnitTest.cpp", ], shared_libs: [ "libbinder", "libcutils", Loading Loading @@ -112,7 +127,10 @@ cc_test { static_libs: [ "libgmock", ], test_suites: ["device-tests", "vts"], test_suites: [ "device-tests", "vts", ], require_root: true, } Loading Loading @@ -232,7 +250,10 @@ cc_test { "libbinder_tls_test_utils", "libbinder_tls_static", ], test_suites: ["general-tests", "device-tests"], test_suites: [ "general-tests", "device-tests", ], } cc_benchmark { Loading Loading @@ -348,7 +369,10 @@ cc_test { "liblog", "libutils", ], test_suites: ["device-tests", "vts"], test_suites: [ "device-tests", "vts", ], require_root: true, } Loading Loading @@ -402,7 +426,10 @@ cc_test { "binderStabilityTestIface-ndk", ], test_suites: ["device-tests", "vts"], test_suites: [ "device-tests", "vts", ], require_root: true, } Loading libs/binder/tests/binderStatusUnitTest.cpp 0 → 100644 +35 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 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. */ #include <binder/Parcel.h> #include <binder/Status.h> #include <gtest/gtest.h> using android::Parcel; using android::binder::Status; TEST(Status, WriteOverParcel) { Status status = Status::fromExceptionCode(Status::EX_NULL_POINTER); Parcel indirect; indirect.writeInt32(64); status.writeOverParcel(&indirect); Parcel direct; status.writeToParcel(&direct); EXPECT_EQ(0, indirect.compareData(direct)); } Loading
libs/binder/Status.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -211,6 +211,12 @@ status_t Status::writeToParcel(Parcel* parcel) const { return status; } status_t Status::writeOverParcel(Parcel* parcel) const { parcel->setDataSize(0); parcel->setDataPosition(0); return writeToParcel(parcel); } void Status::setException(int32_t ex, const String8& message) { mException = ex; mErrorCode = ex == EX_TRANSACTION_FAILED ? FAILED_TRANSACTION : NO_ERROR; Loading
libs/binder/include/binder/Status.h +4 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,10 @@ public: status_t readFromParcel(const Parcel& parcel); status_t writeToParcel(Parcel* parcel) const; // Convenience API to replace a Parcel with a status value, w/o requiring // calling multiple APIs (makes generated code smaller). status_t writeOverParcel(Parcel* parcel) const; // Set one of the pre-defined exception types defined above. void setException(int32_t ex, const String8& message); // Set a service specific exception with error code. Loading
libs/binder/tests/Android.bp +35 −8 Original line number Diff line number Diff line Loading @@ -37,7 +37,11 @@ cc_test { srcs: ["binderDriverInterfaceTest.cpp"], header_libs: ["libbinder_headers"], compile_multilib: "32", multilib: { lib32: { suffix: "" } }, multilib: { lib32: { suffix: "", }, }, cflags: ["-DBINDER_IPC_32BIT=1"], test_suites: ["vts"], } Loading @@ -52,7 +56,10 @@ cc_test { }, header_libs: ["libbinder_headers"], srcs: ["binderDriverInterfaceTest.cpp"], test_suites: ["device-tests", "vts"], test_suites: [ "device-tests", "vts", ], } cc_test { Loading @@ -69,7 +76,11 @@ cc_test { "libgmock", ], compile_multilib: "32", multilib: { lib32: { suffix: "" } }, multilib: { lib32: { suffix: "", }, }, cflags: ["-DBINDER_IPC_32BIT=1"], test_suites: ["vts"], require_root: true, Loading @@ -84,7 +95,11 @@ cc_test { enabled: false, }, }, srcs: ["binderParcelUnitTest.cpp", "binderBinderUnitTest.cpp"], srcs: [ "binderParcelUnitTest.cpp", "binderBinderUnitTest.cpp", "binderStatusUnitTest.cpp", ], shared_libs: [ "libbinder", "libcutils", Loading Loading @@ -112,7 +127,10 @@ cc_test { static_libs: [ "libgmock", ], test_suites: ["device-tests", "vts"], test_suites: [ "device-tests", "vts", ], require_root: true, } Loading Loading @@ -232,7 +250,10 @@ cc_test { "libbinder_tls_test_utils", "libbinder_tls_static", ], test_suites: ["general-tests", "device-tests"], test_suites: [ "general-tests", "device-tests", ], } cc_benchmark { Loading Loading @@ -348,7 +369,10 @@ cc_test { "liblog", "libutils", ], test_suites: ["device-tests", "vts"], test_suites: [ "device-tests", "vts", ], require_root: true, } Loading Loading @@ -402,7 +426,10 @@ cc_test { "binderStabilityTestIface-ndk", ], test_suites: ["device-tests", "vts"], test_suites: [ "device-tests", "vts", ], require_root: true, } Loading
libs/binder/tests/binderStatusUnitTest.cpp 0 → 100644 +35 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 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. */ #include <binder/Parcel.h> #include <binder/Status.h> #include <gtest/gtest.h> using android::Parcel; using android::binder::Status; TEST(Status, WriteOverParcel) { Status status = Status::fromExceptionCode(Status::EX_NULL_POINTER); Parcel indirect; indirect.writeInt32(64); status.writeOverParcel(&indirect); Parcel direct; status.writeToParcel(&direct); EXPECT_EQ(0, indirect.compareData(direct)); }