diff --git a/src/test_string_util.cpp b/src/test_string_util.cpp index 593a083..2cc372e 100644 --- a/src/test_string_util.cpp +++ b/src/test_string_util.cpp @@ -25,7 +25,7 @@ #include "string_util.h" #include "test_util.h" -int main(int argc, char *argv[]) +void test_trim() { ASSERT_EQUALS(std::string("1234"), trim(" 1234 ")); ASSERT_EQUALS(std::string("1234"), trim("1234 ")); @@ -49,6 +49,35 @@ int main(int argc, char *argv[]) ASSERT_EQUALS(std::string("-9223372036854775808"), str(std::numeric_limits::min())); ASSERT_EQUALS(std::string("0"), str(std::numeric_limits::min())); ASSERT_EQUALS(std::string("18446744073709551615"), str(std::numeric_limits::max())); +} +void test_base64() +{ + size_t len; + ASSERT_STREQUALS(s3fs_base64(NULL, 0), NULL); + ASSERT_STREQUALS(reinterpret_cast(s3fs_decode64(NULL, &len)), NULL); + ASSERT_STREQUALS(s3fs_base64(reinterpret_cast(""), 0), NULL); + ASSERT_STREQUALS(reinterpret_cast(s3fs_decode64("", &len)), NULL); + + ASSERT_STREQUALS(s3fs_base64(reinterpret_cast("1"), 1), "MQ=="); + ASSERT_STREQUALS(reinterpret_cast(s3fs_decode64("MQ==", &len)), "1"); + ASSERT_EQUALS(len, static_cast(1)); + ASSERT_STREQUALS(s3fs_base64(reinterpret_cast("12"), 2), "MTI="); + ASSERT_STREQUALS(reinterpret_cast(s3fs_decode64("MTI=", &len)), "12"); + ASSERT_EQUALS(len, static_cast(2)); + ASSERT_STREQUALS(s3fs_base64(reinterpret_cast("123"), 3), "MTIz"); + ASSERT_STREQUALS(reinterpret_cast(s3fs_decode64("MTIz", &len)), "123"); + ASSERT_EQUALS(len, static_cast(3)); + ASSERT_STREQUALS(s3fs_base64(reinterpret_cast("1234"), 4), "MTIzNA=="); + ASSERT_STREQUALS(reinterpret_cast(s3fs_decode64("MTIzNA==", &len)), "1234"); + ASSERT_EQUALS(len, static_cast(4)); + + // TODO: invalid input +} + +int main(int argc, char *argv[]) +{ + test_trim(); + test_base64(); return 0; } diff --git a/src/test_util.h b/src/test_util.h index 2422bd0..7180375 100644 --- a/src/test_util.h +++ b/src/test_util.h @@ -29,6 +29,18 @@ template void assert_equals(const T &x, const T &y, const char *fil } } +void assert_strequals(const char *x, const char *y, const char *file, int line) +{ + if(x == NULL && y == NULL){ + return; + } else if((x == NULL || y == NULL) || strcmp(x, y) != 0){ + std::cerr << x << " != " << y << " at " << file << ":" << line << std::endl; + std::exit(1); + } +} + #define ASSERT_EQUALS(x, y) \ assert_equals((x), (y), __FILE__, __LINE__) +#define ASSERT_STREQUALS(x, y) \ + assert_strequals((x), (y), __FILE__, __LINE__)