Skip to content

Commit b03f1f0

Browse files
committed
test: add basic cctest for base64.h
This commit adds C++ tests for `base64_encode()` and `base64_decode()` functions defined in `base64.h`. The functionality is already being tested indirectly in JavaScript tests for Buffer, but it won't hurt to test the low-level functions too, especially given that they aren't only used in the internal Buffer implementation, Chrome inspector protocol support relies upon them too. PR-URL: #12238 Refs: #12146 (comment) Reviewed-By: James M Snell <[email protected]> Reviewed-By: Richard Lau <[email protected]> Reviewed-By: Daniel Bevenius <[email protected]>
1 parent 8fbace1 commit b03f1f0

File tree

2 files changed

+128
-0
lines changed

2 files changed

+128
-0
lines changed

node.gyp

+1
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,7 @@
641641
],
642642

643643
'sources': [
644+
'test/cctest/test_base64.cc',
644645
'test/cctest/test_util.cc',
645646
'test/cctest/test_url.cc'
646647
],

test/cctest/test_base64.cc

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#include "base64.h"
2+
3+
#include <stddef.h>
4+
#include <string.h>
5+
6+
#include "gtest/gtest.h"
7+
8+
using node::base64_encode;
9+
using node::base64_decode;
10+
11+
TEST(Base64Test, Encode) {
12+
auto test = [](const char* string, const char* base64_string) {
13+
const size_t len = strlen(base64_string);
14+
char* const buffer = new char[len + 1];
15+
buffer[len] = 0;
16+
base64_encode(string, strlen(string), buffer, len);
17+
EXPECT_STREQ(base64_string, buffer);
18+
delete[] buffer;
19+
};
20+
21+
test("a", "YQ==");
22+
test("ab", "YWI=");
23+
test("abc", "YWJj");
24+
test("abcd", "YWJjZA==");
25+
test("abcde", "YWJjZGU=");
26+
test("abcdef", "YWJjZGVm");
27+
28+
test("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do "
29+
"eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut "
30+
"enim ad minim veniam, quis nostrud exercitation ullamco laboris "
31+
"nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in "
32+
"reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla "
33+
"pariatur. Excepteur sint occaecat cupidatat non proident, sunt in "
34+
"culpa qui officia deserunt mollit anim id est laborum.",
35+
36+
"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Npbmcg"
37+
"ZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0"
38+
"IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlz"
39+
"IG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1"
40+
"aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBp"
41+
"biByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xv"
42+
"cmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNh"
43+
"dCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lh"
44+
"IGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg==");
45+
}
46+
47+
TEST(Base64Test, Decode) {
48+
auto test = [](const char* base64_string, const char* string) {
49+
const size_t len = strlen(string);
50+
char* const buffer = new char[len + 1];
51+
buffer[len] = 0;
52+
base64_decode(buffer, len, base64_string, strlen(base64_string));
53+
EXPECT_STREQ(string, buffer);
54+
delete[] buffer;
55+
};
56+
57+
test("YQ", "a");
58+
test("Y Q", "a");
59+
test("Y Q ", "a");
60+
test(" Y Q", "a");
61+
test("Y Q==", "a");
62+
test("YQ ==", "a");
63+
test("YQ == junk", "a");
64+
test("YWI", "ab");
65+
test("YWI=", "ab");
66+
test("YWJj", "abc");
67+
test("YWJjZA", "abcd");
68+
test("YWJjZA==", "abcd");
69+
test("YW Jj ZA ==", "abcd");
70+
test("YWJjZGU=", "abcde");
71+
test("YWJjZGVm", "abcdef");
72+
test("Y WJjZGVm", "abcdef");
73+
test("YW JjZGVm", "abcdef");
74+
test("YWJ jZGVm", "abcdef");
75+
test("YWJj ZGVm", "abcdef");
76+
test("Y W J j Z G V m", "abcdef");
77+
test("Y W\n JjZ \nG Vm", "abcdef");
78+
79+
const char* text =
80+
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do "
81+
"eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut "
82+
"enim ad minim veniam, quis nostrud exercitation ullamco laboris "
83+
"nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in "
84+
"reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla "
85+
"pariatur. Excepteur sint occaecat cupidatat non proident, sunt in "
86+
"culpa qui officia deserunt mollit anim id est laborum.";
87+
88+
test("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Npbmcg"
89+
"ZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0"
90+
"IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlz"
91+
"IG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1"
92+
"aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBp"
93+
"biByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xv"
94+
"cmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNh"
95+
"dCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lh"
96+
"IGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg==", text);
97+
98+
test("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Npbmcg"
99+
"ZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0"
100+
"IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlz"
101+
"IG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1"
102+
"aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBp"
103+
"biByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xv"
104+
"cmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNh"
105+
"dCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lh"
106+
"IGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg", text);
107+
108+
test("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Npbmcg\n"
109+
"ZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0\n"
110+
"IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlz\n"
111+
"IG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1\n"
112+
"aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBp\n"
113+
"biByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xv\n"
114+
"cmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNh\n"
115+
"dCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lh\n"
116+
"IGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg==", text);
117+
118+
test("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Npbmcg\n"
119+
"ZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0\n"
120+
"IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlz\n"
121+
"IG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1\n"
122+
"aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBp\n"
123+
"biByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xv\n"
124+
"cmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNh\n"
125+
"dCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lh\n"
126+
"IGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg", text);
127+
}

0 commit comments

Comments
 (0)