]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
First round of tests completed
authorAki Tuomi <cmouse@desteem.org>
Sun, 12 May 2013 20:27:40 +0000 (23:27 +0300)
committerAki Tuomi <cmouse@desteem.org>
Mon, 13 May 2013 19:05:05 +0000 (22:05 +0300)
pdns/test-dnsrecords_cc.cc

index 09fcc25995f95fa71bac3b7ad354bba7213683b8..e2eec796c1a6345879652a8e7329d4cd28509b2f 100644 (file)
 #include <boost/tuple/tuple.hpp>
 #include "dnsrecords.hh"
 
-using namespace boost;
-using namespace std;
-
-#define LF(x) x, sizeof(x)-1
+#define CASE_L(type, inval, zoneval, lineval) case_t(type, std::string(inval), std::string(zoneval), std::string(lineval, sizeof(lineval)-1))
+#define CASE_S(type, zoneval, lineval) CASE_L(type, zoneval, zoneval, lineval)
 
 BOOST_AUTO_TEST_SUITE(dnsrecords_cc)
 
+// FIXME: This should be 0
+BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(test_record_types, 29)
+
 BOOST_AUTO_TEST_CASE(test_record_types) {
-  typedef boost::tuple<const QType::typeenum, const std::string, const char*, size_t> case_t;
+  // tuple contains <type, user value, zone representation, line value>
+  typedef boost::tuple<const QType::typeenum, const std::string, const std::string, const std::string> case_t;
   typedef std::list<case_t> cases_t;
   reportAllTypes();
+  MRRecordContent::report();
+  IPSECKEYRecordContent::report();
+  KXRecordContent::report();
+  URLRecordContent::report();
+  MBOXFWRecordContent::report();
 
-   cases_t cases = boost::assign::list_of
-     (case_t(QType::A, "127.0.0.1", LF("\x7F\x00\x00\x01")))
+  cases_t cases = boost::assign::list_of
+     (CASE_S(QType::A, "127.0.0.1", "\x7F\x00\x00\x01"))
 // local nameserver
-     (case_t(QType::NS, "ns.rec.test.", LF("\x02ns\xc0\x11")))
+     (CASE_L(QType::NS, "ns.rec.test", "ns.rec.test.", "\x02ns\xc0\x11"))
 // non-local nameserver
-     (case_t(QType::NS, "ns.example.com.", LF("\x02ns\x07""example\x03""com\x00")))
+     (CASE_S(QType::NS, "ns.example.com.", "\x02ns\x07""example\x03""com\x00"))
 // local alias
-     (case_t(QType::CNAME, "name.rec.test.", LF("\x04name\xc0\x11")))
+     (CASE_L(QType::CNAME, "name.rec.test", "name.rec.test.", "\x04name\xc0\x11"))
 // non-local alias
-     (case_t(QType::CNAME, "name.example.com.", LF("\x04name\x07""example\x03""com\x00")))
+     (CASE_S(QType::CNAME, "name.example.com.", "\x04name\x07""example\x03""com\x00"))
 // local names
-     (case_t(QType::SOA, "ns.rec.test. hostmaster.test.rec. 2013051201 3600 3600 604800 120", LF("\x02ns\xc0\x11\x0ahostmaster\x04test\x03rec\x00\x77\xfc\xb9\x41\x00\x00\x0e\x10\x00\x00\x0e\x10\x00\x09\x3a\x80\x00\x00\x00\x78")))
+     (CASE_S(QType::SOA, "ns.rec.test. hostmaster.test.rec. 2013051201 3600 3600 604800 120", "\x02ns\xc0\x11\x0ahostmaster\x04test\x03rec\x00\x77\xfc\xb9\x41\x00\x00\x0e\x10\x00\x00\x0e\x10\x00\x09\x3a\x80\x00\x00\x00\x78"))
+// local name without dots
+     (CASE_L(QType::SOA, "ns.rec.test hostmaster.test.rec 2013051201 3600 3600 604800 120", "ns.rec.test. hostmaster.test.rec. 2013051201 3600 3600 604800 120", "\x02ns\xc0\x11\x0ahostmaster\x04test\x03rec\x00\x77\xfc\xb9\x41\x00\x00\x0e\x10\x00\x00\x0e\x10\x00\x09\x3a\x80\x00\x00\x00\x78"))
 // non-local names
-     (case_t(QType::SOA, "ns.example.com. hostmaster.example.com. 2013051201 3600 3600 604800 120", LF("\x02ns\x07""example\x03""com\x00\x0ahostmaster\x07""example\x03""com\x00\x77\xfc\xb9\x41\x00\x00\x0e\x10\x00\x00\x0e\x10\x00\x09\x3a\x80\x00\x00\x00\x78")))
+     (CASE_S(QType::SOA, "ns.example.com. hostmaster.example.com. 2013051201 3600 3600 604800 120", "\x02ns\x07""example\x03""com\x00\x0ahostmaster\xc0\x28\x77\xfc\xb9\x41\x00\x00\x0e\x10\x00\x00\x0e\x10\x00\x09\x3a\x80\x00\x00\x00\x78"))
+
+// BROKEN TESTS (2) (deprecated)
+// local name
+     (CASE_S(QType::MR, "newmailbox.rec.test.", "\x0anewmailbox\xc0\x11"))
+// non-local name
+     (CASE_S(QType::MR, "newmailbox.example.com.", "\x0anewmailbox\x07""example\x03""com\x00"))
+
+// local name
+     (CASE_L(QType::PTR, "ptr.rec.test", "ptr.rec.test.", "\x03ptr\xc0\x11"))
+// non-local name
+     (CASE_L(QType::PTR, "ptr.example.com", "ptr.example.com.", "\x03ptr\x07""example\x03""com\x00"))
+     (CASE_S(QType::HINFO, "\"i686\" \"Linux\"", "\x04i686\x05Linux"))
+// local name
+     (CASE_S(QType::MX, "10 mx.rec.test.", "\x00\x0a\02mx\xc0\x11"))
+// non-local name
+     (CASE_S(QType::MX, "20 mx.example.com.", "\x00\x14\02mx\x07""example\x03""com\x00"))
+
+     (CASE_S(QType::TXT, "\"short text\"", "\x0ashort text"))
+     (CASE_S(QType::TXT, "\"long record test 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\" \"2222222222\"", "\xff""long record test 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\x0a""2222222222"))
+     (CASE_L(QType::TXT, "\"long record test 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222\"", "\"long record test 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\" \"2222222222\"", "\xff""long record test 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\x0a""2222222222"))
+// local name
+     (CASE_S(QType::RP, "admin.rec.test. admin-info.rec.test.", "\x05""admin\xc0\x11\0a""admin-info\xc0\x11")) 
+// non-local name
+     (CASE_S(QType::RP, "admin.example.com. admin-info.example.com.", "\x05""admin\x07""example\x03""com\x00\x0a""admin-info\xc0\x28"))
+// local name
+     (CASE_S(QType::AFSDB, "1 afs-server.rec.test.", "\x01\x0a""afs-server\xc0\x11"))
+// non-local name
+     (CASE_S(QType::AFSDB, "1 afs-server.example.com.", "\x01\x0a""afs-server\x07""example\x03""com\x00"))
+// deprecated (and i don't know what i am doing wrong)
+     (CASE_S(QType::KEY, "0 3 3 V19hwufL6LJARVIxzHDyGdvZ7dbQE0Kyl18yPIWj/sbCcsBbz7zO6Q2qgdzmWI3OvGNne2nxflhorhefKIMsUg==", "\x00\x00\x03\x03\x57\x5f\x61\xc2\xe7\xcb\xe8\xb2\x40\x45\x52\x31\xcc\x70\xf2\x19\xdb\xd9\xed\xd6\xd0\x13\x42\xb2\x97\x5f\x32\x3c\x85\xa3\xfe\xc6\xc2\x72\xc0\x5b\xcf\xbc\xce\xe9\x0d\xaa\x81\xdc\xe6\x58\x8d\xce\xbc\x63\x67\x7b\x69\xf1\x7e\x58\x68\xae\x17\x9f\x28\x83\x2c\x52"))
+     (CASE_L(QType::LOC, "32 7 19 S 116 2 25 E", "32 7 19.000 S 116 2 25.000 E 0.00m 1.00m 10000.00m 10.00m", "\x00\x12\x16\x13\x79\x1b\x7d\x28\x98\xe6\x48\x68\x00\x98\x96\x80"))
+     (CASE_L(QType::LOC, "32 7 19 S 116 2 25 E 10m", "32 7 19.000 S 116 2 25.000 E 10.00m 1.00m 10000.00m 10.00m", "\x00\x12\x16\x13\x79\x1b\x7d\x28\x98\xe6\x48\x68\x00\x98\x9a\x68"))
+     (CASE_L(QType::LOC, "42 21 54 N 71 06 18 W -24m 30m", "42 21 54.000 N 71 6 18.000 W -24.00m 30.00m 10000.00m 10.00m", "\x00\x33\x16\x13\x89\x17\x2d\xd0\x70\xbe\x15\xf0\x00\x98\x8d\x20"))
+     (CASE_L(QType::LOC, "42 21 43.952 N 71 5 6.344 W -24m 1m 200m", "42 21 43.952 N 71 5 6.344 W -24.00m 1.00m 200.00m 10.00m", "\x00\x12\x24\x13\x89\x17\x06\x90\x70\xbf\x2d\xd8\x00\x98\x8d\x20"))
+     (CASE_S(QType::AAAA, "fe80::250:56ff:fe9b:114", "\xFE\x80\x00\x00\x00\x00\x00\x00\x02\x50\x56\xFF\xFE\x9B\x01\x14"))
+// local name
+     (CASE_S(QType::SRV, "10 10 5060 sip.rec.test.", "\x00\x0a\x00\x0a\x13\xc4\x03sip\xc0\x11"))
+// non-local name
+     (CASE_S(QType::SRV, "10 10 5060 sip.example.com.", "\x00\x0a\x00\x0a\x13\xc4\x03sip\x07""example\x03""com\x00"))
+     (CASE_S(QType::NAPTR, "100 10 \"\" \"\" \"/urn:cid:.+@([^\\.]+\\.)(.*)$/\\2/i\" \".\"", "\x00\x64\x00\x0a\x00\x00\x20/urn:cid:.+@([^\\.]+\\.)(.*)$/\\2/i\x01."))
+     (CASE_S(QType::NAPTR, "100 50 \"s\" \"http+I2L+I2C+I2R\" \"\" _http._tcp.rec.test.", "\x00\x64\x00\x32\x01s\x10http+I2L+I2C+I2R\x00\x05_http\x04_tcp\xc0\x11"))
+     (CASE_S(QType::KX, "10 mail.rec.test.", "\x00\x0a\x04mail\x0c\x11"))
+
+// X.509 as per PKIX
+     (CASE_S(QType::CERT, "1 0 0 MIIB9DCCAV2gAwIBAgIJAKxUfFVXhw7HMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNVBAMMCHJlYy50ZXN0MB4XDTEzMDUxMjE5NDgwOVoXDTEzMDYxMTE5NDgwOVowEzERMA8GA1UEAwwIcmVjLnRlc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANKCu5aN/ewOXRPfzAo27XMXhYFCThCjfInTAUIEkzs6jBFZ/eyyIa/kFoiD0tAKwfFfykYU+9XgXeLjetD7rYt3SN3bzzCznoBGbGHHM0Fecrn0LV+tC/NfBB61Yx7e0AMUxmxIeLNRQW5ca5CW8qcIiiQ4fl0BScUjc5+E9QLHAgMBAAGjUDBOMB0GA1UdDgQWBBRzcVu/2bwrgkES+FhYbxZqr7mUgjAfBgNVHSMEGDAWgBRzcVu/2bwrgkES+FhYbxZqr7mUgjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAFVQ8dZBOasOhsWzA/xpAV0WdsqVkxBxrkGIRlbHHBFqOBOOz2MFSzUNx4mDy0qDKI28gcWmWaVsxoQ9VFLD6YRJuUoM8MDNcZDJbKpfDumjvvfnUAK+SiM2c4Ur3xpf0wanCA60/q2bOtFiB0tfAH6RVuIgMC3qjHAIaKEld+fE", "\x00\x01\x00\x00\x00\x30\x82\x01\xf4\x30\x82\x01\x5d\xa0\x03\x02\x01\x02\x02\x09\x00\xac\x54\x7c\x55\x57\x87\x0e\xc7\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x30\x13\x31\x11\x30\x0f\x06\x03\x55\x04\x03\x0c\x08\x72\x65\x63\x2e\x74\x65\x73\x74\x30\x1e\x17\x0d\x31\x33\x30\x35\x31\x32\x31\x39\x34\x38\x30\x39\x5a\x17\x0d\x31\x33\x30\x36\x31\x31\x31\x39\x34\x38\x30\x39\x5a\x30\x13\x31\x11\x30\x0f\x06\x03\x55\x04\x03\x0c\x08\x72\x65\x63\x2e\x74\x65\x73\x74\x30\x81\x9f\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x81\x8d\x00\x30\x81\x89\x02\x81\x81\x00\xd2\x82\xbb\x96\x8d\xfd\xec\x0e\x5d\x13\xdf\xcc\x0a\x36\xed\x73\x17\x85\x81\x42\x4e\x10\xa3\x7c\x89\xd3\x01\x42\x04\x93\x3b\x3a\x8c\x11\x59\xfd\xec\xb2\x21\xaf\xe4\x16\x88\x83\xd2\xd0\x0a\xc1\xf1\x5f\xca\x46\x14\xfb\xd5\xe0\x5d\xe2\xe3\x7a\xd0\xfb\xad\x8b\x77\x48\xdd\xdb\xcf\x30\xb3\x9e\x80\x46\x6c\x61\xc7\x33\x41\x5e\x72\xb9\xf4\x2d\x5f\xad\x0b\xf3\x5f\x04\x1e\xb5\x63\x1e\xde\xd0\x03\x14\xc6\x6c\x48\x78\xb3\x51\x41\x6e\x5c\x6b\x90\x96\xf2\xa7\x08\x8a\x24\x38\x7e\x5d\x01\x49\xc5\x23\x73\x9f\x84\xf5\x02\xc7\x02\x03\x01\x00\x01\xa3\x50\x30\x4e\x30\x1d\x06\x03\x55\x1d\x0e\x04\x16\x04\x14\x73\x71\x5b\xbf\xd9\xbc\x2b\x82\x41\x12\xf8\x58\x58\x6f\x16\x6a\xaf\xb9\x94\x82\x30\x1f\x06\x03\x55\x1d\x23\x04\x18\x30\x16\x80\x14\x73\x71\x5b\xbf\xd9\xbc\x2b\x82\x41\x12\xf8\x58\x58\x6f\x16\x6a\xaf\xb9\x94\x82\x30\x0c\x06\x03\x55\x1d\x13\x04\x05\x30\x03\x01\x01\xff\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x81\x81\x00\x55\x50\xf1\xd6\x41\x39\xab\x0e\x86\xc5\xb3\x03\xfc\x69\x01\x5d\x16\x76\xca\x95\x93\x10\x71\xae\x41\x88\x46\x56\xc7\x1c\x11\x6a\x38\x13\x8e\xcf\x63\x05\x4b\x35\x0d\xc7\x89\x83\xcb\x4a\x83\x28\x8d\xbc\x81\xc5\xa6\x59\xa5\x6c\xc6\x84\x3d\x54\x52\xc3\xe9\x84\x49\xb9\x4a\x0c\xf0\xc0\xcd\x71\x90\xc9\x6c\xaa\x5f\x0e\xe9\xa3\xbe\xf7\xe7\x50\x02\xbe\x4a\x23\x36\x73\x85\x2b\xdf\x1a\x5f\xd3\x06\xa7\x08\x0e\xb4\xfe\xad\x9b\x3a\xd1\x62\x07\x4b\x5f\x00\x7e\x91\x56\xe2\x20\x30\x2d\xea\x8c\x70\x08\x68\xa1\x25\x77\xe7\xc4"))
+// OpenPGP packet
+     (CASE_S(QType::CERT, "3 0 0 mI0EUY/1hwEEAMu5F3DnbcWiQ1vM7/FcIhsa9X4XBoTCGtvaZqXDmKTlloHE/8S+aZ31Ahv6GKcL8BCPCfqeN7qsTD70V5xsl8urojzcVeRyasZlsD6Tb9EgItmedCUdlSgG2qlsVnt9ptS2fap7GxXCS388XbroGlU3Qx99sIJtzXg3/yFgUuwzABEBAAG0GFRlc3QgS2V5IDx0ZXN0QHJlYy50ZXN0Poi4BBMBAgAiBQJRj/WHAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCkHxA5/czuNWg1BACwO34jmLdNfisIHZg6DTakn/0M/hKcNWhp2xnGXhgR7oA0yIyWyogvvd0vCK3K1Kh5WWeMSx1UdmlAQMOEx73O662UBk6KVxQDQcklQlvtSDiXQETtcdxMQ3OFGkGUKbVlIY+TUTuVgulcmCeQSB8AJXFNcKLjLl+X2ZYMpFx6ZQ==", "\x00\x03\x00\x00\x00\x98\x8d\x04\x51\x8f\xf5\x87\x01\x04\x00\xcb\xb9\x17\x70\xe7\x6d\xc5\xa2\x43\x5b\xcc\xef\xf1\x5c\x22\x1b\x1a\xf5\x7e\x17\x06\x84\xc2\x1a\xdb\xda\x66\xa5\xc3\x98\xa4\xe5\x96\x81\xc4\xff\xc4\xbe\x69\x9d\xf5\x02\x1b\xfa\x18\xa7\x0b\xf0\x10\x8f\x09\xfa\x9e\x37\xba\xac\x4c\x3e\xf4\x57\x9c\x6c\x97\xcb\xab\xa2\x3c\xdc\x55\xe4\x72\x6a\xc6\x65\xb0\x3e\x93\x6f\xd1\x20\x22\xd9\x9e\x74\x25\x1d\x95\x28\x06\xda\xa9\x6c\x56\x7b\x7d\xa6\xd4\xb6\x7d\xaa\x7b\x1b\x15\xc2\x4b\x7f\x3c\x5d\xba\xe8\x1a\x55\x37\x43\x1f\x7d\xb0\x82\x6d\xcd\x78\x37\xff\x21\x60\x52\xec\x33\x00\x11\x01\x00\x01\xb4\x18\x54\x65\x73\x74\x20\x4b\x65\x79\x20\x3c\x74\x65\x73\x74\x40\x72\x65\x63\x2e\x74\x65\x73\x74\x3e\x88\xb8\x04\x13\x01\x02\x00\x22\x05\x02\x51\x8f\xf5\x87\x02\x1b\x03\x06\x0b\x09\x08\x07\x03\x02\x06\x15\x08\x02\x09\x0a\x0b\x04\x16\x02\x03\x01\x02\x1e\x01\x02\x17\x80\x00\x0a\x09\x10\xa4\x1f\x10\x39\xfd\xcc\xee\x35\x68\x35\x04\x00\xb0\x3b\x7e\x23\x98\xb7\x4d\x7e\x2b\x08\x1d\x98\x3a\x0d\x36\xa4\x9f\xfd\x0c\xfe\x12\x9c\x35\x68\x69\xdb\x19\xc6\x5e\x18\x11\xee\x80\x34\xc8\x8c\x96\xca\x88\x2f\xbd\xdd\x2f\x08\xad\xca\xd4\xa8\x79\x59\x67\x8c\x4b\x1d\x54\x76\x69\x40\x40\xc3\x84\xc7\xbd\xce\xeb\xad\x94\x06\x4e\x8a\x57\x14\x03\x41\xc9\x25\x42\x5b\xed\x48\x38\x97\x40\x44\xed\x71\xdc\x4c\x43\x73\x85\x1a\x41\x94\x29\xb5\x65\x21\x8f\x93\x51\x3b\x95\x82\xe9\x5c\x98\x27\x90\x48\x1f\x00\x25\x71\x4d\x70\xa2\xe3\x2e\x5f\x97\xd9\x96\x0c\xa4\x5c\x7a\x65"))
+// IPKIX     The URL of an X.509 data object
+     (CASE_S(QType::CERT, "4 0 0 http://rec.test/server.pem", "\x00\x04\x00\x00\x00http://rec.test/server.pem"))
+// IPGP      The fingerprint and URL of an OpenPGP packet
+     (CASE_S(QType::CERT, "6 0 0 939df56523d834de55eaab44a41f1039fdccee35 http://rec.test/server.pgp", "\x00\x06\x00\x00\x00\x93\x9d\xf5\x65\x23\xd8\x34\xde\x55\xea\xab\x44\xa4\x1f\x10\x39\xfd\xcc\xee\x35http://rec.test/server.pgp"))
+
+     (CASE_L(QType::DS, "20642 8 2 04443ABE7E94C3985196BEAE5D548C727B044DDA5151E60D7CD76A9F D931D00E", "20642 8 2 04443abe7e94c3985196beae5d548c727b044dda5151e60d7cd76a9fd931d00e", "\x50\xa2\x08\x02\x04\x44\x3a\xbe\x7e\x94\xc3\x98\x51\x96\xbe\xae\x5d\x54\x8c\x72\x7b\x04\x4d\xda\x51\x51\xe6\x0d\x7c\xd7\x6a\x9f\xd9\x31\xd0\x0e"))
+     (CASE_L(QType::DS, "20642 8 2 04443ABE7E94C3985196BEAE5D548C727B044DDA5151E60D7CD76A9F D931D00E", "20642 8 2 04443abe7e94c3985196beae5d548c727b044dda5151e60d7cd76a9fd931d00e", "\x50\xa2\x08\x02\x04\x44\x3a\xbe\x7e\x94\xc3\x98\x51\x96\xbe\xae\x5d\x54\x8c\x72\x7b\x04\x4d\xda\x51\x51\xe6\x0d\x7c\xd7\x6a\x9f\xd9\x31\xd0\x0e"))
+     (CASE_S(QType::SSHFP, "1 1 aa65e3415a50d9b3519c2b17aceb815fc2538d88", "\x01\x01\xaa\x65\xe3\x41\x5a\x50\xd9\xb3\x51\x9c\x2b\x17\xac\xeb\x81\x5f\xc2\x53\x8d\x88"))
+// as per RFC4025 
+     (CASE_S(QType::IPSECKEY, "255 255 0 0", "\xff\xff\x00\x00"))
+     (CASE_S(QType::IPSECKEY, "10 10 1 127.0.0.1 V19hwufL6LJARVIxzHDyGdvZ7dbQE0Kyl18yPIWj/sbCcsBbz7zO6Q2qgdzmWI3OvGNne2nxflhorhefKIMsUg==", "\x0a\x0a\x7f\x00\x00\x01\x57\x5f\x61\xc2\xe7\xcb\xe8\xb2\x40\x45\x52\x31\xcc\x70\xf2\x19\xdb\xd9\xed\xd6\xd0\x13\x42\xb2\x97\x5f\x32\x3c\x85\xa3\xfe\xc6\xc2\x72\xc0\x5b\xcf\xbc\xce\xe9\x0d\xaa\x81\xdc\xe6\x58\x8d\xce\xbc\x63\x67\x7b\x69\xf1\x7e\x58\x68\xae\x17\x9f\x28\x83\x2c\x52"))
+     (CASE_S(QType::IPSECKEY, "10 10 2 fe80::250:56ff:fe9b:114 V19hwufL6LJARVIxzHDyGdvZ7dbQE0Kyl18yPIWj/sbCcsBbz7zO6Q2qgdzmWI3OvGNne2nxflhorhefKIMsUg==", "\x0a\x0a\xFE\x80\x00\x00\x00\x00\x00\x00\x02\x50\x56\xFF\xFE\x9B\x01\x14\x57\x5f\x61\xc2\xe7\xcb\xe8\xb2\x40\x45\x52\x31\xcc\x70\xf2\x19\xdb\xd9\xed\xd6\xd0\x13\x42\xb2\x97\x5f\x32\x3c\x85\xa3\xfe\xc6\xc2\x72\xc0\x5b\xcf\xbc\xce\xe9\x0d\xaa\x81\xdc\xe6\x58\x8d\xce\xbc\x63\x67\x7b\x69\xf1\x7e\x58\x68\xae\x17\x9f\x28\x83\x2c\x52"))
+     (CASE_S(QType::IPSECKEY, "10 10 3 gw.rec.test. V19hwufL6LJARVIxzHDyGdvZ7dbQE0Kyl18yPIWj/sbCcsBbz7zO6Q2qgdzmWI3OvGNne2nxflhorhefKIMsUg==", "\x0a\x0a\x03\x02gw\x03rec\x04test\x00\x57\x5f\x61\xc2\xe7\xcb\xe8\xb2\x40\x45\x52\x31\xcc\x70\xf2\x19\xdb\xd9\xed\xd6\xd0\x13\x42\xb2\x97\x5f\x32\x3c\x85\xa3\xfe\xc6\xc2\x72\xc0\x5b\xcf\xbc\xce\xe9\x0d\xaa\x81\xdc\xe6\x58\x8d\xce\xbc\x63\x67\x7b\x69\xf1\x7e\x58\x68\xae\x17\x9f\x28\x83\x2c\x52"))
 
-//     (case_t(QType::MR, "zone format", LF("line format")))
-//     (case_t(QType::PTR, "zone format", LF("line format")))
-//     (case_t(QType::HINFO, "zone format", LF("line format")))
-//     (case_t(QType::MX, "zone format", LF("line format")))
-//     (case_t(QType::TXT, "zone format", LF("line format")))
-//     (case_t(QType::RP, "zone format", LF("line format")))
-//     (case_t(QType::AFSDB, "zone format", LF("line format")))
-//     (case_t(QType::KEY, "zone format", LF("line format")))
-//     (case_t(QType::LOC, "zone format", LF("line format")))
-     (case_t(QType::AAAA, "fe80::250:56ff:fe9b:114", LF("\xFE\x80\x00\x00\x00\x00\x00\x00\x02\x50\x56\xFF\xFE\x9B\x01\x14")))
-//     (case_t(QType::SRV, "zone format", LF("line format")))
-//     (case_t(QType::NAPTR, "zone format", LF("line format")))
-//     (case_t(QType::KX, "zone format", LF("line format")))
-//     (case_t(QType::CERT, "zone format", LF("line format")))
-//     (case_t(QType::OPT, "zone format", LF("line format")))
-//     (case_t(QType::DS, "zone format", LF("line format")))
-//     (case_t(QType::SSHFP, "zone format", LF("line format")))
-//     (case_t(QType::IPSECKEY, "zone format", LF("line format")))
-//     (case_t(QType::RRSIG, "zone format", LF("line format")))
-//     (case_t(QType::NSEC, "zone format", LF("line format")))
-//     (case_t(QType::DNSKEY, "zone format", LF("line format")))
-//     (case_t(QType::DHCID, "zone format", LF("line format")))
-//     (case_t(QType::NSEC3, "zone format", LF("line format")))
-//     (case_t(QType::NSEC3PARAM, "zone format", LF("line format")))
-//     (case_t(QType::TLSA, "zone format", LF("line format")))
-//     (case_t(QType::SPF, "zone format", LF("line format")))
-     (case_t(QType::EUI48, "00-11-22-33-44-55", LF("\x00\x11\x22\x33\x44\x55")))
-     (case_t(QType::EUI64, "00-11-22-33-44-55-66-77", LF("\x00\x11\x22\x33\x44\x55\x66\x77")));
-//     (case_t(QType::TSIG, "zone format", LF("line format")))
-//     (case_t(QType::AXFR, "zone format", LF("line format")))
-//     (case_t(QType::IXFR, "zone format", LF("line format")))
-//     (case_t(QType::ANY, "zone format", LF("line format")))
-//     (case_t(QType::URL, "zone format", LF("line format")))
-//     (case_t(QType::MBOXFW, "zone format", LF("line format")))
-//     (case_t(QType::CURL, "zone format", LF("line format")))
-//     (case_t(QType::ADDR, "zone format", LF("line format")))
-//     (case_t(QType::DLV, "zone format", LF("line format")))
+     (CASE_S(QType::RRSIG, "SOA 8 3 300 20130523000000 20130509000000 54216 rec.test. ecWKD/OsdAiXpbM/sgPT82KVD/WiQnnqcxoJgiH3ixHa+LOAcYU7FG7V4BRRJxLriY1e0rB2gAs3kCel9D4bzfK6wAqG4Di/eHUgHptRlaR2ycELJ4t1pjzrnuGiIzA1wM2izRmeE+Xoy1367Qu0pOz5DLzTfQITWFsB2iUzN4Y=", "\x00\x06\x08\x03\x00\x00\x01\x2c\x51\x9d\x5c\x00\x51\x8a\xe7\x00\xd3\xc8\x03\x72\x65\x63\x04\x74\x65\x73\x74\x00\x79\xc5\x8a\x0f\xf3\xac\x74\x08\x97\xa5\xb3\x3f\xb2\x03\xd3\xf3\x62\x95\x0f\xf5\xa2\x42\x79\xea\x73\x1a\x09\x82\x21\xf7\x8b\x11\xda\xf8\xb3\x80\x71\x85\x3b\x14\x6e\xd5\xe0\x14\x51\x27\x12\xeb\x89\x8d\x5e\xd2\xb0\x76\x80\x0b\x37\x90\x27\xa5\xf4\x3e\x1b\xcd\xf2\xba\xc0\x0a\x86\xe0\x38\xbf\x78\x75\x20\x1e\x9b\x51\x95\xa4\x76\xc9\xc1\x0b\x27\x8b\x75\xa6\x3c\xeb\x9e\xe1\xa2\x23\x30\x35\xc0\xcd\xa2\xcd\x19\x9e\x13\xe5\xe8\xcb\x5d\xfa\xed\x0b\xb4\xa4\xec\xf9\x0c\xbc\xd3\x7d\x02\x13\x58\x5b\x01\xda\x25\x33\x37\x86"))
+     (CASE_S(QType::NSEC, "a.rec.test. A NS SOA MX AAAA RRSIG NSEC DNSKEY", "\x01""a\x03rec\x04test\x00\x00\x07\x62\x01\x00\x08\x00\x03\x80"))
+     (CASE_S(QType::DNSKEY, "257 3 5 AwEAAZVtlHc8O4TVmlGx/PGJTc7hbVjMR7RywxLuAm1dqgyHvgNRD7chYLsALOdZKW6VRvusbyhoOPilnh8XpucBDqjGD6lIemsURz7drZEqcLupVA0TPxXABZ6auJ3jumqIhSOcLj9rpSwI4xuWt0yu6LR9tL2q8+A0yEZxcAaKS+Wq0fExJ93NxgXl1/fY+JcYQvonjd31GxXXef9uf0exXyzowh5h8+IIBETU+ZiYVB5BqiwkICZL/OX57idm99ycA2/tIen66F8u2ueTvgPcecnoqHvW0MtLQKzeNmqdGNthHhV5di0SZdMZQeo/izs68uN2WzqQDZy9Ec2JwBTbxWE=", "\x01\x01\x03\x05\x03\x01\x00\x01\x95\x6d\x94\x77\x3c\x3b\x84\xd5\x9a\x51\xb1\xfc\xf1\x89\x4d\xce\xe1\x6d\x58\xcc\x47\xb4\x72\xc3\x12\xee\x02\x6d\x5d\xaa\x0c\x87\xbe\x03\x51\x0f\xb7\x21\x60\xbb\x00\x2c\xe7\x59\x29\x6e\x95\x46\xfb\xac\x6f\x28\x68\x38\xf8\xa5\x9e\x1f\x17\xa6\xe7\x01\x0e\xa8\xc6\x0f\xa9\x48\x7a\x6b\x14\x47\x3e\xdd\xad\x91\x2a\x70\xbb\xa9\x54\x0d\x13\x3f\x15\xc0\x05\x9e\x9a\xb8\x9d\xe3\xba\x6a\x88\x85\x23\x9c\x2e\x3f\x6b\xa5\x2c\x08\xe3\x1b\x96\xb7\x4c\xae\xe8\xb4\x7d\xb4\xbd\xaa\xf3\xe0\x34\xc8\x46\x71\x70\x06\x8a\x4b\xe5\xaa\xd1\xf1\x31\x27\xdd\xcd\xc6\x05\xe5\xd7\xf7\xd8\xf8\x97\x18\x42\xfa\x27\x8d\xdd\xf5\x1b\x15\xd7\x79\xff\x6e\x7f\x47\xb1\x5f\x2c\xe8\xc2\x1e\x61\xf3\xe2\x08\x04\x44\xd4\xf9\x98\x98\x54\x1e\x41\xaa\x2c\x24\x20\x26\x4b\xfc\xe5\xf9\xee\x27\x66\xf7\xdc\x9c\x03\x6f\xed\x21\xe9\xfa\xe8\x5f\x2e\xda\xe7\x93\xbe\x03\xdc\x79\xc9\xe8\xa8\x7b\xd6\xd0\xcb\x4b\x40\xac\xde\x36\x6a\x9d\x18\xdb\x61\x1e\x15\x79\x76\x2d\x12\x65\xd3\x19\x41\xea\x3f\x8b\x3b\x3a\xf2\xe3\x76\x5b\x3a\x90\x0d\x9c\xbd\x11\xcd\x89\xc0\x14\xdb\xc5\x61"))
+//     (CASE_S(QType::DHCID, "zone format", "line format"))
+     (CASE_S(QType::NSEC3, "1 1 1 f00b RPF1JGFCCNFA7STPTIJ9FPFNM40A4FLL NS SOA RRSIG DNSKEY NSEC3PARAM", "\x01\x01\x00\x01\x02\xf0\x0b\x14\xde\x5e\x19\xc1\xec\x65\xde\xa3\xf3\xb9\xec\xa6\x97\xe5\xf7\xb1\x00\xa2\x3e\xb5\x00\x07\x22\x00\x00\x00\x00\x02\x90"))
+     (CASE_S(QType::NSEC3PARAM, "1 0 1 f00b", "\x01\x00\x00\x01\x02\xf0\x0b"))
+//     (CASE_S(QType::TLSA, "zone format", "line format"))
+     (CASE_S(QType::SPF, "\"v=spf1 a:mail.rec.test ~all\"", "\x1bv=spf1 a:mail.rec.test ~all"))
+     (CASE_S(QType::EUI48, "00-11-22-33-44-55", "\x00\x11\x22\x33\x44\x55"))
+     (CASE_S(QType::EUI64, "00-11-22-33-44-55-66-77", "\x00\x11\x22\x33\x44\x55\x66\x77"))
+     (CASE_S(QType::TSIG, "HMAC-MD5.SIG-ALG.REG.INT 1368386956 60 16 4e46e90faebf32d828f0650415923086 12345 0 0", "\x08HMAC-MD5\x07SIG-ALG\x03REG\x03INT\x00\x00\x00\x51\x8f\xed\x8c\x00\x3c\x00\x0a\x4e\x46\xe9\x0f\xae\xbf\x32\xd8\x28\xf0\x65\x04\x15\x92\x30\x86\x30\x39\x00\x00\x00\x00"))
+     (CASE_S(QType::URL, "http://server.rec.test/", "\x17http://server.rec.test/"))
+     (CASE_S(QType::MBOXFW, "you@yourcompany.com", "line format"))
+     (CASE_S(QType::CURL, "http://server.rec.test/", "\x17http://server.rec.test/"))
+//     (CASE_S(QType::ADDR, "zone format", "line format")) <-- FIXME: What is this?
+     (CASE_L(QType::DLV, "20642 8 2 04443ABE7E94C3985196BEAE5D548C727B044DDA5151E60D7CD76A9F D931D00E", "20642 8 2 04443abe7e94c3985196beae5d548c727b044dda5151e60d7cd76a9fd931d00e", "\x50\xa2\x08\x02\x04\x44\x3a\xbe\x7e\x94\xc3\x98\x51\x96\xbe\xae\x5d\x54\x8c\x72\x7b\x04\x4d\xda\x51\x51\xe6\x0d\x7c\xd7\x6a\x9f\xd9\x31\xd0\x0e"))
+;
 
+  int n=0;
+  int lq=-1;
   BOOST_FOREACH(const cases_t::value_type& val, cases) {
    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.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 (use hex format for error readability)
-   string cmpData = makeHexDump(std::string(val.get<2>(), val.get<2>() + val.get<3>()));
-   recData = makeHexDump(recData);
-   BOOST_CHECK_EQUAL(recData, cmpData);
+   if (lq != q.getCode()) n = 0;
+   lq = q.getCode();
+   n++;
+   BOOST_TEST_CHECKPOINT("Checking record type " << q.getName() << " test #" << n);
+   BOOST_TEST_MESSAGE("Checking record type " << q.getName() << " test #" << n);
+   try {
+      DNSRecordContent *rec = DNSRecordContent::mastermake(q.getCode(), 1, val.get<1>());
+      BOOST_CHECK_MESSAGE(rec != NULL, "mastermake( " << q.getCode() << ", 1, " << val.get<1>() << ") returned NULL");
+      if (rec == NULL) continue;
+      // now verify the record (note that this will be same as *input* value (except for certain QTypes)
+      switch(q.getCode()) {
+         case QType::LOC:
+         case QType::DS:
+            BOOST_CHECK_EQUAL(rec->getZoneRepresentation(), val.get<2>());
+         break;
+         default:
+            BOOST_CHECK_EQUAL(rec->getZoneRepresentation(), val.get<1>());
+      }
+      std::string recData = rec->serialize("rec.test");
+      boost::shared_ptr<DNSRecordContent> rec2 = DNSRecordContent::unserialize("rec.test",q.getCode(),recData);
+      BOOST_CHECK_MESSAGE(rec2 != NULL, "unserialize(rec.test, " << q.getCode() << ", recData) returned NULL");
+      if (rec2 == NULL) continue;
+      // now verify the zone representation (here it can be different!)
+      BOOST_CHECK_EQUAL(rec2->getZoneRepresentation(), val.get<2>());
+      // and last, check the wire format (using hex format for error readability)
+      string cmpData = makeHexDump(val.get<3>());
+      recData = makeHexDump(recData);
+      BOOST_CHECK_EQUAL(recData, cmpData);
+   } catch (std::runtime_error &err) {
+      BOOST_CHECK_MESSAGE(false, "Failed to verify " << q.getName() << ": " << err.what());
+   }
  }
 }