]> git.ipfire.org Git - thirdparty/pdns.git/blame - pdns/test-ixfr_cc.cc
Merge pull request #14020 from omoerbeek/rec-compiling-rust-dcos
[thirdparty/pdns.git] / pdns / test-ixfr_cc.cc
CommitLineData
1c2d079d 1#ifndef BOOST_TEST_DYN_LINK
e503653f 2#define BOOST_TEST_DYN_LINK
1c2d079d
FM
3#endif
4
e503653f
RG
5#define BOOST_TEST_NO_MAIN
6
7#ifdef HAVE_CONFIG_H
8#include "config.h"
9#endif
10
11#include <boost/test/unit_test.hpp>
12
13#include "test-common.hh"
14#include "ixfr.hh"
15
c7f29d3e 16BOOST_AUTO_TEST_SUITE(test_ixfr_cc)
e503653f
RG
17
18BOOST_AUTO_TEST_CASE(test_ixfr_rfc1995_axfr) {
d525b58b 19 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
20 const DNSName zone("JAIN.AD.JP.");
21
d525b58b 22 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
23 vector<DNSRecord> records;
24 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
25 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::NS, "NS.JAIN.AD.JP.");
26 addRecordToList(records, DNSName("NS.JAIN.AD.JP."), QType::A, "133.69.136.1");
27 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.3");
28 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "192.41.197.2");
29 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
30
d525b58b 31 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
690b86b7
OM
32 BOOST_CHECK_EQUAL(ret.size(), 1U);
33 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 0U);
e503653f
RG
34 BOOST_REQUIRE_EQUAL(ret.at(0).second.size(), records.size());
35 for (size_t idx = 0; idx < records.size(); idx++) {
36 BOOST_CHECK(ret.at(0).second.at(idx) == records.at(idx));
37 }
38}
39
40BOOST_AUTO_TEST_CASE(test_ixfr_rfc1995_incremental) {
d525b58b 41 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
42 const DNSName zone("JAIN.AD.JP.");
43
d525b58b 44 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
45 vector<DNSRecord> records;
46 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
47 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 1 600 600 3600000 604800");
48 addRecordToList(records, DNSName("NEZU.JAIN.AD.JP."), QType::A, "133.69.136.5");
49 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 2 600 600 3600000 604800");
50 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.4");
51 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "192.41.197.2");
52 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 2 600 600 3600000 604800");
53 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.4");
54 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
55 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.3");
56 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
57
d525b58b 58 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
e503653f 59 // two sequences
690b86b7 60 BOOST_CHECK_EQUAL(ret.size(), 2U);
e503653f 61 // the first one has one removal, two additions (plus the corresponding SOA removal/addition)
690b86b7
OM
62 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 1U + 1U);
63 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 2U + 1U);
e503653f
RG
64
65 // check removals
66 BOOST_CHECK_EQUAL(ret.at(0).first.at(0).d_type, QType(QType::SOA).getCode());
67 BOOST_CHECK_EQUAL(ret.at(0).first.at(1).d_type, QType(QType::A).getCode());
68
69 // check additions
70 BOOST_CHECK_EQUAL(ret.at(0).second.at(0).d_type, QType(QType::SOA).getCode());
71 BOOST_CHECK_EQUAL(ret.at(0).second.at(1).d_type, QType(QType::A).getCode());
72 BOOST_CHECK_EQUAL(ret.at(0).second.at(2).d_type, QType(QType::A).getCode());
73
74 // the second one has one removal, one addition
690b86b7
OM
75 BOOST_CHECK_EQUAL(ret.at(1).first.size(), 1U + 1U);
76 BOOST_CHECK_EQUAL(ret.at(1).second.size(), 1U + 1U);
e503653f
RG
77
78 // check removals
79 BOOST_CHECK_EQUAL(ret.at(1).first.at(0).d_type, QType(QType::SOA).getCode());
80 BOOST_CHECK_EQUAL(ret.at(1).first.at(1).d_type, QType(QType::A).getCode());
81
82 // check additions
83 BOOST_CHECK_EQUAL(ret.at(1).second.at(0).d_type, QType(QType::SOA).getCode());
84 BOOST_CHECK_EQUAL(ret.at(1).second.at(1).d_type, QType(QType::A).getCode());
85}
86
87BOOST_AUTO_TEST_CASE(test_ixfr_rfc1995_condensed_incremental) {
d525b58b 88 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
89 const DNSName zone("JAIN.AD.JP.");
90
d525b58b 91 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
92 vector<DNSRecord> records;
93 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
94 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 1 600 600 3600000 604800");
95 addRecordToList(records, DNSName("NEZU.JAIN.AD.JP."), QType::A, "133.69.136.5");
96 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
97 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.3");
98 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "192.41.197.2");
99 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
100
d525b58b 101 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
e503653f 102 // one sequence
690b86b7 103 BOOST_CHECK_EQUAL(ret.size(), 1U);
e503653f 104 // it has one removal, two additions (plus the corresponding SOA removal/addition)
690b86b7
OM
105 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 1U + 1U);
106 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 2U + 1U);
e503653f
RG
107
108 // check removals
109 BOOST_CHECK_EQUAL(ret.at(0).first.at(0).d_type, QType(QType::SOA).getCode());
110 BOOST_CHECK_EQUAL(ret.at(0).first.at(1).d_type, QType(QType::A).getCode());
111
112 // check additions
113 BOOST_CHECK_EQUAL(ret.at(0).second.at(0).d_type, QType(QType::SOA).getCode());
114 BOOST_CHECK_EQUAL(ret.at(0).second.at(1).d_type, QType(QType::A).getCode());
115 BOOST_CHECK_EQUAL(ret.at(0).second.at(2).d_type, QType(QType::A).getCode());
116}
117
118BOOST_AUTO_TEST_CASE(test_ixfr_no_additions_in_first_sequence) {
d525b58b 119 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
120 const DNSName zone("JAIN.AD.JP.");
121
d525b58b 122 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
123 vector<DNSRecord> records;
124 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
125 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 1 600 600 3600000 604800");
126 addRecordToList(records, DNSName("NEZU.JAIN.AD.JP."), QType::A, "133.69.136.5");
127 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 2 600 600 3600000 604800");
128 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 2 600 600 3600000 604800");
129 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.5");
130 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
131 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.3");
132 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
133
d525b58b 134 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
e503653f 135 // two sequences
690b86b7 136 BOOST_CHECK_EQUAL(ret.size(), 2U);
e503653f 137 // the first one has one removal, no additions (plus the corresponding SOA removal/addition)
690b86b7
OM
138 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 1U + 1U);
139 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 0U + 1U);
e503653f
RG
140
141 // check removals
142 BOOST_CHECK_EQUAL(ret.at(0).first.at(0).d_type, QType(QType::SOA).getCode());
143 BOOST_CHECK_EQUAL(ret.at(0).first.at(1).d_type, QType(QType::A).getCode());
144
145 // check additions
146 BOOST_CHECK_EQUAL(ret.at(0).second.at(0).d_type, QType(QType::SOA).getCode());
147
148 // the second one has one removal, one addition
690b86b7
OM
149 BOOST_CHECK_EQUAL(ret.at(1).first.size(), 1U + 1U);
150 BOOST_CHECK_EQUAL(ret.at(1).second.size(), 1U + 1U);
e503653f
RG
151
152 // check removals
153 BOOST_CHECK_EQUAL(ret.at(1).first.at(0).d_type, QType(QType::SOA).getCode());
154 BOOST_CHECK_EQUAL(ret.at(1).first.at(1).d_type, QType(QType::A).getCode());
155
156 // check additions
157 BOOST_CHECK_EQUAL(ret.at(1).second.at(0).d_type, QType(QType::SOA).getCode());
158 BOOST_CHECK_EQUAL(ret.at(1).second.at(1).d_type, QType(QType::A).getCode());
159}
160
161BOOST_AUTO_TEST_CASE(test_ixfr_no_removals_in_first_sequence) {
d525b58b 162 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
163 const DNSName zone("JAIN.AD.JP.");
164
d525b58b 165 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
166 vector<DNSRecord> records;
167 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
168 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 1 600 600 3600000 604800");
169 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 2 600 600 3600000 604800");
170 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.4");
171 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "192.41.197.2");
172 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 2 600 600 3600000 604800");
173 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.4");
174 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
175 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.3");
176 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
177
d525b58b 178 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
e503653f 179 // two sequences
690b86b7 180 BOOST_CHECK_EQUAL(ret.size(), 2U);
e503653f 181 // the first one has no removal, two additions (plus the corresponding SOA removal/addition)
690b86b7
OM
182 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 0U + 1U);
183 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 2U + 1U);
e503653f
RG
184
185 // check removals
186 BOOST_CHECK_EQUAL(ret.at(0).first.at(0).d_type, QType(QType::SOA).getCode());
187
188 // check additions
189 BOOST_CHECK_EQUAL(ret.at(0).second.at(0).d_type, QType(QType::SOA).getCode());
190 BOOST_CHECK_EQUAL(ret.at(0).second.at(1).d_type, QType(QType::A).getCode());
191 BOOST_CHECK_EQUAL(ret.at(0).second.at(1).d_type, QType(QType::A).getCode());
192
193 // the second one has one removal, one addition
690b86b7
OM
194 BOOST_CHECK_EQUAL(ret.at(1).first.size(), 1U + 1U);
195 BOOST_CHECK_EQUAL(ret.at(1).second.size(), 1U + 1U);
e503653f
RG
196
197 // check removals
198 BOOST_CHECK_EQUAL(ret.at(1).first.at(0).d_type, QType(QType::SOA).getCode());
199 BOOST_CHECK_EQUAL(ret.at(1).first.at(1).d_type, QType(QType::A).getCode());
200
201 // check additions
202 BOOST_CHECK_EQUAL(ret.at(1).second.at(0).d_type, QType(QType::SOA).getCode());
203 BOOST_CHECK_EQUAL(ret.at(1).second.at(1).d_type, QType(QType::A).getCode());
204}
205
206BOOST_AUTO_TEST_CASE(test_ixfr_same_serial) {
d525b58b 207 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
208 const DNSName zone("JAIN.AD.JP.");
209
d525b58b 210 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
211 vector<DNSRecord> records;
212 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
213 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
214
d525b58b 215 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
e503653f 216
98b33176 217 // this is actually an empty AXFR
690b86b7 218 BOOST_CHECK_EQUAL(ret.size(), 1U);
98b33176 219 // nothing in the deletion part then
690b86b7 220 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 0U);
98b33176 221 // and the two SOAs in the addition part
690b86b7 222 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 2U);
98b33176
RG
223 BOOST_CHECK_EQUAL(ret.at(0).second.at(0).d_type, QType(QType::SOA).getCode());
224 BOOST_CHECK_EQUAL(ret.at(0).second.at(1).d_type, QType(QType::SOA).getCode());
e503653f
RG
225}
226
227BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_records) {
d525b58b 228 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
229 const DNSName zone("JAIN.AD.JP.");
230
d525b58b 231 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
232 vector<DNSRecord> records;
233
d525b58b 234 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
690b86b7 235 BOOST_CHECK_EQUAL(ret.size(), 0U);
e503653f
RG
236}
237
d525b58b
KM
238BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_primary_soa)
239{
240 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
241 const DNSName zone("JAIN.AD.JP.");
242;
243 vector<DNSRecord> records;
244 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
245
d525b58b 246 auto ret = processIXFRRecords(primary, zone, records, nullptr);
690b86b7 247 BOOST_CHECK_EQUAL(ret.size(), 0U);
e503653f
RG
248}
249
250BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_trailing_soa) {
d525b58b 251 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
252 const DNSName zone("JAIN.AD.JP.");
253
d525b58b 254 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
255 vector<DNSRecord> records;
256 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
257 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 1 600 600 3600000 604800");
258 addRecordToList(records, DNSName("NEZU.JAIN.AD.JP."), QType::A, "133.69.136.5");
259 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
260 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.3");
261 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "192.41.197.2");
262
d525b58b 263 BOOST_CHECK_THROW(processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA)), std::runtime_error);
e503653f
RG
264}
265
266BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_soa_after_removals) {
d525b58b 267 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
268 const DNSName zone("JAIN.AD.JP.");
269
d525b58b 270 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
271 vector<DNSRecord> records;
272 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
273 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 1 600 600 3600000 604800");
274 addRecordToList(records, DNSName("NEZU.JAIN.AD.JP."), QType::A, "133.69.136.5");
275
d525b58b 276 BOOST_CHECK_THROW(processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA)), std::runtime_error);
e503653f
RG
277}
278
ce3b897d 279BOOST_AUTO_TEST_CASE(test_ixfr_mismatching_serial_before_and_after_additions) {
d525b58b 280 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
281 const DNSName zone("JAIN.AD.JP.");
282
d525b58b 283 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
284 vector<DNSRecord> records;
285 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
286 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 1 600 600 3600000 604800");
287 addRecordToList(records, DNSName("NEZU.JAIN.AD.JP."), QType::A, "133.69.136.5");
288 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 2 600 600 3600000 604800");
289 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.3");
290 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "192.41.197.2");
291 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
292
d525b58b 293 BOOST_CHECK_THROW(processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA)), std::runtime_error);
e503653f
RG
294}
295
296BOOST_AUTO_TEST_CASE(test_ixfr_trailing_record_after_end) {
d525b58b 297 const ComboAddress primary("[2001:DB8::1]:53");
e503653f
RG
298 const DNSName zone("JAIN.AD.JP.");
299
d525b58b 300 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
e503653f
RG
301 vector<DNSRecord> records;
302 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
303 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 1 600 600 3600000 604800");
304 addRecordToList(records, DNSName("NEZU.JAIN.AD.JP."), QType::A, "133.69.136.5");
305 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
306 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.3");
307 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "192.41.197.2");
308 addRecordToList(records, DNSName("JAIN.AD.JP."), QType::SOA, "ns.jain.ad.jp. mohta.jain.ad.jp. 3 600 600 3600000 604800");
309 addRecordToList(records, DNSName("JAIN-BB.JAIN.AD.JP."), QType::A, "133.69.136.3");
310
d525b58b 311 BOOST_CHECK_THROW(processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA)), std::runtime_error);
e503653f
RG
312}
313
314BOOST_AUTO_TEST_SUITE_END();