]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
tests: Add module tests for src/common
authorJouni Malinen <j@w1.fi>
Tue, 27 May 2014 21:08:35 +0000 (00:08 +0300)
committerJouni Malinen <j@w1.fi>
Tue, 27 May 2014 21:56:13 +0000 (00:56 +0300)
Signed-off-by: Jouni Malinen <j@w1.fi>
src/common/common_module_tests.c [new file with mode: 0644]
wpa_supplicant/Makefile
wpa_supplicant/wpas_module_tests.c

diff --git a/src/common/common_module_tests.c b/src/common/common_module_tests.c
new file mode 100644 (file)
index 0000000..56b1122
--- /dev/null
@@ -0,0 +1,172 @@
+/*
+ * common module tests
+ * Copyright (c) 2014, Jouni Malinen <j@w1.fi>
+ *
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
+ */
+
+#include "utils/includes.h"
+
+#include "utils/common.h"
+#include "ieee802_11_common.h"
+#include "wpa_common.h"
+
+
+struct ieee802_11_parse_test_data {
+       u8 *data;
+       size_t len;
+       ParseRes result;
+       int count;
+};
+
+static const struct ieee802_11_parse_test_data parse_tests[] = {
+       { (u8 *) "", 0, ParseOK, 0 },
+       { (u8 *) " ", 1, ParseFailed, 0 },
+       { (u8 *) "\xff\x00", 2, ParseUnknown, 1 },
+       { (u8 *) "\xff\x01", 2, ParseFailed, 0 },
+       { (u8 *) "\xdd\x03\x01\x02\x03", 5, ParseUnknown, 1 },
+       { (u8 *) "\xdd\x04\x01\x02\x03\x04", 6, ParseUnknown, 1 },
+       { (u8 *) "\xdd\x04\x00\x50\xf2\x02", 6, ParseUnknown, 1 },
+       { (u8 *) "\xdd\x05\x00\x50\xf2\x02\x02", 7, ParseOK, 1 },
+       { (u8 *) "\xdd\x05\x00\x50\xf2\x02\xff", 7, ParseUnknown, 1 },
+       { (u8 *) "\xdd\x04\x00\x50\xf2\xff", 6, ParseUnknown, 1 },
+       { (u8 *) "\xdd\x04\x50\x6f\x9a\xff", 6, ParseUnknown, 1 },
+       { (u8 *) "\xdd\x04\x00\x90\x4c\x33", 6, ParseOK, 1 },
+       { (u8 *) "\xdd\x04\x00\x90\x4c\xff\xdd\x04\x00\x90\x4c\x33", 12,
+         ParseUnknown, 2 },
+       { (u8 *) "\x10\x01\x00\x21\x00", 5, ParseOK, 2 },
+       { (u8 *) "\x24\x00", 2, ParseOK, 1 },
+       { (u8 *) "\x38\x00", 2, ParseOK, 1 },
+       { (u8 *) "\x54\x00", 2, ParseOK, 1 },
+       { (u8 *) "\x5a\x00", 2, ParseOK, 1 },
+       { (u8 *) "\x65\x00", 2, ParseOK, 1 },
+       { (u8 *) "\x65\x12\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11",
+         20, ParseOK, 1 },
+       { (u8 *) "\x6e\x00", 2, ParseOK, 1 },
+       { (u8 *) "\xc7\x00", 2, ParseOK, 1 },
+       { (u8 *) "\xc7\x01\x00", 3, ParseOK, 1 },
+       { NULL, 0, ParseOK, 0 }
+};
+
+static int ieee802_11_parse_tests(void)
+{
+       int i, ret = 0;
+
+       wpa_printf(MSG_INFO, "ieee802_11_parse tests");
+
+       for (i = 0; parse_tests[i].data; i++) {
+               const struct ieee802_11_parse_test_data *test;
+               struct ieee802_11_elems elems;
+               ParseRes res;
+
+               test = &parse_tests[i];
+               res = ieee802_11_parse_elems(test->data, test->len, &elems, 1);
+               if (res != test->result ||
+                   ieee802_11_ie_count(test->data, test->len) != test->count) {
+                       wpa_printf(MSG_ERROR, "ieee802_11_parse test %d failed",
+                                  i);
+                       ret = -1;
+               }
+       }
+
+       if (ieee802_11_vendor_ie_concat((const u8 *) "\x00\x01", 2, 0) != NULL)
+       {
+               wpa_printf(MSG_ERROR,
+                          "ieee802_11_vendor_ie_concat test failed");
+               ret = -1;
+       }
+
+       return ret;
+}
+
+
+struct rsn_ie_parse_test_data {
+       u8 *data;
+       size_t len;
+       int result;
+};
+
+static const struct rsn_ie_parse_test_data rsn_parse_tests[] = {
+       { (u8 *) "", 0, -1 },
+       { (u8 *) "\x30\x00", 2, -1 },
+       { (u8 *) "\x30\x02\x01\x00", 4, 0 },
+       { (u8 *) "\x30\x02\x00\x00", 4, -2 },
+       { (u8 *) "\x30\x02\x02\x00", 4, -2 },
+       { (u8 *) "\x30\x02\x00\x01", 4, -2 },
+       { (u8 *) "\x30\x02\x00\x00\x00", 5, -2 },
+       { (u8 *) "\x30\x03\x01\x00\x00", 5, -3 },
+       { (u8 *) "\x30\x06\x01\x00\x00\x00\x00\x00", 8, -1 },
+       { (u8 *) "\x30\x06\x01\x00\x00\x0f\xac\x04", 8, 0 },
+       { (u8 *) "\x30\x07\x01\x00\x00\x0f\xac\x04\x00", 9, -5 },
+       { (u8 *) "\x30\x08\x01\x00\x00\x0f\xac\x04\x00\x00", 10, -4 },
+       { (u8 *) "\x30\x08\x01\x00\x00\x0f\xac\x04\x00\x01", 10, -4 },
+       { (u8 *) "\x30\x0c\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04",
+         14, 0 },
+       { (u8 *) "\x30\x0c\x01\x00\x00\x0f\xac\x04\x00\x01\x00\x0f\xac\x04",
+         14, -4 },
+       { (u8 *) "\x30\x0c\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x06",
+         14, -1 },
+       { (u8 *) "\x30\x10\x01\x00\x00\x0f\xac\x04\x02\x00\x00\x0f\xac\x04\x00\x0f\xac\x08",
+         18, 0 },
+       { (u8 *) "\x30\x0d\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x00",
+         15, -7 },
+       { (u8 *) "\x30\x0e\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x00\x00",
+         16, -6 },
+       { (u8 *) "\x30\x0e\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x00\x01",
+         16, -6 },
+       { (u8 *) "\x30\x12\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01",
+         20, 0 },
+       { (u8 *) "\x30\x16\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x02\x00\x00\x0f\xac\x01\x00\x0f\xac\x02",
+         24, 0 },
+       { (u8 *) "\x30\x13\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00",
+         21, 0 },
+       { (u8 *) "\x30\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00\x00",
+         22, 0 },
+       { (u8 *) "\x30\x16\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00\x00\x00\x00",
+         24, 0 },
+       { (u8 *) "\x30\x16\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00\x00\x00\x01",
+         24, -9 },
+       { (u8 *) "\x30\x1a\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00\x00\x00\x00\x00\x00\x00\x00",
+         28, -10 },
+       { (u8 *) "\x30\x1a\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00\x00\x00\x00\x00\x0f\xac\x06",
+         28, 0 },
+       { (u8 *) "\x30\x1c\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00\x00\x00\x00\x00\x0f\xac\x06\x01\x02",
+         30, 0 },
+       { NULL, 0, 0 }
+};
+
+static int rsn_ie_parse_tests(void)
+{
+       int i, ret = 0;
+
+       wpa_printf(MSG_INFO, "rsn_ie_parse tests");
+
+       for (i = 0; rsn_parse_tests[i].data; i++) {
+               const struct rsn_ie_parse_test_data *test;
+               struct wpa_ie_data data;
+
+               test = &rsn_parse_tests[i];
+               if (wpa_parse_wpa_ie_rsn(test->data, test->len, &data) !=
+                   test->result) {
+                       wpa_printf(MSG_ERROR, "rsn_ie_parse test %d failed", i);
+                       ret = -1;
+               }
+       }
+
+       return ret;
+}
+
+
+int common_module_tests(void)
+{
+       int ret = 0;
+
+       wpa_printf(MSG_INFO, "common module tests");
+
+       if (ieee802_11_parse_tests() < 0 ||
+           rsn_ie_parse_tests() < 0)
+               ret = -1;
+
+       return ret;
+}
index c0913e0ac6685a6396a83a6254838b191595736b..e684555ad4609a3f4022a7c6d6939896deb28b21 100644 (file)
@@ -101,6 +101,7 @@ ifdef CONFIG_MODULE_TESTS
 CFLAGS += -DCONFIG_MODULE_TESTS
 OBJS += wpas_module_tests.o
 OBJS += ../src/utils/utils_module_tests.o
+OBJS += ../src/common/common_module_tests.o
 ifdef CONFIG_WPS
 OBJS += ../src/wps/wps_module_tests.o
 endif
index 38493d43860084d849e0cb92fe1b13c03d5e51aa..e4c83b5861a8571ed986780c312867b505071a0d 100644 (file)
@@ -92,5 +92,11 @@ int wpas_module_tests(void)
                        ret = -1;
        }
 
+       {
+               int common_module_tests(void);
+               if (common_module_tests() < 0)
+                       ret = -1;
+       }
+
        return ret;
 }