From 117caa4a0cbcf333a19c5705f80fabec185307f4 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Wed, 16 Apr 2014 00:27:27 +0300 Subject: [PATCH] tests: wpa_supplicant configuration file reading/writing Signed-off-by: Jouni Malinen --- tests/hwsim/test_wpas_config.py | 111 ++++++++++++++++++++++++++++++++ tests/hwsim/wpasupplicant.py | 4 +- 2 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 tests/hwsim/test_wpas_config.py diff --git a/tests/hwsim/test_wpas_config.py b/tests/hwsim/test_wpas_config.py new file mode 100644 index 000000000..57609dea4 --- /dev/null +++ b/tests/hwsim/test_wpas_config.py @@ -0,0 +1,111 @@ +# wpa_supplicant config file +# Copyright (c) 2014, Jouni Malinen +# +# This software may be distributed under the terms of the BSD license. +# See README for more details. + +import os +import subprocess + +from wpasupplicant import WpaSupplicant + +def check_config(config): + with open(config, "r") as f: + data = f.read() + if "update_config=1\n" not in data: + raise Exception("Missing update_config") + if "device_name=name\n" not in data: + raise Exception("Missing device_name") + if "eapol_version=2\n" not in data: + raise Exception("Missing eapol_version") + if "ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=" not in data: + raise Exception("Missing ctrl_interface") + if "blob-base64-foo={" not in data: + raise Exception("Missing blob") + if "cred={" not in data: + raise Exception("Missing cred") + if "network={" not in data: + raise Exception("Missing network") + return data + +def test_wpas_config_file(dev): + """wpa_supplicant config file parsing/writing""" + config = "/tmp/test_wpas_config_file.conf" + if os.path.exists(config): + subprocess.call(['sudo', 'rm', config]) + + wpas = WpaSupplicant(global_iface='/tmp/wpas-wlan5') + try: + wpas.interface_add("wlan5", config=config) + initialized = True + except: + initialized = False + if initialized: + raise Exception("Missing config file did not result in an error") + + try: + with open(config, "w") as f: + f.write("update_config=1 \t\r\n") + f.write("# foo\n") + f.write("\n") + f.write(" \t\reapol_version=2") + for i in range(0, 100): + f.write(" ") + f.write("foo\n") + f.write("device_name=name#foo\n") + + wpas.interface_add("wlan5", config=config) + + id = wpas.add_network() + wpas.set_network_quoted(id, "ssid", "foo") + wpas.set_network_quoted(id, "psk", "12345678") + wpas.set_network(id, "bssid", "00:11:22:33:44:55") + wpas.set_network(id, "proto", "RSN") + wpas.set_network(id, "key_mgmt", "WPA-PSK-SHA256") + wpas.set_network(id, "pairwise", "CCMP") + wpas.set_network(id, "group", "CCMP") + wpas.set_network(id, "auth_alg", "OPEN") + + id = wpas.add_cred() + wpas.set_cred(id, "priority", "3") + wpas.set_cred(id, "sp_priority", "6") + wpas.set_cred(id, "update_identifier", "4") + wpas.set_cred(id, "ocsp", "1") + wpas.set_cred(id, "eap", "TTLS") + wpas.set_cred(id, "req_conn_capab", "6:1234") + wpas.set_cred_quoted(id, "realm", "example.com") + wpas.set_cred_quoted(id, "provisioning_sp", "example.com") + wpas.set_cred(id, "roaming_consortium", "112233") + wpas.set_cred(id, "required_roaming_consortium", "112233") + wpas.set_cred_quoted(id, "roaming_partner", + "roaming.example.net,1,127,*") + wpas.set_cred_quoted(id, "ca_cert", "/tmp/ca.pem") + wpas.set_cred_quoted(id, "username", "user") + wpas.set_cred_quoted(id, "password", "secret") + ev = wpas.wait_event(["CRED-MODIFIED 0 password"]) + + wpas.request("SET blob foo 12345678") + + if "OK" not in wpas.request("SAVE_CONFIG"): + raise Exception("Failed to save configuration file") + if "OK" not in wpas.global_request("SAVE_CONFIG"): + raise Exception("Failed to save configuration file") + + wpas.interface_remove("wlan5") + data1 = check_config(config) + + wpas.interface_add("wlan5", config=config) + if len(wpas.list_networks()) != 1: + raise Exception("Unexpected number of networks") + if len(wpas.request("LIST_CREDS").splitlines()) != 2: + raise Exception("Unexpected number of credentials") + + if "OK" not in wpas.request("SAVE_CONFIG"): + raise Exception("Failed to save configuration file") + data2 = check_config(config) + + if data1 != data2: + raise Esception("Unexpected configuration change") + + finally: + subprocess.call(['sudo', 'rm', config]) diff --git a/tests/hwsim/wpasupplicant.py b/tests/hwsim/wpasupplicant.py index c46054a21..18c2c62c8 100644 --- a/tests/hwsim/wpasupplicant.py +++ b/tests/hwsim/wpasupplicant.py @@ -43,13 +43,13 @@ class WpaSupplicant: self.ctrl = None self.ifname = None - def interface_add(self, ifname, driver="nl80211", drv_params=None): + def interface_add(self, ifname, config="", driver="nl80211", drv_params=None): try: groups = subprocess.check_output(["id"]) group = "admin" if "(admin)" in groups else "adm" except Exception, e: group = "admin" - cmd = "INTERFACE_ADD " + ifname + "\t\t" + driver + "\tDIR=/var/run/wpa_supplicant GROUP=" + group + cmd = "INTERFACE_ADD " + ifname + "\t" + config + "\t" + driver + "\tDIR=/var/run/wpa_supplicant GROUP=" + group if drv_params: cmd = cmd + '\t' + drv_params if "FAIL" in self.global_request(cmd):