Browse Source

[2387] Unify NSEC3PARAM string and lexer constructor tests

Mukund Sivaraman 12 years ago
parent
commit
c70bba06b9
1 changed files with 61 additions and 60 deletions
  1. 61 60
      src/lib/dns/tests/rdata_nsec3param_unittest.cc

+ 61 - 60
src/lib/dns/tests/rdata_nsec3param_unittest.cc

@@ -40,27 +40,72 @@ using namespace isc::dns::rdata;
 
 namespace {
 class Rdata_NSEC3PARAM_Test : public RdataTest {
-public:
+protected:
     Rdata_NSEC3PARAM_Test() :
         nsec3param_txt("1 1 1 D399EAAB"),
-        nsec3param_nosalt_txt("1 1 1 -")
+        nsec3param_nosalt_txt("1 1 1 -"),
+        rdata_nsec3param(nsec3param_txt)
     {}
+
+    void checkFromText_None(const string& rdata_str) {
+        checkFromText<generic::NSEC3PARAM, isc::Exception, isc::Exception>(
+            rdata_str, rdata_nsec3param, false, false);
+    }
+
+    void checkFromText_InvalidText(const string& rdata_str) {
+        checkFromText<generic::NSEC3PARAM, InvalidRdataText, InvalidRdataText>(
+            rdata_str, rdata_nsec3param, true, true);
+    }
+
+    void checkFromText_BadValue(const string& rdata_str) {
+        checkFromText<generic::NSEC3PARAM, BadValue, BadValue>(
+            rdata_str, rdata_nsec3param, true, true);
+    }
+
+    void checkFromText_LexerError(const string& rdata_str) {
+        checkFromText
+            <generic::NSEC3PARAM, InvalidRdataText, MasterLexer::LexerError>(
+                rdata_str, rdata_nsec3param, true, true);
+    }
+
     const string nsec3param_txt;
     const string nsec3param_nosalt_txt;
+    const generic::NSEC3PARAM rdata_nsec3param;
 };
 
 TEST_F(Rdata_NSEC3PARAM_Test, fromText) {
-    // With a salt
-    EXPECT_EQ(1, generic::NSEC3PARAM(nsec3param_txt).getHashalg());
-    EXPECT_EQ(1, generic::NSEC3PARAM(nsec3param_txt).getFlags());
-    // (salt is checked in the toText test)
-
     // Empty salt is okay.
     EXPECT_EQ(0, generic::NSEC3PARAM(nsec3param_nosalt_txt).getSalt().size());
+
+    // Salt is missing.
+    checkFromText_LexerError("1 1 1");
+
+    // Salt has whitespace within. This only fails in the string
+    // constructor, as the lexer constructor stops reading at the end of
+    // its RDATA.
+    const generic::NSEC3PARAM rdata_nsec3param2("1 1 1 D399");
+    checkFromText<generic::NSEC3PARAM, InvalidRdataText, isc::Exception>(
+        "1 1 1 D399 EAAB", rdata_nsec3param2, true, false);
+
+    // Hash algorithm out of range.
+    checkFromText_InvalidText("256 1 1 D399EAAB");
+
+    // Flags out of range.
+    checkFromText_InvalidText("1 256 1 D399EAAB");
+
+    // Iterations out of range.
+    checkFromText_InvalidText("1 1 65536 D399EAAB");
+
+    // Bad base32 hex sequence
+    checkFromText_BadValue("1 1 256 D399EAABZOO");
+
+    // String instead of number
+    checkFromText_LexerError("foo 1 256 D399EAAB");
+    checkFromText_LexerError("1 foo 256 D399EAAB");
+    checkFromText_LexerError("1 1 foo D399EAAB");
 }
 
 TEST_F(Rdata_NSEC3PARAM_Test, toText) {
-    const generic::NSEC3PARAM rdata_nsec3param(nsec3param_txt);
     EXPECT_EQ(nsec3param_txt, rdata_nsec3param.toText());
 
     // Garbage space at the end should be ok. RFC5155 only forbids
@@ -78,36 +123,7 @@ TEST_F(Rdata_NSEC3PARAM_Test, toText) {
     EXPECT_NO_THROW(generic::NSEC3PARAM("1 1 65535 D399EAAB"));
 }
 
-TEST_F(Rdata_NSEC3PARAM_Test, badText) {
-    // Salt is missing.
-    EXPECT_THROW(generic::NSEC3PARAM("1 1 1"), InvalidRdataText);
-
-    // Salt has whitespace within.
-    EXPECT_THROW(generic::NSEC3PARAM("1 1 1 D399 EAAB"), InvalidRdataText);
-
-    // Hash algorithm out of range.
-    EXPECT_THROW(generic::NSEC3PARAM("256 1 1 D399EAAB"), InvalidRdataText);
-
-    // Flags out of range.
-    EXPECT_THROW(generic::NSEC3PARAM("1 256 1 D399EAAB"), InvalidRdataText);
-
-    // Iterations out of range.
-    EXPECT_THROW(generic::NSEC3PARAM("1 1 65536 D399EAAB"), InvalidRdataText);
-
-    // Bad base32 hex sequence
-    EXPECT_THROW(generic::NSEC3PARAM("1 1 256 D399EAABZOO"), BadValue);
-
-    // String instead of number
-    EXPECT_THROW(generic::NSEC3PARAM("foo 1 256 D399EAAB"),
-                 InvalidRdataText);
-    EXPECT_THROW(generic::NSEC3PARAM("1 foo 256 D399EAAB"),
-                 InvalidRdataText);
-    EXPECT_THROW(generic::NSEC3PARAM("1 1 foo D399EAAB"),
-                 InvalidRdataText);
-}
-
 TEST_F(Rdata_NSEC3PARAM_Test, createFromWire) {
-    const generic::NSEC3PARAM rdata_nsec3param(nsec3param_txt);
     EXPECT_EQ(0, rdata_nsec3param.compare(
                   *rdataFactoryFromFile(RRType::NSEC3PARAM(), RRClass::IN(),
                                        "rdata_nsec3param_fromWire1")));
@@ -127,7 +143,6 @@ TEST_F(Rdata_NSEC3PARAM_Test, createFromWire) {
 }
 
 TEST_F(Rdata_NSEC3PARAM_Test, createFromLexer) {
-    const generic::NSEC3PARAM rdata_nsec3param(nsec3param_txt);
     EXPECT_EQ(0, rdata_nsec3param.compare(
         *test::createRdataUsingLexer(RRType::NSEC3PARAM(), RRClass::IN(),
                                      nsec3param_txt)));
@@ -137,30 +152,10 @@ TEST_F(Rdata_NSEC3PARAM_Test, createFromLexer) {
     EXPECT_EQ(0, rdata_nosalt_nsec3param.compare(
         *test::createRdataUsingLexer(RRType::NSEC3PARAM(), RRClass::IN(),
                                      nsec3param_nosalt_txt)));
-
-    // Exceptions cause NULL to be returned.
-
-    // hash algorithm out of range
-    EXPECT_FALSE(test::createRdataUsingLexer(RRType::NSEC3PARAM(),
-                                             RRClass::IN(),
-                                             "256 1 1 D399EAAB"));
-    // flags out of range
-    EXPECT_FALSE(test::createRdataUsingLexer(RRType::NSEC3PARAM(),
-                                             RRClass::IN(),
-                                             "1 256 1 D399EAAB"));
-    // iterations out of range
-    EXPECT_FALSE(test::createRdataUsingLexer(RRType::NSEC3PARAM(),
-                                             RRClass::IN(),
-                                             "1 1 65536 D399EAAB"));
-    // space is not allowed in salt
-    EXPECT_FALSE(test::createRdataUsingLexer(RRType::NSEC3PARAM(),
-                                             RRClass::IN(),
-                                             "1 1 1 D399 EAAB"));
 }
 
 TEST_F(Rdata_NSEC3PARAM_Test, toWireRenderer) {
     renderer.skip(2);
-    const generic::NSEC3PARAM rdata_nsec3param(nsec3param_txt);
     rdata_nsec3param.toWire(renderer);
 
     vector<unsigned char> data;
@@ -171,12 +166,18 @@ TEST_F(Rdata_NSEC3PARAM_Test, toWireRenderer) {
 }
 
 TEST_F(Rdata_NSEC3PARAM_Test, toWireBuffer) {
-    const generic::NSEC3PARAM rdata_nsec3param(nsec3param_txt);
     rdata_nsec3param.toWire(obuffer);
 }
 
+TEST_F(Rdata_NSEC3PARAM_Test, getHashAlg) {
+    EXPECT_EQ(1, rdata_nsec3param.getHashalg());
+}
+
+TEST_F(Rdata_NSEC3PARAM_Test, getFlags) {
+    EXPECT_EQ(1, rdata_nsec3param.getFlags());
+}
+
 TEST_F(Rdata_NSEC3PARAM_Test, assign) {
-    generic::NSEC3PARAM rdata_nsec3param(nsec3param_txt);
     generic::NSEC3PARAM other_nsec3param = rdata_nsec3param;
     EXPECT_EQ(0, rdata_nsec3param.compare(other_nsec3param));
 }