update changelog
[debian/iodine.git] / tests / encoding.c
1 /*
2  * Copyright (c) 2006-2009 Bjorn Andersson <flex@kryo.se>, Erik Ekman <yarrick@kryo.se>
3  *
4  * Permission to use, copy, modify, and distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 #include <check.h>
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <string.h>
21
22 #include "encoding.h"
23 #include "test.h"
24 #include "base32.h"
25 #include "base64.h"
26
27 #define TUPLES 4
28
29 static struct tuple
30 {
31         char *a;
32         char *b;
33 } dottests[] = {
34         { "aaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
35           "aaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaa"},
36         { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
37           "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa."},
38         { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
39           "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
40         { "abc123", "abc123" },
41         { NULL, NULL }
42 };
43
44 START_TEST(test_inline_dotify)
45 {
46         char temp[1024];
47         char *b;
48
49         memset(temp, 0, sizeof(temp));
50         strcpy(temp, dottests[_i].a);
51         b = temp;
52         inline_dotify(b, sizeof(temp));
53
54         fail_unless(strcmp(dottests[_i].b, temp) == 0,
55                         "'%s' != '%s'", temp, dottests[_i].b);
56 }
57 END_TEST
58
59 START_TEST(test_inline_undotify)
60 {
61         char temp[1024];
62         char *b;
63
64         memset(temp, 0, sizeof(temp));
65         strcpy(temp, dottests[_i].b);
66         b = temp;
67         inline_undotify(b, sizeof(temp));
68
69         fail_unless(strcmp(dottests[_i].a, temp) == 0,
70                         "'%s' != '%s'", temp, dottests[_i].a);
71 }
72 END_TEST
73
74 START_TEST(test_build_hostname)
75 {
76         char data[256];
77         char buf[1024];
78         char *topdomain = "a.c";
79         int buflen;
80         int i;
81
82         for (i = 0; i < sizeof(data); i++) {
83                 data[i] = i & 0xFF;
84         }
85
86         buflen = sizeof(buf);
87         
88         for (i = 1; i < sizeof(data); i++) {
89                 int len = build_hostname(buf, buflen, data, i, topdomain, get_base32_encoder(), sizeof(buf));
90
91                 fail_if(len > i);
92                 fail_if(strstr(buf, ".."), "Found double dots when encoding data len %d! buf: %s", i, buf);
93         }
94 }
95 END_TEST
96
97 TCase *
98 test_encoding_create_tests()
99 {
100         TCase *tc;
101
102         tc = tcase_create("Encoding");
103         tcase_add_loop_test(tc, test_inline_dotify, 0, TUPLES);
104         tcase_add_loop_test(tc, test_inline_undotify, 0, TUPLES);
105         tcase_add_test(tc, test_build_hostname);
106
107         return tc;
108 }