From aa45859ebadf21f9dcc90577ddd8f9cb6acf9df7 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Fri, 4 Apr 2014 22:50:46 +0300 Subject: [PATCH] tests: Extend wpas_ctrl_cred to cover most cred block operations This verifies the new cred modification events and GET_CRED. Signed-off-by: Jouni Malinen --- tests/hwsim/test_wpas_ctrl.py | 123 +++++++++++++++++++++++++++++----- tests/hwsim/wpasupplicant.py | 3 + 2 files changed, 109 insertions(+), 17 deletions(-) diff --git a/tests/hwsim/test_wpas_ctrl.py b/tests/hwsim/test_wpas_ctrl.py index 2daa3dc5e..553a707ff 100644 --- a/tests/hwsim/test_wpas_ctrl.py +++ b/tests/hwsim/test_wpas_ctrl.py @@ -167,18 +167,55 @@ def test_wpas_ctrl_network(dev): if "FAIL" not in dev[0].request('SET_NETWORK ' + str(id) + ' pairwise WEP40'): raise Exception("Invalid pairwise accepted") +def add_cred(dev): + id = dev.add_cred() + ev = dev.wait_event(["CRED-ADDED"]) + if ev is None: + raise Exception("Missing CRED-ADDED event") + if " " + str(id) not in ev: + raise Exception("CRED-ADDED event without matching id") + return id + +def set_cred(dev, id, field, value): + dev.set_cred(id, field, value) + ev = dev.wait_event(["CRED-MODIFIED"]) + if ev is None: + raise Exception("Missing CRED-MODIFIED event") + if " " + str(id) + " " not in ev: + raise Exception("CRED-MODIFIED event without matching id") + if field not in ev: + raise Exception("CRED-MODIFIED event without matching field") + +def set_cred_quoted(dev, id, field, value): + dev.set_cred_quoted(id, field, value) + ev = dev.wait_event(["CRED-MODIFIED"]) + if ev is None: + raise Exception("Missing CRED-MODIFIED event") + if " " + str(id) + " " not in ev: + raise Exception("CRED-MODIFIED event without matching id") + if field not in ev: + raise Exception("CRED-MODIFIED event without matching field") + +def remove_cred(dev, id): + dev.remove_cred(id) + ev = dev.wait_event(["CRED-REMOVED"]) + if ev is None: + raise Exception("Missing CRED-REMOVED event") + if " " + str(id) not in ev: + raise Exception("CRED-REMOVED event without matching id") + 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") + id1 = add_cred(dev[0]) + id = add_cred(dev[0]) + id2 = add_cred(dev[0]) + set_cred(dev[0], id, "temporary", "1") + set_cred(dev[0], id, "priority", "1") + set_cred(dev[0], id, "pcsc", "1") + set_cred_quoted(dev[0], id, "private_key_passwd", "test") + set_cred_quoted(dev[0], id, "domain_suffix_match", "test") + set_cred_quoted(dev[0], id, "phase1", "test") + set_cred_quoted(dev[0], id, "phase2", "test") if "FAIL" not in dev[0].request("SET_CRED " + str(id) + " eap FOO"): raise Exception("Unexpected success on unknown EAP method") @@ -197,17 +234,69 @@ def test_wpas_ctrl_cred(dev): 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() + id3 = add_cred(dev[0]) + id4 = add_cred(dev[0]) - 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) + remove_cred(dev[0], id1) + remove_cred(dev[0], id3) + remove_cred(dev[0], id4) + remove_cred(dev[0], id2) + remove_cred(dev[0], id) if "FAIL" not in dev[0].request("REMOVE_CRED 1"): raise Exception("Unexpected success on invalid remove cred") + id = add_cred(dev[0]) + values = [ ("temporary", "1", False), + ("temporary", "0", False), + ("pcsc", "1", False), + ("realm", "example.com", True), + ("username", "user@example.com", True), + ("password", "foo", True, "*"), + ("ca_cert", "ca.pem", True), + ("client_cert", "user.pem", True), + ("private_key", "key.pem", True), + ("private_key_passwd", "foo", True, "*"), + ("imsi", "310026-000000000", True), + ("milenage", "foo", True, "*"), + ("domain_suffix_match", "example.com", True), + ("domain", "example.com", True), + ("domain", "example.org", True, "example.com\nexample.org"), + ("roaming_consortium", "0123456789", False), + ("required_roaming_consortium", "456789", False), + ("eap", "TTLS", False), + ("phase1", "foo=bar1", True), + ("phase2", "foo=bar2", True), + ("excluded_ssid", "test", True), + ("excluded_ssid", "foo", True, "test\nfoo"), + ("roaming_partner", "example.com,0,4,*", True), + ("roaming_partner", "example.org,1,2,US", True, + "example.com,0,4,*\nexample.org,1,2,US"), + ("update_identifier", "4", False), + ("provisioning_sp", "sp.example.com", True), + ("sp_priority", "7", False), + ("min_dl_bandwidth_home", "100", False), + ("min_ul_bandwidth_home", "101", False), + ("min_dl_bandwidth_roaming", "102", False), + ("min_ul_bandwidth_roaming", "103", False), + ("max_bss_load", "57", False), + ("req_conn_capab", "6:22,80,443", False), + ("req_conn_capab", "17:500", False, "6:22,80,443\n17:500"), + ("req_conn_capab", "50", False, "6:22,80,443\n17:500\n50"), + ("ocsp", "1", False) ] + for v in values: + if v[2]: + set_cred_quoted(dev[0], id, v[0], v[1]) + else: + set_cred(dev[0], id, v[0], v[1]) + val = dev[0].get_cred(id, v[0]) + if len(v) == 4: + expect = v[3] + else: + expect = v[1] + if val != expect: + raise Exception("Unexpected GET_CRED value for {}: {} != {}".format(v[0], val, expect)) + remove_cred(dev[0], id) + def test_wpas_ctrl_pno(dev): """wpa_supplicant ctrl_iface pno""" if "FAIL" not in dev[0].request("SET pno 1"): diff --git a/tests/hwsim/wpasupplicant.py b/tests/hwsim/wpasupplicant.py index 49ab9cc5a..8a2a3fb88 100644 --- a/tests/hwsim/wpasupplicant.py +++ b/tests/hwsim/wpasupplicant.py @@ -206,6 +206,9 @@ class WpaSupplicant: raise Exception("SET_CRED failed") return None + def get_cred(self, id, field): + return self.request("GET_CRED " + str(id) + " " + field) + def add_cred_values(self, params): id = self.add_cred()