]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/test-communicator_hh.cc
dnsdist: Fix DNS over plain HTTP broken by `reloadAllCertificates()`
[thirdparty/pdns.git] / pdns / test-communicator_hh.cc
1 #ifndef BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_DYN_LINK
3 #endif
4
5 #define BOOST_TEST_NO_MAIN
6 #ifdef HAVE_CONFIG_H
7 #include "config.h"
8 #endif
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <boost/test/unit_test.hpp>
12 #include "communicator.hh"
13
14 BOOST_AUTO_TEST_SUITE(test_communicator_hh)
15
16 BOOST_AUTO_TEST_CASE(test_axfr_queue_priority_order)
17 {
18 SuckRequest sr[5] = {
19 {DNSName("test1.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::SignaturesRefresh, 0}},
20 {DNSName("test2.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::SerialRefresh, 1}},
21 {DNSName("test3.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::Notify, 2}},
22 {DNSName("test4.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::Api, 3}},
23 {DNSName("test5.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::PdnsControl, 4}},
24 };
25
26 UniQueue suckDomains;
27
28 suckDomains.insert(sr[0]);
29 suckDomains.insert(sr[1]);
30 suckDomains.insert(sr[2]);
31 suckDomains.insert(sr[3]);
32 suckDomains.insert(sr[4]);
33
34 for (int i = 4; i >= 0; i--) {
35 auto iter = suckDomains.begin();
36 BOOST_CHECK_EQUAL(iter->domain, sr[i].domain);
37 suckDomains.erase(iter);
38 }
39 BOOST_CHECK(suckDomains.empty());
40 }
41
42 BOOST_AUTO_TEST_CASE(test_axfr_queue_insert_and_priority_order)
43 {
44 SuckRequest sr[5] = {
45 {DNSName("test1.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::Api, 2}},
46 {DNSName("test2.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::Api, 1}},
47 {DNSName("test3.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::Api, 0}},
48 {DNSName("test4.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::PdnsControl, 4}},
49 {DNSName("test5.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::PdnsControl, 3}},
50 };
51
52 UniQueue suckDomains;
53
54 suckDomains.insert(sr[0]);
55 suckDomains.insert(sr[1]);
56 suckDomains.insert(sr[2]);
57 suckDomains.insert(sr[3]);
58 suckDomains.insert(sr[4]);
59
60 for (int i = 4; i >= 0; i--) {
61 auto iter = suckDomains.begin();
62 BOOST_CHECK_EQUAL(iter->domain, sr[i].domain);
63 suckDomains.erase(iter);
64 }
65 BOOST_CHECK(suckDomains.empty());
66 }
67
68 BOOST_AUTO_TEST_CASE(test_axfr_queue_insert_and_priority_order_after_modify)
69 {
70 SuckRequest sr[5] = {
71 {DNSName("test1.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::Api, 1}},
72 {DNSName("test2.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::Api, 0}},
73 {DNSName("test3.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::Api, 2}},
74 {DNSName("test4.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::PdnsControl, 4}},
75 {DNSName("test5.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::PdnsControl, 3}},
76 };
77 SuckRequest rr = {DNSName("test3.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::PdnsControl, 5}};
78 SuckRequest rr2 = {DNSName("test4.com"), ComboAddress("0.0.0.0"), false, {SuckRequest::Api, 6}};
79
80 UniQueue suckDomains;
81
82 suckDomains.insert(sr[0]);
83 suckDomains.insert(sr[1]);
84 suckDomains.insert(sr[2]);
85 suckDomains.insert(sr[3]);
86 suckDomains.insert(sr[4]);
87
88 auto res = suckDomains.insert(rr);
89 BOOST_CHECK(!res.second);
90 suckDomains.modify(res.first, [priorityAndOrder = rr.priorityAndOrder](SuckRequest& so) {
91 if (priorityAndOrder.first < so.priorityAndOrder.first) {
92 so.priorityAndOrder = priorityAndOrder;
93 }
94 });
95
96 res = suckDomains.insert(rr2);
97 BOOST_CHECK(!res.second);
98 suckDomains.modify(res.first, [priorityAndOrder = rr2.priorityAndOrder](SuckRequest& so) {
99 if (priorityAndOrder.first < so.priorityAndOrder.first) {
100 so.priorityAndOrder = priorityAndOrder;
101 }
102 });
103
104 for (int i = 4; i >= 0; i--) {
105 auto iter = suckDomains.begin();
106 BOOST_CHECK_EQUAL(iter->domain, sr[i].domain);
107 suckDomains.erase(iter);
108 }
109 BOOST_CHECK(suckDomains.empty());
110 }
111
112 BOOST_AUTO_TEST_SUITE_END()