Browse Source

[trac813] added a test case for Message::toText() and implemented that feature.
also made some improvements to test tools for more useful outputs.

JINMEI Tatuya 14 years ago
parent
commit
3ce5e0a2b9

+ 8 - 0
src/lib/dns/message.cc

@@ -815,6 +815,9 @@ Message::toText() const {
     if (impl_->edns_ != NULL) {
         ++arcount;
     }
+    if (impl_->tsig_rr_ != NULL) {
+        ++arcount;
+    }
     s += ", ADDITIONAL: " + lexical_cast<string>(arcount) + "\n";
 
     if (impl_->edns_ != NULL) {
@@ -851,6 +854,11 @@ Message::toText() const {
                  SectionFormatter<RRsetPtr>(SECTION_ADDITIONAL, s));
     }
 
+    if (impl_->tsig_rr_ != NULL) {
+        s += "\n;; TSIG PSEUDOSECTION:\n";
+        s += impl_->tsig_rr_->toText();
+    }
+
     return (s);
 }
 

+ 21 - 2
src/lib/dns/tests/message_unittest.cc

@@ -686,7 +686,10 @@ TEST_F(MessageTest, toText) {
     ifstream ifs;
     unittests::openTestData("message_toText1.txt", ifs);
     factoryFromFile(message_parse, "message_toText1.wire");
-    unittests::matchTextData(ifs, message_parse.toText());
+    {
+        SCOPED_TRACE("Message toText test (basic case)");
+        unittests::matchTextData(ifs, message_parse.toText());
+    }
 
     // Another example with EDNS.  The expected data was slightly modified
     // from the dig output (other than replacing tabs with a space): adding
@@ -696,7 +699,23 @@ TEST_F(MessageTest, toText) {
     message_parse.clear(Message::PARSE);
     unittests::openTestData("message_toText2.txt", ifs);
     factoryFromFile(message_parse, "message_toText2.wire");
-    unittests::matchTextData(ifs, message_parse.toText());
+    {
+        SCOPED_TRACE("Message toText test with EDNS");
+        unittests::matchTextData(ifs, message_parse.toText());
+    }
+
+    // Another example with TSIG.  The expected data was slightly modified
+    // from the dig output (other than replacing tabs with a space): removing
+    // a redundant white space at the end of TSIG RDATA.  We'd rather consider
+    // it a dig's defect than a feature.
+    ifs.close();
+    message_parse.clear(Message::PARSE);
+    unittests::openTestData("message_toText3.txt", ifs);
+    factoryFromFile(message_parse, "message_toText3.wire");
+    {
+        SCOPED_TRACE("Message toText test with TSIG");
+        unittests::matchTextData(ifs, message_parse.toText());
+    }
 }
 
 TEST_F(MessageTest, toTextWithoutOpcode) {

+ 2 - 0
src/lib/dns/tests/testdata/Makefile.am

@@ -8,6 +8,7 @@ BUILT_SOURCES += message_fromWire14.wire message_fromWire15.wire
 BUILT_SOURCES += message_fromWire16.wire
 BUILT_SOURCES += message_toWire2.wire message_toWire3.wire
 BUILT_SOURCES += message_toText1.wire message_toText2.wire
+BUILT_SOURCES += message_toText3.wire
 BUILT_SOURCES += name_toWire5.wire name_toWire6.wire
 BUILT_SOURCES += rdatafields1.wire rdatafields2.wire rdatafields3.wire
 BUILT_SOURCES += rdatafields4.wire rdatafields5.wire rdatafields6.wire
@@ -57,6 +58,7 @@ EXTRA_DIST += message_fromWire15.spec message_fromWire16.spec
 EXTRA_DIST += message_toWire1 message_toWire2.spec message_toWire3.spec
 EXTRA_DIST += message_toText1.txt message_toText1.spec
 EXTRA_DIST += message_toText2.txt message_toText2.spec
+EXTRA_DIST += message_toText3.txt message_toText3.spec
 EXTRA_DIST += name_fromWire1 name_fromWire2 name_fromWire3_1 name_fromWire3_2
 EXTRA_DIST += name_fromWire4 name_fromWire6 name_fromWire7 name_fromWire8
 EXTRA_DIST += name_fromWire9 name_fromWire10 name_fromWire11 name_fromWire12

+ 1 - 1
src/lib/util/unittests/textdata.h

@@ -56,7 +56,7 @@ matchTextData(EXPECTED_STREAM& expected, ACTUAL_STREAM& actual) {
         EXPECT_EQ(expected_line, actual_line); 
     }
     while (std::getline(expected, expected_line), !expected.eof()) {
-        ASSERT_FALSE(true) << "Missing line in actual output: "
+        EXPECT_FALSE(true) << "Missing line in actual output: "
                            << expected_line;
     }
 }