LCOV - code coverage report
Current view: top level - src/utils - utils_module_tests.c (source / functions) Hit Total Coverage
Test: wpa_supplicant/hostapd combined for hwsim test run 1401264779 Lines: 99 135 73.3 %
Date: 2014-05-28 Functions: 6 6 100.0 %

          Line data    Source code
       1             : /*
       2             :  * utils 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             : 
       9             : #include "utils/includes.h"
      10             : 
      11             : #include "utils/common.h"
      12             : #include "utils/bitfield.h"
      13             : #include "utils/ext_password.h"
      14             : #include "utils/trace.h"
      15             : 
      16             : 
      17             : struct printf_test_data {
      18             :         u8 *data;
      19             :         size_t len;
      20             :         char *encoded;
      21             : };
      22             : 
      23             : static const struct printf_test_data printf_tests[] = {
      24             :         { (u8 *) "abcde", 5, "abcde" },
      25             :         { (u8 *) "a\0b\nc\ed\re\tf\"\\", 13, "a\\0b\\nc\\ed\\re\\tf\\\"\\\\" },
      26             :         { (u8 *) "\x00\x31\x00\x32\x00\x39", 6, "\\x001\\0002\\09" },
      27             :         { (u8 *) "\n\n\n", 3, "\n\12\x0a" },
      28             :         { (u8 *) "\303\245\303\244\303\266\303\205\303\204\303\226", 12,
      29             :           "\\xc3\\xa5\xc3\\xa4\\xc3\\xb6\\xc3\\x85\\xc3\\x84\\xc3\\x96" },
      30             :         { (u8 *) "\303\245\303\244\303\266\303\205\303\204\303\226", 12,
      31             :           "\\303\\245\\303\\244\\303\\266\\303\\205\\303\\204\\303\\226" },
      32             :         { (u8 *) "\xe5\xe4\xf6\xc5\xc4\xd6", 6,
      33             :           "\\xe5\\xe4\\xf6\\xc5\\xc4\\xd6" },
      34             :         { NULL, 0, NULL }
      35             : };
      36             : 
      37             : 
      38           1 : static int printf_encode_decode_tests(void)
      39             : {
      40             :         int i;
      41             :         size_t binlen;
      42             :         char buf[100];
      43             :         u8 bin[100];
      44           1 :         int errors = 0;
      45             : 
      46           1 :         wpa_printf(MSG_INFO, "printf encode/decode tests");
      47             : 
      48           8 :         for (i = 0; printf_tests[i].data; i++) {
      49           7 :                 const struct printf_test_data *test = &printf_tests[i];
      50           7 :                 printf_encode(buf, sizeof(buf), test->data, test->len);
      51           7 :                 wpa_printf(MSG_INFO, "%d: -> \"%s\"", i, buf);
      52             : 
      53           7 :                 binlen = printf_decode(bin, sizeof(bin), buf);
      54          14 :                 if (binlen != test->len ||
      55           7 :                     os_memcmp(bin, test->data, binlen) != 0) {
      56           0 :                         wpa_hexdump(MSG_ERROR, "Error in decoding#1",
      57             :                                     bin, binlen);
      58           0 :                         errors++;
      59             :                 }
      60             : 
      61           7 :                 binlen = printf_decode(bin, sizeof(bin), test->encoded);
      62          14 :                 if (binlen != test->len ||
      63           7 :                     os_memcmp(bin, test->data, binlen) != 0) {
      64           0 :                         wpa_hexdump(MSG_ERROR, "Error in decoding#2",
      65             :                                     bin, binlen);
      66           0 :                         errors++;
      67             :                 }
      68             :         }
      69             : 
      70           1 :         if (errors) {
      71           0 :                 wpa_printf(MSG_ERROR, "%d printf test(s) failed", errors);
      72           0 :                 return -1;
      73             :         }
      74             : 
      75           1 :         return 0;
      76             : }
      77             : 
      78             : 
      79           1 : static int bitfield_tests(void)
      80             : {
      81             :         struct bitfield *bf;
      82             :         int i;
      83           1 :         int errors = 0;
      84             : 
      85           1 :         wpa_printf(MSG_INFO, "bitfield tests");
      86             : 
      87           1 :         bf = bitfield_alloc(123);
      88           1 :         if (bf == NULL)
      89           0 :                 return -1;
      90             : 
      91         124 :         for (i = 0; i < 123; i++) {
      92         123 :                 if (bitfield_is_set(bf, i) || bitfield_is_set(bf, i + 1))
      93           0 :                         errors++;
      94         123 :                 if (i > 0 && bitfield_is_set(bf, i - 1))
      95           0 :                         errors++;
      96         123 :                 bitfield_set(bf, i);
      97         123 :                 if (!bitfield_is_set(bf, i))
      98           0 :                         errors++;
      99         123 :                 bitfield_clear(bf, i);
     100         123 :                 if (bitfield_is_set(bf, i))
     101           0 :                         errors++;
     102             :         }
     103             : 
     104          78 :         for (i = 123; i < 200; i++) {
     105          77 :                 if (bitfield_is_set(bf, i) || bitfield_is_set(bf, i + 1))
     106           0 :                         errors++;
     107          77 :                 if (i > 0 && bitfield_is_set(bf, i - 1))
     108           0 :                         errors++;
     109          77 :                 bitfield_set(bf, i);
     110          77 :                 if (bitfield_is_set(bf, i))
     111           0 :                         errors++;
     112          77 :                 bitfield_clear(bf, i);
     113          77 :                 if (bitfield_is_set(bf, i))
     114           0 :                         errors++;
     115             :         }
     116             : 
     117         124 :         for (i = 0; i < 123; i++) {
     118         123 :                 if (bitfield_is_set(bf, i) || bitfield_is_set(bf, i + 1))
     119           0 :                         errors++;
     120         123 :                 bitfield_set(bf, i);
     121         123 :                 if (!bitfield_is_set(bf, i))
     122           0 :                         errors++;
     123             :         }
     124             : 
     125         124 :         for (i = 0; i < 123; i++) {
     126         123 :                 if (!bitfield_is_set(bf, i))
     127           0 :                         errors++;
     128         123 :                 bitfield_clear(bf, i);
     129         123 :                 if (bitfield_is_set(bf, i))
     130           0 :                         errors++;
     131             :         }
     132             : 
     133         124 :         for (i = 0; i < 123; i++) {
     134         123 :                 if (bitfield_get_first_zero(bf) != i)
     135           0 :                         errors++;
     136         123 :                 bitfield_set(bf, i);
     137             :         }
     138           1 :         if (bitfield_get_first_zero(bf) != -1)
     139           0 :                 errors++;
     140         124 :         for (i = 0; i < 123; i++) {
     141         123 :                 if (!bitfield_is_set(bf, i))
     142           0 :                         errors++;
     143         123 :                 bitfield_clear(bf, i);
     144         123 :                 if (bitfield_get_first_zero(bf) != i)
     145           0 :                         errors++;
     146         123 :                 bitfield_set(bf, i);
     147             :         }
     148           1 :         if (bitfield_get_first_zero(bf) != -1)
     149           0 :                 errors++;
     150             : 
     151           1 :         bitfield_free(bf);
     152             : 
     153           1 :         if (errors) {
     154           0 :                 wpa_printf(MSG_ERROR, "%d bitfield test(s) failed", errors);
     155           0 :                 return -1;
     156             :         }
     157             : 
     158           1 :         return 0;
     159             : }
     160             : 
     161             : 
     162           1 : static int int_array_tests(void)
     163             : {
     164           1 :         int test1[] = { 1, 2, 3, 4, 5, 6, 0 };
     165           1 :         int test2[] = { 1, -1, 0 };
     166           1 :         int test3[] = { 1, 1, 1, -1, 2, 3, 4, 1, 2, 0 };
     167           1 :         int test3_res[] = { -1, 1, 2, 3, 4, 0 };
     168           1 :         int errors = 0;
     169             :         int len;
     170             : 
     171           1 :         wpa_printf(MSG_INFO, "int_array tests");
     172             : 
     173           2 :         if (int_array_len(test1) != 6 ||
     174           1 :             int_array_len(test2) != 2)
     175           0 :                 errors++;
     176             : 
     177           1 :         int_array_sort_unique(test3);
     178           1 :         len = int_array_len(test3_res);
     179           1 :         if (int_array_len(test3) != len)
     180           0 :                 errors++;
     181           1 :         else if (os_memcmp(test3, test3_res, len * sizeof(int)) != 0)
     182           0 :                 errors++;
     183             : 
     184           1 :         if (errors) {
     185           0 :                 wpa_printf(MSG_ERROR, "%d int_array test(s) failed", errors);
     186           0 :                 return -1;
     187             :         }
     188             : 
     189           1 :         return 0;
     190             : }
     191             : 
     192             : 
     193           1 : static int ext_password_tests(void)
     194             : {
     195             :         struct ext_password_data *data;
     196           1 :         int ret = 0;
     197             :         struct wpabuf *pw;
     198             : 
     199           1 :         wpa_printf(MSG_INFO, "ext_password tests");
     200             : 
     201           1 :         data = ext_password_init("unknown", "foo");
     202           1 :         if (data != NULL)
     203           0 :                 return -1;
     204             : 
     205           1 :         data = ext_password_init("test", NULL);
     206           1 :         if (data == NULL)
     207           0 :                 return -1;
     208           1 :         pw = ext_password_get(data, "foo");
     209           1 :         if (pw != NULL)
     210           0 :                 ret = -1;
     211           1 :         ext_password_free(pw);
     212             : 
     213           1 :         ext_password_deinit(data);
     214             : 
     215           1 :         pw = ext_password_get(NULL, "foo");
     216           1 :         if (pw != NULL)
     217           0 :                 ret = -1;
     218           1 :         ext_password_free(pw);
     219             : 
     220           1 :         return ret;
     221             : }
     222             : 
     223             : 
     224           1 : static int trace_tests(void)
     225             : {
     226           1 :         wpa_printf(MSG_INFO, "trace tests");
     227             : 
     228           1 :         wpa_trace_show("test backtrace");
     229           1 :         wpa_trace_dump_funcname("test funcname", trace_tests);
     230             : 
     231           1 :         return 0;
     232             : }
     233             : 
     234             : 
     235           1 : int utils_module_tests(void)
     236             : {
     237           1 :         int ret = 0;
     238             : 
     239           1 :         wpa_printf(MSG_INFO, "utils module tests");
     240             : 
     241           2 :         if (printf_encode_decode_tests() < 0 ||
     242           2 :             ext_password_tests() < 0 ||
     243           2 :             trace_tests() < 0 ||
     244           2 :             bitfield_tests() < 0 ||
     245           1 :             int_array_tests() < 0)
     246           0 :                 ret = -1;
     247             : 
     248           1 :         return ret;
     249             : }

Generated by: LCOV version 1.10