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