summaryrefslogtreecommitdiff
path: root/gtests/util_gtest
diff options
context:
space:
mode:
authorFranziskus Kiefer <franziskuskiefer@gmail.com>2017-03-17 11:59:41 +0100
committerFranziskus Kiefer <franziskuskiefer@gmail.com>2017-03-17 11:59:41 +0100
commitd7031f7ff0ed23a7e8af132dc711c3da67194331 (patch)
treec7081417cc424f9b0c0f1abc13a0fa9285c99172 /gtests/util_gtest
parentc4ff116268f9f949eefca70660bba3264d115649 (diff)
downloadnss-hg-d7031f7ff0ed23a7e8af132dc711c3da67194331.tar.gz
Bug 1344380 - gtests for b64 bug and some fixes, r=ttaubert
Differential Revision: https://nss-review.dev.mozaws.net/D256#inline-2146
Diffstat (limited to 'gtests/util_gtest')
-rw-r--r--gtests/util_gtest/manifest.mn1
-rw-r--r--gtests/util_gtest/util_b64_unittest.cc79
-rw-r--r--gtests/util_gtest/util_gtest.gyp3
3 files changed, 82 insertions, 1 deletions
diff --git a/gtests/util_gtest/manifest.mn b/gtests/util_gtest/manifest.mn
index b97f92447..41e7d8e0c 100644
--- a/gtests/util_gtest/manifest.mn
+++ b/gtests/util_gtest/manifest.mn
@@ -8,6 +8,7 @@ MODULE = nss
CPPSRCS = \
util_utf8_unittest.cc \
+ util_b64_unittest.cc \
$(NULL)
INCLUDES += \
diff --git a/gtests/util_gtest/util_b64_unittest.cc b/gtests/util_gtest/util_b64_unittest.cc
new file mode 100644
index 000000000..5a691fff7
--- /dev/null
+++ b/gtests/util_gtest/util_b64_unittest.cc
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include <climits>
+#include <memory>
+#include "nssb64.h"
+
+#include "gtest/gtest.h"
+#include "scoped_ptrs.h"
+
+namespace nss_test {
+
+class B64EncodeDecodeTest : public ::testing::Test {
+ public:
+ void TestDecodeStr(const std::string &str) {
+ ScopedSECItem tmp(
+ NSSBase64_DecodeBuffer(nullptr, nullptr, str.c_str(), str.size()));
+ ASSERT_TRUE(tmp);
+ char *out = NSSBase64_EncodeItem(nullptr, nullptr, 0, tmp.get());
+ ASSERT_TRUE(out);
+ ASSERT_EQ(std::string(out), str);
+ PORT_Free(out);
+ }
+ bool TestEncodeItem(SECItem *item) {
+ bool rv = true;
+ char *out = NSSBase64_EncodeItem(nullptr, nullptr, 0, item);
+ rv = !!out;
+ if (out) {
+ ScopedSECItem tmp(
+ NSSBase64_DecodeBuffer(nullptr, nullptr, out, strlen(out)));
+ EXPECT_TRUE(tmp);
+ EXPECT_EQ(SECEqual, SECITEM_CompareItem(item, tmp.get()));
+ PORT_Free(out);
+ }
+ return rv;
+ }
+ bool TestFakeDecode(size_t str_len) {
+ std::string str(str_len, 'A');
+ ScopedSECItem tmp(
+ NSSBase64_DecodeBuffer(nullptr, nullptr, str.c_str(), str.size()));
+ return !!tmp;
+ }
+ bool TestFakeEncode(size_t len) {
+ std::vector<uint8_t> data(len, 0x30);
+ SECItem tmp = {siBuffer, data.data(),
+ static_cast<unsigned int>(data.size())};
+ return TestEncodeItem(&tmp);
+ }
+
+ protected:
+};
+
+TEST_F(B64EncodeDecodeTest, DecEncTest) { TestDecodeStr("VGhpcyBpcyBOU1Mh"); }
+
+TEST_F(B64EncodeDecodeTest, EncDecTest) {
+ uint8_t data[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09};
+ SECItem tmp = {siBuffer, data, sizeof(data)};
+ TestEncodeItem(&tmp);
+}
+
+TEST_F(B64EncodeDecodeTest, FakeDecTest) { EXPECT_TRUE(TestFakeDecode(100)); }
+
+TEST_F(B64EncodeDecodeTest, FakeEncDecTest) {
+ EXPECT_TRUE(TestFakeEncode(100));
+}
+
+// These takes a while ...
+TEST_F(B64EncodeDecodeTest, LongFakeDecTest1) {
+ EXPECT_TRUE(TestFakeDecode(0x66666666));
+}
+TEST_F(B64EncodeDecodeTest, LongFakeEncDecTest1) { TestFakeEncode(0x3fffffff); }
+TEST_F(B64EncodeDecodeTest, LongFakeEncDecTest2) {
+ EXPECT_FALSE(TestFakeEncode(0x40000000));
+}
+
+} // namespace nss_test
diff --git a/gtests/util_gtest/util_gtest.gyp b/gtests/util_gtest/util_gtest.gyp
index e4b7be7ed..81a8de236 100644
--- a/gtests/util_gtest/util_gtest.gyp
+++ b/gtests/util_gtest/util_gtest.gyp
@@ -12,7 +12,8 @@
'type': 'executable',
'sources': [
'util_utf8_unittest.cc',
- '<(DEPTH)/gtests/common/gtests.cc'
+ 'util_b64_unittest.cc',
+ '<(DEPTH)/gtests/common/gtests.cc',
],
'dependencies': [
'<(DEPTH)/exports.gyp:nss_exports',