/* * Copyright (C) 2016, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include "wifi_system/hostapd_manager.h" using std::string; using std::vector; namespace android { namespace wifi_system { namespace { const char kTestInterfaceName[] = "foobar0"; const char kTestSsidStr[] = "helloisitme"; const char kTestPassphraseStr[] = "yourelookingfor"; const int kTestChannel = 2; #define CONFIG_COMMON_PREFIX \ "interface=foobar0\n" \ "driver=nl80211\n" \ "ctrl_interface=/data/misc/wifi/hostapd/ctrl\n" \ "ssid2=68656c6c6f" "6973" "6974" "6d65\n" \ "channel=2\n" \ "ieee80211n=1\n" \ "hw_mode=g\n" // If you generate your config file with both the test ssid // and the test passphrase, you'll get this line in the config. #define CONFIG_PSK_LINE \ "wpa_psk=dffa36815281e5a6eca1910f254717fa2528681335e3bbec5966d2aa9221a66e\n" #define CONFIG_WPA_SUFFIX \ "wpa=3\n" \ "wpa_pairwise=TKIP CCMP\n" \ CONFIG_PSK_LINE #define CONFIG_WPA2_SUFFIX \ "wpa=2\n" \ "rsn_pairwise=CCMP\n" \ CONFIG_PSK_LINE const char kExpectedOpenConfig[] = CONFIG_COMMON_PREFIX "ignore_broadcast_ssid=0\n" "wowlan_triggers=any\n"; const char kExpectedWpaConfig[] = CONFIG_COMMON_PREFIX "ignore_broadcast_ssid=0\n" "wowlan_triggers=any\n" CONFIG_WPA_SUFFIX; const char kExpectedWpa2Config[] = CONFIG_COMMON_PREFIX "ignore_broadcast_ssid=0\n" "wowlan_triggers=any\n" CONFIG_WPA2_SUFFIX; class HostapdManagerTest : public ::testing::Test { protected: string GetConfigForEncryptionType( HostapdManager::EncryptionType encryption_type) { return HostapdManager().CreateHostapdConfig( kTestInterfaceName, cstr2vector(kTestSsidStr), false, // not hidden kTestChannel, encryption_type, cstr2vector(kTestPassphraseStr)); } vector cstr2vector(const char* data) { return vector(data, data + strlen(data)); } }; // class HostapdManagerTest } // namespace TEST_F(HostapdManagerTest, GeneratesCorrectOpenConfig) { string config = GetConfigForEncryptionType( HostapdManager::EncryptionType::kOpen); EXPECT_FALSE(config.empty()); EXPECT_EQ(kExpectedOpenConfig, config); } TEST_F(HostapdManagerTest, GeneratesCorrectWpaConfig) { string config = GetConfigForEncryptionType( HostapdManager::EncryptionType::kWpa); EXPECT_FALSE(config.empty()); EXPECT_EQ(kExpectedWpaConfig, config); } TEST_F(HostapdManagerTest, GeneratesCorrectWpa2Config) { string config = GetConfigForEncryptionType( HostapdManager::EncryptionType::kWpa2); EXPECT_FALSE(config.empty()); EXPECT_EQ(kExpectedWpa2Config, config); } TEST_F(HostapdManagerTest, RespectsHiddenSetting) { string config = HostapdManager().CreateHostapdConfig( kTestInterfaceName, cstr2vector(kTestSsidStr), true, kTestChannel, HostapdManager::EncryptionType::kOpen, vector()); EXPECT_FALSE(config.find("ignore_broadcast_ssid=1\n") == string::npos); EXPECT_TRUE(config.find("ignore_broadcast_ssid=0\n") == string::npos); } TEST_F(HostapdManagerTest, CorrectlyInfersHwMode) { string config = HostapdManager().CreateHostapdConfig( kTestInterfaceName, cstr2vector(kTestSsidStr), true, 44, HostapdManager::EncryptionType::kOpen, vector()); EXPECT_FALSE(config.find("hw_mode=a\n") == string::npos); EXPECT_TRUE(config.find("hw_mode=g\n") == string::npos); } } // namespace wifi_system } // namespace android