]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Refactored to support line format test as well, now performs roundtrip and raw data...
authorAki Tuomi <cmouse@desteem.org>
Fri, 10 May 2013 12:38:20 +0000 (15:38 +0300)
committerAki Tuomi <cmouse@desteem.org>
Fri, 10 May 2013 12:38:20 +0000 (15:38 +0300)
pdns/test-dnsrecords_cc.cc

index 6bb06f016eb567c1b8e3dbb6fd70b17cee69e75e..a08fc98ffe48863b399a9b3e5673b896a86323c2 100644 (file)
@@ -1,8 +1,9 @@
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_NO_MAIN
 #include <boost/test/unit_test.hpp>
-#include <boost/assign/std/map.hpp>
+#include <boost/assign/list_of.hpp>
 #include <boost/foreach.hpp>
+#include <boost/tuple/tuple.hpp>
 #include "dnsrecords.hh"
 
 using namespace boost;
@@ -10,25 +11,46 @@ using namespace std;
 
 BOOST_AUTO_TEST_SUITE(dnsrecords_cc)
 
+#include <string>
+
+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<QType::typeenum, std::string> cases_t;
-   reportAllTypes();
+  typedef boost::tuple<const QType::typeenum, const std::string, const char*, size_t> case_t;
+  typedef std::list<case_t> 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<DNSRecordContent> 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<DNSRecordContent> 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>()));
  }
 }