Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright (C) 2016, 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 <gmock/gmock.h>
     18 #include <gtest/gtest.h>
     19 
     20 #include <string>
     21 #include <vector>
     22 
     23 #include "wifi_system/hostapd_manager.h"
     24 
     25 using std::string;
     26 using std::vector;
     27 
     28 namespace android {
     29 namespace wifi_system {
     30 namespace {
     31 
     32 const char kTestInterfaceName[] = "foobar0";
     33 const char kTestSsidStr[] = "helloisitme";
     34 const char kTestPassphraseStr[] = "yourelookingfor";
     35 const int kTestChannel = 2;
     36 
     37 #define CONFIG_COMMON_PREFIX \
     38     "interface=foobar0\n" \
     39     "driver=nl80211\n" \
     40     "ctrl_interface=/data/misc/wifi/hostapd/ctrl\n" \
     41     "ssid2=68656c6c6f" "6973" "6974" "6d65\n" \
     42     "channel=2\n" \
     43     "ieee80211n=1\n" \
     44     "hw_mode=g\n"
     45 
     46 // If you generate your config file with both the test ssid
     47 // and the test passphrase, you'll get this line in the config.
     48 #define CONFIG_PSK_LINE \
     49     "wpa_psk=dffa36815281e5a6eca1910f254717fa2528681335e3bbec5966d2aa9221a66e\n"
     50 
     51 #define CONFIG_WPA_SUFFIX \
     52     "wpa=3\n" \
     53     "wpa_pairwise=TKIP CCMP\n" \
     54     CONFIG_PSK_LINE
     55 
     56 #define CONFIG_WPA2_SUFFIX \
     57     "wpa=2\n" \
     58     "rsn_pairwise=CCMP\n" \
     59     CONFIG_PSK_LINE
     60 
     61 const char kExpectedOpenConfig[] =
     62   CONFIG_COMMON_PREFIX
     63   "ignore_broadcast_ssid=0\n"
     64   "wowlan_triggers=any\n";
     65 
     66 const char kExpectedWpaConfig[] =
     67     CONFIG_COMMON_PREFIX
     68     "ignore_broadcast_ssid=0\n"
     69     "wowlan_triggers=any\n"
     70     CONFIG_WPA_SUFFIX;
     71 
     72 const char kExpectedWpa2Config[] =
     73     CONFIG_COMMON_PREFIX
     74     "ignore_broadcast_ssid=0\n"
     75     "wowlan_triggers=any\n"
     76     CONFIG_WPA2_SUFFIX;
     77 
     78 class HostapdManagerTest : public ::testing::Test {
     79  protected:
     80   string GetConfigForEncryptionType(
     81       HostapdManager::EncryptionType encryption_type) {
     82     return HostapdManager().CreateHostapdConfig(
     83         kTestInterfaceName,
     84         cstr2vector(kTestSsidStr),
     85         false,  // not hidden
     86         kTestChannel,
     87         encryption_type,
     88         cstr2vector(kTestPassphraseStr));
     89   }
     90 
     91   vector<uint8_t> cstr2vector(const char* data) {
     92     return vector<uint8_t>(data, data + strlen(data));
     93   }
     94 };  // class HostapdManagerTest
     95 
     96 }  // namespace
     97 
     98 TEST_F(HostapdManagerTest, GeneratesCorrectOpenConfig) {
     99   string config = GetConfigForEncryptionType(
    100       HostapdManager::EncryptionType::kOpen);
    101   EXPECT_FALSE(config.empty());
    102   EXPECT_EQ(kExpectedOpenConfig, config);
    103 }
    104 
    105 TEST_F(HostapdManagerTest, GeneratesCorrectWpaConfig) {
    106   string config = GetConfigForEncryptionType(
    107       HostapdManager::EncryptionType::kWpa);
    108   EXPECT_FALSE(config.empty());
    109   EXPECT_EQ(kExpectedWpaConfig, config);
    110 }
    111 
    112 TEST_F(HostapdManagerTest, GeneratesCorrectWpa2Config) {
    113   string config = GetConfigForEncryptionType(
    114       HostapdManager::EncryptionType::kWpa2);
    115   EXPECT_FALSE(config.empty());
    116   EXPECT_EQ(kExpectedWpa2Config, config);
    117 }
    118 
    119 TEST_F(HostapdManagerTest, RespectsHiddenSetting) {
    120   string config = HostapdManager().CreateHostapdConfig(
    121         kTestInterfaceName,
    122         cstr2vector(kTestSsidStr),
    123         true,
    124         kTestChannel,
    125         HostapdManager::EncryptionType::kOpen,
    126         vector<uint8_t>());
    127   EXPECT_FALSE(config.find("ignore_broadcast_ssid=1\n") == string::npos);
    128   EXPECT_TRUE(config.find("ignore_broadcast_ssid=0\n") == string::npos);
    129 }
    130 
    131 TEST_F(HostapdManagerTest, CorrectlyInfersHwMode) {
    132   string config = HostapdManager().CreateHostapdConfig(
    133         kTestInterfaceName,
    134         cstr2vector(kTestSsidStr),
    135         true,
    136         44,
    137         HostapdManager::EncryptionType::kOpen,
    138         vector<uint8_t>());
    139   EXPECT_FALSE(config.find("hw_mode=a\n") == string::npos);
    140   EXPECT_TRUE(config.find("hw_mode=g\n") == string::npos);
    141 }
    142 
    143 
    144 }  // namespace wifi_system
    145 }  // namespace android
    146