|
@@ -62,7 +62,6 @@ using namespace isc::dns::rdata;
|
|
|
//
|
|
|
|
|
|
const uint16_t Message::DEFAULT_MAX_UDPSIZE;
|
|
|
-const Name test_name("test.example.com");
|
|
|
|
|
|
namespace isc {
|
|
|
namespace util {
|
|
@@ -79,7 +78,8 @@ const uint16_t TSIGContext::DEFAULT_FUDGE;
|
|
|
namespace {
|
|
|
class MessageTest : public ::testing::Test {
|
|
|
protected:
|
|
|
- MessageTest() : obuffer(0), renderer(obuffer),
|
|
|
+ MessageTest() : test_name("test.example.com"), obuffer(0),
|
|
|
+ renderer(obuffer),
|
|
|
message_parse(Message::PARSE),
|
|
|
message_render(Message::RENDER),
|
|
|
bogus_section(static_cast<Message::Section>(
|
|
@@ -103,8 +103,9 @@ protected:
|
|
|
"FAKEFAKEFAKEFAKE"));
|
|
|
rrset_aaaa->addRRsig(rrset_rrsig);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
static Question factoryFromFile(const char* datafile);
|
|
|
+ const Name test_name;
|
|
|
OutputBuffer obuffer;
|
|
|
MessageRenderer renderer;
|
|
|
Message message_parse;
|
|
@@ -114,17 +115,18 @@ protected:
|
|
|
RRsetPtr rrset_aaaa; // AAAA RRset with one RDATA with RRSIG
|
|
|
RRsetPtr rrset_rrsig; // RRSIG for the AAAA RRset
|
|
|
TSIGContext tsig_ctx;
|
|
|
+ vector<unsigned char> received_data;
|
|
|
vector<unsigned char> expected_data;
|
|
|
|
|
|
- static void factoryFromFile(Message& message, const char* datafile);
|
|
|
+ void factoryFromFile(Message& message, const char* datafile);
|
|
|
};
|
|
|
|
|
|
void
|
|
|
MessageTest::factoryFromFile(Message& message, const char* datafile) {
|
|
|
- std::vector<unsigned char> data;
|
|
|
- UnitTestUtil::readWireData(datafile, data);
|
|
|
+ received_data.clear();
|
|
|
+ UnitTestUtil::readWireData(datafile, received_data);
|
|
|
|
|
|
- InputBuffer buffer(&data[0], data.size());
|
|
|
+ InputBuffer buffer(&received_data[0], received_data.size());
|
|
|
message.fromWire(buffer);
|
|
|
}
|
|
|
|
|
@@ -624,7 +626,7 @@ commonTSIGToWireCheck(Message& message, MessageRenderer& renderer,
|
|
|
{
|
|
|
message.setOpcode(Opcode::QUERY());
|
|
|
message.setRcode(Rcode::NOERROR());
|
|
|
- message.setHeaderFlag(Message::HEADERFLAG_RD, true);
|
|
|
+ message.setHeaderFlag(Message::HEADERFLAG_RD);
|
|
|
message.addQuestion(Question(Name("www.example.com"), RRClass::IN(),
|
|
|
RRType::A()));
|
|
|
|
|
@@ -670,6 +672,46 @@ TEST_F(MessageTest, toWireWithEDNSAndTSIG) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+const char* const long_txt1 = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde";
|
|
|
+const char* const long_txt2 = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456";
|
|
|
+
|
|
|
+// Example output generated by
|
|
|
+// "dig -y www.example.com:SFuWd/q99SzF8Yzd1QbB9g== www.example.com txt
|
|
|
+// QID: 0x22c2
|
|
|
+// Time Signed: 0x00004e179212
|
|
|
+// Query MAC: 8214b04634e32323d651ac60b08e6388
|
|
|
+// Response MAC: 88adc3811d1d6bec7c684438906fc694
|
|
|
+TEST_F(MessageTest, toWireTSIGTruncation) {
|
|
|
+ isc::util::detail::gettimeFunction = testGetTime<0x4e179212>;
|
|
|
+
|
|
|
+ factoryFromFile(message_parse, "message_fromWire17.wire");
|
|
|
+ EXPECT_EQ(TSIGError::NOERROR(),
|
|
|
+ tsig_ctx.verify(message_parse.getTSIGRecord(),
|
|
|
+ &received_data[0], received_data.size()));
|
|
|
+
|
|
|
+ // Note: the following should be merged to commonTSIGToWireCheck:
|
|
|
+ message_render.setQid(0x22c2);
|
|
|
+ message_render.setOpcode(Opcode::QUERY());
|
|
|
+ message_render.setRcode(Rcode::NOERROR());
|
|
|
+ message_render.setHeaderFlag(Message::HEADERFLAG_QR);
|
|
|
+ message_render.setHeaderFlag(Message::HEADERFLAG_RD);
|
|
|
+ message_render.setHeaderFlag(Message::HEADERFLAG_AA);
|
|
|
+ message_render.addQuestion(Question(Name("www.example.com"),
|
|
|
+ RRClass::IN(), RRType::TXT()));
|
|
|
+ RRsetPtr rrset(new RRset(Name("www.example.com"), RRClass::IN(),
|
|
|
+ RRType::TXT(), RRTTL(86400)));
|
|
|
+ rrset->addRdata(generic::TXT(long_txt1));
|
|
|
+ rrset->addRdata(generic::TXT(long_txt2));
|
|
|
+ message_render.addRRset(Message::SECTION_ANSWER, rrset);
|
|
|
+ message_render.toWire(renderer, tsig_ctx);
|
|
|
+
|
|
|
+ vector<unsigned char> expected_data;
|
|
|
+ UnitTestUtil::readWireData("message_toWire4.wire", expected_data);
|
|
|
+ EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData, renderer.getData(),
|
|
|
+ renderer.getLength(),
|
|
|
+ &expected_data[0], expected_data.size());
|
|
|
+}
|
|
|
+
|
|
|
TEST_F(MessageTest, toWireWithoutOpcode) {
|
|
|
message_render.setRcode(Rcode::NOERROR());
|
|
|
EXPECT_THROW(message_render.toWire(renderer), InvalidMessageOperation);
|