1 #define BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_NO_MAIN
7 #include <boost/test/unit_test.hpp>
8 #include "dnswriter.hh"
9 #include "dnsrecords.hh"
10 #include "dns_random.hh"
12 #include "recpacketcache.hh"
16 BOOST_AUTO_TEST_SUITE(recpacketcache_cc
)
18 BOOST_AUTO_TEST_CASE(test_recPacketCacheSimple
) {
19 RecursorPacketCache rpc
;
25 BOOST_CHECK_EQUAL(rpc
.size(), 0);
27 DNSName
qname("www.powerdns.com");
28 vector
<uint8_t> packet
;
29 DNSPacketWriter
pw(packet
, qname
, QType::A
);
30 pw
.getHeader()->rd
=true;
31 pw
.getHeader()->qr
=false;
32 pw
.getHeader()->id
=random();
33 string
qpacket((const char*)&packet
[0], packet
.size());
34 pw
.startRecord(qname
, QType::A
, ttd
);
36 BOOST_CHECK_EQUAL(rpc
.getResponsePacket(tag
, qpacket
, time(nullptr), &fpacket
, &age
, &qhash
), false);
37 BOOST_CHECK_EQUAL(rpc
.getResponsePacket(tag
, qpacket
, qname
, QType::A
, QClass::IN
, time(nullptr), &fpacket
, &age
, &qhash
), false);
39 ARecordContent
ar("127.0.0.1");
42 string
rpacket((const char*)&packet
[0], packet
.size());
44 rpc
.insertResponsePacket(tag
, qhash
, qname
, QType::A
, QClass::IN
, rpacket
, time(0), ttd
);
45 BOOST_CHECK_EQUAL(rpc
.size(), 1);
47 BOOST_CHECK_EQUAL(rpc
.size(), 0);
48 rpc
.insertResponsePacket(tag
, qhash
, qname
, QType::A
, QClass::IN
, rpacket
, time(0), ttd
);
49 BOOST_CHECK_EQUAL(rpc
.size(), 1);
50 rpc
.doWipePacketCache(qname
);
51 BOOST_CHECK_EQUAL(rpc
.size(), 0);
53 rpc
.insertResponsePacket(tag
, qhash
, qname
, QType::A
, QClass::IN
, rpacket
, time(0), ttd
);
55 bool found
= rpc
.getResponsePacket(tag
, qpacket
, time(nullptr), &fpacket
, &age
, &qhash2
);
56 BOOST_CHECK_EQUAL(found
, true);
57 BOOST_CHECK_EQUAL(qhash
, qhash2
);
58 BOOST_CHECK_EQUAL(fpacket
, rpacket
);
59 found
= rpc
.getResponsePacket(tag
, qpacket
, qname
, QType::A
, QClass::IN
, time(nullptr), &fpacket
, &age
, &qhash2
);
60 BOOST_CHECK_EQUAL(found
, true);
61 BOOST_CHECK_EQUAL(qhash
, qhash2
);
62 BOOST_CHECK_EQUAL(fpacket
, rpacket
);
65 qname
+=DNSName("co.uk");
66 DNSPacketWriter
pw2(packet
, qname
, QType::A
);
68 pw2
.getHeader()->rd
=true;
69 pw2
.getHeader()->qr
=false;
70 pw2
.getHeader()->id
=random();
71 qpacket
.assign((const char*)&packet
[0], packet
.size());
73 found
= rpc
.getResponsePacket(tag
, qpacket
, time(nullptr), &fpacket
, &age
, &qhash
);
74 BOOST_CHECK_EQUAL(found
, false);
75 found
= rpc
.getResponsePacket(tag
, qpacket
, qname
, QType::A
, QClass::IN
, time(nullptr), &fpacket
, &age
, &qhash
);
76 BOOST_CHECK_EQUAL(found
, false);
78 rpc
.doWipePacketCache(DNSName("com"), 0xffff, true);
79 BOOST_CHECK_EQUAL(rpc
.size(), 0);
82 BOOST_AUTO_TEST_SUITE_END()