From 9f5a72d504a94a293bee12ea3345bcc962bd4be8 Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Thu, 23 May 2013 21:52:18 +0300 Subject: [PATCH] Added OPT tests --- pdns/test-dnsrecords_cc.cc | 41 +++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/pdns/test-dnsrecords_cc.cc b/pdns/test-dnsrecords_cc.cc index 13634d6c36..4795a82052 100644 --- a/pdns/test-dnsrecords_cc.cc +++ b/pdns/test-dnsrecords_cc.cc @@ -8,7 +8,7 @@ #define CASE_L(type, inval, zoneval, lineval, broken) case_t(type, std::string(inval), std::string(zoneval), std::string(lineval, sizeof(lineval)-1), broken) #define CASE_S(type, zoneval, lineval, broken) CASE_L(type, zoneval, zoneval, lineval, broken) -BOOST_AUTO_TEST_SUITE(dnsrecords_cc) +BOOST_AUTO_TEST_SUITE(test_dnsrecords_cc) #define REC_CHECK_EQUAL(a,b) { if (val.get<4>()) { BOOST_WARN_EQUAL(a,b); } else { BOOST_CHECK_EQUAL(a,b); } } #define REC_CHECK_MESSAGE(cond,msg) { if (val.get<4>()) { BOOST_WARN_MESSAGE(cond,msg); } else { BOOST_CHECK_MESSAGE(cond,msg); } } @@ -238,4 +238,43 @@ BOOST_AUTO_TEST_CASE(test_record_types_bad_values) { }; } +// special opt record test, because opt is odd +BOOST_AUTO_TEST_CASE(test_opt_record_in) { + EDNSOpts eo; + + // test that nsid gets parsed into system + std::string packet("\xf0\x01\x01\x00\x00\x01\x00\x01\x00\x00\x00\x01\x03www\x08powerdns\x03""com\x00\x00\x01\x00\x01\x03www\x08powerdns\x03""com\x00\x00\x01\x00\x01\x00\x00\x00\x10\x00\x04\x7f\x00\x00\x01\x00\x00\x29\x05\x00\x00\x00\x00\x00\x00\x0c\x00\x03\x00\x08powerdns",89); + OPTRecordContent::report(); + + MOADNSParser mdp((char*)&*packet.begin(), (unsigned int)packet.size()); + + getEDNSOpts(mdp, &eo); + + // this should contain NSID now + BOOST_CHECK_EQUAL(eo.d_packetsize, 1280); + + // it should contain NSID option with value 'powerdns', and nothing else + BOOST_CHECK_EQUAL(eo.d_options[0].first, 3); // nsid + BOOST_CHECK_EQUAL(eo.d_options[0].second, "powerdns"); +} + +BOOST_AUTO_TEST_CASE(test_opt_record_out) { + vector pak; + vector > opts; + + DNSPacketWriter pw(pak, "www.powerdns.com", ns_t_a); + pw.startRecord("www.powerdns.com", ns_t_a, 16, 1, DNSPacketWriter::ANSWER); + pw.xfrIP(0x0100007f); + opts.push_back(pair(3, "powerdns")); + pw.addOpt(1280, 0, 0, opts); + pw.getHeader()->id = 0x01f0; + pw.getHeader()->rd = 1; + pw.commit(); + + // see if we can build a DNS packet that looks like this... + std::string packet("\xf0\x01\x01\x00\x00\x01\x00\x01\x00\x00\x00\x01\x03www\x08powerdns\x03""com\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\x10\x00\x04\x7f\x00\x00\x01\x00\x00\x29\x05\x00\x00\x00\x00\x00\x00\x0c\x00\x03\x00\x08powerdns",73); + + BOOST_CHECK_EQUAL(makeHexDump(std::string(pak.begin(),pak.end())), makeHexDump(packet)); +} + BOOST_AUTO_TEST_SUITE_END() -- 2.47.2