]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/test-zoneparser_tng_cc.cc
we used to rely on SRCDIR environment variable being set, now assume . if unset
[thirdparty/pdns.git] / pdns / test-zoneparser_tng_cc.cc
1 #define BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_NO_MAIN
3 #include <boost/test/unit_test.hpp>
4 #include <boost/assign/list_of.hpp>
5 #include <boost/foreach.hpp>
6 #include <boost/tuple/tuple.hpp>
7 #include <boost/iostreams/stream.hpp>
8 #include <boost/iostreams/device/file.hpp>
9 #include <boost/lexical_cast.hpp>
10 #include "dns.hh"
11 #include "zoneparser-tng.hh"
12 #include "dnsrecords.hh"
13 #include <fstream>
14 #include <cstdlib>
15
16 BOOST_AUTO_TEST_SUITE(test_zoneparser_tng_cc)
17
18 BOOST_AUTO_TEST_CASE(test_tng_record_types) {
19 reportAllTypes();
20 reportFancyTypes();
21
22 std::ostringstream pathbuf;
23 const char* p = std::getenv("SRCDIR");
24 if(!p)
25 p = ".";
26 pathbuf << p << "/../regression-tests/zones/unit.test";
27 ZoneParserTNG zp(pathbuf.str(), "unit.test");
28 DNSResourceRecord rr;
29
30 boost::iostreams::stream<boost::iostreams::file_source> ifs(pathbuf.str());
31
32 while(zp.get(rr)) {
33 // make sure these concur.
34 std::string host, type, data;
35 int ttl;
36 std::getline(ifs, host, ' ');
37 std::getline(ifs, type, ' ');
38 ttl = boost::lexical_cast<int>(type);
39 std::getline(ifs, type, ' ');
40 std::getline(ifs, type, ' ');
41 std::getline(ifs, data, '\n');
42 // see if these agree
43 BOOST_CHECK_EQUAL(rr.qname, host);
44 BOOST_CHECK_EQUAL(rr.ttl, ttl);
45 BOOST_CHECK_EQUAL(rr.qtype.getName(), type);
46 if (*(rr.content.rbegin()) != '.' && *(data.rbegin()) == '.')
47 BOOST_CHECK_EQUAL(rr.content, std::string(data.begin(),data.end()-1));
48 else
49 BOOST_CHECK_EQUAL(rr.content, data);
50 }
51
52 }
53
54 BOOST_AUTO_TEST_SUITE_END();