]> git.ipfire.org Git - thirdparty/pdns.git/blame - pdns/test-recpacketcache_cc.cc
revamp recursor packet cache to be far less clever and simply hash its question case...
[thirdparty/pdns.git] / pdns / test-recpacketcache_cc.cc
CommitLineData
49a3500d 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#include <boost/test/unit_test.hpp>
8#include "dnswriter.hh"
9#include "dnsrecords.hh"
10#include "dns_random.hh"
11#include "iputils.hh"
12#include "recpacketcache.hh"
13#include <utility>
14
15
16BOOST_AUTO_TEST_SUITE(recpacketcache_cc)
17
18BOOST_AUTO_TEST_CASE(test_recPacketCacheSimple) {
19 RecursorPacketCache rpc;
20 BOOST_CHECK_EQUAL(rpc.size(), 0);
21
22 DNSName qname("www.powerdns.com");
23 vector<uint8_t> packet;
24 DNSPacketWriter pw(packet, qname, QType::A);
25 pw.getHeader()->rd=true;
26 pw.getHeader()->qr=false;
27 pw.getHeader()->id=random();
28 string qpacket((const char*)&packet[0], packet.size());
29 pw.startRecord(qname, QType::A, 3600);
30
31 ARecordContent ar("127.0.0.1");
32 ar.toPacket(pw);
33 pw.commit();
34 string rpacket((const char*)&packet[0], packet.size());
35
36 rpc.insertResponsePacket(0,qname, QType::A, qpacket, rpacket, time(0), 3600);
37 BOOST_CHECK_EQUAL(rpc.size(), 1);
38 rpc.doPruneTo(0);
39 BOOST_CHECK_EQUAL(rpc.size(), 0);
40 rpc.insertResponsePacket(0,qname, QType::A, qpacket, rpacket, time(0), 3600);
41 BOOST_CHECK_EQUAL(rpc.size(), 1);
42 rpc.doWipePacketCache(qname);
43 BOOST_CHECK_EQUAL(rpc.size(), 0);
44
45 rpc.insertResponsePacket(0,qname, QType::A, qpacket, rpacket, time(0), 3600);
46 uint32_t age=0;
47 string fpacket;
48 bool found = rpc.getResponsePacket(0, qpacket, time(0), &fpacket, &age);
49 BOOST_CHECK_EQUAL(found, 1);
50 BOOST_CHECK_EQUAL(fpacket, rpacket);
51
52 packet.clear();
53 qname+=DNSName("co.uk");
54 DNSPacketWriter pw2(packet, qname, QType::A);
55
56 pw2.getHeader()->rd=true;
57 pw2.getHeader()->qr=false;
58 pw2.getHeader()->id=random();
59 qpacket.assign((const char*)&packet[0], packet.size());
60 found = rpc.getResponsePacket(0, qpacket, time(0), &fpacket, &age);
61 BOOST_CHECK_EQUAL(found, 0);
62
63 rpc.doWipePacketCache(DNSName("com"), 0xffff, true);
64 BOOST_CHECK_EQUAL(rpc.size(), 0);
65
66
67
68}
69
70BOOST_AUTO_TEST_SUITE_END()