xref: /aosp_15_r20/system/chre/chpp/test/wifi_convert_test.cpp (revision 84e339476a462649f82315436d70fd732297a399)
1*84e33947SAndroid Build Coastguard Worker /*
2*84e33947SAndroid Build Coastguard Worker  * Copyright (C) 2020 The Android Open Source Project
3*84e33947SAndroid Build Coastguard Worker  *
4*84e33947SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*84e33947SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*84e33947SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*84e33947SAndroid Build Coastguard Worker  *
8*84e33947SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*84e33947SAndroid Build Coastguard Worker  *
10*84e33947SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*84e33947SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*84e33947SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*84e33947SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*84e33947SAndroid Build Coastguard Worker  * limitations under the License.
15*84e33947SAndroid Build Coastguard Worker  */
16*84e33947SAndroid Build Coastguard Worker 
17*84e33947SAndroid Build Coastguard Worker #include <gtest/gtest.h>
18*84e33947SAndroid Build Coastguard Worker 
19*84e33947SAndroid Build Coastguard Worker #include <stddef.h>
20*84e33947SAndroid Build Coastguard Worker #include <cstring>
21*84e33947SAndroid Build Coastguard Worker 
22*84e33947SAndroid Build Coastguard Worker #include "chpp/common/wifi_types.h"
23*84e33947SAndroid Build Coastguard Worker #include "chpp/memory.h"
24*84e33947SAndroid Build Coastguard Worker #include "chre/test/common/macros.h"
25*84e33947SAndroid Build Coastguard Worker 
26*84e33947SAndroid Build Coastguard Worker namespace {
27*84e33947SAndroid Build Coastguard Worker 
validateScanResult(const ChppWifiScanResult & chppAp,const chreWifiScanResult & chreAp,bool decodeMode)28*84e33947SAndroid Build Coastguard Worker void validateScanResult(const ChppWifiScanResult &chppAp,
29*84e33947SAndroid Build Coastguard Worker                         const chreWifiScanResult &chreAp, bool decodeMode) {
30*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.ageMs, chreAp.ageMs);
31*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.capabilityInfo, chreAp.capabilityInfo);
32*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.ssidLen, chreAp.ssidLen);
33*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(std::memcmp(chppAp.ssid, chreAp.ssid, sizeof(chppAp.ssid)), 0);
34*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(std::memcmp(chppAp.bssid, chreAp.bssid, sizeof(chppAp.bssid)), 0);
35*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.flags, chreAp.flags);
36*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.rssi, chreAp.rssi);
37*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.band, chreAp.band);
38*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.primaryChannel, chreAp.primaryChannel);
39*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.centerFreqPrimary, chreAp.centerFreqPrimary);
40*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.centerFreqSecondary, chreAp.centerFreqSecondary);
41*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.channelWidth, chreAp.channelWidth);
42*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.securityMode, chreAp.securityMode);
43*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.radioChain, chreAp.radioChain);
44*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.rssiChain0, chreAp.rssiChain0);
45*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppAp.rssiChain1, chreAp.rssiChain1);
46*84e33947SAndroid Build Coastguard Worker 
47*84e33947SAndroid Build Coastguard Worker   for (size_t i = 0;
48*84e33947SAndroid Build Coastguard Worker        i < (decodeMode ? sizeof(chreAp.reserved) : sizeof(chppAp.reserved));
49*84e33947SAndroid Build Coastguard Worker        i++) {
50*84e33947SAndroid Build Coastguard Worker     SCOPED_TRACE(i);
51*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ((decodeMode ? chreAp.reserved[i] : chppAp.reserved[i]), 0);
52*84e33947SAndroid Build Coastguard Worker   }
53*84e33947SAndroid Build Coastguard Worker }
54*84e33947SAndroid Build Coastguard Worker 
validateScanEvent(const chreWifiScanEvent & chreEvent)55*84e33947SAndroid Build Coastguard Worker void validateScanEvent(const chreWifiScanEvent &chreEvent) {
56*84e33947SAndroid Build Coastguard Worker   ChppWifiScanEventWithHeader *chppWithHeader = nullptr;
57*84e33947SAndroid Build Coastguard Worker   size_t outputSize = 999;
58*84e33947SAndroid Build Coastguard Worker 
59*84e33947SAndroid Build Coastguard Worker   // Encode
60*84e33947SAndroid Build Coastguard Worker   bool result =
61*84e33947SAndroid Build Coastguard Worker       chppWifiScanEventFromChre(&chreEvent, &chppWithHeader, &outputSize);
62*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(result);
63*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(chppWithHeader, nullptr);
64*84e33947SAndroid Build Coastguard Worker 
65*84e33947SAndroid Build Coastguard Worker   size_t expectedSize = sizeof(ChppWifiScanEventWithHeader) +
66*84e33947SAndroid Build Coastguard Worker                         chreEvent.scannedFreqListLen * sizeof(uint32_t) +
67*84e33947SAndroid Build Coastguard Worker                         chreEvent.resultCount * sizeof(ChppWifiScanResult);
68*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(outputSize, expectedSize);
69*84e33947SAndroid Build Coastguard Worker 
70*84e33947SAndroid Build Coastguard Worker   ChppWifiScanEvent *chppEvent = &chppWithHeader->payload;
71*84e33947SAndroid Build Coastguard Worker 
72*84e33947SAndroid Build Coastguard Worker   // Decode
73*84e33947SAndroid Build Coastguard Worker   outputSize -= sizeof(struct ChppAppHeader);
74*84e33947SAndroid Build Coastguard Worker   chreWifiScanEvent *backEvent = chppWifiScanEventToChre(chppEvent, outputSize);
75*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(backEvent, nullptr);
76*84e33947SAndroid Build Coastguard Worker 
77*84e33947SAndroid Build Coastguard Worker   // Compare chreEvent against encoded (chppEvent) and decoded back (backEvent)
78*84e33947SAndroid Build Coastguard Worker 
79*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->version, CHRE_WIFI_SCAN_EVENT_VERSION);
80*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->resultCount, chreEvent.resultCount);
81*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->resultTotal, chreEvent.resultTotal);
82*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->resultCount, chreEvent.resultCount);
83*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->eventIndex, chreEvent.eventIndex);
84*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->scanType, chreEvent.scanType);
85*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->ssidSetSize, chreEvent.ssidSetSize);
86*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->scannedFreqListLen, chreEvent.scannedFreqListLen);
87*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->referenceTime, chreEvent.referenceTime);
88*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppEvent->radioChainPref, chreEvent.radioChainPref);
89*84e33947SAndroid Build Coastguard Worker 
90*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->version, CHRE_WIFI_SCAN_EVENT_VERSION);
91*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->resultCount, chreEvent.resultCount);
92*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->resultTotal, chreEvent.resultTotal);
93*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->resultCount, chreEvent.resultCount);
94*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->eventIndex, chreEvent.eventIndex);
95*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->scanType, chreEvent.scanType);
96*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->ssidSetSize, chreEvent.ssidSetSize);
97*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->scannedFreqListLen, chreEvent.scannedFreqListLen);
98*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->referenceTime, chreEvent.referenceTime);
99*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backEvent->radioChainPref, chreEvent.radioChainPref);
100*84e33947SAndroid Build Coastguard Worker 
101*84e33947SAndroid Build Coastguard Worker   uint16_t baseOffset = sizeof(ChppWifiScanEvent);
102*84e33947SAndroid Build Coastguard Worker   if (chreEvent.scannedFreqListLen > 0) {
103*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppEvent->scannedFreqList.offset, baseOffset);
104*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppEvent->scannedFreqList.length,
105*84e33947SAndroid Build Coastguard Worker               chppEvent->scannedFreqListLen * sizeof(uint32_t));
106*84e33947SAndroid Build Coastguard Worker     baseOffset += chppEvent->scannedFreqList.length;
107*84e33947SAndroid Build Coastguard Worker 
108*84e33947SAndroid Build Coastguard Worker     auto *chppScannedFreqList =
109*84e33947SAndroid Build Coastguard Worker         ((const uint8_t *)chppEvent + chppEvent->scannedFreqList.offset);
110*84e33947SAndroid Build Coastguard Worker     for (size_t i = 0; i < chppEvent->scannedFreqListLen; i++) {
111*84e33947SAndroid Build Coastguard Worker       uint32_t currScannedFreq;
112*84e33947SAndroid Build Coastguard Worker       memcpy(&currScannedFreq, chppScannedFreqList + (i * sizeof(uint32_t)),
113*84e33947SAndroid Build Coastguard Worker              sizeof(uint32_t));
114*84e33947SAndroid Build Coastguard Worker       SCOPED_TRACE(i);
115*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currScannedFreq, chreEvent.scannedFreqList[i]);
116*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currScannedFreq, backEvent->scannedFreqList[i]);
117*84e33947SAndroid Build Coastguard Worker     }
118*84e33947SAndroid Build Coastguard Worker   } else {
119*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppEvent->scannedFreqList.offset, 0);
120*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppEvent->scannedFreqList.length, 0);
121*84e33947SAndroid Build Coastguard Worker   }
122*84e33947SAndroid Build Coastguard Worker 
123*84e33947SAndroid Build Coastguard Worker   if (chreEvent.resultCount > 0) {
124*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppEvent->results.offset, baseOffset);
125*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppEvent->results.length,
126*84e33947SAndroid Build Coastguard Worker               chppEvent->resultCount * sizeof(ChppWifiScanResult));
127*84e33947SAndroid Build Coastguard Worker     baseOffset += chppEvent->results.length;
128*84e33947SAndroid Build Coastguard Worker 
129*84e33947SAndroid Build Coastguard Worker     const ChppWifiScanResult *chppAp =
130*84e33947SAndroid Build Coastguard Worker         (const ChppWifiScanResult *)((const uint8_t *)chppEvent +
131*84e33947SAndroid Build Coastguard Worker                                      chppEvent->results.offset);
132*84e33947SAndroid Build Coastguard Worker     for (size_t i = 0; i < chppEvent->resultCount; i++) {
133*84e33947SAndroid Build Coastguard Worker       SCOPED_TRACE(::testing::Message() << "Scan result index " << i);
134*84e33947SAndroid Build Coastguard Worker       validateScanResult(chppAp[i], chreEvent.results[i], /*decodeMode=*/false);
135*84e33947SAndroid Build Coastguard Worker       validateScanResult(chppAp[i], backEvent->results[i], /*decodeMode=*/true);
136*84e33947SAndroid Build Coastguard Worker     }
137*84e33947SAndroid Build Coastguard Worker   } else {
138*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppEvent->results.offset, 0);
139*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppEvent->results.length, 0);
140*84e33947SAndroid Build Coastguard Worker   }
141*84e33947SAndroid Build Coastguard Worker 
142*84e33947SAndroid Build Coastguard Worker   // Handling of short input
143*84e33947SAndroid Build Coastguard Worker   chreWifiScanEvent *chreMalformed;
144*84e33947SAndroid Build Coastguard Worker   chreMalformed = chppWifiScanEventToChre(chppEvent, outputSize - 1);
145*84e33947SAndroid Build Coastguard Worker   ASSERT_EQ(chreMalformed, nullptr);
146*84e33947SAndroid Build Coastguard Worker 
147*84e33947SAndroid Build Coastguard Worker   chppFree(chppWithHeader);
148*84e33947SAndroid Build Coastguard Worker   chppFree(backEvent);
149*84e33947SAndroid Build Coastguard Worker }
150*84e33947SAndroid Build Coastguard Worker 
validateScanParams(const chreWifiScanParams & chreParams)151*84e33947SAndroid Build Coastguard Worker void validateScanParams(const chreWifiScanParams &chreParams) {
152*84e33947SAndroid Build Coastguard Worker   ChppWifiScanParamsWithHeader *chppWithHeader = nullptr;
153*84e33947SAndroid Build Coastguard Worker   size_t outputSize = 999;
154*84e33947SAndroid Build Coastguard Worker 
155*84e33947SAndroid Build Coastguard Worker   // Encode
156*84e33947SAndroid Build Coastguard Worker   bool result =
157*84e33947SAndroid Build Coastguard Worker       chppWifiScanParamsFromChre(&chreParams, &chppWithHeader, &outputSize);
158*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(result);
159*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(chppWithHeader, nullptr);
160*84e33947SAndroid Build Coastguard Worker 
161*84e33947SAndroid Build Coastguard Worker   size_t expectedSize = sizeof(ChppWifiScanParamsWithHeader) +
162*84e33947SAndroid Build Coastguard Worker                         chreParams.frequencyListLen * sizeof(uint32_t) +
163*84e33947SAndroid Build Coastguard Worker                         chreParams.ssidListLen * sizeof(ChppWifiSsidListItem);
164*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(outputSize, expectedSize);
165*84e33947SAndroid Build Coastguard Worker 
166*84e33947SAndroid Build Coastguard Worker   ChppWifiScanParams *chppParams = &chppWithHeader->payload;
167*84e33947SAndroid Build Coastguard Worker 
168*84e33947SAndroid Build Coastguard Worker   // Decode
169*84e33947SAndroid Build Coastguard Worker   outputSize -= sizeof(struct ChppAppHeader);
170*84e33947SAndroid Build Coastguard Worker   chreWifiScanParams *backParams =
171*84e33947SAndroid Build Coastguard Worker       chppWifiScanParamsToChre(chppParams, outputSize);
172*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(backParams, nullptr);
173*84e33947SAndroid Build Coastguard Worker 
174*84e33947SAndroid Build Coastguard Worker   // Compare chreEvent against encoded (chppEvent) and decoded back (backEvent)
175*84e33947SAndroid Build Coastguard Worker 
176*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppParams->scanType, chreParams.scanType);
177*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppParams->maxScanAgeMs, chreParams.maxScanAgeMs);
178*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppParams->frequencyListLen, chreParams.frequencyListLen);
179*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppParams->ssidListLen, chreParams.ssidListLen);
180*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppParams->radioChainPref, chreParams.radioChainPref);
181*84e33947SAndroid Build Coastguard Worker 
182*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backParams->scanType, chreParams.scanType);
183*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backParams->maxScanAgeMs, chreParams.maxScanAgeMs);
184*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backParams->frequencyListLen, chreParams.frequencyListLen);
185*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backParams->ssidListLen, chreParams.ssidListLen);
186*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backParams->radioChainPref, chreParams.radioChainPref);
187*84e33947SAndroid Build Coastguard Worker 
188*84e33947SAndroid Build Coastguard Worker   uint16_t baseOffset = sizeof(ChppWifiScanParams);
189*84e33947SAndroid Build Coastguard Worker   if (chreParams.frequencyListLen > 0) {
190*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->frequencyList.offset, baseOffset);
191*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->frequencyList.length,
192*84e33947SAndroid Build Coastguard Worker               chppParams->frequencyListLen * sizeof(uint32_t));
193*84e33947SAndroid Build Coastguard Worker     baseOffset += chppParams->frequencyList.length;
194*84e33947SAndroid Build Coastguard Worker 
195*84e33947SAndroid Build Coastguard Worker     auto *chppFrequencyList =
196*84e33947SAndroid Build Coastguard Worker         ((const uint8_t *)chppParams + chppParams->frequencyList.offset);
197*84e33947SAndroid Build Coastguard Worker     for (size_t i = 0; i < chppParams->frequencyListLen; i++) {
198*84e33947SAndroid Build Coastguard Worker       uint32_t currScannedFreq;
199*84e33947SAndroid Build Coastguard Worker       memcpy(&currScannedFreq, chppFrequencyList + (i * sizeof(uint32_t)),
200*84e33947SAndroid Build Coastguard Worker              sizeof(uint32_t));
201*84e33947SAndroid Build Coastguard Worker       SCOPED_TRACE(i);
202*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currScannedFreq, chreParams.frequencyList[i]);
203*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currScannedFreq, backParams->frequencyList[i]);
204*84e33947SAndroid Build Coastguard Worker     }
205*84e33947SAndroid Build Coastguard Worker   } else {
206*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->frequencyList.offset, 0);
207*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->frequencyList.length, 0);
208*84e33947SAndroid Build Coastguard Worker   }
209*84e33947SAndroid Build Coastguard Worker 
210*84e33947SAndroid Build Coastguard Worker   if (chreParams.ssidListLen > 0) {
211*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->ssidList.offset, baseOffset);
212*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->ssidList.length,
213*84e33947SAndroid Build Coastguard Worker               chppParams->ssidListLen * sizeof(ChppWifiSsidListItem));
214*84e33947SAndroid Build Coastguard Worker     baseOffset += chppParams->ssidList.length;
215*84e33947SAndroid Build Coastguard Worker 
216*84e33947SAndroid Build Coastguard Worker     const ChppWifiSsidListItem *chppSsidList =
217*84e33947SAndroid Build Coastguard Worker         (const ChppWifiSsidListItem *)((const uint8_t *)chppParams +
218*84e33947SAndroid Build Coastguard Worker                                        chppParams->ssidList.offset);
219*84e33947SAndroid Build Coastguard Worker     for (size_t i = 0; i < chppParams->ssidListLen; i++) {
220*84e33947SAndroid Build Coastguard Worker       SCOPED_TRACE(i);
221*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(chppSsidList[i].ssidLen, chreParams.ssidList[i].ssidLen);
222*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(std::memcmp(chppSsidList[i].ssid, chreParams.ssidList[i].ssid,
223*84e33947SAndroid Build Coastguard Worker                             sizeof(chppSsidList[i].ssid)),
224*84e33947SAndroid Build Coastguard Worker                 0);
225*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(chppSsidList[i].ssidLen, backParams->ssidList[i].ssidLen);
226*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(std::memcmp(chppSsidList[i].ssid, backParams->ssidList[i].ssid,
227*84e33947SAndroid Build Coastguard Worker                             sizeof(chppSsidList[i].ssid)),
228*84e33947SAndroid Build Coastguard Worker                 0);
229*84e33947SAndroid Build Coastguard Worker     }
230*84e33947SAndroid Build Coastguard Worker   } else {
231*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->ssidList.offset, 0);
232*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->ssidList.length, 0);
233*84e33947SAndroid Build Coastguard Worker   }
234*84e33947SAndroid Build Coastguard Worker 
235*84e33947SAndroid Build Coastguard Worker   // Handling of short input
236*84e33947SAndroid Build Coastguard Worker   chreWifiScanParams *chreMalformed;
237*84e33947SAndroid Build Coastguard Worker   chreMalformed = chppWifiScanParamsToChre(chppParams, outputSize - 1);
238*84e33947SAndroid Build Coastguard Worker   ASSERT_EQ(chreMalformed, nullptr);
239*84e33947SAndroid Build Coastguard Worker 
240*84e33947SAndroid Build Coastguard Worker   chppFree(chppWithHeader);
241*84e33947SAndroid Build Coastguard Worker   chppFree(backParams);
242*84e33947SAndroid Build Coastguard Worker }
243*84e33947SAndroid Build Coastguard Worker 
validateRangingParams(const chreWifiRangingParams & chreParams)244*84e33947SAndroid Build Coastguard Worker void validateRangingParams(const chreWifiRangingParams &chreParams) {
245*84e33947SAndroid Build Coastguard Worker   ChppWifiRangingParamsWithHeader *chppWithHeader = nullptr;
246*84e33947SAndroid Build Coastguard Worker   size_t outputSize = 999;
247*84e33947SAndroid Build Coastguard Worker 
248*84e33947SAndroid Build Coastguard Worker   // Encode
249*84e33947SAndroid Build Coastguard Worker   bool result =
250*84e33947SAndroid Build Coastguard Worker       chppWifiRangingParamsFromChre(&chreParams, &chppWithHeader, &outputSize);
251*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(result);
252*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(chppWithHeader, nullptr);
253*84e33947SAndroid Build Coastguard Worker 
254*84e33947SAndroid Build Coastguard Worker   size_t expectedSize =
255*84e33947SAndroid Build Coastguard Worker       sizeof(ChppWifiRangingParamsWithHeader) +
256*84e33947SAndroid Build Coastguard Worker       chreParams.targetListLen * sizeof(ChppWifiRangingTarget);
257*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(outputSize, expectedSize);
258*84e33947SAndroid Build Coastguard Worker 
259*84e33947SAndroid Build Coastguard Worker   ChppWifiRangingParams *chppParams = &chppWithHeader->payload;
260*84e33947SAndroid Build Coastguard Worker 
261*84e33947SAndroid Build Coastguard Worker   // Decode
262*84e33947SAndroid Build Coastguard Worker   outputSize -= sizeof(struct ChppAppHeader);
263*84e33947SAndroid Build Coastguard Worker   chreWifiRangingParams *backParams =
264*84e33947SAndroid Build Coastguard Worker       chppWifiRangingParamsToChre(chppParams, outputSize);
265*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(backParams, nullptr);
266*84e33947SAndroid Build Coastguard Worker 
267*84e33947SAndroid Build Coastguard Worker   // Compare chreEvent against encoded (chppEvent) and decoded back (backEvent)
268*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(chppParams->targetListLen, chreParams.targetListLen);
269*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(backParams->targetListLen, chreParams.targetListLen);
270*84e33947SAndroid Build Coastguard Worker 
271*84e33947SAndroid Build Coastguard Worker   uint16_t baseOffset = sizeof(ChppWifiRangingParams);
272*84e33947SAndroid Build Coastguard Worker   if (chreParams.targetListLen > 0) {
273*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->targetList.offset, baseOffset);
274*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->targetList.length,
275*84e33947SAndroid Build Coastguard Worker               chppParams->targetListLen * sizeof(ChppWifiRangingTarget));
276*84e33947SAndroid Build Coastguard Worker     baseOffset += chppParams->targetList.length;
277*84e33947SAndroid Build Coastguard Worker 
278*84e33947SAndroid Build Coastguard Worker     auto *chppRangingList =
279*84e33947SAndroid Build Coastguard Worker         ((const uint8_t *)chppParams + chppParams->targetList.offset);
280*84e33947SAndroid Build Coastguard Worker     for (size_t i = 0; i < chppParams->targetListLen; i++) {
281*84e33947SAndroid Build Coastguard Worker       ChppWifiRangingTarget currentRangingTarget;
282*84e33947SAndroid Build Coastguard Worker       memcpy(&currentRangingTarget,
283*84e33947SAndroid Build Coastguard Worker              chppRangingList + (i * sizeof(ChppWifiRangingTarget)),
284*84e33947SAndroid Build Coastguard Worker              sizeof(ChppWifiRangingTarget));
285*84e33947SAndroid Build Coastguard Worker       SCOPED_TRACE(i);
286*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[0],
287*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].macAddress[0]);
288*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[1],
289*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].macAddress[1]);
290*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[2],
291*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].macAddress[2]);
292*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[3],
293*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].macAddress[3]);
294*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[4],
295*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].macAddress[4]);
296*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[5],
297*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].macAddress[5]);
298*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.primaryChannel,
299*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].primaryChannel);
300*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.centerFreqPrimary,
301*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].centerFreqPrimary);
302*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.centerFreqSecondary,
303*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].centerFreqSecondary);
304*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.channelWidth,
305*84e33947SAndroid Build Coastguard Worker                 chreParams.targetList[i].channelWidth);
306*84e33947SAndroid Build Coastguard Worker 
307*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[0],
308*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].macAddress[0]);
309*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[1],
310*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].macAddress[1]);
311*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[2],
312*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].macAddress[2]);
313*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[3],
314*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].macAddress[3]);
315*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[4],
316*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].macAddress[4]);
317*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.macAddress[5],
318*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].macAddress[5]);
319*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.primaryChannel,
320*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].primaryChannel);
321*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.centerFreqPrimary,
322*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].centerFreqPrimary);
323*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.centerFreqSecondary,
324*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].centerFreqSecondary);
325*84e33947SAndroid Build Coastguard Worker       EXPECT_EQ(currentRangingTarget.channelWidth,
326*84e33947SAndroid Build Coastguard Worker                 backParams->targetList[i].channelWidth);
327*84e33947SAndroid Build Coastguard Worker     }
328*84e33947SAndroid Build Coastguard Worker   } else {
329*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->targetList.offset, 0);
330*84e33947SAndroid Build Coastguard Worker     EXPECT_EQ(chppParams->targetList.length, 0);
331*84e33947SAndroid Build Coastguard Worker   }
332*84e33947SAndroid Build Coastguard Worker 
333*84e33947SAndroid Build Coastguard Worker   // Handling of short input
334*84e33947SAndroid Build Coastguard Worker   chreWifiRangingParams *chreMalformed;
335*84e33947SAndroid Build Coastguard Worker   chreMalformed = chppWifiRangingParamsToChre(chppParams, outputSize - 1);
336*84e33947SAndroid Build Coastguard Worker   ASSERT_EQ(chreMalformed, nullptr);
337*84e33947SAndroid Build Coastguard Worker 
338*84e33947SAndroid Build Coastguard Worker   chppFree(chppWithHeader);
339*84e33947SAndroid Build Coastguard Worker   chppFree(backParams);
340*84e33947SAndroid Build Coastguard Worker }
341*84e33947SAndroid Build Coastguard Worker 
validateNanSubscribeConfig(const chreWifiNanSubscribeConfig & config)342*84e33947SAndroid Build Coastguard Worker void validateNanSubscribeConfig(const chreWifiNanSubscribeConfig &config) {
343*84e33947SAndroid Build Coastguard Worker   ChppWifiNanSubscribeConfigWithHeader *chppWithHeader = nullptr;
344*84e33947SAndroid Build Coastguard Worker   size_t outputSize = 999;
345*84e33947SAndroid Build Coastguard Worker 
346*84e33947SAndroid Build Coastguard Worker   // Test Encode
347*84e33947SAndroid Build Coastguard Worker   bool result =
348*84e33947SAndroid Build Coastguard Worker       chppWifiNanSubscribeConfigFromChre(&config, &chppWithHeader, &outputSize);
349*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(result);
350*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(chppWithHeader, nullptr);
351*84e33947SAndroid Build Coastguard Worker 
352*84e33947SAndroid Build Coastguard Worker   size_t expectedSize = sizeof(ChppWifiNanSubscribeConfigWithHeader) +
353*84e33947SAndroid Build Coastguard Worker                         std::strlen(config.service) + 1 +
354*84e33947SAndroid Build Coastguard Worker                         config.matchFilterLength +
355*84e33947SAndroid Build Coastguard Worker                         config.serviceSpecificInfoSize;
356*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(expectedSize, outputSize);
357*84e33947SAndroid Build Coastguard Worker 
358*84e33947SAndroid Build Coastguard Worker   // Test Decode
359*84e33947SAndroid Build Coastguard Worker   outputSize -= sizeof(struct ChppAppHeader);
360*84e33947SAndroid Build Coastguard Worker   ChppWifiNanSubscribeConfig *chppConfig = &chppWithHeader->payload;
361*84e33947SAndroid Build Coastguard Worker   chreWifiNanSubscribeConfig *decodedConfig =
362*84e33947SAndroid Build Coastguard Worker       chppWifiNanSubscribeConfigToChre(chppConfig, outputSize);
363*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(decodedConfig, nullptr);
364*84e33947SAndroid Build Coastguard Worker 
365*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(config.subscribeType, decodedConfig->subscribeType);
366*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(std::string(config.service), std::string(decodedConfig->service));
367*84e33947SAndroid Build Coastguard Worker 
368*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(config.serviceSpecificInfoSize,
369*84e33947SAndroid Build Coastguard Worker             decodedConfig->serviceSpecificInfoSize);
370*84e33947SAndroid Build Coastguard Worker   EXPECT_TRUE(0 == std::memcmp(config.serviceSpecificInfo,
371*84e33947SAndroid Build Coastguard Worker                                decodedConfig->serviceSpecificInfo,
372*84e33947SAndroid Build Coastguard Worker                                config.serviceSpecificInfoSize));
373*84e33947SAndroid Build Coastguard Worker 
374*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(config.matchFilterLength, decodedConfig->matchFilterLength);
375*84e33947SAndroid Build Coastguard Worker   EXPECT_TRUE(0 == std::memcmp(config.matchFilter, decodedConfig->matchFilter,
376*84e33947SAndroid Build Coastguard Worker                                config.matchFilterLength));
377*84e33947SAndroid Build Coastguard Worker }
378*84e33947SAndroid Build Coastguard Worker 
validateNanDiscoveryEvent(const struct chreWifiNanDiscoveryEvent & event)379*84e33947SAndroid Build Coastguard Worker void validateNanDiscoveryEvent(const struct chreWifiNanDiscoveryEvent &event) {
380*84e33947SAndroid Build Coastguard Worker   ChppWifiNanDiscoveryEventWithHeader *chppWithHeader = nullptr;
381*84e33947SAndroid Build Coastguard Worker   size_t outputSize = 999;
382*84e33947SAndroid Build Coastguard Worker 
383*84e33947SAndroid Build Coastguard Worker   // Test Encode
384*84e33947SAndroid Build Coastguard Worker   bool result =
385*84e33947SAndroid Build Coastguard Worker       chppWifiNanDiscoveryEventFromChre(&event, &chppWithHeader, &outputSize);
386*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(result);
387*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(chppWithHeader, nullptr);
388*84e33947SAndroid Build Coastguard Worker 
389*84e33947SAndroid Build Coastguard Worker   size_t expectedSize = sizeof(ChppWifiNanDiscoveryEventWithHeader) +
390*84e33947SAndroid Build Coastguard Worker                         event.serviceSpecificInfoSize;
391*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(expectedSize, outputSize);
392*84e33947SAndroid Build Coastguard Worker 
393*84e33947SAndroid Build Coastguard Worker   // Test Decode
394*84e33947SAndroid Build Coastguard Worker   outputSize -= sizeof(struct ChppAppHeader);
395*84e33947SAndroid Build Coastguard Worker   ChppWifiNanDiscoveryEvent *chppEvent = &chppWithHeader->payload;
396*84e33947SAndroid Build Coastguard Worker   chreWifiNanDiscoveryEvent *decodedEvent =
397*84e33947SAndroid Build Coastguard Worker       chppWifiNanDiscoveryEventToChre(chppEvent, outputSize);
398*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(decodedEvent, nullptr);
399*84e33947SAndroid Build Coastguard Worker 
400*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(event.publishId, decodedEvent->publishId);
401*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(event.subscribeId, decodedEvent->subscribeId);
402*84e33947SAndroid Build Coastguard Worker   EXPECT_TRUE(0 == std::memcmp(event.serviceSpecificInfo,
403*84e33947SAndroid Build Coastguard Worker                                decodedEvent->serviceSpecificInfo,
404*84e33947SAndroid Build Coastguard Worker                                event.serviceSpecificInfoSize));
405*84e33947SAndroid Build Coastguard Worker   EXPECT_TRUE(0 == std::memcmp(event.publisherAddress,
406*84e33947SAndroid Build Coastguard Worker                                decodedEvent->publisherAddress,
407*84e33947SAndroid Build Coastguard Worker                                CHRE_WIFI_BSSID_LEN));
408*84e33947SAndroid Build Coastguard Worker }
409*84e33947SAndroid Build Coastguard Worker 
validateNanRangingParams(const struct chreWifiNanRangingParams & params)410*84e33947SAndroid Build Coastguard Worker void validateNanRangingParams(const struct chreWifiNanRangingParams &params) {
411*84e33947SAndroid Build Coastguard Worker   ChppWifiNanRangingParamsWithHeader *chppWithHeader = nullptr;
412*84e33947SAndroid Build Coastguard Worker   size_t outputSize = 999;
413*84e33947SAndroid Build Coastguard Worker 
414*84e33947SAndroid Build Coastguard Worker   // Test Encode
415*84e33947SAndroid Build Coastguard Worker   bool result =
416*84e33947SAndroid Build Coastguard Worker       chppWifiNanRangingParamsFromChre(&params, &chppWithHeader, &outputSize);
417*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(result);
418*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(chppWithHeader, nullptr);
419*84e33947SAndroid Build Coastguard Worker 
420*84e33947SAndroid Build Coastguard Worker   size_t expectedSize = sizeof(ChppWifiNanRangingParamsWithHeader);
421*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(expectedSize, outputSize);
422*84e33947SAndroid Build Coastguard Worker 
423*84e33947SAndroid Build Coastguard Worker   // Test Decode
424*84e33947SAndroid Build Coastguard Worker   outputSize -= sizeof(struct ChppAppHeader);
425*84e33947SAndroid Build Coastguard Worker   ChppWifiNanRangingParams *chppParams = &chppWithHeader->payload;
426*84e33947SAndroid Build Coastguard Worker   chreWifiNanRangingParams *decodedParams =
427*84e33947SAndroid Build Coastguard Worker       chppWifiNanRangingParamsToChre(chppParams, outputSize);
428*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(decodedParams, nullptr);
429*84e33947SAndroid Build Coastguard Worker   EXPECT_TRUE(0 == std::memcmp(&params, decodedParams, sizeof(params)));
430*84e33947SAndroid Build Coastguard Worker }
431*84e33947SAndroid Build Coastguard Worker 
validateNanSessionLostEvent(const struct chreWifiNanSessionLostEvent & event)432*84e33947SAndroid Build Coastguard Worker void validateNanSessionLostEvent(
433*84e33947SAndroid Build Coastguard Worker     const struct chreWifiNanSessionLostEvent &event) {
434*84e33947SAndroid Build Coastguard Worker   ChppWifiNanSessionLostEventWithHeader *chppWithHeader = nullptr;
435*84e33947SAndroid Build Coastguard Worker   size_t outputSize = 999;
436*84e33947SAndroid Build Coastguard Worker 
437*84e33947SAndroid Build Coastguard Worker   // Test Encode
438*84e33947SAndroid Build Coastguard Worker   bool result =
439*84e33947SAndroid Build Coastguard Worker       chppWifiNanSessionLostEventFromChre(&event, &chppWithHeader, &outputSize);
440*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(result);
441*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(chppWithHeader, nullptr);
442*84e33947SAndroid Build Coastguard Worker 
443*84e33947SAndroid Build Coastguard Worker   size_t expectedSize = sizeof(ChppWifiNanSessionLostEventWithHeader);
444*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(expectedSize, outputSize);
445*84e33947SAndroid Build Coastguard Worker 
446*84e33947SAndroid Build Coastguard Worker   // Test Decode
447*84e33947SAndroid Build Coastguard Worker   outputSize -= sizeof(struct ChppAppHeader);
448*84e33947SAndroid Build Coastguard Worker   ChppWifiNanSessionLostEvent *chppEvent = &chppWithHeader->payload;
449*84e33947SAndroid Build Coastguard Worker   chreWifiNanSessionLostEvent *decodedEvent =
450*84e33947SAndroid Build Coastguard Worker       chppWifiNanSessionLostEventToChre(chppEvent, outputSize);
451*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(decodedEvent, nullptr);
452*84e33947SAndroid Build Coastguard Worker   EXPECT_TRUE(0 == std::memcmp(&event, decodedEvent, sizeof(event)));
453*84e33947SAndroid Build Coastguard Worker }
454*84e33947SAndroid Build Coastguard Worker 
validateNanSessionTerminatedEvent(const struct chreWifiNanSessionTerminatedEvent & event)455*84e33947SAndroid Build Coastguard Worker void validateNanSessionTerminatedEvent(
456*84e33947SAndroid Build Coastguard Worker     const struct chreWifiNanSessionTerminatedEvent &event) {
457*84e33947SAndroid Build Coastguard Worker   ChppWifiNanSessionTerminatedEventWithHeader *chppWithHeader = nullptr;
458*84e33947SAndroid Build Coastguard Worker   size_t outputSize = 999;
459*84e33947SAndroid Build Coastguard Worker 
460*84e33947SAndroid Build Coastguard Worker   // Test Encode
461*84e33947SAndroid Build Coastguard Worker   bool result = chppWifiNanSessionTerminatedEventFromChre(
462*84e33947SAndroid Build Coastguard Worker       &event, &chppWithHeader, &outputSize);
463*84e33947SAndroid Build Coastguard Worker   ASSERT_TRUE(result);
464*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(chppWithHeader, nullptr);
465*84e33947SAndroid Build Coastguard Worker 
466*84e33947SAndroid Build Coastguard Worker   size_t expectedSize = sizeof(ChppWifiNanSessionTerminatedEventWithHeader);
467*84e33947SAndroid Build Coastguard Worker   EXPECT_EQ(expectedSize, outputSize);
468*84e33947SAndroid Build Coastguard Worker 
469*84e33947SAndroid Build Coastguard Worker   // Test Decode
470*84e33947SAndroid Build Coastguard Worker   outputSize -= sizeof(struct ChppAppHeader);
471*84e33947SAndroid Build Coastguard Worker   ChppWifiNanSessionTerminatedEvent *chppEvent = &chppWithHeader->payload;
472*84e33947SAndroid Build Coastguard Worker   chreWifiNanSessionTerminatedEvent *decodedEvent =
473*84e33947SAndroid Build Coastguard Worker       chppWifiNanSessionTerminatedEventToChre(chppEvent, outputSize);
474*84e33947SAndroid Build Coastguard Worker   ASSERT_NE(decodedEvent, nullptr);
475*84e33947SAndroid Build Coastguard Worker   EXPECT_TRUE(0 == std::memcmp(&event, decodedEvent, sizeof(event)));
476*84e33947SAndroid Build Coastguard Worker }
477*84e33947SAndroid Build Coastguard Worker 
478*84e33947SAndroid Build Coastguard Worker }  // anonymous namespace
479*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,EmptyScanResult)480*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, EmptyScanResult) {
481*84e33947SAndroid Build Coastguard Worker   const chreWifiScanEvent chreEvent = {
482*84e33947SAndroid Build Coastguard Worker       .version = 200,  // ignored
483*84e33947SAndroid Build Coastguard Worker       .resultCount = 0,
484*84e33947SAndroid Build Coastguard Worker       .resultTotal = 0,
485*84e33947SAndroid Build Coastguard Worker       .eventIndex = 0,
486*84e33947SAndroid Build Coastguard Worker       .scanType = CHRE_WIFI_SCAN_TYPE_ACTIVE_PLUS_PASSIVE_DFS,
487*84e33947SAndroid Build Coastguard Worker       .ssidSetSize = 2,
488*84e33947SAndroid Build Coastguard Worker       .scannedFreqListLen = 0,
489*84e33947SAndroid Build Coastguard Worker       .referenceTime = 1234,
490*84e33947SAndroid Build Coastguard Worker       .scannedFreqList = nullptr,
491*84e33947SAndroid Build Coastguard Worker       .results = nullptr,
492*84e33947SAndroid Build Coastguard Worker       .radioChainPref = CHRE_WIFI_RADIO_CHAIN_PREF_HIGH_ACCURACY,
493*84e33947SAndroid Build Coastguard Worker   };
494*84e33947SAndroid Build Coastguard Worker 
495*84e33947SAndroid Build Coastguard Worker   validateScanEvent(chreEvent);
496*84e33947SAndroid Build Coastguard Worker }
497*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,SingleResult)498*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, SingleResult) {
499*84e33947SAndroid Build Coastguard Worker   // clang-format off
500*84e33947SAndroid Build Coastguard Worker   const chreWifiScanResult chreAp = {
501*84e33947SAndroid Build Coastguard Worker       .ageMs = 11,
502*84e33947SAndroid Build Coastguard Worker       .capabilityInfo = 22,
503*84e33947SAndroid Build Coastguard Worker       .ssidLen = 4,
504*84e33947SAndroid Build Coastguard Worker       .ssid = {'a', 'b', 'c', 'd',},
505*84e33947SAndroid Build Coastguard Worker       .bssid = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff},
506*84e33947SAndroid Build Coastguard Worker       .flags = CHRE_WIFI_SCAN_RESULT_FLAGS_IS_FTM_RESPONDER,
507*84e33947SAndroid Build Coastguard Worker       .rssi = -37,
508*84e33947SAndroid Build Coastguard Worker       .band = CHRE_WIFI_BAND_2_4_GHZ,
509*84e33947SAndroid Build Coastguard Worker       .primaryChannel = 2437,
510*84e33947SAndroid Build Coastguard Worker       .centerFreqPrimary = 2442,
511*84e33947SAndroid Build Coastguard Worker       .centerFreqSecondary = 2447,
512*84e33947SAndroid Build Coastguard Worker       .channelWidth = CHRE_WIFI_CHANNEL_WIDTH_80_MHZ,
513*84e33947SAndroid Build Coastguard Worker       .securityMode = CHRE_WIFI_SECURITY_MODE_PSK,
514*84e33947SAndroid Build Coastguard Worker       .radioChain = CHRE_WIFI_RADIO_CHAIN_0 | CHRE_WIFI_RADIO_CHAIN_1,
515*84e33947SAndroid Build Coastguard Worker       .rssiChain0 = -37,
516*84e33947SAndroid Build Coastguard Worker       .rssiChain1 = -42,
517*84e33947SAndroid Build Coastguard Worker   };
518*84e33947SAndroid Build Coastguard Worker   const chreWifiScanEvent chreEvent = {
519*84e33947SAndroid Build Coastguard Worker       .version = 200,  // ignored
520*84e33947SAndroid Build Coastguard Worker       .resultCount = 1,
521*84e33947SAndroid Build Coastguard Worker       .resultTotal = 5,
522*84e33947SAndroid Build Coastguard Worker       .eventIndex = 2,
523*84e33947SAndroid Build Coastguard Worker       .scanType = CHRE_WIFI_SCAN_TYPE_ACTIVE,
524*84e33947SAndroid Build Coastguard Worker       .ssidSetSize = 0,
525*84e33947SAndroid Build Coastguard Worker       .scannedFreqListLen = 0,
526*84e33947SAndroid Build Coastguard Worker       .referenceTime = 12345,
527*84e33947SAndroid Build Coastguard Worker       .scannedFreqList = nullptr,
528*84e33947SAndroid Build Coastguard Worker       .results = &chreAp,
529*84e33947SAndroid Build Coastguard Worker       .radioChainPref = CHRE_WIFI_RADIO_CHAIN_PREF_DEFAULT,
530*84e33947SAndroid Build Coastguard Worker   };
531*84e33947SAndroid Build Coastguard Worker   // clang-format on
532*84e33947SAndroid Build Coastguard Worker 
533*84e33947SAndroid Build Coastguard Worker   validateScanEvent(chreEvent);
534*84e33947SAndroid Build Coastguard Worker }
535*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,TwoResultsWithFreqList)536*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, TwoResultsWithFreqList) {
537*84e33947SAndroid Build Coastguard Worker   // clang-format off
538*84e33947SAndroid Build Coastguard Worker   const chreWifiScanResult chreAps[] = {
539*84e33947SAndroid Build Coastguard Worker   {
540*84e33947SAndroid Build Coastguard Worker       .ageMs = 11,
541*84e33947SAndroid Build Coastguard Worker       .capabilityInfo = 22,
542*84e33947SAndroid Build Coastguard Worker       .ssidLen = 4,
543*84e33947SAndroid Build Coastguard Worker       .ssid = {'a', 'b', 'c', 'd',},
544*84e33947SAndroid Build Coastguard Worker       .bssid = {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff},
545*84e33947SAndroid Build Coastguard Worker       .flags = CHRE_WIFI_SCAN_RESULT_FLAGS_IS_FTM_RESPONDER,
546*84e33947SAndroid Build Coastguard Worker       .rssi = -37,
547*84e33947SAndroid Build Coastguard Worker       .band = CHRE_WIFI_BAND_2_4_GHZ,
548*84e33947SAndroid Build Coastguard Worker       .primaryChannel = 2437,
549*84e33947SAndroid Build Coastguard Worker       .centerFreqPrimary = 2442,
550*84e33947SAndroid Build Coastguard Worker       .centerFreqSecondary = 2447,
551*84e33947SAndroid Build Coastguard Worker       .channelWidth = CHRE_WIFI_CHANNEL_WIDTH_80_MHZ,
552*84e33947SAndroid Build Coastguard Worker       .securityMode = CHRE_WIFI_SECURITY_MODE_PSK,
553*84e33947SAndroid Build Coastguard Worker       .radioChain = CHRE_WIFI_RADIO_CHAIN_0 | CHRE_WIFI_RADIO_CHAIN_1,
554*84e33947SAndroid Build Coastguard Worker       .rssiChain0 = -37,
555*84e33947SAndroid Build Coastguard Worker       .rssiChain1 = -42,
556*84e33947SAndroid Build Coastguard Worker   },
557*84e33947SAndroid Build Coastguard Worker   {
558*84e33947SAndroid Build Coastguard Worker       .ageMs = 4325,
559*84e33947SAndroid Build Coastguard Worker       .capabilityInfo = 37,
560*84e33947SAndroid Build Coastguard Worker       .ssidLen = 2,
561*84e33947SAndroid Build Coastguard Worker       .ssid = {'h', 'i',},
562*84e33947SAndroid Build Coastguard Worker       .bssid = {0xab, 0xcd, 0xef, 0x01, 0x23, 0x45},
563*84e33947SAndroid Build Coastguard Worker       .flags = CHRE_WIFI_SCAN_RESULT_FLAGS_VHT_OPS_PRESENT,
564*84e33947SAndroid Build Coastguard Worker       .rssi = -52,
565*84e33947SAndroid Build Coastguard Worker       .band = CHRE_WIFI_BAND_5_GHZ,
566*84e33947SAndroid Build Coastguard Worker       .primaryChannel = 9999,
567*84e33947SAndroid Build Coastguard Worker       .centerFreqPrimary = 8888,
568*84e33947SAndroid Build Coastguard Worker       .centerFreqSecondary = 7777,
569*84e33947SAndroid Build Coastguard Worker       .channelWidth = CHRE_WIFI_CHANNEL_WIDTH_160_MHZ,
570*84e33947SAndroid Build Coastguard Worker       .securityMode = CHRE_WIFI_SECURITY_MODE_SAE,
571*84e33947SAndroid Build Coastguard Worker       .radioChain = CHRE_WIFI_RADIO_CHAIN_0,
572*84e33947SAndroid Build Coastguard Worker       .rssiChain0 = -37,
573*84e33947SAndroid Build Coastguard Worker       .rssiChain1 = 0,
574*84e33947SAndroid Build Coastguard Worker   }};
575*84e33947SAndroid Build Coastguard Worker   const uint32_t freqList[] = {0xdeadbeef, 0xc001cafe, 0xc0a1ba11};
576*84e33947SAndroid Build Coastguard Worker   const chreWifiScanEvent chreEvent = {
577*84e33947SAndroid Build Coastguard Worker       .version = 200,  // ignored
578*84e33947SAndroid Build Coastguard Worker       .resultCount = 2,
579*84e33947SAndroid Build Coastguard Worker       .resultTotal = 3,
580*84e33947SAndroid Build Coastguard Worker       .eventIndex = 1,
581*84e33947SAndroid Build Coastguard Worker       .scanType = CHRE_WIFI_SCAN_TYPE_ACTIVE,
582*84e33947SAndroid Build Coastguard Worker       .ssidSetSize = 10,
583*84e33947SAndroid Build Coastguard Worker       .scannedFreqListLen = 3,
584*84e33947SAndroid Build Coastguard Worker       .referenceTime = 56789,
585*84e33947SAndroid Build Coastguard Worker       .scannedFreqList = freqList,
586*84e33947SAndroid Build Coastguard Worker       .results = chreAps,
587*84e33947SAndroid Build Coastguard Worker       .radioChainPref = CHRE_WIFI_RADIO_CHAIN_PREF_LOW_POWER,
588*84e33947SAndroid Build Coastguard Worker   };
589*84e33947SAndroid Build Coastguard Worker   // clang-format on
590*84e33947SAndroid Build Coastguard Worker 
591*84e33947SAndroid Build Coastguard Worker   validateScanEvent(chreEvent);
592*84e33947SAndroid Build Coastguard Worker }
593*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,DefaultScanParams)594*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, DefaultScanParams) {
595*84e33947SAndroid Build Coastguard Worker   // From chreWifiRequestScanAsyncDefault
596*84e33947SAndroid Build Coastguard Worker   struct chreWifiScanParams params = {};
597*84e33947SAndroid Build Coastguard Worker   params.scanType = CHRE_WIFI_SCAN_TYPE_ACTIVE;
598*84e33947SAndroid Build Coastguard Worker   params.maxScanAgeMs = 5000;  // 5 seconds
599*84e33947SAndroid Build Coastguard Worker   params.frequencyListLen = 0;
600*84e33947SAndroid Build Coastguard Worker   params.ssidListLen = 0;
601*84e33947SAndroid Build Coastguard Worker   params.radioChainPref = CHRE_WIFI_RADIO_CHAIN_PREF_DEFAULT;
602*84e33947SAndroid Build Coastguard Worker 
603*84e33947SAndroid Build Coastguard Worker   validateScanParams(params);
604*84e33947SAndroid Build Coastguard Worker }
605*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,ScanParamsWithFreqList)606*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, ScanParamsWithFreqList) {
607*84e33947SAndroid Build Coastguard Worker   uint32_t freqList[] = {1234, 3456};
608*84e33947SAndroid Build Coastguard Worker   struct chreWifiScanParams chreParams = {
609*84e33947SAndroid Build Coastguard Worker       .scanType = CHRE_WIFI_SCAN_TYPE_ACTIVE_PLUS_PASSIVE_DFS,
610*84e33947SAndroid Build Coastguard Worker       .maxScanAgeMs = 9999,
611*84e33947SAndroid Build Coastguard Worker       .frequencyListLen = 2,
612*84e33947SAndroid Build Coastguard Worker       .frequencyList = freqList,
613*84e33947SAndroid Build Coastguard Worker       .ssidListLen = 0,
614*84e33947SAndroid Build Coastguard Worker       .ssidList = nullptr,
615*84e33947SAndroid Build Coastguard Worker       .radioChainPref = CHRE_WIFI_RADIO_CHAIN_PREF_LOW_POWER,
616*84e33947SAndroid Build Coastguard Worker   };
617*84e33947SAndroid Build Coastguard Worker 
618*84e33947SAndroid Build Coastguard Worker   validateScanParams(chreParams);
619*84e33947SAndroid Build Coastguard Worker }
620*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,ScanParamsWithSsidList)621*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, ScanParamsWithSsidList) {
622*84e33947SAndroid Build Coastguard Worker   // clang-format off
623*84e33947SAndroid Build Coastguard Worker   chreWifiSsidListItem ssidList[] = {
624*84e33947SAndroid Build Coastguard Worker       {.ssidLen = 4, .ssid = {0xde, 0xad, 0xbe, 0xef}},
625*84e33947SAndroid Build Coastguard Worker       {.ssidLen = 2, .ssid = {':', ')'}}
626*84e33947SAndroid Build Coastguard Worker   };
627*84e33947SAndroid Build Coastguard Worker   // clang-format on
628*84e33947SAndroid Build Coastguard Worker   struct chreWifiScanParams chreParams = {
629*84e33947SAndroid Build Coastguard Worker       .scanType = CHRE_WIFI_SCAN_TYPE_ACTIVE_PLUS_PASSIVE_DFS,
630*84e33947SAndroid Build Coastguard Worker       .maxScanAgeMs = 9999,
631*84e33947SAndroid Build Coastguard Worker       .frequencyListLen = 0,
632*84e33947SAndroid Build Coastguard Worker       .frequencyList = nullptr,
633*84e33947SAndroid Build Coastguard Worker       .ssidListLen = 2,
634*84e33947SAndroid Build Coastguard Worker       .ssidList = ssidList,
635*84e33947SAndroid Build Coastguard Worker       .radioChainPref = CHRE_WIFI_RADIO_CHAIN_PREF_LOW_POWER,
636*84e33947SAndroid Build Coastguard Worker   };
637*84e33947SAndroid Build Coastguard Worker 
638*84e33947SAndroid Build Coastguard Worker   validateScanParams(chreParams);
639*84e33947SAndroid Build Coastguard Worker }
640*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,ScanParamsWithBothLists)641*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, ScanParamsWithBothLists) {
642*84e33947SAndroid Build Coastguard Worker   uint32_t freqList[] = {1234, 3456, 5678};
643*84e33947SAndroid Build Coastguard Worker   // clang-format off
644*84e33947SAndroid Build Coastguard Worker   chreWifiSsidListItem ssidList[] = {
645*84e33947SAndroid Build Coastguard Worker       {.ssidLen = 4, .ssid = {0xde, 0xad, 0xbe, 0xef}},
646*84e33947SAndroid Build Coastguard Worker       {.ssidLen = 3, .ssid = {':', '-', ')'}}
647*84e33947SAndroid Build Coastguard Worker   };
648*84e33947SAndroid Build Coastguard Worker   // clang-format on
649*84e33947SAndroid Build Coastguard Worker   struct chreWifiScanParams chreParams = {
650*84e33947SAndroid Build Coastguard Worker       .scanType = CHRE_WIFI_SCAN_TYPE_ACTIVE_PLUS_PASSIVE_DFS,
651*84e33947SAndroid Build Coastguard Worker       .maxScanAgeMs = 9999,
652*84e33947SAndroid Build Coastguard Worker       .frequencyListLen = 3,
653*84e33947SAndroid Build Coastguard Worker       .frequencyList = freqList,
654*84e33947SAndroid Build Coastguard Worker       .ssidListLen = 2,
655*84e33947SAndroid Build Coastguard Worker       .ssidList = ssidList,
656*84e33947SAndroid Build Coastguard Worker       .radioChainPref = CHRE_WIFI_RADIO_CHAIN_PREF_LOW_POWER,
657*84e33947SAndroid Build Coastguard Worker   };
658*84e33947SAndroid Build Coastguard Worker 
659*84e33947SAndroid Build Coastguard Worker   validateScanParams(chreParams);
660*84e33947SAndroid Build Coastguard Worker }
661*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,RangingParamsEmpty)662*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, RangingParamsEmpty) {
663*84e33947SAndroid Build Coastguard Worker   struct chreWifiRangingParams chreParams = {
664*84e33947SAndroid Build Coastguard Worker       .targetListLen = 0,
665*84e33947SAndroid Build Coastguard Worker       .targetList = NULL,
666*84e33947SAndroid Build Coastguard Worker   };
667*84e33947SAndroid Build Coastguard Worker 
668*84e33947SAndroid Build Coastguard Worker   validateRangingParams(chreParams);
669*84e33947SAndroid Build Coastguard Worker }
670*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,RangingParamsWithTarget)671*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, RangingParamsWithTarget) {
672*84e33947SAndroid Build Coastguard Worker   struct chreWifiRangingTarget target = {
673*84e33947SAndroid Build Coastguard Worker       .macAddress = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc},
674*84e33947SAndroid Build Coastguard Worker       .primaryChannel = 0xdef02468,
675*84e33947SAndroid Build Coastguard Worker       .centerFreqPrimary = 0xace13579,
676*84e33947SAndroid Build Coastguard Worker       .centerFreqSecondary = 0xbdf369cf,
677*84e33947SAndroid Build Coastguard Worker       .channelWidth = 0x48,
678*84e33947SAndroid Build Coastguard Worker   };
679*84e33947SAndroid Build Coastguard Worker 
680*84e33947SAndroid Build Coastguard Worker   struct chreWifiRangingParams chreParams = {
681*84e33947SAndroid Build Coastguard Worker       .targetListLen = 1,
682*84e33947SAndroid Build Coastguard Worker       .targetList = &target,
683*84e33947SAndroid Build Coastguard Worker   };
684*84e33947SAndroid Build Coastguard Worker 
685*84e33947SAndroid Build Coastguard Worker   validateRangingParams(chreParams);
686*84e33947SAndroid Build Coastguard Worker }
687*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,NanSubscribeConfig)688*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, NanSubscribeConfig) {
689*84e33947SAndroid Build Coastguard Worker   constexpr size_t kServiceSpecificInfoSize = 4;
690*84e33947SAndroid Build Coastguard Worker   constexpr size_t kMatchFilterLength = 6;
691*84e33947SAndroid Build Coastguard Worker   uint8_t serviceSpecificInfo[kServiceSpecificInfoSize] = {0x1, 0x2, 0x3, 0x4};
692*84e33947SAndroid Build Coastguard Worker   uint8_t matchFilter[kMatchFilterLength] = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6};
693*84e33947SAndroid Build Coastguard Worker   struct chreWifiNanSubscribeConfig config = {
694*84e33947SAndroid Build Coastguard Worker       .subscribeType = CHRE_WIFI_NAN_SUBSCRIBE_TYPE_PASSIVE,
695*84e33947SAndroid Build Coastguard Worker       .service = "Hello NAN!",
696*84e33947SAndroid Build Coastguard Worker       .serviceSpecificInfo = serviceSpecificInfo,
697*84e33947SAndroid Build Coastguard Worker       .serviceSpecificInfoSize = kServiceSpecificInfoSize,
698*84e33947SAndroid Build Coastguard Worker       .matchFilter = matchFilter,
699*84e33947SAndroid Build Coastguard Worker       .matchFilterLength = kMatchFilterLength};
700*84e33947SAndroid Build Coastguard Worker 
701*84e33947SAndroid Build Coastguard Worker   validateNanSubscribeConfig(config);
702*84e33947SAndroid Build Coastguard Worker }
703*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,NanDiscoveryEvent)704*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, NanDiscoveryEvent) {
705*84e33947SAndroid Build Coastguard Worker   constexpr size_t kServiceSpecificInfoSize = 4;
706*84e33947SAndroid Build Coastguard Worker   uint8_t serviceSpecificInfo[kServiceSpecificInfoSize] = {0x1, 0x2, 0x3, 0x4};
707*84e33947SAndroid Build Coastguard Worker   struct chreWifiNanDiscoveryEvent event = {
708*84e33947SAndroid Build Coastguard Worker       .subscribeId = 0xc0ffee,
709*84e33947SAndroid Build Coastguard Worker       .publishId = 0xcafe,
710*84e33947SAndroid Build Coastguard Worker       .publisherAddress = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6},
711*84e33947SAndroid Build Coastguard Worker       .serviceSpecificInfo = serviceSpecificInfo,
712*84e33947SAndroid Build Coastguard Worker       .serviceSpecificInfoSize = kServiceSpecificInfoSize};
713*84e33947SAndroid Build Coastguard Worker 
714*84e33947SAndroid Build Coastguard Worker   validateNanDiscoveryEvent(event);
715*84e33947SAndroid Build Coastguard Worker }
716*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,NanSessionLostEvent)717*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, NanSessionLostEvent) {
718*84e33947SAndroid Build Coastguard Worker   struct chreWifiNanSessionLostEvent event = {.id = 0xdead, .peerId = 0xbeef};
719*84e33947SAndroid Build Coastguard Worker   validateNanSessionLostEvent(event);
720*84e33947SAndroid Build Coastguard Worker }
721*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,NanSessionTerminatedEvent)722*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, NanSessionTerminatedEvent) {
723*84e33947SAndroid Build Coastguard Worker   struct chreWifiNanSessionTerminatedEvent event = {.id = 0xc001,
724*84e33947SAndroid Build Coastguard Worker                                                     .reason = CHRE_ERROR};
725*84e33947SAndroid Build Coastguard Worker   validateNanSessionTerminatedEvent(event);
726*84e33947SAndroid Build Coastguard Worker }
727*84e33947SAndroid Build Coastguard Worker 
TEST(WifiConvert,NanRangingParams)728*84e33947SAndroid Build Coastguard Worker TEST(WifiConvert, NanRangingParams) {
729*84e33947SAndroid Build Coastguard Worker   struct chreWifiNanRangingParams params = {
730*84e33947SAndroid Build Coastguard Worker       .macAddress = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6}};
731*84e33947SAndroid Build Coastguard Worker   validateNanRangingParams(params);
732*84e33947SAndroid Build Coastguard Worker }
733