xref: /unit/src/test/nxt_base64_test.c (revision 1975:6a47cab8f271)
1*1975Svbart@nginx.com 
2*1975Svbart@nginx.com /*
3*1975Svbart@nginx.com  * Copyright (C) NGINX, Inc.
4*1975Svbart@nginx.com  */
5*1975Svbart@nginx.com 
6*1975Svbart@nginx.com #include <nxt_main.h>
7*1975Svbart@nginx.com #include "nxt_tests.h"
8*1975Svbart@nginx.com 
9*1975Svbart@nginx.com 
10*1975Svbart@nginx.com nxt_int_t
nxt_base64_test(nxt_thread_t * thr)11*1975Svbart@nginx.com nxt_base64_test(nxt_thread_t *thr)
12*1975Svbart@nginx.com {
13*1975Svbart@nginx.com     ssize_t     ret;
14*1975Svbart@nginx.com     nxt_uint_t  i;
15*1975Svbart@nginx.com 
16*1975Svbart@nginx.com     static struct {
17*1975Svbart@nginx.com         nxt_str_t  enc;
18*1975Svbart@nginx.com         nxt_str_t  dec;
19*1975Svbart@nginx.com 
20*1975Svbart@nginx.com     } tests[] = {
21*1975Svbart@nginx.com         { nxt_string("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
22*1975Svbart@nginx.com                      "abcdefghijklmnopqrstuvwxyz"
23*1975Svbart@nginx.com                      "0123456789+//+9876543210"
24*1975Svbart@nginx.com                      "zyxwvutsrqponmlkjihgfedcba"
25*1975Svbart@nginx.com                      "ZYXWVUTSRQPONMLKJIHGFEDCBA"),
26*1975Svbart@nginx.com           nxt_string("\x00\x10\x83\x10\x51\x87\x20\x92\x8b\x30\xd3\x8f"
27*1975Svbart@nginx.com                      "\x41\x14\x93\x51\x55\x97\x61\x96\x9b\x71\xd7\x9f"
28*1975Svbart@nginx.com                      "\x82\x18\xa3\x92\x59\xa7\xa2\x9a\xab\xb2\xdb\xaf"
29*1975Svbart@nginx.com                      "\xc3\x1c\xb3\xd3\x5d\xb7\xe3\x9e\xbb\xf3\xdf\xbf"
30*1975Svbart@nginx.com                      "\xff\xef\x7c\xef\xae\x78\xdf\x6d\x74\xcf\x2c\x70"
31*1975Svbart@nginx.com                      "\xbe\xeb\x6c\xae\xaa\x68\x9e\x69\x64\x8e\x28\x60"
32*1975Svbart@nginx.com                      "\x7d\xe7\x5c\x6d\xa6\x58\x5d\x65\x54\x4d\x24\x50"
33*1975Svbart@nginx.com                      "\x3c\xe3\x4c\x2c\xa2\x48\x1c\x61\x44\x0c\x20\x40") },
34*1975Svbart@nginx.com 
35*1975Svbart@nginx.com         { nxt_string("Aa=="),
36*1975Svbart@nginx.com           nxt_string("\x01") },
37*1975Svbart@nginx.com         { nxt_string("0Z"),
38*1975Svbart@nginx.com           nxt_string("\xd1") },
39*1975Svbart@nginx.com         { nxt_string("0aA="),
40*1975Svbart@nginx.com           nxt_string("\xd1\xa0") },
41*1975Svbart@nginx.com         { nxt_string("z/+"),
42*1975Svbart@nginx.com           nxt_string("\xcf\xff") },
43*1975Svbart@nginx.com         { nxt_string("z9+Npe=="),
44*1975Svbart@nginx.com           nxt_string("\xcf\xdf\x8d\xa5") },
45*1975Svbart@nginx.com         { nxt_string("/+98765"),
46*1975Svbart@nginx.com           nxt_string("\xff\xef\x7c\xef\xae") },
47*1975Svbart@nginx.com 
48*1975Svbart@nginx.com         { nxt_string("aBc_"),
49*1975Svbart@nginx.com           nxt_null_string },
50*1975Svbart@nginx.com         { nxt_string("5"),
51*1975Svbart@nginx.com           nxt_null_string },
52*1975Svbart@nginx.com         { nxt_string("M==="),
53*1975Svbart@nginx.com           nxt_null_string },
54*1975Svbart@nginx.com         { nxt_string("===="),
55*1975Svbart@nginx.com           nxt_null_string },
56*1975Svbart@nginx.com         { nxt_string("Ab="),
57*1975Svbart@nginx.com           nxt_null_string },
58*1975Svbart@nginx.com         { nxt_string("00=0"),
59*1975Svbart@nginx.com           nxt_null_string },
60*1975Svbart@nginx.com         { nxt_string("\0"),
61*1975Svbart@nginx.com           nxt_null_string },
62*1975Svbart@nginx.com         { nxt_string("\r\naaaa"),
63*1975Svbart@nginx.com           nxt_null_string },
64*1975Svbart@nginx.com         { nxt_string("=0000"),
65*1975Svbart@nginx.com           nxt_null_string },
66*1975Svbart@nginx.com     };
67*1975Svbart@nginx.com 
68*1975Svbart@nginx.com     u_char  buf[96];
69*1975Svbart@nginx.com 
70*1975Svbart@nginx.com     nxt_thread_time_update(thr);
71*1975Svbart@nginx.com 
72*1975Svbart@nginx.com     for (i = 0; i < nxt_nitems(tests); i++) {
73*1975Svbart@nginx.com         ret = nxt_base64_decode(NULL, tests[i].enc.start, tests[i].enc.length);
74*1975Svbart@nginx.com 
75*1975Svbart@nginx.com         if (ret == NXT_ERROR && tests[i].dec.start == NULL) {
76*1975Svbart@nginx.com             continue;
77*1975Svbart@nginx.com         }
78*1975Svbart@nginx.com 
79*1975Svbart@nginx.com         if ((size_t) ret != tests[i].dec.length) {
80*1975Svbart@nginx.com             nxt_log_alert(thr->log,
81*1975Svbart@nginx.com                           "nxt_base64_decode() test \"%V\" failed: incorrect "
82*1975Svbart@nginx.com                           "length of decoded string %z, expected %uz",
83*1975Svbart@nginx.com                           &tests[i].enc, ret, tests[i].dec.length);
84*1975Svbart@nginx.com             return NXT_ERROR;
85*1975Svbart@nginx.com         }
86*1975Svbart@nginx.com 
87*1975Svbart@nginx.com         ret = nxt_base64_decode(buf, tests[i].enc.start, tests[i].enc.length);
88*1975Svbart@nginx.com 
89*1975Svbart@nginx.com         if (!nxt_str_eq(&tests[i].dec, buf, (size_t) ret)) {
90*1975Svbart@nginx.com             nxt_log_alert(thr->log, "nxt_base64_decode() test \"%V\" failed");
91*1975Svbart@nginx.com             return NXT_ERROR;
92*1975Svbart@nginx.com         }
93*1975Svbart@nginx.com     }
94*1975Svbart@nginx.com 
95*1975Svbart@nginx.com     nxt_log_error(NXT_LOG_NOTICE, thr->log, "nxt_base64_decode() test passed");
96*1975Svbart@nginx.com 
97*1975Svbart@nginx.com     return NXT_OK;
98*1975Svbart@nginx.com }
99