common_module_tests.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*
  2. * common module tests
  3. * Copyright (c) 2014, Jouni Malinen <j@w1.fi>
  4. *
  5. * This software may be distributed under the terms of the BSD license.
  6. * See README for more details.
  7. */
  8. #include "utils/includes.h"
  9. #include "utils/common.h"
  10. #include "ieee802_11_common.h"
  11. #include "wpa_common.h"
  12. struct ieee802_11_parse_test_data {
  13. u8 *data;
  14. size_t len;
  15. ParseRes result;
  16. int count;
  17. };
  18. static const struct ieee802_11_parse_test_data parse_tests[] = {
  19. { (u8 *) "", 0, ParseOK, 0 },
  20. { (u8 *) " ", 1, ParseFailed, 0 },
  21. { (u8 *) "\xff\x00", 2, ParseUnknown, 1 },
  22. { (u8 *) "\xff\x01", 2, ParseFailed, 0 },
  23. { (u8 *) "\xdd\x03\x01\x02\x03", 5, ParseUnknown, 1 },
  24. { (u8 *) "\xdd\x04\x01\x02\x03\x04", 6, ParseUnknown, 1 },
  25. { (u8 *) "\xdd\x04\x00\x50\xf2\x02", 6, ParseUnknown, 1 },
  26. { (u8 *) "\xdd\x05\x00\x50\xf2\x02\x02", 7, ParseOK, 1 },
  27. { (u8 *) "\xdd\x05\x00\x50\xf2\x02\xff", 7, ParseUnknown, 1 },
  28. { (u8 *) "\xdd\x04\x00\x50\xf2\xff", 6, ParseUnknown, 1 },
  29. { (u8 *) "\xdd\x04\x50\x6f\x9a\xff", 6, ParseUnknown, 1 },
  30. { (u8 *) "\xdd\x04\x00\x90\x4c\x33", 6, ParseOK, 1 },
  31. { (u8 *) "\xdd\x04\x00\x90\x4c\xff\xdd\x04\x00\x90\x4c\x33", 12,
  32. ParseUnknown, 2 },
  33. { (u8 *) "\x10\x01\x00\x21\x00", 5, ParseOK, 2 },
  34. { (u8 *) "\x24\x00", 2, ParseOK, 1 },
  35. { (u8 *) "\x38\x00", 2, ParseOK, 1 },
  36. { (u8 *) "\x54\x00", 2, ParseOK, 1 },
  37. { (u8 *) "\x5a\x00", 2, ParseOK, 1 },
  38. { (u8 *) "\x65\x00", 2, ParseOK, 1 },
  39. { (u8 *) "\x65\x12\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11",
  40. 20, ParseOK, 1 },
  41. { (u8 *) "\x6e\x00", 2, ParseOK, 1 },
  42. { (u8 *) "\xc7\x00", 2, ParseOK, 1 },
  43. { (u8 *) "\xc7\x01\x00", 3, ParseOK, 1 },
  44. { NULL, 0, ParseOK, 0 }
  45. };
  46. static int ieee802_11_parse_tests(void)
  47. {
  48. int i, ret = 0;
  49. wpa_printf(MSG_INFO, "ieee802_11_parse tests");
  50. for (i = 0; parse_tests[i].data; i++) {
  51. const struct ieee802_11_parse_test_data *test;
  52. struct ieee802_11_elems elems;
  53. ParseRes res;
  54. test = &parse_tests[i];
  55. res = ieee802_11_parse_elems(test->data, test->len, &elems, 1);
  56. if (res != test->result ||
  57. ieee802_11_ie_count(test->data, test->len) != test->count) {
  58. wpa_printf(MSG_ERROR, "ieee802_11_parse test %d failed",
  59. i);
  60. ret = -1;
  61. }
  62. }
  63. if (ieee802_11_vendor_ie_concat((const u8 *) "\x00\x01", 2, 0) != NULL)
  64. {
  65. wpa_printf(MSG_ERROR,
  66. "ieee802_11_vendor_ie_concat test failed");
  67. ret = -1;
  68. }
  69. return ret;
  70. }
  71. struct rsn_ie_parse_test_data {
  72. u8 *data;
  73. size_t len;
  74. int result;
  75. };
  76. static const struct rsn_ie_parse_test_data rsn_parse_tests[] = {
  77. { (u8 *) "", 0, -1 },
  78. { (u8 *) "\x30\x00", 2, -1 },
  79. { (u8 *) "\x30\x02\x01\x00", 4, 0 },
  80. { (u8 *) "\x30\x02\x00\x00", 4, -2 },
  81. { (u8 *) "\x30\x02\x02\x00", 4, -2 },
  82. { (u8 *) "\x30\x02\x00\x01", 4, -2 },
  83. { (u8 *) "\x30\x02\x00\x00\x00", 5, -2 },
  84. { (u8 *) "\x30\x03\x01\x00\x00", 5, -3 },
  85. { (u8 *) "\x30\x06\x01\x00\x00\x00\x00\x00", 8, -1 },
  86. { (u8 *) "\x30\x06\x01\x00\x00\x0f\xac\x04", 8, 0 },
  87. { (u8 *) "\x30\x07\x01\x00\x00\x0f\xac\x04\x00", 9, -5 },
  88. { (u8 *) "\x30\x08\x01\x00\x00\x0f\xac\x04\x00\x00", 10, -4 },
  89. { (u8 *) "\x30\x08\x01\x00\x00\x0f\xac\x04\x00\x01", 10, -4 },
  90. { (u8 *) "\x30\x0c\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04",
  91. 14, 0 },
  92. { (u8 *) "\x30\x0c\x01\x00\x00\x0f\xac\x04\x00\x01\x00\x0f\xac\x04",
  93. 14, -4 },
  94. { (u8 *) "\x30\x0c\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x06",
  95. 14, -1 },
  96. { (u8 *) "\x30\x10\x01\x00\x00\x0f\xac\x04\x02\x00\x00\x0f\xac\x04\x00\x0f\xac\x08",
  97. 18, 0 },
  98. { (u8 *) "\x30\x0d\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x00",
  99. 15, -7 },
  100. { (u8 *) "\x30\x0e\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x00\x00",
  101. 16, -6 },
  102. { (u8 *) "\x30\x0e\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x00\x01",
  103. 16, -6 },
  104. { (u8 *) "\x30\x12\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01",
  105. 20, 0 },
  106. { (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",
  107. 24, 0 },
  108. { (u8 *) "\x30\x13\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00",
  109. 21, 0 },
  110. { (u8 *) "\x30\x14\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x04\x01\x00\x00\x0f\xac\x01\x00\x00",
  111. 22, 0 },
  112. { (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",
  113. 24, 0 },
  114. { (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",
  115. 24, -9 },
  116. { (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",
  117. 28, -10 },
  118. { (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",
  119. 28, 0 },
  120. { (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",
  121. 30, 0 },
  122. { NULL, 0, 0 }
  123. };
  124. static int rsn_ie_parse_tests(void)
  125. {
  126. int i, ret = 0;
  127. wpa_printf(MSG_INFO, "rsn_ie_parse tests");
  128. for (i = 0; rsn_parse_tests[i].data; i++) {
  129. const struct rsn_ie_parse_test_data *test;
  130. struct wpa_ie_data data;
  131. test = &rsn_parse_tests[i];
  132. if (wpa_parse_wpa_ie_rsn(test->data, test->len, &data) !=
  133. test->result) {
  134. wpa_printf(MSG_ERROR, "rsn_ie_parse test %d failed", i);
  135. ret = -1;
  136. }
  137. }
  138. return ret;
  139. }
  140. int common_module_tests(void)
  141. {
  142. int ret = 0;
  143. wpa_printf(MSG_INFO, "common module tests");
  144. if (ieee802_11_parse_tests() < 0 ||
  145. rsn_ie_parse_tests() < 0)
  146. ret = -1;
  147. return ret;
  148. }