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