• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
GetConfigForEncryptionType(HostapdManager::EncryptionType encryption_type)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 
cstr2vector(const char * data)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 
TEST_F(HostapdManagerTest,GeneratesCorrectOpenConfig)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 
TEST_F(HostapdManagerTest,GeneratesCorrectWpaConfig)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 
TEST_F(HostapdManagerTest,GeneratesCorrectWpa2Config)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 
TEST_F(HostapdManagerTest,RespectsHiddenSetting)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 
TEST_F(HostapdManagerTest,CorrectlyInfersHwMode)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