#include <gtest/gtest.h>
#include <stdint.h>
#include <iostream>
#include <string>
#include <vector>
#include <encode/base64.h>
using std::string;
using std::cout;
using std::endl;
static string b64_allchar_enc =
"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4"
"OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3Bx"
"cnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq"
"q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj"
"5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==";
static string b64_test1 = "This is a test with some space";
static string b64_test1_enc = "VGhpcyBpcyBhIHRlc3QgICAgIHdpdGggc29tZSBzcGFjZQ==";
static string b64_test2 = " ";
static string b64_test2_enc = "ICAgICA=";
static string b64_test3 = "hit";
static string b64_test3_enc = "aGl0";
{
string z;
ASSERT_EQ(Base64::str_to_base64(z).size(), 0);
ASSERT_EQ(Base64::base64_to_str(z).size(), 0);
}
TEST(base64, teststrings)
{
ASSERT_EQ(Base64::str_to_base64(b64_test1), b64_test1_enc);
ASSERT_EQ(Base64::base64_to_str(b64_test1_enc), b64_test1);
ASSERT_EQ(Base64::str_to_base64(b64_test2), b64_test2_enc);
ASSERT_EQ(Base64::base64_to_str(b64_test2_enc), b64_test2);
ASSERT_EQ(Base64::str_to_base64(b64_test3), b64_test3_enc);
ASSERT_EQ(Base64::base64_to_str(b64_test3_enc), b64_test3);
}
{
std::vector<char> allvect;
std::string allstr;
for (int i = 0; i < 256; i++)
{
allvect.push_back(i);
allstr.push_back(i);
}
std::string s;
Base64::base64_encode(allvect, s);
cout << "allvect encoded: " << s << " size: " << s.size() << endl;
ASSERT_EQ(s, b64_allchar_enc);
s = Base64::str_to_base64(allstr);
cout << "allstr encoded : " << s << " size: " << s.size() << endl;
ASSERT_EQ(s, b64_allchar_enc);
s = Base64::base64_to_str(b64_allchar_enc);
ASSERT_EQ(s, allstr);
std::vector<char> v;
Base64::base64_decode(b64_allchar_enc, v);
ASSERT_EQ(v, allvect);
}
TEST(base64, teststrings_url)
{
auto urltest = [] (const string& encs)
{
return encs.find_first_of("+/=") == string::npos;
};
auto urlall= Base64::base64_to_base64url(b64_allchar_enc);
cout << "all char base64:" << endl << b64_allchar_enc << endl;
cout << "all char base64url:" << endl << urlall << endl;
ASSERT_TRUE(urltest(urlall));
auto baseall = Base64::base64url_to_base64(urlall);
ASSERT_EQ(baseall, b64_allchar_enc);
auto url1 = Base64::base64_to_base64url(b64_test1_enc);
ASSERT_TRUE(urltest(url1));
auto base1 = Base64::base64url_to_base64(url1);
ASSERT_EQ(base1, b64_test1_enc);
auto url2 = Base64::base64_to_base64url(b64_test2_enc);
ASSERT_TRUE(urltest(url2));
auto base2 = Base64::base64url_to_base64(url2);
ASSERT_EQ(base2, b64_test2_enc);
auto url3 = Base64::base64_to_base64url(b64_test3_enc);
ASSERT_TRUE(urltest(url3));
auto base3 = Base64::base64url_to_base64(url3);
ASSERT_EQ(base3, b64_test3_enc);
}
TEST(inet_example, client_server_stream_test)
[Inet client server]