1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "gtest/gtest.h"
18
19#include "chre/apps/wifi_offload/chre_scan_params_safe.h"
20#include "include/utility.h"
21
22class ChreScanParamsSafeTest : public testing::Test {
23 public:
24  wifi_offload_test::RandomGenerator random_gen_;
25  wifi_offload::ScanParams nanoapp_scan_params_;
26
27  void ConstructChreScanParamsSafeAndCompareWithOrigScanParams() {
28    wifi_offload::ChreScanParamsSafe chre_scan_params_safe(
29        nanoapp_scan_params_);
30    const chreWifiScanParams *chre_scan_params =
31        chre_scan_params_safe.GetChreWifiScanParams();
32
33    EXPECT_EQ(CHRE_WIFI_SCAN_TYPE_ACTIVE_PLUS_PASSIVE_DFS,
34              chre_scan_params->scanType);
35    EXPECT_EQ(0, chre_scan_params->maxScanAgeMs);
36
37    ASSERT_EQ(nanoapp_scan_params_.ssids_to_scan_.size(),
38              chre_scan_params->ssidListLen);
39    for (size_t i = 0; i < chre_scan_params->ssidListLen; i++) {
40      chreWifiSsidListItem ssid_item;
41      nanoapp_scan_params_.ssids_to_scan_[i].ToChreWifiSsidListItem(&ssid_item);
42      ASSERT_EQ(ssid_item.ssidLen, chre_scan_params->ssidList[i].ssidLen);
43      EXPECT_EQ(0,
44                std::memcmp(ssid_item.ssid, chre_scan_params->ssidList[i].ssid,
45                            chre_scan_params->ssidList[i].ssidLen));
46    }
47    ASSERT_EQ(nanoapp_scan_params_.frequencies_to_scan_mhz_.size(),
48              chre_scan_params->frequencyListLen);
49    EXPECT_EQ(
50        0, std::memcmp(nanoapp_scan_params_.frequencies_to_scan_mhz_.data(),
51                       chre_scan_params->frequencyList,
52                       chre_scan_params->frequencyListLen * sizeof(uint32_t)));
53  }
54};
55
56TEST_F(ChreScanParamsSafeTest,
57       ConstructsChreScanParamsSafeAndComparesWithOriginalScanParams) {
58  init(nanoapp_scan_params_.frequencies_to_scan_mhz_, random_gen_,
59       CHRE_WIFI_FREQUENCY_LIST_MAX_LEN - 5);
60  init(nanoapp_scan_params_.ssids_to_scan_, random_gen_,
61       CHRE_WIFI_SSID_LIST_MAX_LEN - 2);
62  ConstructChreScanParamsSafeAndCompareWithOrigScanParams();
63}
64
65TEST_F(ChreScanParamsSafeTest, ConstructsChreScanParamsSafeWithEmptyFreqList) {
66  init(nanoapp_scan_params_.ssids_to_scan_, random_gen_,
67       CHRE_WIFI_SSID_LIST_MAX_LEN - 2);
68  ConstructChreScanParamsSafeAndCompareWithOrigScanParams();
69}
70
71TEST_F(ChreScanParamsSafeTest, ConstructsChreScanParamsSafeWithEmptySsidList) {
72  init(nanoapp_scan_params_.frequencies_to_scan_mhz_, random_gen_,
73       CHRE_WIFI_FREQUENCY_LIST_MAX_LEN - 5);
74  ConstructChreScanParamsSafeAndCompareWithOrigScanParams();
75}
76
77TEST_F(ChreScanParamsSafeTest, ChreScanParamsSafeTruncatesLongLists) {
78  // initialize frequency and ssid lists to exceed limit size
79  init(nanoapp_scan_params_.frequencies_to_scan_mhz_, random_gen_,
80       CHRE_WIFI_FREQUENCY_LIST_MAX_LEN + 5);
81  init(nanoapp_scan_params_.ssids_to_scan_, random_gen_,
82       CHRE_WIFI_SSID_LIST_MAX_LEN + 2);
83
84  wifi_offload::ChreScanParamsSafe chre_scan_params_safe(nanoapp_scan_params_);
85  const chreWifiScanParams *chre_scan_params =
86      chre_scan_params_safe.GetChreWifiScanParams();
87
88  EXPECT_EQ(CHRE_WIFI_SSID_LIST_MAX_LEN, chre_scan_params->ssidListLen);
89  EXPECT_EQ(CHRE_WIFI_FREQUENCY_LIST_MAX_LEN,
90            chre_scan_params->frequencyListLen);
91}
92