]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/test-ixfr_cc.cc
Merge pull request #11431 from jroessler-ox/docs-kskzskroll-update
[thirdparty/pdns.git] / pdns / test-ixfr_cc.cc
1 #ifndef BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_DYN_LINK
3 #endif
4
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
16 BOOST_AUTO_TEST_SUITE(test_ixfr_cc)
17
18 BOOST_AUTO_TEST_CASE(test_ixfr_rfc1995_axfr) {
19 const ComboAddress primary("[2001:DB8::1]:53");
20 const DNSName zone("JAIN.AD.JP.");
21
22 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
31 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
32 BOOST_CHECK_EQUAL(ret.size(), 1U);
33 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 0U);
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
40 BOOST_AUTO_TEST_CASE(test_ixfr_rfc1995_incremental) {
41 const ComboAddress primary("[2001:DB8::1]:53");
42 const DNSName zone("JAIN.AD.JP.");
43
44 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
58 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
59 // two sequences
60 BOOST_CHECK_EQUAL(ret.size(), 2U);
61 // the first one has one removal, two additions (plus the corresponding SOA removal/addition)
62 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 1U + 1U);
63 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 2U + 1U);
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
75 BOOST_CHECK_EQUAL(ret.at(1).first.size(), 1U + 1U);
76 BOOST_CHECK_EQUAL(ret.at(1).second.size(), 1U + 1U);
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
87 BOOST_AUTO_TEST_CASE(test_ixfr_rfc1995_condensed_incremental) {
88 const ComboAddress primary("[2001:DB8::1]:53");
89 const DNSName zone("JAIN.AD.JP.");
90
91 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
101 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
102 // one sequence
103 BOOST_CHECK_EQUAL(ret.size(), 1U);
104 // it has one removal, two additions (plus the corresponding SOA removal/addition)
105 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 1U + 1U);
106 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 2U + 1U);
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
118 BOOST_AUTO_TEST_CASE(test_ixfr_no_additions_in_first_sequence) {
119 const ComboAddress primary("[2001:DB8::1]:53");
120 const DNSName zone("JAIN.AD.JP.");
121
122 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
134 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
135 // two sequences
136 BOOST_CHECK_EQUAL(ret.size(), 2U);
137 // the first one has one removal, no additions (plus the corresponding SOA removal/addition)
138 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 1U + 1U);
139 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 0U + 1U);
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
149 BOOST_CHECK_EQUAL(ret.at(1).first.size(), 1U + 1U);
150 BOOST_CHECK_EQUAL(ret.at(1).second.size(), 1U + 1U);
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
161 BOOST_AUTO_TEST_CASE(test_ixfr_no_removals_in_first_sequence) {
162 const ComboAddress primary("[2001:DB8::1]:53");
163 const DNSName zone("JAIN.AD.JP.");
164
165 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
178 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
179 // two sequences
180 BOOST_CHECK_EQUAL(ret.size(), 2U);
181 // the first one has no removal, two additions (plus the corresponding SOA removal/addition)
182 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 0U + 1U);
183 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 2U + 1U);
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
194 BOOST_CHECK_EQUAL(ret.at(1).first.size(), 1U + 1U);
195 BOOST_CHECK_EQUAL(ret.at(1).second.size(), 1U + 1U);
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
206 BOOST_AUTO_TEST_CASE(test_ixfr_same_serial) {
207 const ComboAddress primary("[2001:DB8::1]:53");
208 const DNSName zone("JAIN.AD.JP.");
209
210 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
215 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
216
217 // this is actually an empty AXFR
218 BOOST_CHECK_EQUAL(ret.size(), 1U);
219 // nothing in the deletion part then
220 BOOST_CHECK_EQUAL(ret.at(0).first.size(), 0U);
221 // and the two SOAs in the addition part
222 BOOST_CHECK_EQUAL(ret.at(0).second.size(), 2U);
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());
225 }
226
227 BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_records) {
228 const ComboAddress primary("[2001:DB8::1]:53");
229 const DNSName zone("JAIN.AD.JP.");
230
231 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
232 vector<DNSRecord> records;
233
234 auto ret = processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA));
235 BOOST_CHECK_EQUAL(ret.size(), 0U);
236 }
237
238 BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_primary_soa)
239 {
240 const ComboAddress primary("[2001:DB8::1]:53");
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
246 auto ret = processIXFRRecords(primary, zone, records, nullptr);
247 BOOST_CHECK_EQUAL(ret.size(), 0U);
248 }
249
250 BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_trailing_soa) {
251 const ComboAddress primary("[2001:DB8::1]:53");
252 const DNSName zone("JAIN.AD.JP.");
253
254 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
263 BOOST_CHECK_THROW(processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA)), std::runtime_error);
264 }
265
266 BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_soa_after_removals) {
267 const ComboAddress primary("[2001:DB8::1]:53");
268 const DNSName zone("JAIN.AD.JP.");
269
270 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
276 BOOST_CHECK_THROW(processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA)), std::runtime_error);
277 }
278
279 BOOST_AUTO_TEST_CASE(test_ixfr_mismatching_serial_before_and_after_additions) {
280 const ComboAddress primary("[2001:DB8::1]:53");
281 const DNSName zone("JAIN.AD.JP.");
282
283 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
293 BOOST_CHECK_THROW(processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA)), std::runtime_error);
294 }
295
296 BOOST_AUTO_TEST_CASE(test_ixfr_trailing_record_after_end) {
297 const ComboAddress primary("[2001:DB8::1]:53");
298 const DNSName zone("JAIN.AD.JP.");
299
300 auto primarySOA = DNSRecordContent::make(QType::SOA, QClass::IN, "NS.JAIN.AD.JP. mohta.jain.ad.jp. 3 600 600 3600000 604800");
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
311 BOOST_CHECK_THROW(processIXFRRecords(primary, zone, records, std::dynamic_pointer_cast<SOARecordContent>(primarySOA)), std::runtime_error);
312 }
313
314 BOOST_AUTO_TEST_SUITE_END();