Browse Source

add failing tests. base32 implementation is still quite immature.

git-svn-id: svn://bind10.isc.org/svn/bind10/trunk@1471 e5f2f494-b856-4b98-b285-d166d9295462
JINMEI Tatuya 15 years ago
parent
commit
b95100e30e
1 changed files with 44 additions and 6 deletions
  1. 44 6
      src/lib/dns/tests/base32_unittest.cc

+ 44 - 6
src/lib/dns/tests/base32_unittest.cc

@@ -32,11 +32,34 @@ typedef pair<string, string> StringPair;
 
 class Base32Test : public ::testing::Test {
 protected:
-    Base32Test() {}
+    Base32Test() {
+        // test vectors from RFC4648
+#if 0   // the current implementation doesn't seem to handle '=' correctly
+        test_sequence.push_back(StringPair("", ""));
+        test_sequence.push_back(StringPair("f", "CO======"));
+        test_sequence.push_back(StringPair("fo", "CPNG===="));
+        test_sequence.push_back(StringPair("foo", "CPNMU==="));
+        test_sequence.push_back(StringPair("foob", "CPNMUOG="));
+#endif
+        test_sequence.push_back(StringPair("fooba", "CPNMUOJ1"));
+#if 0                           // this fails
+        test_sequence.push_back(StringPair("foobar", "CPNMUOJ1E8======"));
+#endif
+    }
+    vector<StringPair> test_sequence;
+    vector<uint8_t> decoded_data;
 };
 
-TEST_F(Base32Test, reversibility)
+void
+decodeCheck(const string& input_string, vector<uint8_t>& output,
+            const string& expected)
 {
+    decodeBase32(input_string, output);
+    EXPECT_EQ(expected, string(&output[0], &output[0] + output.size()));
+}
+
+
+TEST_F(Base32Test, reversibility) {
     vector<uint8_t> result;
 //    const string input("H9RSFB7FPF2L8HG35CMPC765TDK23RP6");
     const string input("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
@@ -45,8 +68,15 @@ TEST_F(Base32Test, reversibility)
     EXPECT_EQ(input, output);
 }
 
-TEST_F(Base32Test, decode1)
-{
+TEST_F(Base32Test, decode0) {
+    for (vector<StringPair>::const_iterator it = test_sequence.begin();
+         it != test_sequence.end();
+         ++it) {
+        decodeCheck((*it).second, decoded_data, (*it).first);
+    }
+}
+
+TEST_F(Base32Test, decode1) {
     vector<uint8_t> result;
     const std::string input("000G40O40K30E209185GO38E1S8124GJ");
     decodeBase32(input, result);
@@ -56,8 +86,16 @@ TEST_F(Base32Test, decode1)
     }
 }
 
-TEST_F(Base32Test, encode1)
-{
+TEST_F(Base32Test, encode0) {
+    for (vector<StringPair>::const_iterator it = test_sequence.begin();
+         it != test_sequence.end();
+         ++it) {
+        decoded_data.assign((*it).first.begin(), (*it).first.end());
+        EXPECT_EQ((*it).second, encodeBase32(decoded_data));
+    }
+}
+
+TEST_F(Base32Test, encode1) {
     const std::string expect("000G40O40K30E209185GO38E1S8124GJ");
     vector<uint8_t> binary;
     for (uint8_t i = 0; i < 20; i++) {