make the smtp_to_mbx flag actually work, other random changes
[ghsmtp.git] / Base64-test.cpp
blobeea8a59573148b74cd3940a2fb062ab002f6235c
1 #include "Base64.hpp"
3 #include <glog/logging.h>
5 int main(int argc, char* argv[])
7 auto constexpr text{R"(
8 “We are all in the gutter, but some of us are looking at the stars.”
9 ― Oscar Wilde
10 )"};
12 CHECK_EQ(Base64::dec(Base64::enc(text)), text);
14 auto s{std::string{text}};
16 CHECK_EQ(Base64::dec(Base64::enc(s)), s);
17 s.pop_back();
18 CHECK_EQ(Base64::dec(Base64::enc(s)), s);
19 s.pop_back();
20 CHECK_EQ(Base64::dec(Base64::enc(s)), s);
21 s.pop_back();
22 CHECK_EQ(Base64::dec(Base64::enc(s)), s);
24 auto constexpr empty{""};
25 CHECK_EQ(Base64::dec(Base64::enc(empty)), empty);
27 auto constexpr text_long{
28 R"(Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pretium ante placerat augue iaculis, consectetur commodo purus laoreet. Cras eu leo urna. Morbi sagittis nulla ut ipsum condimentum viverra. Vestibulum sed diam tortor. Maecenas consectetur scelerisque lorem, eu mollis felis tincidunt nec. Etiam ut ultricies elit. Maecenas pretium sit amet lectus sit amet semper. Sed lacinia dignissim nunc a viverra. Nunc at velit et ipsum malesuada tempor quis eu est. Aliquam egestas imperdiet purus, aliquet suscipit lectus. Nullam orci enim, egestas in felis a, sagittis egestas nulla. Nunc ultrices ultricies fringilla. Duis id tempor risus. In hac habitasse platea dictumst. Sed sit amet odio posuere, pretium sapien vel, dignissim velit.
30 Maecenas porttitor tincidunt libero, a lacinia ex pretium id. Proin venenatis non enim vel molestie. Sed finibus ornare arcu et bibendum. Vivamus est augue, facilisis sed ligula tempus, maximus pellentesque augue. Ut et sapien ac quam mattis lobortis eu eget neque. Morbi et malesuada leo, nec dignissim augue. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi congue mi sed convallis ornare. Nam euismod dolor vel risus molestie bibendum. Sed iaculis, arcu sit amet tincidunt egestas, mi risus varius lorem, eu consequat velit ex id lacus. Proin condimentum porttitor arcu, et ullamcorper mauris iaculis vitae. Nullam porta lorem sapien, interdum euismod nibh accumsan quis. Aenean varius velit vitae ipsum pulvinar laoreet. Mauris sit amet leo quis arcu pellentesque placerat.
32 Nulla id quam velit. Cras semper euismod odio rhoncus gravida. Proin at varius enim. Suspendisse in quam tincidunt, aliquam lacus in, efficitur velit. Morbi et quam enim. Praesent placerat gravida efficitur. Aenean sit amet dolor arcu. Phasellus consequat erat risus, a varius turpis posuere ultrices. Pellentesque placerat lorem eu vulputate varius. Etiam consectetur pharetra ante, eu venenatis nulla congue et.
34 Sed et bibendum neque, in elementum odio. Phasellus in lobortis tellus. Mauris condimentum mi vel metus hendrerit, a accumsan neque pellentesque. Proin feugiat dui nec sem gravida, eu tincidunt metus dignissim. Nullam magna nisi, volutpat eget luctus nec, pulvinar sit amet lacus. Donec suscipit lectus magna, fringilla euismod arcu vehicula feugiat. Ut metus orci, interdum non purus in, lobortis egestas velit. Vestibulum dui eros, tincidunt ultrices mi vitae, tincidunt varius magna. Duis commodo convallis malesuada. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque dictum tincidunt ligula et venenatis.
36 Nullam et neque eu diam blandit iaculis nec tincidunt magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc eget iaculis tellus. Curabitur pretium, nisl ut tincidunt fringilla, diam orci imperdiet purus, ut sagittis arcu sapien at felis. Cras quis enim odio. Sed sed scelerisque elit. Integer laoreet quis nulla non tristique. Aenean sed scelerisque leo. Ut et mi a lacus fermentum commodo at ut ipsum. Aliquam nunc dolor, mollis ultricies dui in, efficitur elementum magna. Suspendisse eleifend augue sapien, non accumsan mi posuere ut.)"};
38 auto constexpr text_long_enc{
39 R"(TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxp
40 dC4gUGhhc2VsbHVzIHByZXRpdW0gYW50ZSBwbGFjZXJhdCBhdWd1ZSBpYWN1bGlzLCBjb25z
41 ZWN0ZXR1ciBjb21tb2RvIHB1cnVzIGxhb3JlZXQuIENyYXMgZXUgbGVvIHVybmEuIE1vcmJp
42 IHNhZ2l0dGlzIG51bGxhIHV0IGlwc3VtIGNvbmRpbWVudHVtIHZpdmVycmEuIFZlc3RpYnVs
43 dW0gc2VkIGRpYW0gdG9ydG9yLiBNYWVjZW5hcyBjb25zZWN0ZXR1ciBzY2VsZXJpc3F1ZSBs
44 b3JlbSwgZXUgbW9sbGlzIGZlbGlzIHRpbmNpZHVudCBuZWMuIEV0aWFtIHV0IHVsdHJpY2ll
45 cyBlbGl0LiBNYWVjZW5hcyBwcmV0aXVtIHNpdCBhbWV0IGxlY3R1cyBzaXQgYW1ldCBzZW1w
46 ZXIuIFNlZCBsYWNpbmlhIGRpZ25pc3NpbSBudW5jIGEgdml2ZXJyYS4gTnVuYyBhdCB2ZWxp
47 dCBldCBpcHN1bSBtYWxlc3VhZGEgdGVtcG9yIHF1aXMgZXUgZXN0LiBBbGlxdWFtIGVnZXN0
48 YXMgaW1wZXJkaWV0IHB1cnVzLCBhbGlxdWV0IHN1c2NpcGl0IGxlY3R1cy4gTnVsbGFtIG9y
49 Y2kgZW5pbSwgZWdlc3RhcyBpbiBmZWxpcyBhLCBzYWdpdHRpcyBlZ2VzdGFzIG51bGxhLiBO
50 dW5jIHVsdHJpY2VzIHVsdHJpY2llcyBmcmluZ2lsbGEuIER1aXMgaWQgdGVtcG9yIHJpc3Vz
51 LiBJbiBoYWMgaGFiaXRhc3NlIHBsYXRlYSBkaWN0dW1zdC4gU2VkIHNpdCBhbWV0IG9kaW8g
52 cG9zdWVyZSwgcHJldGl1bSBzYXBpZW4gdmVsLCBkaWduaXNzaW0gdmVsaXQuCgpNYWVjZW5h
53 cyBwb3J0dGl0b3IgdGluY2lkdW50IGxpYmVybywgYSBsYWNpbmlhIGV4IHByZXRpdW0gaWQu
54 IFByb2luIHZlbmVuYXRpcyBub24gZW5pbSB2ZWwgbW9sZXN0aWUuIFNlZCBmaW5pYnVzIG9y
55 bmFyZSBhcmN1IGV0IGJpYmVuZHVtLiBWaXZhbXVzIGVzdCBhdWd1ZSwgZmFjaWxpc2lzIHNl
56 ZCBsaWd1bGEgdGVtcHVzLCBtYXhpbXVzIHBlbGxlbnRlc3F1ZSBhdWd1ZS4gVXQgZXQgc2Fw
57 aWVuIGFjIHF1YW0gbWF0dGlzIGxvYm9ydGlzIGV1IGVnZXQgbmVxdWUuIE1vcmJpIGV0IG1h
58 bGVzdWFkYSBsZW8sIG5lYyBkaWduaXNzaW0gYXVndWUuIE9yY2kgdmFyaXVzIG5hdG9xdWUg
59 cGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMgcGFydHVyaWVudCBtb250ZXMsIG5hc2NldHVyIHJp
60 ZGljdWx1cyBtdXMuIE1vcmJpIGNvbmd1ZSBtaSBzZWQgY29udmFsbGlzIG9ybmFyZS4gTmFt
61 IGV1aXNtb2QgZG9sb3IgdmVsIHJpc3VzIG1vbGVzdGllIGJpYmVuZHVtLiBTZWQgaWFjdWxp
62 cywgYXJjdSBzaXQgYW1ldCB0aW5jaWR1bnQgZWdlc3RhcywgbWkgcmlzdXMgdmFyaXVzIGxv
63 cmVtLCBldSBjb25zZXF1YXQgdmVsaXQgZXggaWQgbGFjdXMuIFByb2luIGNvbmRpbWVudHVt
64 IHBvcnR0aXRvciBhcmN1LCBldCB1bGxhbWNvcnBlciBtYXVyaXMgaWFjdWxpcyB2aXRhZS4g
65 TnVsbGFtIHBvcnRhIGxvcmVtIHNhcGllbiwgaW50ZXJkdW0gZXVpc21vZCBuaWJoIGFjY3Vt
66 c2FuIHF1aXMuIEFlbmVhbiB2YXJpdXMgdmVsaXQgdml0YWUgaXBzdW0gcHVsdmluYXIgbGFv
67 cmVldC4gTWF1cmlzIHNpdCBhbWV0IGxlbyBxdWlzIGFyY3UgcGVsbGVudGVzcXVlIHBsYWNl
68 cmF0LgoKTnVsbGEgaWQgcXVhbSB2ZWxpdC4gQ3JhcyBzZW1wZXIgZXVpc21vZCBvZGlvIHJo
69 b25jdXMgZ3JhdmlkYS4gUHJvaW4gYXQgdmFyaXVzIGVuaW0uIFN1c3BlbmRpc3NlIGluIHF1
70 YW0gdGluY2lkdW50LCBhbGlxdWFtIGxhY3VzIGluLCBlZmZpY2l0dXIgdmVsaXQuIE1vcmJp
71 IGV0IHF1YW0gZW5pbS4gUHJhZXNlbnQgcGxhY2VyYXQgZ3JhdmlkYSBlZmZpY2l0dXIuIEFl
72 bmVhbiBzaXQgYW1ldCBkb2xvciBhcmN1LiBQaGFzZWxsdXMgY29uc2VxdWF0IGVyYXQgcmlz
73 dXMsIGEgdmFyaXVzIHR1cnBpcyBwb3N1ZXJlIHVsdHJpY2VzLiBQZWxsZW50ZXNxdWUgcGxh
74 Y2VyYXQgbG9yZW0gZXUgdnVscHV0YXRlIHZhcml1cy4gRXRpYW0gY29uc2VjdGV0dXIgcGhh
75 cmV0cmEgYW50ZSwgZXUgdmVuZW5hdGlzIG51bGxhIGNvbmd1ZSBldC4KClNlZCBldCBiaWJl
76 bmR1bSBuZXF1ZSwgaW4gZWxlbWVudHVtIG9kaW8uIFBoYXNlbGx1cyBpbiBsb2JvcnRpcyB0
77 ZWxsdXMuIE1hdXJpcyBjb25kaW1lbnR1bSBtaSB2ZWwgbWV0dXMgaGVuZHJlcml0LCBhIGFj
78 Y3Vtc2FuIG5lcXVlIHBlbGxlbnRlc3F1ZS4gUHJvaW4gZmV1Z2lhdCBkdWkgbmVjIHNlbSBn
79 cmF2aWRhLCBldSB0aW5jaWR1bnQgbWV0dXMgZGlnbmlzc2ltLiBOdWxsYW0gbWFnbmEgbmlz
80 aSwgdm9sdXRwYXQgZWdldCBsdWN0dXMgbmVjLCBwdWx2aW5hciBzaXQgYW1ldCBsYWN1cy4g
81 RG9uZWMgc3VzY2lwaXQgbGVjdHVzIG1hZ25hLCBmcmluZ2lsbGEgZXVpc21vZCBhcmN1IHZl
82 aGljdWxhIGZldWdpYXQuIFV0IG1ldHVzIG9yY2ksIGludGVyZHVtIG5vbiBwdXJ1cyBpbiwg
83 bG9ib3J0aXMgZWdlc3RhcyB2ZWxpdC4gVmVzdGlidWx1bSBkdWkgZXJvcywgdGluY2lkdW50
84 IHVsdHJpY2VzIG1pIHZpdGFlLCB0aW5jaWR1bnQgdmFyaXVzIG1hZ25hLiBEdWlzIGNvbW1v
85 ZG8gY29udmFsbGlzIG1hbGVzdWFkYS4gT3JjaSB2YXJpdXMgbmF0b3F1ZSBwZW5hdGlidXMg
86 ZXQgbWFnbmlzIGRpcyBwYXJ0dXJpZW50IG1vbnRlcywgbmFzY2V0dXIgcmlkaWN1bHVzIG11
87 cy4gUGVsbGVudGVzcXVlIGRpY3R1bSB0aW5jaWR1bnQgbGlndWxhIGV0IHZlbmVuYXRpcy4K
88 Ck51bGxhbSBldCBuZXF1ZSBldSBkaWFtIGJsYW5kaXQgaWFjdWxpcyBuZWMgdGluY2lkdW50
89 IG1hZ25hLiBWZXN0aWJ1bHVtIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kg
90 bHVjdHVzIGV0IHVsdHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBDdXJhZTsgTnVuYyBlZ2V0IGlh
91 Y3VsaXMgdGVsbHVzLiBDdXJhYml0dXIgcHJldGl1bSwgbmlzbCB1dCB0aW5jaWR1bnQgZnJp
92 bmdpbGxhLCBkaWFtIG9yY2kgaW1wZXJkaWV0IHB1cnVzLCB1dCBzYWdpdHRpcyBhcmN1IHNh
93 cGllbiBhdCBmZWxpcy4gQ3JhcyBxdWlzIGVuaW0gb2Rpby4gU2VkIHNlZCBzY2VsZXJpc3F1
94 ZSBlbGl0LiBJbnRlZ2VyIGxhb3JlZXQgcXVpcyBudWxsYSBub24gdHJpc3RpcXVlLiBBZW5l
95 YW4gc2VkIHNjZWxlcmlzcXVlIGxlby4gVXQgZXQgbWkgYSBsYWN1cyBmZXJtZW50dW0gY29t
96 bW9kbyBhdCB1dCBpcHN1bS4gQWxpcXVhbSBudW5jIGRvbG9yLCBtb2xsaXMgdWx0cmljaWVz
97 IGR1aSBpbiwgZWZmaWNpdHVyIGVsZW1lbnR1bSBtYWduYS4gU3VzcGVuZGlzc2UgZWxlaWZl
98 bmQgYXVndWUgc2FwaWVuLCBub24gYWNjdW1zYW4gbWkgcG9zdWVyZSB1dC4=)"};
100 CHECK_EQ(Base64::dec(text_long_enc), text_long);
101 CHECK_EQ(Base64::dec(Base64::enc(text_long, 72)), text_long);