1 #ifndef BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_DYN_LINK
5 #define BOOST_TEST_NO_MAIN
11 #include <boost/test/unit_test.hpp>
13 #include "test-common.hh"
16 BOOST_AUTO_TEST_SUITE(test_ixfr_cc
)
18 BOOST_AUTO_TEST_CASE(test_ixfr_rfc1995_axfr
) {
19 const ComboAddress
primary("[2001:DB8::1]:53");
20 const DNSName
zone("JAIN.AD.JP.");
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");
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
));
40 BOOST_AUTO_TEST_CASE(test_ixfr_rfc1995_incremental
) {
41 const ComboAddress
primary("[2001:DB8::1]:53");
42 const DNSName
zone("JAIN.AD.JP.");
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");
58 auto ret
= processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
));
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);
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());
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());
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);
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());
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());
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.");
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");
101 auto ret
= processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
));
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);
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());
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());
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.");
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");
134 auto ret
= processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
));
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);
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());
146 BOOST_CHECK_EQUAL(ret
.at(0).second
.at(0).d_type
, QType(QType::SOA
).getCode());
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);
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());
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());
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.");
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");
178 auto ret
= processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
));
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);
186 BOOST_CHECK_EQUAL(ret
.at(0).first
.at(0).d_type
, QType(QType::SOA
).getCode());
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());
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);
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());
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());
206 BOOST_AUTO_TEST_CASE(test_ixfr_same_serial
) {
207 const ComboAddress
primary("[2001:DB8::1]:53");
208 const DNSName
zone("JAIN.AD.JP.");
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");
215 auto ret
= processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
));
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());
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.");
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
;
234 auto ret
= processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
));
235 BOOST_CHECK_EQUAL(ret
.size(), 0U);
238 BOOST_AUTO_TEST_CASE(test_ixfr_invalid_no_primary_soa
)
240 const ComboAddress
primary("[2001:DB8::1]:53");
241 const DNSName
zone("JAIN.AD.JP.");
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");
246 auto ret
= processIXFRRecords(primary
, zone
, records
, nullptr);
247 BOOST_CHECK_EQUAL(ret
.size(), 0U);
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.");
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");
263 BOOST_CHECK_THROW(processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
)), std::runtime_error
);
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.");
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");
276 BOOST_CHECK_THROW(processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
)), std::runtime_error
);
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.");
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");
293 BOOST_CHECK_THROW(processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
)), std::runtime_error
);
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.");
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");
311 BOOST_CHECK_THROW(processIXFRRecords(primary
, zone
, records
, std::dynamic_pointer_cast
<SOARecordContent
>(primarySOA
)), std::runtime_error
);
314 BOOST_AUTO_TEST_SUITE_END();