diff options
author | Franziskus Kiefer <franziskuskiefer@gmail.com> | 2017-03-17 11:59:41 +0100 |
---|---|---|
committer | Franziskus Kiefer <franziskuskiefer@gmail.com> | 2017-03-17 11:59:41 +0100 |
commit | d7031f7ff0ed23a7e8af132dc711c3da67194331 (patch) | |
tree | c7081417cc424f9b0c0f1abc13a0fa9285c99172 /gtests/util_gtest | |
parent | c4ff116268f9f949eefca70660bba3264d115649 (diff) | |
download | nss-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.mn | 1 | ||||
-rw-r--r-- | gtests/util_gtest/util_b64_unittest.cc | 79 | ||||
-rw-r--r-- | gtests/util_gtest/util_gtest.gyp | 3 |
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', |