diff options
author | Steven Moreland <smoreland@google.com> | 2022-02-04 18:31:56 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-02-04 18:31:56 +0000 |
commit | 8678720c9942bea322727716bd59879496705f87 (patch) | |
tree | 2905d863e9da77b9a87ac61c8e6aa39b082dc269 | |
parent | 8be0387047362d28396fbc8e98198bac371d84a8 (diff) | |
parent | cf373696fe51bbd0db1da2a38aafe81bb04fc7e9 (diff) | |
download | native-8678720c9942bea322727716bd59879496705f87.tar.gz |
Merge changes from topic "be-kind-rewind"
* changes:
libbinder: Status writeOverParcel
libbinder: format tests bp
-rw-r--r-- | libs/binder/Status.cpp | 6 | ||||
-rw-r--r-- | libs/binder/include/binder/Status.h | 4 | ||||
-rw-r--r-- | libs/binder/tests/Android.bp | 43 | ||||
-rw-r--r-- | libs/binder/tests/binderStatusUnitTest.cpp | 35 |
4 files changed, 80 insertions, 8 deletions
diff --git a/libs/binder/Status.cpp b/libs/binder/Status.cpp index a44c578230..83b97d04c6 100644 --- a/libs/binder/Status.cpp +++ b/libs/binder/Status.cpp @@ -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; diff --git a/libs/binder/include/binder/Status.h b/libs/binder/include/binder/Status.h index aaafa36d40..af34695875 100644 --- a/libs/binder/include/binder/Status.h +++ b/libs/binder/include/binder/Status.h @@ -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. diff --git a/libs/binder/tests/Android.bp b/libs/binder/tests/Android.bp index 86da5887a8..2ce00b2255 100644 --- a/libs/binder/tests/Android.bp +++ b/libs/binder/tests/Android.bp @@ -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"], } @@ -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 { @@ -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, @@ -84,7 +95,11 @@ cc_test { enabled: false, }, }, - srcs: ["binderParcelUnitTest.cpp", "binderBinderUnitTest.cpp"], + srcs: [ + "binderParcelUnitTest.cpp", + "binderBinderUnitTest.cpp", + "binderStatusUnitTest.cpp", + ], shared_libs: [ "libbinder", "libcutils", @@ -112,7 +127,10 @@ cc_test { static_libs: [ "libgmock", ], - test_suites: ["device-tests", "vts"], + test_suites: [ + "device-tests", + "vts", + ], require_root: true, } @@ -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 { @@ -348,7 +369,10 @@ cc_test { "liblog", "libutils", ], - test_suites: ["device-tests", "vts"], + test_suites: [ + "device-tests", + "vts", + ], require_root: true, } @@ -402,7 +426,10 @@ cc_test { "binderStabilityTestIface-ndk", ], - test_suites: ["device-tests", "vts"], + test_suites: [ + "device-tests", + "vts", + ], require_root: true, } diff --git a/libs/binder/tests/binderStatusUnitTest.cpp b/libs/binder/tests/binderStatusUnitTest.cpp new file mode 100644 index 0000000000..a32ec5cc31 --- /dev/null +++ b/libs/binder/tests/binderStatusUnitTest.cpp @@ -0,0 +1,35 @@ +/* + * 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)); +} |