Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1) - OpenOCPP extracted (firmware OCPP 1.6J/2.0.1) - ShapeShifter library installed (pip install -e) - ShapeShifter specification extracted - EVerest extracted TODO updated with progress
This commit is contained in:
19
tools/EVerest-main/modules/Misc/Setup/tests/CMakeLists.txt
Normal file
19
tools/EVerest-main/modules/Misc/Setup/tests/CMakeLists.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
set(TEST_TARGET_NAME ${PROJECT_NAME}_setup_tests)
|
||||
add_executable(${TEST_TARGET_NAME})
|
||||
|
||||
target_include_directories(${TEST_TARGET_NAME} PUBLIC ${GTEST_INCLUDE_DIRS} . ..)
|
||||
|
||||
target_sources(${TEST_TARGET_NAME} PRIVATE
|
||||
RunApplicationStub.cpp
|
||||
WiFiSetupTest.cpp
|
||||
../WiFiSetup.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(${TEST_TARGET_NAME} PRIVATE
|
||||
GTest::gtest_main
|
||||
nlohmann_json::nlohmann_json
|
||||
everest::run_application
|
||||
)
|
||||
|
||||
add_test(${TEST_TARGET_NAME} ${TEST_TARGET_NAME})
|
||||
ev_register_test_target(${TEST_TARGET_NAME})
|
||||
@@ -0,0 +1,108 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// Copyright Pionix GmbH and Contributors to EVerest
|
||||
#include "RunApplicationStub.hpp"
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <utility>
|
||||
|
||||
using namespace everest::run_application;
|
||||
|
||||
namespace stub {
|
||||
|
||||
RunApplication* RunApplication::active_p = nullptr;
|
||||
|
||||
RunApplication::RunApplication() :
|
||||
results({
|
||||
{"add_network", {{}, {{"0"}}, 0}},
|
||||
{"set_network", {{}, {{"OK"}}, 0}},
|
||||
{"enable_network", {{}, {{"OK"}}, 0}},
|
||||
{"disable_network", {{}, {{"OK"}}, 0}},
|
||||
{"select_network", {{}, {{"OK"}}, 0}},
|
||||
{"remove_network", {{}, {{"OK"}}, 0}},
|
||||
{"save_config", {{}, {{"OK"}}, 0}},
|
||||
// scan_wifi uses scan and scan_results
|
||||
{"scan", {{}, {{"OK"}}, 0}},
|
||||
{"scan_results",
|
||||
{{},
|
||||
{
|
||||
{"bssid / frequency / signal level / flags / ssid"},
|
||||
},
|
||||
0}},
|
||||
{"list_networks",
|
||||
{{},
|
||||
{
|
||||
{"network id / ssid / bssid / flags"},
|
||||
},
|
||||
0}},
|
||||
// list_networks_status uses list_networks status signal_poll
|
||||
{"status",
|
||||
{{},
|
||||
{
|
||||
{"wpa_state=INACTIVE"},
|
||||
{"p2p_device_address=c2:ee:40:b0:57:b8"},
|
||||
{"address=c0:ee:40:b0:57:b8"},
|
||||
{"uuid=7dd9abf8-53f0-532b-a763-2f43537e4234"},
|
||||
},
|
||||
0}},
|
||||
{"signal_poll", {{}, {{"FAIL"}}, 0}},
|
||||
}),
|
||||
signal_poll_called(false),
|
||||
psk_called(false),
|
||||
sae_password_called(false),
|
||||
key_mgmt_called(false),
|
||||
scan_ssid_called(false),
|
||||
ieee80211w_called(false),
|
||||
key_mgmt_value(),
|
||||
ieee80211w_value() {
|
||||
active_p = this;
|
||||
}
|
||||
|
||||
RunApplication::~RunApplication() {
|
||||
active_p = nullptr;
|
||||
}
|
||||
|
||||
CmdOutput RunApplication::run_application(const std::string& name, std::vector<std::string> args) {
|
||||
CmdOutput result = {{}, {}, -1};
|
||||
EXPECT_EQ(name, "/usr/sbin/wpa_cli");
|
||||
EXPECT_EQ(args[0], "-i");
|
||||
if (args[2] == "signal_poll") {
|
||||
signal_poll_called = true;
|
||||
} else if (args[2] == "set_network") {
|
||||
if (args[4] == "psk") {
|
||||
psk_called = true;
|
||||
} else if (args[4] == "sae_password") {
|
||||
sae_password_called = true;
|
||||
} else if (args[4] == "key_mgmt") {
|
||||
key_mgmt_called = true;
|
||||
key_mgmt_value = args[5];
|
||||
} else if (args[4] == "ieee80211w") {
|
||||
ieee80211w_called = true;
|
||||
ieee80211w_value = args[5];
|
||||
} else if (args[4] == "scan_ssid") {
|
||||
scan_ssid_called = true;
|
||||
}
|
||||
}
|
||||
auto it = results.find(args[2]);
|
||||
if (it != results.end()) {
|
||||
result = it->second;
|
||||
if (!result.split_output.empty() && result.output.empty()) {
|
||||
for (auto& line : result.output) {
|
||||
result.output += line + "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace stub
|
||||
|
||||
namespace everest::run_application {
|
||||
CmdOutput run_application(const std::string& name, std::vector<std::string> args,
|
||||
const std::function<CmdControl(const std::string& output_line)> output_callback) {
|
||||
CmdOutput result = {{}, {}, -1};
|
||||
if (stub::RunApplication::active_p != nullptr) {
|
||||
result = std::move(stub::RunApplication::active_p->run_application(name, args));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
} // namespace everest::run_application
|
||||
@@ -0,0 +1,39 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// Copyright Pionix GmbH and Contributors to EVerest
|
||||
#ifndef RUNAPPLICATIONSTUB_HPP
|
||||
#define RUNAPPLICATIONSTUB_HPP
|
||||
|
||||
#include <everest/run_application/run_application.hpp>
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
namespace stub {
|
||||
|
||||
class RunApplication {
|
||||
public:
|
||||
static RunApplication* active_p;
|
||||
|
||||
std::map<std::string, everest::run_application::CmdOutput> results;
|
||||
bool signal_poll_called;
|
||||
bool psk_called;
|
||||
bool sae_password_called;
|
||||
bool key_mgmt_called;
|
||||
bool scan_ssid_called;
|
||||
bool ieee80211w_called;
|
||||
std::string key_mgmt_value;
|
||||
std::string ieee80211w_value;
|
||||
|
||||
RunApplication();
|
||||
virtual ~RunApplication();
|
||||
|
||||
virtual everest::run_application::CmdOutput run_application(const std::string& name, std::vector<std::string> args);
|
||||
};
|
||||
|
||||
} // namespace stub
|
||||
namespace everest::run_application {
|
||||
CmdOutput run_application(const std::string& name, std::vector<std::string> args,
|
||||
const std::function<CmdControl(const std::string& output_line)> output_callback);
|
||||
}
|
||||
|
||||
#endif // RUNAPPLICATIONSTUB_HPP
|
||||
726
tools/EVerest-main/modules/Misc/Setup/tests/WiFiSetupTest.cpp
Normal file
726
tools/EVerest-main/modules/Misc/Setup/tests/WiFiSetupTest.cpp
Normal file
@@ -0,0 +1,726 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
// Copyright Pionix GmbH and Contributors to EVerest
|
||||
#include "RunApplicationStub.hpp"
|
||||
#include <WiFiSetup.hpp>
|
||||
#include <gtest/gtest.h>
|
||||
#include <nlohmann/json.hpp>
|
||||
#include <string>
|
||||
|
||||
namespace {
|
||||
using namespace module;
|
||||
using nlohmann::json;
|
||||
|
||||
constexpr const char* example_psk = "e3003974af901976485f3e655b455791dcc20a5380f42a7839de3bfdc9d70d71";
|
||||
constexpr const char* example_password = "LetMeIn2";
|
||||
constexpr const char* example_long_password = "e3003974af901976485f3e655b455791dcc20a5380f42a7839de3bfdc9d70d71X";
|
||||
|
||||
class WpaCliSetupTest : public WpaCliSetup {
|
||||
public:
|
||||
// override to support testing
|
||||
virtual bool is_wifi_interface(const std::string& interface) override {
|
||||
if (interface == "ap0") {
|
||||
return false;
|
||||
} else if (interface == "eth0") {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
};
|
||||
|
||||
struct WifiCredentials {
|
||||
std::string interface;
|
||||
std::string ssid;
|
||||
std::string psk;
|
||||
bool hidden;
|
||||
|
||||
operator std::string() {
|
||||
|
||||
json wifi_credentials = *this;
|
||||
|
||||
return wifi_credentials.dump();
|
||||
}
|
||||
};
|
||||
void to_json(json& j, const WifiCredentials& k) {
|
||||
j = json::object({{"interface", k.interface}, {"ssid", k.ssid}, {"psk", k.psk}, {"hidden", k.hidden}});
|
||||
}
|
||||
|
||||
void from_json(const json& j, WifiCredentials& k) {
|
||||
k.interface = j.at("interface");
|
||||
k.ssid = j.at("ssid");
|
||||
k.psk = j.at("psk");
|
||||
k.hidden = false;
|
||||
// optional item
|
||||
auto it = j.find("hidden");
|
||||
if ((it != j.end() && *it)) {
|
||||
k.hidden = true;
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// SSID conversions
|
||||
TEST(Ssid, toHex) {
|
||||
Ssid ssid;
|
||||
EXPECT_EQ(ssid.to_hex("0123456789"), "30313233343536373839");
|
||||
EXPECT_EQ(ssid.to_hex("abcdef"), "616263646566");
|
||||
EXPECT_EQ(ssid.to_hex("ABCDEF"), "414243444546");
|
||||
EXPECT_EQ(ssid.to_hex(R"(\" \\ \e\n\r\t)"), "22205c201b0a0d09");
|
||||
EXPECT_EQ(ssid.to_hex(R"(\x00\x01\xfd)"), "0001fd");
|
||||
}
|
||||
|
||||
TEST(Ssid, fromHex) {
|
||||
Ssid ssid;
|
||||
EXPECT_EQ(ssid.from_hex("30313233343536373839"), "0123456789");
|
||||
EXPECT_EQ(ssid.from_hex("616263646566"), "abcdef");
|
||||
EXPECT_EQ(ssid.from_hex("414243444546"), "ABCDEF");
|
||||
EXPECT_EQ(ssid.from_hex("22205c201b0a0d09"), R"(\" \\ \e\n\r\t)");
|
||||
EXPECT_EQ(ssid.from_hex("0001fd"), R"(\x00\x01\xfd)");
|
||||
}
|
||||
|
||||
TEST(Ssid, complete) {
|
||||
Ssid ssid;
|
||||
|
||||
std::stringstream ss;
|
||||
for (std::uint16_t i = 0; i < 256; i++) {
|
||||
ss << std::hex << std::setw(2) << std::setfill('0') << i;
|
||||
}
|
||||
const std::string values_str(ss.str());
|
||||
const auto result_str = ssid.from_hex(values_str);
|
||||
const auto result_hex = ssid.to_hex(result_str);
|
||||
// std::cout << result_str << std::endl;
|
||||
// std::cout << result_hex << std::endl;
|
||||
EXPECT_EQ(values_str, result_hex);
|
||||
}
|
||||
|
||||
TEST(Ssid, unusual) {
|
||||
Ssid ssid;
|
||||
|
||||
// allowing upper case hex digits
|
||||
EXPECT_EQ(ssid.from_hex("E0E1E2E3E4E5E6E7E8E9EaEbEcEdEeEfEAEBECEDEEEF"),
|
||||
R"(\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xea\xeb\xec\xed\xee\xef)");
|
||||
EXPECT_EQ(
|
||||
ssid.to_hex(R"(\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xEA\xEB\xEC\xED\xEE\xEF)"),
|
||||
"e0e1e2e3e4e5e6e7e8e9eaebecedeeefeaebecedeeef");
|
||||
|
||||
// parsing errors
|
||||
EXPECT_EQ(ssid.to_hex(R"(123\?456)"), "");
|
||||
EXPECT_EQ(ssid.to_hex(R"(123\?)"), "");
|
||||
EXPECT_EQ(ssid.to_hex(R"(\?456)"), "");
|
||||
EXPECT_EQ(ssid.to_hex(R"(\034)"), "");
|
||||
EXPECT_EQ(ssid.to_hex(R"(\03)"), "");
|
||||
EXPECT_EQ(ssid.to_hex(R"(\0)"), "");
|
||||
EXPECT_EQ(ssid.to_hex(R"(\x)"), "");
|
||||
EXPECT_EQ(ssid.to_hex(R"(\xz)"), "");
|
||||
EXPECT_EQ(ssid.to_hex(R"(\xaz)"), "");
|
||||
|
||||
EXPECT_EQ(ssid.from_hex(R"(G123)"), "");
|
||||
EXPECT_EQ(ssid.from_hex(R"(12G3)"), "");
|
||||
EXPECT_EQ(ssid.from_hex(R"(123G)"), "");
|
||||
EXPECT_EQ(ssid.from_hex(R"(1234568)"), "");
|
||||
}
|
||||
|
||||
TEST(Ssid, json) {
|
||||
/*
|
||||
* worked example
|
||||
* ssid=PP€-310034
|
||||
* scan_results
|
||||
* bssid / frequency / signal level / flags / ssid
|
||||
* c2:ee:40:10:57:b8 2417 -45 [WPA2-PSK-CCMP][ESS] PP\xe2\x82\xac-310034
|
||||
*
|
||||
* MQTT
|
||||
* everest_api/setup/var/wifi_info: [
|
||||
* {"bssid":"c2:ee:40:10:57:b8","flags":["WPA2-PSK-CCMP","ESS"],"frequency":2417,"signal_level":-46,"ssid":"PP\\xe2\\x82\\xac-310034"}]
|
||||
*/
|
||||
Ssid conv;
|
||||
|
||||
std::string ssid_hex{"535349443de282ac3132"};
|
||||
std::string ssid = conv.from_hex(ssid_hex);
|
||||
WifiCredentials wifi = {"eth0", ssid, "\"psk\"", false};
|
||||
nlohmann::json j;
|
||||
to_json(j, wifi);
|
||||
|
||||
const auto transmitted = j.dump();
|
||||
WifiCredentials received = json::parse(transmitted);
|
||||
EXPECT_EQ(received.ssid, ssid);
|
||||
|
||||
const auto rec_ssid_hex = conv.to_hex(received.ssid);
|
||||
EXPECT_EQ(rec_ssid_hex, ssid_hex);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// add_network()
|
||||
TEST(add_network, wired) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_EQ(obj.add_network("eth0"), -1);
|
||||
}
|
||||
|
||||
TEST(add_network, wireless) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_NE(obj.add_network("wlan0"), -1);
|
||||
}
|
||||
|
||||
TEST(add_network, access_point) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_EQ(obj.add_network("ap0"), -1);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// set_network()
|
||||
TEST(set_network, none_no_psk) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "PlusnetWireless", "", WpaCliSetup::network_security_t::none, false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_FALSE(ra.ieee80211w_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "NONE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, none_psk) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(
|
||||
obj.set_network("wlan0", 0, "PlusnetWireless", example_psk, WpaCliSetup::network_security_t::none, false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_FALSE(ra.ieee80211w_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "NONE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, none_password) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(
|
||||
obj.set_network("wlan0", 0, "PlusnetWireless", example_password, WpaCliSetup::network_security_t::none, false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_FALSE(ra.ieee80211w_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "NONE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa2_no_psk) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "PlusnetWireless", "", WpaCliSetup::network_security_t::wpa2_only, false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_FALSE(ra.ieee80211w_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "NONE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa2_psk) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(
|
||||
obj.set_network("wlan0", 0, "PlusnetWireless", example_psk, WpaCliSetup::network_security_t::wpa2_only, false));
|
||||
ASSERT_TRUE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_FALSE(ra.ieee80211w_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "WPA-PSK");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa2_password) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "PlusnetWireless", example_password,
|
||||
WpaCliSetup::network_security_t::wpa2_only, false));
|
||||
ASSERT_TRUE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_FALSE(ra.ieee80211w_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "WPA-PSK");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa3_no_psk) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "PlusnetWireless", "", WpaCliSetup::network_security_t::wpa3_only, false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_FALSE(ra.ieee80211w_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "NONE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa3_psk) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(
|
||||
obj.set_network("wlan0", 0, "PlusnetWireless", example_psk, WpaCliSetup::network_security_t::wpa3_only, false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_TRUE(ra.sae_password_called);
|
||||
ASSERT_TRUE(ra.ieee80211w_called);
|
||||
ASSERT_EQ(ra.ieee80211w_value, "2");
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "SAE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa3_password) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "PlusnetWireless", example_password,
|
||||
WpaCliSetup::network_security_t::wpa3_only, false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_TRUE(ra.sae_password_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_TRUE(ra.ieee80211w_called);
|
||||
ASSERT_EQ(ra.ieee80211w_value, "2");
|
||||
ASSERT_EQ(ra.key_mgmt_value, "SAE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa2_and_wpa3_no_psk) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(
|
||||
obj.set_network("wlan0", 0, "PlusnetWireless", "", WpaCliSetup::network_security_t::wpa2_and_wpa3, false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_FALSE(ra.ieee80211w_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "NONE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa2_and_wpa3_psk) {
|
||||
// with a PSK result is same as wpa2_only
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "PlusnetWireless", example_psk,
|
||||
WpaCliSetup::network_security_t::wpa2_and_wpa3, false));
|
||||
ASSERT_TRUE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_FALSE(ra.ieee80211w_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "WPA-PSK");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa2_and_wpa3_password) {
|
||||
// configure for both
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "PlusnetWireless", example_password,
|
||||
WpaCliSetup::network_security_t::wpa2_and_wpa3, false));
|
||||
ASSERT_TRUE(ra.psk_called);
|
||||
ASSERT_FALSE(ra.sae_password_called);
|
||||
ASSERT_TRUE(ra.ieee80211w_called);
|
||||
ASSERT_EQ(ra.ieee80211w_value, "1");
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "WPA-PSK WPA-PSK-SHA256 SAE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa2_and_wpa3_password_long) {
|
||||
// configure for WPA3 only
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "PlusnetWireless", example_long_password,
|
||||
WpaCliSetup::network_security_t::wpa2_and_wpa3, false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_TRUE(ra.sae_password_called);
|
||||
ASSERT_TRUE(ra.ieee80211w_called);
|
||||
ASSERT_EQ(ra.ieee80211w_value, "2");
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_EQ(ra.key_mgmt_value, "SAE");
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, wpa2) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "PlusnetWireless", "LetMeIn2", false));
|
||||
ASSERT_TRUE(ra.psk_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, open) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "OpenNet", "", false));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_FALSE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, hidden_wpa2) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "Hidden", "LetMeIn3", true));
|
||||
ASSERT_TRUE(ra.psk_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_TRUE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
TEST(set_network, hidden_open) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.set_network("wlan0", 0, "Hidden", "", true));
|
||||
ASSERT_FALSE(ra.psk_called);
|
||||
ASSERT_TRUE(ra.key_mgmt_called);
|
||||
ASSERT_TRUE(ra.scan_ssid_called);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// enable_network()
|
||||
TEST(enable_network, exists) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.enable_network("wlan0", 0));
|
||||
}
|
||||
|
||||
TEST(enable_network, doesnt_exist) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["enable_network"] = {{}, {{"FAIL"}}, 0};
|
||||
WpaCliSetupTest obj;
|
||||
// still returns an exit code of 0
|
||||
ASSERT_TRUE(obj.enable_network("wlan0", 1));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// disable_network()
|
||||
TEST(disable_network, exists) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.disable_network("wlan0", 0));
|
||||
}
|
||||
|
||||
TEST(disable_network, doesnt_exist) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["disable_network"] = {{}, {{"FAIL"}}, 0};
|
||||
WpaCliSetupTest obj;
|
||||
// still returns an exit code of 0
|
||||
ASSERT_TRUE(obj.disable_network("wlan0", 1));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// select_network()
|
||||
TEST(select_network, exists) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.select_network("wlan0", 0));
|
||||
}
|
||||
|
||||
TEST(select_network, doesnt_exist) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["select_network"] = {{}, {{"FAIL"}}, 0};
|
||||
WpaCliSetupTest obj;
|
||||
// still returns an exit code of 0
|
||||
ASSERT_TRUE(obj.select_network("wlan0", 1));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// remove_network()
|
||||
TEST(remove_network, exists) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.remove_network("wlan0", 0));
|
||||
}
|
||||
|
||||
TEST(remove_network, doesnt_exist) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["remove_network"] = {{}, {{"FAIL"}}, 0};
|
||||
WpaCliSetupTest obj;
|
||||
// still returns an exit code of 0
|
||||
ASSERT_TRUE(obj.remove_network("wlan0", 1));
|
||||
}
|
||||
|
||||
TEST(remove_network, fail) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["remove_network"] = {{}, {{"Invalid REMOVE_NETWORK command - at least 1 argument is required."}}, 255};
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_FALSE(obj.remove_network("wlan0", -99));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// save_config()
|
||||
TEST(save_config, success) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_TRUE(obj.save_config("wlan0"));
|
||||
}
|
||||
|
||||
TEST(save_config, fail) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
ASSERT_FALSE(obj.save_config("ap0"));
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// scan_wifi()
|
||||
TEST(scan_wifi, none) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
auto res = obj.scan_wifi("wlan0");
|
||||
ASSERT_TRUE(res.empty());
|
||||
}
|
||||
|
||||
TEST(scan_wifi, some) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["scan_results"] = {
|
||||
{},
|
||||
{
|
||||
{"bssid / frequency / signal level / flags / ssid"},
|
||||
{"14:49:bc:06:81:19\t2412\t-72\t[WPA2-PSK-CCMP][ESS]\tPlusnetWireless"},
|
||||
{"6a:82:8c:38:b2:a1\t2412\t-93\t[WPA2-PSK-CCMP][ESS]\t\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00"},
|
||||
},
|
||||
0};
|
||||
|
||||
WpaCliSetupTest obj;
|
||||
auto res = obj.scan_wifi("wlan0");
|
||||
ASSERT_FALSE(res.empty());
|
||||
ASSERT_EQ(res.size(), 2);
|
||||
|
||||
module::WpaCliSetup::flags_t expected = {"WPA2-PSK-CCMP", "ESS"};
|
||||
|
||||
EXPECT_EQ(res[0].bssid, "14:49:bc:06:81:19");
|
||||
EXPECT_EQ(res[0].ssid, "PlusnetWireless");
|
||||
EXPECT_EQ(res[0].frequency, 2412);
|
||||
EXPECT_EQ(res[0].signal_level, -72);
|
||||
EXPECT_EQ(res[0].flags, expected);
|
||||
|
||||
EXPECT_EQ(res[1].bssid, "6a:82:8c:38:b2:a1");
|
||||
EXPECT_EQ(res[1].ssid, "\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00");
|
||||
EXPECT_EQ(res[1].frequency, 2412);
|
||||
EXPECT_EQ(res[1].signal_level, -93);
|
||||
EXPECT_EQ(res[1].flags, expected);
|
||||
}
|
||||
|
||||
TEST(scan_wifi, more) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["scan_results"] = {
|
||||
{},
|
||||
{
|
||||
{"bssid / frequency / signal level / flags / ssid"},
|
||||
{"14:49:bc:06:81:19\t2412\t-71\t[WPA2-PSK-CCMP][ESS]\tPlusnetWireless"},
|
||||
{"14:49:bc:06:81:1b\t2412\t-71\t[WPA2-PSK-CCMP][ESS]\t\\x00\\x00\\x00\\x00\\x00\\x00\\x00"},
|
||||
{"00:1e:42:33:62:07\t2462\t-89\t[WPA2-PSK-CCMP+TKIP][ESS][UTF-8]\tRUT950_6207"},
|
||||
{"b4:ba:9d:16:e2:ba\t2437\t-92\t[WPA2-PSK-CCMP][WPS][ESS]\tSKYLZMEY"},
|
||||
{"14:49:bc:06:81:1c\t2412\t-72\t[ESS]\tTesting123"},
|
||||
{"36:49:5b:f8:e1:07\t2412\t-92\t[ESS]\tEE WiFi"},
|
||||
{"14:49:bc:06:81:18\t2412\t-73\t[WPA2-PSK-CCMP][ESS]\t\\x00\\x00\\x00\\x00\\x00\\x00\\x00"},
|
||||
{"6a:82:8c:38:b2:a1\t2412\t-88\t[WPA2-PSK-CCMP][ESS]\t\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00"},
|
||||
{"18:82:8c:38:b2:a5\t2412\t-92\t[WPA2-PSK-CCMP][WPS][ESS]\tBT-3GAG3M"},
|
||||
{"6a:82:8c:38:b2:a6\t2412\t-92\t[ESS]\tEE WiFi"},
|
||||
},
|
||||
0};
|
||||
|
||||
WpaCliSetupTest obj;
|
||||
auto res = obj.scan_wifi("wlan0");
|
||||
ASSERT_FALSE(res.empty());
|
||||
ASSERT_EQ(res.size(), 10);
|
||||
|
||||
module::WpaCliSetup::flags_t expected1 = {"WPA2-PSK-CCMP", "ESS"};
|
||||
module::WpaCliSetup::flags_t expected2 = {"WPA2-PSK-CCMP+TKIP", "ESS", "UTF-8"};
|
||||
module::WpaCliSetup::flags_t expected3 = {"WPA2-PSK-CCMP", "WPS", "ESS"};
|
||||
module::WpaCliSetup::flags_t expected4 = {"ESS"};
|
||||
|
||||
EXPECT_EQ(res[0].bssid, "14:49:bc:06:81:19");
|
||||
EXPECT_EQ(res[0].ssid, "PlusnetWireless");
|
||||
EXPECT_EQ(res[0].frequency, 2412);
|
||||
EXPECT_EQ(res[0].signal_level, -71);
|
||||
EXPECT_EQ(res[0].flags, expected1);
|
||||
|
||||
EXPECT_EQ(res[1].bssid, "14:49:bc:06:81:1b");
|
||||
EXPECT_EQ(res[1].ssid, "\\x00\\x00\\x00\\x00\\x00\\x00\\x00");
|
||||
EXPECT_EQ(res[1].frequency, 2412);
|
||||
EXPECT_EQ(res[1].signal_level, -71);
|
||||
EXPECT_EQ(res[1].flags, expected1);
|
||||
|
||||
EXPECT_EQ(res[2].bssid, "00:1e:42:33:62:07");
|
||||
EXPECT_EQ(res[2].ssid, "RUT950_6207");
|
||||
EXPECT_EQ(res[2].frequency, 2462);
|
||||
EXPECT_EQ(res[2].signal_level, -89);
|
||||
EXPECT_EQ(res[2].flags, expected2);
|
||||
|
||||
EXPECT_EQ(res[3].bssid, "b4:ba:9d:16:e2:ba");
|
||||
EXPECT_EQ(res[3].ssid, "SKYLZMEY");
|
||||
EXPECT_EQ(res[3].frequency, 2437);
|
||||
EXPECT_EQ(res[3].signal_level, -92);
|
||||
EXPECT_EQ(res[3].flags, expected3);
|
||||
|
||||
EXPECT_EQ(res[4].bssid, "14:49:bc:06:81:1c");
|
||||
EXPECT_EQ(res[4].ssid, "Testing123");
|
||||
EXPECT_EQ(res[4].frequency, 2412);
|
||||
EXPECT_EQ(res[4].signal_level, -72);
|
||||
EXPECT_EQ(res[4].flags, expected4);
|
||||
|
||||
EXPECT_EQ(res[5].bssid, "36:49:5b:f8:e1:07");
|
||||
EXPECT_EQ(res[5].ssid, "EE WiFi");
|
||||
EXPECT_EQ(res[5].frequency, 2412);
|
||||
EXPECT_EQ(res[5].signal_level, -92);
|
||||
EXPECT_EQ(res[5].flags, expected4);
|
||||
|
||||
EXPECT_EQ(res[6].bssid, "14:49:bc:06:81:18");
|
||||
EXPECT_EQ(res[6].ssid, "\\x00\\x00\\x00\\x00\\x00\\x00\\x00");
|
||||
EXPECT_EQ(res[6].frequency, 2412);
|
||||
EXPECT_EQ(res[6].signal_level, -73);
|
||||
EXPECT_EQ(res[6].flags, expected1);
|
||||
|
||||
EXPECT_EQ(res[7].bssid, "6a:82:8c:38:b2:a1");
|
||||
EXPECT_EQ(res[7].ssid, "\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00");
|
||||
EXPECT_EQ(res[7].frequency, 2412);
|
||||
EXPECT_EQ(res[7].signal_level, -88);
|
||||
EXPECT_EQ(res[7].flags, expected1);
|
||||
|
||||
EXPECT_EQ(res[8].bssid, "18:82:8c:38:b2:a5");
|
||||
EXPECT_EQ(res[8].ssid, "BT-3GAG3M");
|
||||
EXPECT_EQ(res[8].frequency, 2412);
|
||||
EXPECT_EQ(res[8].signal_level, -92);
|
||||
EXPECT_EQ(res[8].flags, expected3);
|
||||
|
||||
EXPECT_EQ(res[9].bssid, "6a:82:8c:38:b2:a6");
|
||||
EXPECT_EQ(res[9].ssid, "EE WiFi");
|
||||
EXPECT_EQ(res[9].frequency, 2412);
|
||||
EXPECT_EQ(res[9].signal_level, -92);
|
||||
EXPECT_EQ(res[9].flags, expected4);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// list_networks()
|
||||
TEST(list_networks, none) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
auto res = obj.list_networks("wlan0");
|
||||
ASSERT_TRUE(res.empty());
|
||||
}
|
||||
|
||||
TEST(list_networks, one) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["list_networks"] = {{},
|
||||
{
|
||||
{"network id / ssid / bssid / flags"},
|
||||
{"0\t\tany\t[DISABLED]"},
|
||||
},
|
||||
0};
|
||||
|
||||
WpaCliSetupTest obj;
|
||||
auto res = obj.list_networks("wlan0");
|
||||
ASSERT_FALSE(res.empty());
|
||||
ASSERT_EQ(res.size(), 1);
|
||||
|
||||
module::WpaCliSetup::flags_t expected = {"WPA2-PSK-CCMP", "ESS"};
|
||||
|
||||
EXPECT_EQ(res[0].network_id, 0);
|
||||
EXPECT_EQ(res[0].ssid, "");
|
||||
}
|
||||
|
||||
TEST(list_networks, two) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["list_networks"] = {{},
|
||||
{
|
||||
{"network id / ssid / bssid / flags"},
|
||||
{"0\t\tany\t[DISABLED]"},
|
||||
{"1\tPlusnetWireless\tany\t[CURRENT]"},
|
||||
},
|
||||
0};
|
||||
|
||||
WpaCliSetupTest obj;
|
||||
auto res = obj.list_networks("wlan0");
|
||||
ASSERT_FALSE(res.empty());
|
||||
ASSERT_EQ(res.size(), 2);
|
||||
|
||||
module::WpaCliSetup::flags_t expected = {"WPA2-PSK-CCMP", "ESS"};
|
||||
|
||||
EXPECT_EQ(res[0].network_id, 0);
|
||||
EXPECT_EQ(res[0].ssid, "");
|
||||
|
||||
EXPECT_EQ(res[1].network_id, 1);
|
||||
EXPECT_EQ(res[1].ssid, "PlusnetWireless");
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// list_networks_status()
|
||||
TEST(list_networks, not_connected) {
|
||||
stub::RunApplication ra;
|
||||
WpaCliSetupTest obj;
|
||||
auto res = obj.list_networks_status("wlan0");
|
||||
ASSERT_TRUE(res.empty());
|
||||
ASSERT_FALSE(ra.signal_poll_called);
|
||||
}
|
||||
|
||||
TEST(list_networks, connected) {
|
||||
stub::RunApplication ra;
|
||||
ra.results["list_networks"] = {{},
|
||||
{
|
||||
{"network id / ssid / bssid / flags"},
|
||||
{"0\t\tany\t[DISABLED]"},
|
||||
{"1\tPlusnetWireless\tany\t[CURRENT]"},
|
||||
{"2\tHiddenNet\tany\t[DISABLED]"},
|
||||
},
|
||||
0};
|
||||
ra.results["status"] = {{},
|
||||
{
|
||||
{"bssid=14:49:bc:06:81:19"},
|
||||
{"freq=2412"},
|
||||
{"ssid=PlusnetWireless"},
|
||||
{"id=1"},
|
||||
{"mode=station"},
|
||||
{"wifi_generation=4"},
|
||||
{"pairwise_cipher=CCMP"},
|
||||
{"group_cipher=CCMP"},
|
||||
{"key_mgmt=WPA2-PSK"},
|
||||
{"wpa_state=COMPLETED"},
|
||||
{"ip_address=172.25.1.11"},
|
||||
{"p2p_device_address=c2:ee:40:b0:57:b8"},
|
||||
{"address=c0:ee:40:b0:57:b8"},
|
||||
{"uuid=7dd9abf8-53f0-532b-a763-2f43537e4234"},
|
||||
},
|
||||
0};
|
||||
ra.results["signal_poll"] = {{},
|
||||
{
|
||||
{"RSSI=-73"},
|
||||
{"LINKSPEED=54"},
|
||||
{"NOISE=9999"},
|
||||
{"FREQUENCY=2412"},
|
||||
{"WIDTH=20 MHz"},
|
||||
{"CENTER_FRQ1=2412"},
|
||||
},
|
||||
0};
|
||||
WpaCliSetupTest obj;
|
||||
auto res = obj.list_networks_status("wlan0");
|
||||
ASSERT_FALSE(res.empty());
|
||||
ASSERT_TRUE(ra.signal_poll_called);
|
||||
ASSERT_EQ(res.size(), 3);
|
||||
|
||||
EXPECT_EQ(res[0].interface, "wlan0");
|
||||
EXPECT_EQ(res[0].network_id, 0);
|
||||
EXPECT_EQ(res[0].ssid, "");
|
||||
EXPECT_FALSE(res[0].connected);
|
||||
EXPECT_EQ(res[0].signal_level, -100);
|
||||
|
||||
EXPECT_EQ(res[1].interface, "wlan0");
|
||||
EXPECT_EQ(res[1].network_id, 1);
|
||||
EXPECT_EQ(res[1].ssid, "PlusnetWireless");
|
||||
EXPECT_TRUE(res[1].connected);
|
||||
EXPECT_EQ(res[1].signal_level, -73);
|
||||
|
||||
EXPECT_EQ(res[2].interface, "wlan0");
|
||||
EXPECT_EQ(res[2].network_id, 2);
|
||||
EXPECT_EQ(res[2].ssid, "HiddenNet");
|
||||
EXPECT_FALSE(res[2].connected);
|
||||
EXPECT_EQ(res[2].signal_level, -100);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// is_wifi_interface()
|
||||
// not tested as it is checking for files in /proc so depends on the
|
||||
// machine the tests are running on
|
||||
|
||||
} // namespace
|
||||
Reference in New Issue
Block a user