Base64_test.cc 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "catch.hpp"
  2. #include "Base64.hh"
  3. #include <cstring>
  4. static void test_decode(const std::string& encoded, const std::string& decoded)
  5. {
  6. auto [buf, bufSize] = Base64::decode(encoded);
  7. REQUIRE(bufSize == decoded.size());
  8. CHECK(memcmp(buf.data(), decoded.data(), decoded.size()) == 0);
  9. }
  10. static void test(const std::string& decoded, const std::string& encoded)
  11. {
  12. CHECK(Base64::encode(reinterpret_cast<const uint8_t*>(decoded.data()),
  13. decoded.size())
  14. == encoded);
  15. test_decode(encoded, decoded);
  16. }
  17. TEST_CASE("Base64")
  18. {
  19. // Test vectors verified with 'base64' tool from coreutils.
  20. test("", "");
  21. test("a", "YQ==");
  22. test("a\n", "YQo=");
  23. test("ab\n", "YWIK");
  24. test("abc\n", "YWJjCg==");
  25. test("0123456789\n", "MDEyMzQ1Njc4OQo=");
  26. test("abcdefghijklmnopqrstuvwxyz\n", "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK");
  27. test("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n",
  28. "MDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1\n"
  29. "dnd4eXoK");
  30. test("111111111111111111111111111111111111111111111111111111111111111111111111111111"
  31. "111111111111111111111111111111111111111111111111111111111111111111111111111111"
  32. "111111111111111111111111111111111111111111111111111111111111111111111111111111"
  33. "111111111111111111111111111111111111111111111\n",
  34. "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx\n"
  35. "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx\n"
  36. "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx\n"
  37. "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx\n"
  38. "MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCg==");
  39. // Decode-only:
  40. // - extra newlines don't matter
  41. test_decode("M\nDEyM\nzQ1Njc\n4OQo=", "0123456789\n");
  42. // - no newlines at all is fine as well
  43. test_decode("MDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK",
  44. "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n");
  45. }