From ca5b81a5bbc935ea32bdc4495d92636da09f43e7 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Tue, 4 Feb 2014 00:08:18 +0200 Subject: [PATCH] tests: wpa_supplicant ctrl_iface Signed-hostap: Jouni Malinen --- tests/hwsim/test_wpas_ctrl.py | 184 ++++++++++++++++++++++++++++++++++ tests/hwsim/wpasupplicant.py | 6 ++ 2 files changed, 190 insertions(+) create mode 100644 tests/hwsim/test_wpas_ctrl.py diff --git a/tests/hwsim/test_wpas_ctrl.py b/tests/hwsim/test_wpas_ctrl.py new file mode 100644 index 000000000..c328f73e6 --- /dev/null +++ b/tests/hwsim/test_wpas_ctrl.py @@ -0,0 +1,184 @@ +#!/usr/bin/python +# +# wpa_supplicant control interface +# Copyright (c) 2014, Qualcomm Atheros, Inc. +# +# This software may be distributed under the terms of the BSD license. +# See README for more details. + +def test_wpas_ctrl_network(dev): + """wpa_supplicant ctrl_iface network set/get""" + id = dev[0].add_network() + + tests = (("key_mgmt", "WPA-PSK WPA-EAP IEEE8021X NONE WPA-NONE FT-PSK FT-EAP WPA-PSK-SHA256 WPA-EAP-SHA256"), + ("pairwise", "CCMP-256 GCMP-256 CCMP GCMP TKIP"), + ("group", "CCMP-256 GCMP-256 CCMP GCMP TKIP WEP104 WEP40"), + ("auth_alg", "OPEN SHARED LEAP"), + ("scan_freq", "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"), + ("freq_list", "2412 2417"), + ("eap", "TLS"), + ("go_p2p_dev_addr", "22:33:44:55:66:aa"), + ("p2p_client_list", "22:33:44:55:66:bb 02:11:22:33:44:55")) + + dev[0].set_network_quoted(id, "ssid", "test") + for field, value in tests: + dev[0].set_network(id, field, value) + res = dev[0].get_network(id, field) + if res != value: + raise Exception("Unexpected response for '" + field + "': '" + res + "'") + + q_tests = (("identity", "hello"), + ("anonymous_identity", "foo@nowhere.com")) + for field, value in q_tests: + dev[0].set_network_quoted(id, field, value) + res = dev[0].get_network(id, field) + if res != '"' + value + '"': + raise Exception("Unexpected quoted response for '" + field + "': '" + res + "'") + + get_tests = (("foo", None), ("ssid", '"test"')) + for field, value in get_tests: + res = dev[0].get_network(id, field) + if res != value: + raise Exception("Unexpected response for '" + field + "': '" + res + "'") + + if dev[0].get_network(id, "password"): + raise Exception("Unexpected response for 'password'") + dev[0].set_network_quoted(id, "password", "foo") + if dev[0].get_network(id, "password") != '*': + raise Exception("Unexpected response for 'password' (expected *)") + dev[0].set_network(id, "password", "hash:12345678901234567890123456789012") + if dev[0].get_network(id, "password") != '*': + raise Exception("Unexpected response for 'password' (expected *)") + dev[0].set_network(id, "password", "NULL") + if dev[0].get_network(id, "password"): + raise Exception("Unexpected response for 'password'") + if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + " password hash:12"): + raise Exception("Unexpected success for invalid password hash") + if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + " password hash:123456789012345678x0123456789012"): + raise Exception("Unexpected success for invalid password hash") + + dev[0].set_network(id, "identity", "414243") + if dev[0].get_network(id, "identity") != '"ABC"': + raise Exception("Unexpected identity hex->text response") + + dev[0].set_network(id, "identity", 'P"abc\ndef"') + if dev[0].get_network(id, "identity") != "6162630a646566": + raise Exception("Unexpected identity printf->hex response") + + if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' identity P"foo'): + raise Exception("Unexpected success for invalid identity string") + + if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' identity 12x3'): + raise Exception("Unexpected success for invalid identity string") + + for i in range(0, 4): + if "FAIL" in dev[0].request("SET_NETWORK " + str(id) + ' wep_key' + str(i) + ' aabbccddee'): + raise Exception("Unexpected wep_key set failure") + if dev[0].get_network(id, "wep_key" + str(i)) != '*': + raise Exception("Unexpected wep_key get failure") + + if "FAIL" in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'): + raise Exception("Unexpected failure for psk_list string") + + if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list 00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'): + raise Exception("Unexpected success for invalid psk_list string") + + if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'): + raise Exception("Unexpected success for invalid psk_list string") + + if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:22:33:44:55+0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'): + raise Exception("Unexpected success for invalid psk_list string") + + if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde'): + raise Exception("Unexpected success for invalid psk_list string") + + if "FAIL" not in dev[0].request("SET_NETWORK " + str(id) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdex'): + raise Exception("Unexpected success for invalid psk_list string") + + if dev[0].get_network(id, "psk_list"): + raise Exception("Unexpected psk_list get response") + +def test_wpas_ctrl_cred(dev): + """wpa_supplicant ctrl_iface cred set""" + id1 = dev[0].add_cred() + id = dev[0].add_cred() + id2 = dev[0].add_cred() + dev[0].set_cred(id, "temporary", "1") + dev[0].set_cred(id, "priority", "1") + dev[0].set_cred(id, "pcsc", "1") + dev[0].set_cred_quoted(id, "private_key_passwd", "test") + dev[0].set_cred_quoted(id, "domain_suffix_match", "test") + dev[0].set_cred_quoted(id, "phase1", "test") + dev[0].set_cred_quoted(id, "phase2", "test") + + if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " eap FOO"): + raise Exception("Unexpected success on unknown EAP method") + + if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " username 12xa"): + raise Exception("Unexpected success on invalid string") + + for i in ("11", "1122", "112233445566778899aabbccddeeff00"): + if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " roaming_consortium " + i): + raise Exception("Unexpected success on invalid roaming_consortium") + + dev[0].set_cred(id, "excluded_ssid", "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff") + if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " excluded_ssid 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00"): + raise Exception("Unexpected success on invalid excluded_ssid") + + if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " foo 4142"): + raise Exception("Unexpected success on unknown field") + + id3 = dev[0].add_cred() + id4 = dev[0].add_cred() + + dev[0].remove_cred(id1) + dev[0].remove_cred(id3) + dev[0].remove_cred(id4) + dev[0].remove_cred(id2) + dev[0].remove_cred(id) + if "FAIL" not in dev[0].request("REMOVE_CRED 1"): + raise Exception("Unexpected success on invalid remove cred") + +def test_wpas_ctrl_pno(dev): + """wpa_supplicant ctrl_iface pno""" + if "FAIL" not in dev[0].request("SET pno 1"): + raise Exception("Unexpected success in enabling PNO without enabled network blocks") + id = dev[0].add_network() + dev[0].set_network_quoted(id, "ssid", "test") + dev[0].set_network(id, "key_mgmt", "NONE") + dev[0].request("ENABLE_NETWORK " + str(id) + " no-connect") + #mac80211_hwsim does not yet support PNO, so this fails + if "FAIL" not in dev[0].request("SET pno 1"): + raise Exception("Unexpected success in enabling PNO") + if "FAIL" in dev[0].request("SET pno 0"): + raise Exception("Unexpected failure in disabling PNO") + +def test_wpas_ctrl_get(dev): + """wpa_supplicant ctrl_iface get""" + if "FAIL" in dev[0].request("GET version"): + raise Exception("Unexpected get failure for version") + if "FAIL" in dev[0].request("GET wifi_display"): + raise Exception("Unexpected get failure for wifi_display") + if "FAIL" not in dev[0].request("GET foo"): + raise Exception("Unexpected success on get command") + +def test_wpas_ctrl_preauth(dev): + """wpa_supplicant ctrl_iface preauth""" + if "FAIL" not in dev[0].request("PREAUTH "): + raise Exception("Unexpected success on invalid PREAUTH") + if "FAIL" in dev[0].request("PREAUTH 00:11:22:33:44:55"): + raise Exception("Unexpected failure on PREAUTH") + +def test_wpas_ctrl_stkstart(dev): + """wpa_supplicant ctrl_iface strkstart""" + if "FAIL" not in dev[0].request("STKSTART "): + raise Exception("Unexpected success on invalid STKSTART") + if "FAIL" not in dev[0].request("STKSTART 00:11:22:33:44:55"): + raise Exception("Unexpected success on STKSTART") + +def test_wpas_ctrl_tdls_discover(dev): + """wpa_supplicant ctrl_iface tdls_discover""" + if "FAIL" not in dev[0].request("TDLS_DISCOVER "): + raise Exception("Unexpected success on invalid TDLS_DISCOVER") + if "FAIL" not in dev[0].request("TDLS_DISCOVER 00:11:22:33:44:55"): + raise Exception("Unexpected success on TDLS_DISCOVER") diff --git a/tests/hwsim/wpasupplicant.py b/tests/hwsim/wpasupplicant.py index 06442dd34..26a49d5bf 100644 --- a/tests/hwsim/wpasupplicant.py +++ b/tests/hwsim/wpasupplicant.py @@ -142,6 +142,12 @@ class WpaSupplicant: raise Exception("REMOVE_NETWORK failed") return None + def get_network(self, id, field): + res = self.request("GET_NETWORK " + str(id) + " " + field) + if res == "FAIL\n": + return None + return res + def set_network(self, id, field, value): res = self.request("SET_NETWORK " + str(id) + " " + field + " " + value) if "FAIL" in res: