13f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh/*
23f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Copyright (C) 2017 The Android Open Source Project
33f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh *
43f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Licensed under the Apache License, Version 2.0 (the "License");
53f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * you may not use this file except in compliance with the License.
63f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * You may obtain a copy of the License at
73f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh *
83f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh *      http://www.apache.org/licenses/LICENSE-2.0
93f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh *
103f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * Unless required by applicable law or agreed to in writing, software
113f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * distributed under the License is distributed on an "AS IS" BASIS,
123f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * See the License for the specific language governing permissions and
143f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh * limitations under the License.
153f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh */
163f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
173f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "gtest/gtest.h"
183f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
193f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "chre/apps/wifi_offload/chre_scan_params_safe.h"
203f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh#include "include/utility.h"
213f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
223f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadehclass ChreScanParamsSafeTest : public testing::Test {
233f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh public:
243f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  wifi_offload_test::RandomGenerator random_gen_;
253f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  wifi_offload::ScanParams nanoapp_scan_params_;
263f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
273f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  void ConstructChreScanParamsSafeAndCompareWithOrigScanParams() {
283f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    wifi_offload::ChreScanParamsSafe chre_scan_params_safe(
293f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh        nanoapp_scan_params_);
303f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    const chreWifiScanParams *chre_scan_params =
313f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh        chre_scan_params_safe.GetChreWifiScanParams();
323f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
333f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    EXPECT_EQ(CHRE_WIFI_SCAN_TYPE_ACTIVE_PLUS_PASSIVE_DFS,
343f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh              chre_scan_params->scanType);
353f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    EXPECT_EQ(0, chre_scan_params->maxScanAgeMs);
363f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
373f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    ASSERT_EQ(nanoapp_scan_params_.ssids_to_scan_.size(),
383f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh              chre_scan_params->ssidListLen);
393f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    for (size_t i = 0; i < chre_scan_params->ssidListLen; i++) {
403f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh      chreWifiSsidListItem ssid_item;
413f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh      nanoapp_scan_params_.ssids_to_scan_[i].ToChreWifiSsidListItem(&ssid_item);
423f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh      ASSERT_EQ(ssid_item.ssidLen, chre_scan_params->ssidList[i].ssidLen);
433f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh      EXPECT_EQ(0,
443f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh                std::memcmp(ssid_item.ssid, chre_scan_params->ssidList[i].ssid,
453f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh                            chre_scan_params->ssidList[i].ssidLen));
463f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    }
473f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    ASSERT_EQ(nanoapp_scan_params_.frequencies_to_scan_mhz_.size(),
483f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh              chre_scan_params->frequencyListLen);
493f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh    EXPECT_EQ(
503f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh        0, std::memcmp(nanoapp_scan_params_.frequencies_to_scan_mhz_.data(),
513f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh                       chre_scan_params->frequencyList,
523f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh                       chre_scan_params->frequencyListLen * sizeof(uint32_t)));
533f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  }
543f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh};
553f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
563f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehTEST_F(ChreScanParamsSafeTest,
573f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh       ConstructsChreScanParamsSafeAndComparesWithOriginalScanParams) {
583f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  init(nanoapp_scan_params_.frequencies_to_scan_mhz_, random_gen_,
593f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh       CHRE_WIFI_FREQUENCY_LIST_MAX_LEN - 5);
603f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  init(nanoapp_scan_params_.ssids_to_scan_, random_gen_,
613f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh       CHRE_WIFI_SSID_LIST_MAX_LEN - 2);
623f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  ConstructChreScanParamsSafeAndCompareWithOrigScanParams();
633f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
643f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
653f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehTEST_F(ChreScanParamsSafeTest, ConstructsChreScanParamsSafeWithEmptyFreqList) {
663f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  init(nanoapp_scan_params_.ssids_to_scan_, random_gen_,
673f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh       CHRE_WIFI_SSID_LIST_MAX_LEN - 2);
683f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  ConstructChreScanParamsSafeAndCompareWithOrigScanParams();
693f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
703f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
713f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehTEST_F(ChreScanParamsSafeTest, ConstructsChreScanParamsSafeWithEmptySsidList) {
723f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  init(nanoapp_scan_params_.frequencies_to_scan_mhz_, random_gen_,
733f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh       CHRE_WIFI_FREQUENCY_LIST_MAX_LEN - 5);
743f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  ConstructChreScanParamsSafeAndCompareWithOrigScanParams();
753f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
763f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
773f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi AlizadehTEST_F(ChreScanParamsSafeTest, ChreScanParamsSafeTruncatesLongLists) {
783f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  // initialize frequency and ssid lists to exceed limit size
793f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  init(nanoapp_scan_params_.frequencies_to_scan_mhz_, random_gen_,
803f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh       CHRE_WIFI_FREQUENCY_LIST_MAX_LEN + 5);
813f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  init(nanoapp_scan_params_.ssids_to_scan_, random_gen_,
823f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh       CHRE_WIFI_SSID_LIST_MAX_LEN + 2);
833f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
843f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  wifi_offload::ChreScanParamsSafe chre_scan_params_safe(nanoapp_scan_params_);
853f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  const chreWifiScanParams *chre_scan_params =
863f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh      chre_scan_params_safe.GetChreWifiScanParams();
873f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh
883f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  EXPECT_EQ(CHRE_WIFI_SSID_LIST_MAX_LEN, chre_scan_params->ssidListLen);
893f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh  EXPECT_EQ(CHRE_WIFI_FREQUENCY_LIST_MAX_LEN,
903f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh            chre_scan_params->frequencyListLen);
913f5e86ee9463dce381ebd8cdb65ab3f79c1b864dMehdi Alizadeh}
92