From: Aki Tuomi Date: Fri, 10 May 2013 12:38:20 +0000 (+0300) Subject: Refactored to support line format test as well, now performs roundtrip and raw data... X-Git-Tag: auth-3.3-rc1~69^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12ed0b8c63f1a791d14804d9ba97685fb31778a2;p=thirdparty%2Fpdns.git Refactored to support line format test as well, now performs roundtrip and raw data test --- diff --git a/pdns/test-dnsrecords_cc.cc b/pdns/test-dnsrecords_cc.cc index 6bb06f016e..a08fc98ffe 100644 --- a/pdns/test-dnsrecords_cc.cc +++ b/pdns/test-dnsrecords_cc.cc @@ -1,8 +1,9 @@ #define BOOST_TEST_DYN_LINK #define BOOST_TEST_NO_MAIN #include -#include +#include #include +#include #include "dnsrecords.hh" using namespace boost; @@ -10,25 +11,46 @@ using namespace std; BOOST_AUTO_TEST_SUITE(dnsrecords_cc) +#include + +std::string string_to_hex(const std::string& input) +{ + static const char* const lut = "0123456789ABCDEF"; + size_t len = input.length(); + + std::string output; + output.reserve(2 * len); + for (size_t i = 0; i < len; ++i) + { + const unsigned char c = input[i]; + output.push_back(lut[c >> 4]); + output.push_back(lut[c & 15]); + } + return output; +} + BOOST_AUTO_TEST_CASE(test_record_types) { - typedef std::map cases_t; - reportAllTypes(); + typedef boost::tuple case_t; + typedef std::list cases_t; + reportAllTypes(); - cases_t cases; - assign::insert(cases) - (QType::A, "127.0.0.1") - (QType::AAAA, "fe80::250:56ff:fe9b:114") - (QType::EUI48, "00-11-22-33-44-55") - (QType::EUI64, "00-11-22-33-44-55-66-77"); + cases_t cases = boost::assign::list_of + (case_t(QType::A, "127.0.0.1", "\x7F\x00\x00\x01",4)) + (case_t(QType::AAAA, "fe80::250:56ff:fe9b:114","\xFE\x80\x00\x00\x00\x00\x00\x00\x02\x50\x56\xFF\xFE\x9B\x01\x14",16)) + (case_t(QType::EUI48, "00-11-22-33-44-55","\x00\x11\x22\x33\x44\x55",6)) + (case_t(QType::EUI64, "00-11-22-33-44-55-66-77","\x00\x11\x22\x33\x44\x55\x66\x77",8)); BOOST_FOREACH(const cases_t::value_type& val, cases) { - QType q(val.first); - DNSRecordContent *rec = DNSRecordContent::mastermake(q.getCode(), 1, val.second); + QType q(val.get<0>()); + DNSRecordContent *rec = DNSRecordContent::mastermake(q.getCode(), 1, val.get<1>()); BOOST_CHECK(rec); // now verify the record - BOOST_CHECK_EQUAL(rec->getZoneRepresentation(), val.second); - shared_ptr rec2 = DNSRecordContent::unserialize("rec.test",q.getCode(),rec->serialize("rec.test")); - BOOST_CHECK_EQUAL(rec2->getZoneRepresentation(), val.second); + BOOST_CHECK_EQUAL(rec->getZoneRepresentation(), val.get<1>()); + std::string recData = rec->serialize("rec.test"); + shared_ptr rec2 = DNSRecordContent::unserialize("rec.test",q.getCode(),recData); + BOOST_CHECK_EQUAL(rec2->getZoneRepresentation(), val.get<1>()); + // and last, check the wire format + BOOST_CHECK_EQUAL(recData, std::string(val.get<2>(), val.get<2>() + val.get<3>())); } }