]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/test-dnswriter_cc.cc
Better (actual) fix for leak reported by Coverity.
[thirdparty/pdns.git] / pdns / test-dnswriter_cc.cc
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
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
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(), 16368U);
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(), 16412U); // 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(), 16455U);
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()