Loading services/powermanager/WorkSource.cpp +10 −2 Original line number Diff line number Diff line Loading @@ -28,9 +28,16 @@ status_t WorkSource::readFromParcel(const android::Parcel *parcel) { return BAD_VALUE; } int32_t num; int32_t workChainCount; status_t ret = parcel->readInt32(&num) ?: parcel->readInt32Vector(&mUids) ?: parcel->readString16Vector(&mNames); ?: parcel->readString16Vector(&mNames) ?: parcel->readInt32(&workChainCount); if (ret == OK && workChainCount > 0) { // We don't yet support WorkChains in native WorkSources. return BAD_VALUE; } return ret; } Loading @@ -43,7 +50,8 @@ status_t WorkSource::writeToParcel(android::Parcel *parcel) const { return parcel->writeInt32(mUids.size()) ?: parcel->writeInt32Vector(mUids) ?: parcel->writeString16Vector(mNames); ?: parcel->writeString16Vector(mNames) ?: parcel->writeInt32(-1); } } // namespace android::os services/powermanager/tests/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ cc_test { "PowerHalWrapperAidlTest.cpp", "PowerHalWrapperHidlV1_0Test.cpp", "PowerHalWrapperHidlV1_1Test.cpp", "WorkSourceTest.cpp", ], cflags: [ "-Wall", Loading services/powermanager/tests/WorkSourceTest.cpp 0 → 100644 +46 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 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 <optional> #define LOG_TAG "PowerHalLoaderTest" #include <android-base/logging.h> #include <android/WorkSource.h> #include <binder/Parcel.h> #include <gtest/gtest.h> #include <future> using namespace android; using namespace testing; TEST(WorkSourceTest, Parcel) { std::vector<int32_t> uids = {1, 2}; using Names = std::vector<std::optional<String16>>; std::optional<Names> names = std::make_optional<Names>({std::make_optional(String16("name"))}); os::WorkSource ws{uids, names}; Parcel p; ws.writeToParcel(&p); p.setDataPosition(0); os::WorkSource otherWs; otherWs.readFromParcel(&p); EXPECT_EQ(ws, otherWs); EXPECT_EQ(uids, otherWs.getUids()); EXPECT_EQ(names, otherWs.getNames()); } Loading
services/powermanager/WorkSource.cpp +10 −2 Original line number Diff line number Diff line Loading @@ -28,9 +28,16 @@ status_t WorkSource::readFromParcel(const android::Parcel *parcel) { return BAD_VALUE; } int32_t num; int32_t workChainCount; status_t ret = parcel->readInt32(&num) ?: parcel->readInt32Vector(&mUids) ?: parcel->readString16Vector(&mNames); ?: parcel->readString16Vector(&mNames) ?: parcel->readInt32(&workChainCount); if (ret == OK && workChainCount > 0) { // We don't yet support WorkChains in native WorkSources. return BAD_VALUE; } return ret; } Loading @@ -43,7 +50,8 @@ status_t WorkSource::writeToParcel(android::Parcel *parcel) const { return parcel->writeInt32(mUids.size()) ?: parcel->writeInt32Vector(mUids) ?: parcel->writeString16Vector(mNames); ?: parcel->writeString16Vector(mNames) ?: parcel->writeInt32(-1); } } // namespace android::os
services/powermanager/tests/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ cc_test { "PowerHalWrapperAidlTest.cpp", "PowerHalWrapperHidlV1_0Test.cpp", "PowerHalWrapperHidlV1_1Test.cpp", "WorkSourceTest.cpp", ], cflags: [ "-Wall", Loading
services/powermanager/tests/WorkSourceTest.cpp 0 → 100644 +46 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 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 <optional> #define LOG_TAG "PowerHalLoaderTest" #include <android-base/logging.h> #include <android/WorkSource.h> #include <binder/Parcel.h> #include <gtest/gtest.h> #include <future> using namespace android; using namespace testing; TEST(WorkSourceTest, Parcel) { std::vector<int32_t> uids = {1, 2}; using Names = std::vector<std::optional<String16>>; std::optional<Names> names = std::make_optional<Names>({std::make_optional(String16("name"))}); os::WorkSource ws{uids, names}; Parcel p; ws.writeToParcel(&p); p.setDataPosition(0); os::WorkSource otherWs; otherWs.readFromParcel(&p); EXPECT_EQ(ws, otherWs); EXPECT_EQ(uids, otherWs.getUids()); EXPECT_EQ(names, otherWs.getNames()); }