1 /*
2 * This file is part of the Sofia-SIP package
3 *
4 * Copyright (C) 2005 Nokia Corporation.
5 *
6 * Contact: Pekka Pessi <pekka.pessi@nokia.com>
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; either version 2.1 of
11 * the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21 * 02110-1301 USA
22 *
23 */
24
25 /**
26 * @file torture_base64.c
27 * @brief Test BASE64 encoding/decoding
28 *
29 * @author Pekka Pessi <Pekka.Pessi@nokia.com> \n
30 *
31 * @date Created: Tue Feb 1 13:29:09 EET 2005 ppessi
32 *
33 */
34
35 #include "config.h"
36
37 #include <stddef.h>
38 #include <string.h>
39 #include <assert.h>
40 #include <errno.h>
41 #include <stdio.h>
42 #include <stdlib.h>
43
44 #include "sofia-sip/base64.h"
45
46 int tstflags = 0;
47 #define TSTFLAGS tstflags
48
49 char const *name = "torture_base64";
50
51 #include <sofia-sip/tstdef.h>
52
53 char const constant[] = "not changed";
54
test_encoding(void)55 int test_encoding(void)
56 {
57 char buffer[32];
58
59 BEGIN();
60
61 TEST_SIZE(base64_e(buffer, sizeof buffer, "\0\020\203", 3), 4);
62 TEST_S(buffer, "ABCD");
63
64 strcpy(buffer + 5, "not changed");
65 TEST_SIZE(base64_e(buffer, 5, "\0\020\203", 3), 4);
66 TEST_S(buffer + 5, "not changed");
67 TEST_S(buffer, "ABCD");
68
69 strcpy(buffer + 4, "not changed");
70 TEST_SIZE(base64_e(buffer, 4, "\0\020\203", 3), 4);
71 TEST_S(buffer + 4, "not changed");
72 TEST_S(buffer, "ABC");
73
74 strcpy(buffer + 3, "not changed");
75 TEST_SIZE(base64_e(buffer, 3, "\0\020\203", 3), 4);
76 TEST_S(buffer + 3, "not changed");
77 TEST_S(buffer, "AB");
78
79 strcpy(buffer + 2, "not changed");
80 TEST_SIZE(base64_e(buffer, 2, "\0\020\203", 3), 4);
81 TEST_S(buffer + 2, "not changed");
82 TEST_S(buffer, "A");
83
84 strcpy(buffer + 1, "not changed");
85 TEST_SIZE(base64_e(buffer, 1, "\0\020\203", 3), 4);
86 TEST_S(buffer + 1, "not changed");
87 TEST_S(buffer, "");
88
89 strcpy(buffer + 5, "not changed");
90 TEST_SIZE(base64_e(buffer, 5, "\0\020", 2), 4);
91 TEST_S(buffer + 5, "not changed");
92 TEST_S(buffer, "ABA=");
93
94 strcpy(buffer + 4, "not changed");
95 TEST_SIZE(base64_e(buffer, 4, "\0\020", 2), 4);
96 TEST_S(buffer + 4, "not changed");
97 TEST_S(buffer, "ABA");
98
99 strcpy(buffer + 3, "not changed");
100 TEST_SIZE(base64_e(buffer, 3, "\0\020", 2), 4);
101 TEST_S(buffer + 3, "not changed");
102 TEST_S(buffer, "AB");
103
104 strcpy(buffer + 2, "not changed");
105 TEST_SIZE(base64_e(buffer, 2, "\0\020", 2), 4);
106 TEST_S(buffer + 2, "not changed");
107 TEST_S(buffer, "A");
108
109 strcpy(buffer + 1, "not changed");
110 TEST_SIZE(base64_e(buffer, 1, "\0\020", 2), 4);
111 TEST_S(buffer + 1, "not changed");
112 TEST_S(buffer, "");
113
114 strcpy(buffer + 5, "not changed");
115 TEST_SIZE(base64_e(buffer, 5, "\0", 1), 4);
116 TEST_S(buffer + 5, "not changed");
117 TEST_S(buffer, "AA==");
118
119 strcpy(buffer + 4, "not changed");
120 TEST_SIZE(base64_e(buffer, 4, "\0", 1), 4);
121 TEST_S(buffer + 4, "not changed");
122 TEST_S(buffer, "AA=");
123
124 strcpy(buffer + 3, "not changed");
125 TEST_SIZE(base64_e(buffer, 3, "\0", 1), 4);
126 TEST_S(buffer + 3, "not changed");
127 TEST_S(buffer, "AA");
128
129 strcpy(buffer + 2, "not changed");
130 TEST_SIZE(base64_e(buffer, 2, "\0", 1), 4);
131 TEST_S(buffer + 2, "not changed");
132 TEST_S(buffer, "A");
133
134 strcpy(buffer + 1, "not changed");
135 TEST_SIZE(base64_e(buffer, 1, "\0", 1), 4);
136 TEST_S(buffer + 1, "not changed");
137 TEST_S(buffer, "");
138
139 END();
140 }
141
test_decoding(void)142 int test_decoding(void)
143 {
144 char buffer[32];
145
146 BEGIN();
147
148 strcpy(buffer + 0, "not changed");
149 TEST_SIZE(base64_d((void *)buffer, 0, "ABCD"), 3);
150 TEST_S(buffer + 0, "not changed");
151
152 TEST_SIZE(base64_d((void *)buffer, 3, "ABCD"), 3);
153 TEST_M(buffer, "\0\020\203", 3);
154
155 TEST_SIZE(base64_d(NULL, 3, "ABCD"), 3);
156
157 TEST_SIZE(base64_d((void *)buffer, 3, "A B C D !!"), 3);
158 TEST_M(buffer, "\0\020\203", 3);
159
160 END();
161 }
162
163
usage(int exitcode)164 void usage(int exitcode)
165 {
166 fprintf(stderr,
167 "usage: %s [-v] [-a]\n",
168 name);
169 exit(exitcode);
170 }
171
main(int argc,char * argv[])172 int main(int argc, char *argv[])
173 {
174 int retval = 0;
175 int i;
176
177 for (i = 1; argv[i]; i++) {
178 if (strcmp(argv[i], "-v") == 0)
179 tstflags |= tst_verbatim;
180 else if (strcmp(argv[i], "-a") == 0)
181 tstflags |= tst_abort;
182 else
183 usage(1);
184 }
185
186 retval |= test_encoding(); fflush(stdout);
187 retval |= test_decoding(); fflush(stdout);
188
189 return retval;
190 }
191