]>
Commit | Line | Data |
---|---|---|
d26fa315 PD |
1 | #define BOOST_TEST_DYN_LINK |
2 | #define BOOST_TEST_NO_MAIN | |
3 | ||
4 | #ifdef HAVE_CONFIG_H | |
5 | #include "config.h" | |
6 | #endif | |
7 | ||
8 | #include <boost/test/unit_test.hpp> | |
9 | #include <fstream> | |
10 | ||
11 | #include "dnswriter.hh" | |
12 | #include "dnsparser.hh" | |
13 | ||
14 | BOOST_AUTO_TEST_SUITE(test_dnswriter_cc) | |
15 | ||
02e7763f PD |
16 | BOOST_AUTO_TEST_CASE(test_compressionBool) { |
17 | auto testCompressionBool = [](bool compress, size_t size1, size_t size2) { | |
18 | DNSName name("powerdns.com."); | |
19 | ||
20 | vector<uint8_t> packet; | |
21 | DNSPacketWriter pwR(packet, name, QType::A, QClass::IN, 0); | |
22 | pwR.getHeader()->qr = 1; | |
23 | ||
24 | pwR.startRecord(DNSName("mediumsizedlabel.example.net"), QType::A, 3600, QClass::IN, DNSResourceRecord::ANSWER, compress); | |
25 | pwR.xfrIP('P'<<24 | | |
26 | 'Q'<<16 | | |
27 | 'R'<<8 | | |
28 | 'S'); | |
29 | pwR.commit(); | |
30 | BOOST_CHECK_EQUAL(pwR.size(), size1); | |
31 | ||
32 | pwR.startRecord(DNSName("adifferentlabel.example.net"), QType::NS, 3600, QClass::IN, DNSResourceRecord::ANSWER, compress); | |
33 | pwR.xfrName(DNSName("target.example.net"), true); | |
34 | pwR.commit(); | |
35 | BOOST_CHECK_EQUAL(pwR.size(), size2); | |
36 | ||
37 | string spacket(packet.begin(), packet.end()); | |
38 | ||
39 | BOOST_CHECK_NO_THROW(MOADNSParser mdp(false, spacket)); | |
40 | }; | |
41 | ||
42 | testCompressionBool(true, 74, 111); | |
43 | testCompressionBool(false, 74, 133); | |
44 | } | |
45 | ||
d26fa315 PD |
46 | BOOST_AUTO_TEST_CASE(test_compressionBoundary) { |
47 | DNSName name("powerdns.com."); | |
48 | ||
49 | vector<uint8_t> packet; | |
50 | DNSPacketWriter pwR(packet, name, QType::A, QClass::IN, 0); | |
51 | pwR.getHeader()->qr = 1; | |
52 | ||
53 | /* record we want to see altered */ | |
54 | pwR.startRecord(name, QType::TXT, 3600, QClass::IN, DNSResourceRecord::ANSWER); | |
55 | auto txt = string("\"")+string(16262, 'A')+string("\""); | |
56 | pwR.xfrText(txt); | |
57 | pwR.commit(); | |
58 | BOOST_CHECK_EQUAL(pwR.size(), 16368); | |
59 | ||
60 | pwR.startRecord(DNSName("mediumsizedlabel.example.net"), QType::A, 3600, QClass::IN, DNSResourceRecord::ANSWER); | |
61 | pwR.xfrIP('P'<<24 | | |
62 | 'Q'<<16 | | |
63 | 'R'<<8 | | |
64 | 'S'); | |
65 | pwR.commit(); | |
66 | BOOST_CHECK_EQUAL(pwR.size(), 16412); // 16412 (0x401c) puts '7example3net' at 0x4001 | |
67 | ||
68 | pwR.startRecord(DNSName("adifferentlabel.example.net"), QType::A, 3600, QClass::IN, DNSResourceRecord::ANSWER); | |
69 | pwR.xfrIP('D'<<24 | | |
70 | 'E'<<16 | | |
71 | 'F'<<8 | | |
72 | 'G'); | |
73 | pwR.commit(); | |
74 | BOOST_CHECK_EQUAL(pwR.size(), 16455); | |
75 | ||
76 | string spacket(packet.begin(), packet.end()); | |
77 | ||
78 | BOOST_CHECK_NO_THROW(MOADNSParser mdp(false, spacket)); | |
79 | } | |
80 | ||
81 | BOOST_AUTO_TEST_SUITE_END() |