1 // Copyright 2020 The Android Open Source Project 2 // 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 #ifndef EVS_MANAGER_1_1_TEST_FUZZER_MOCKHWENUMERATOR_H_ 16 #define EVS_MANAGER_1_1_TEST_FUZZER_MOCKHWENUMERATOR_H_ 17 18 #include <gmock/gmock.h> 19 #include <gtest/gtest.h> 20 21 #include "MockHWDisplay.h" 22 #include "MockHWCamera.h" 23 24 using ::android::hardware::automotive::evs::V1_0::DisplayState; 25 26 namespace android { 27 namespace automotive { 28 namespace evs { 29 namespace V1_1 { 30 namespace implementation { 31 32 class MockHWEnumerator : public IEvsEnumerator_1_1 { 33 public: MockHWEnumerator()34 MockHWEnumerator() { 35 // four cameras 36 for (uint64_t i = startMockHWCameraId; i < endMockHWCameraId; i++) { 37 sp<MockHWCamera> camera = new MockHWCamera(); 38 mHWCameras[i] = camera; 39 } 40 41 // two displays 42 for (uint8_t i = static_cast<uint8_t>(startMockHWDisplayId); 43 i < static_cast<uint8_t>(endMockHWDisplayId); i++) { 44 sp<MockHWDisplay> display = new MockHWDisplay(); 45 mHWDisplays[i] = display; 46 mDisplayPortList[i] = i; 47 } 48 } 49 50 // Methods from ::android::hardware::automotive::evs::V1_0::IEvsEnumerator follow. 51 MOCK_METHOD(Return<void>, getCameraList, (getCameraList_cb _hidl_cb), (override)); openCamera(const hidl_string & cameraId)52 Return<sp<IEvsCamera_1_0>> openCamera(const hidl_string& cameraId) override { 53 uint64_t idx = stoi(cameraId); 54 if (mHWCameras.find(idx) != mHWCameras.end()) { 55 return mHWCameras[idx]; 56 } 57 return nullptr; 58 } 59 MOCK_METHOD(Return<void>, closeCamera, (const sp<IEvsCamera_1_0>& carCamera), (override)); openDisplay()60 Return<sp<IEvsDisplay_1_0>> openDisplay() override { 61 return mHWDisplays.begin()->second; 62 } closeDisplay(const sp<IEvsDisplay_1_0> & display)63 Return<void> closeDisplay(const sp<IEvsDisplay_1_0>& display) override { 64 return {}; 65 } 66 MOCK_METHOD(Return<DisplayState>, getDisplayState, (), (override)); 67 68 // Methods from ::android::hardware::automotive::evs::V1_1::IEvsEnumerator follow. getCameraList_1_1(getCameraList_1_1_cb _hidl_cb)69 Return<void> getCameraList_1_1(getCameraList_1_1_cb _hidl_cb) { 70 return {}; 71 } openCamera_1_1(const hidl_string & cameraId,const Stream & streamCfg)72 Return<sp<IEvsCamera_1_1>> openCamera_1_1(const hidl_string& cameraId, 73 const Stream& streamCfg) override { 74 uint64_t idx = stoi(cameraId); 75 if (mHWCameras.find(idx) != mHWCameras.end()) { 76 return mHWCameras[idx]; 77 } 78 return nullptr; 79 } 80 MOCK_METHOD(Return<bool>, isHardware, (), (override)); getDisplayIdList(getDisplayIdList_cb _list_cb)81 Return<void> getDisplayIdList(getDisplayIdList_cb _list_cb) override { 82 vector<uint8_t> ids; 83 84 ids.resize(mDisplayPortList.size()); 85 unsigned i = 0; 86 for (const auto& [port, id] : mDisplayPortList) { 87 ids[i++] = port; 88 } 89 90 _list_cb(ids); 91 return {}; 92 } openDisplay_1_1(uint8_t port)93 Return<sp<IEvsDisplay_1_1>> openDisplay_1_1(uint8_t port) override { 94 auto iter = mDisplayPortList.find(port); 95 if (iter != mDisplayPortList.end()) { 96 uint64_t id = iter->second; 97 auto it = mHWDisplays.find(id); 98 if (it != mHWDisplays.end()) { 99 return it->second; 100 } 101 return nullptr; 102 } 103 return nullptr; 104 } 105 MOCK_METHOD(Return<void>, getUltrasonicsArrayList, (getUltrasonicsArrayList_cb _hidl_cb), 106 (override)); 107 MOCK_METHOD(Return<sp<IEvsUltrasonicsArray>>, openUltrasonicsArray, 108 (const hidl_string& ultrasonicsArrayId), (override)); 109 MOCK_METHOD(Return<void>, closeUltrasonicsArray, 110 (const sp<IEvsUltrasonicsArray>& evsUltrasonicsArray), (override)); 111 112 private: 113 std::map<uint64_t, sp<MockHWDisplay>> mHWDisplays; 114 std::map<uint64_t, sp<MockHWCamera>> mHWCameras; 115 std::map<uint8_t, uint64_t> mDisplayPortList; 116 }; 117 118 } // namespace implementation 119 } // namespace V1_1 120 } // namespace evs 121 } // namespace automotive 122 } // namespace android 123 124 #endif // EVS_MANAGER_1_1_TEST_FUZZER_MOCKHWENUMERATOR_H_ 125