]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/test-misc_hh.cc
fix up testrunner
[thirdparty/pdns.git] / pdns / test-misc_hh.cc
1 #define BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_NO_MAIN
3
4 #include <boost/test/unit_test.hpp>
5 #include <boost/assign/list_of.hpp>
6 #include <boost/foreach.hpp>
7 #include <boost/tuple/tuple.hpp>
8 #include "misc.hh"
9 #include "dns.hh"
10 #include <arpa/inet.h>
11 #include <utility>
12
13 using std::string;
14
15 BOOST_AUTO_TEST_SUITE(misc_hh)
16 typedef pair<std::string, uint16_t> typedns_t;
17
18 BOOST_AUTO_TEST_CASE(test_CIStringCompare) {
19 set<std::string, CIStringCompare> nsset;
20 nsset.insert("abc");
21 nsset.insert("ns.example.com");
22 nsset.insert("");
23 nsset.insert("def");
24 nsset.insert("aBc");
25 nsset.insert("ns.example.com");
26 BOOST_CHECK_EQUAL(nsset.size(), 4);
27
28 ostringstream s;
29 for(set<std::string, CIStringCompare>::const_iterator i=nsset.begin();i!=nsset.end();++i) {
30 s<<"("<<*i<<")";
31 }
32 BOOST_CHECK_EQUAL(s.str(), "()(abc)(def)(ns.example.com)");
33 }
34
35 BOOST_AUTO_TEST_CASE(test_CIStringPairCompare) {
36 set<typedns_t, CIStringPairCompare> nsset2;
37 nsset2.insert(make_pair("ns.example.com", 1));
38 nsset2.insert(make_pair("abc", 1));
39 nsset2.insert(make_pair("", 1));
40 nsset2.insert(make_pair("def", 1));
41 nsset2.insert(make_pair("abc", 2));
42 nsset2.insert(make_pair("abc", 1));
43 nsset2.insert(make_pair("ns.example.com", 0));
44 nsset2.insert(make_pair("abc", 2));
45 nsset2.insert(make_pair("ABC", 2));
46 BOOST_CHECK_EQUAL(nsset2.size(), 6);
47
48 ostringstream s;
49 for(set<typedns_t, CIStringPairCompare>::const_iterator i=nsset2.begin();i!=nsset2.end();++i) {
50 s<<"("<<i->first<<"|"<<i->second<<")";
51 }
52 BOOST_CHECK_EQUAL(s.str(), "(|1)(abc|1)(abc|2)(def|1)(ns.example.com|0)(ns.example.com|1)");
53 }
54
55 BOOST_AUTO_TEST_CASE(test_pdns_ilexicographical_compare) {
56 typedef boost::tuple<const std::string, const std::string, bool> case_t;
57 typedef std::list<case_t> cases_t;
58
59 cases_t cases = boost::assign::list_of
60 (case_t(std::string(""), std::string(""), false))
61 (case_t(std::string(""), std::string("abc"), true))
62 (case_t(std::string("abc"), std::string(""), false))
63 (case_t(std::string("abc"), std::string("abcd"), true))
64 (case_t(std::string("abcd"), std::string("abc"), false))
65 (case_t(std::string("abd"), std::string("abc"), false))
66 (case_t(std::string("abc"), std::string("abd"), true))
67 (case_t(std::string("abc"), std::string("Abc"), false))
68 (case_t(std::string("Abc"), std::string("abc"), false))
69 ;
70
71 BOOST_FOREACH(const case_t& val, cases) {
72 bool res;
73 res = pdns_ilexicographical_compare(val.get<0>(), val.get<1>());
74 BOOST_CHECK_EQUAL(res, val.get<2>());
75 }
76 }
77
78 BOOST_AUTO_TEST_CASE(test_pdns_iequals) {
79 typedef boost::tuple<const std::string, const std::string, bool> case_t;
80 typedef std::list<case_t> cases_t;
81
82 cases_t cases = boost::assign::list_of
83 (case_t(std::string(""), std::string(""), true))
84 (case_t(std::string(""), std::string("abc"), false))
85 (case_t(std::string("abc"), std::string(""), false))
86 (case_t(std::string("abc"), std::string("abcd"), false))
87 (case_t(std::string("abcd"), std::string("abc"), false))
88 (case_t(std::string("abd"), std::string("abc"), false))
89 (case_t(std::string("abc"), std::string("abd"), false))
90 (case_t(std::string("abc"), std::string("Abc"), true))
91 (case_t(std::string("Abc"), std::string("abc"), true))
92 ;
93
94 BOOST_FOREACH(const case_t& val, cases) {
95 bool res;
96 res = pdns_iequals(val.get<0>(), val.get<1>());
97 BOOST_CHECK_EQUAL(res, val.get<2>());
98 }
99 }
100
101 BOOST_AUTO_TEST_CASE(test_stripDot) {
102 BOOST_CHECK_EQUAL(stripDot("."), "");
103 BOOST_CHECK_EQUAL(stripDot(""), "");
104 BOOST_CHECK_EQUAL(stripDot("www.powerdns.com."), "www.powerdns.com");
105 BOOST_CHECK_EQUAL(stripDot("www.powerdns.com"), "www.powerdns.com");
106 }
107
108 BOOST_AUTO_TEST_CASE(test_labelReverse) {
109 BOOST_CHECK_EQUAL(labelReverse("www.powerdns.com"), "com powerdns www");
110 }
111
112 BOOST_AUTO_TEST_CASE(test_makeRelative) {
113 BOOST_CHECK_EQUAL(makeRelative("www.powerdns.com", "powerdns.com"), "www");
114 }
115
116 BOOST_AUTO_TEST_CASE(test_AtomicCounter) {
117 AtomicCounter ac;
118 ++ac;
119 ++ac;
120 BOOST_CHECK_EQUAL(ac, 2);
121 }
122
123 BOOST_AUTO_TEST_CASE(test_endianness) {
124 uint32_t i = 1;
125 #if BYTE_ORDER == BIG_ENDIAN
126 BOOST_CHECK_EQUAL(i, htonl(i));
127 #elif BYTE_ORDER == LITTLE_ENDIAN
128 uint32_t j=0x01000000;
129 BOOST_CHECK_EQUAL(i, ntohl(j));
130 #else
131 BOOST_FAIL("Did not detect endianness at all");
132 #endif
133 }
134
135 BOOST_AUTO_TEST_CASE(test_parseService) {
136 ServiceTuple tp;
137 parseService("smtp.powerdns.com:25", tp);
138 BOOST_CHECK_EQUAL(tp.host, "smtp.powerdns.com");
139 BOOST_CHECK_EQUAL(tp.port, 25);
140 parseService("smtp.powerdns.com", tp);
141 BOOST_CHECK_EQUAL(tp.port, 25);
142 }
143
144 BOOST_AUTO_TEST_SUITE_END()
145