1 #define BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_NO_MAIN
7 #include <boost/test/unit_test.hpp>
8 #include <boost/assign/list_of.hpp>
10 #include <boost/tuple/tuple.hpp>
13 #include <arpa/inet.h>
18 BOOST_AUTO_TEST_SUITE(test_misc_hh
)
19 typedef pair
<std::string
, uint16_t> typedns_t
;
21 BOOST_AUTO_TEST_CASE(test_CIStringCompare
) {
22 set
<std::string
, CIStringCompare
> nsset
;
24 nsset
.insert("ns.example.com");
28 nsset
.insert("ns.example.com");
29 BOOST_CHECK_EQUAL(nsset
.size(), 4);
32 for(set
<std::string
, CIStringCompare
>::const_iterator i
=nsset
.begin();i
!=nsset
.end();++i
) {
35 BOOST_CHECK_EQUAL(s
.str(), "()(abc)(def)(ns.example.com)");
38 BOOST_AUTO_TEST_CASE(test_CIStringPairCompare
) {
39 set
<typedns_t
, CIStringPairCompare
> nsset2
;
40 nsset2
.insert(make_pair("ns.example.com", 1));
41 nsset2
.insert(make_pair("abc", 1));
42 nsset2
.insert(make_pair("", 1));
43 nsset2
.insert(make_pair("def", 1));
44 nsset2
.insert(make_pair("abc", 2));
45 nsset2
.insert(make_pair("abc", 1));
46 nsset2
.insert(make_pair("ns.example.com", 0));
47 nsset2
.insert(make_pair("abc", 2));
48 nsset2
.insert(make_pair("ABC", 2));
49 BOOST_CHECK_EQUAL(nsset2
.size(), 6);
52 for(set
<typedns_t
, CIStringPairCompare
>::const_iterator i
=nsset2
.begin();i
!=nsset2
.end();++i
) {
53 s
<<"("<<i
->first
<<"|"<<i
->second
<<")";
55 BOOST_CHECK_EQUAL(s
.str(), "(|1)(abc|1)(abc|2)(def|1)(ns.example.com|0)(ns.example.com|1)");
58 BOOST_AUTO_TEST_CASE(test_pdns_ilexicographical_compare
) {
59 typedef boost::tuple
<const std::string
, const std::string
, bool> case_t
;
60 typedef std::list
<case_t
> cases_t
;
62 cases_t cases
= boost::assign::list_of
63 (case_t(std::string(""), std::string(""), false))
64 (case_t(std::string(""), std::string("abc"), true))
65 (case_t(std::string("abc"), std::string(""), false))
66 (case_t(std::string("abc"), std::string("abcd"), true))
67 (case_t(std::string("abcd"), std::string("abc"), false))
68 (case_t(std::string("abd"), std::string("abc"), false))
69 (case_t(std::string("abc"), std::string("abd"), true))
70 (case_t(std::string("abc"), std::string("Abc"), false))
71 (case_t(std::string("Abc"), std::string("abc"), false))
74 for(const case_t
& val
: cases
) {
76 res
= pdns_ilexicographical_compare(val
.get
<0>(), val
.get
<1>());
77 BOOST_CHECK_EQUAL(res
, val
.get
<2>());
81 BOOST_AUTO_TEST_CASE(test_pdns_iequals
) {
82 typedef boost::tuple
<const std::string
, const std::string
, bool> case_t
;
83 typedef std::list
<case_t
> cases_t
;
85 cases_t cases
= boost::assign::list_of
86 (case_t(std::string(""), std::string(""), true))
87 (case_t(std::string(""), std::string("abc"), false))
88 (case_t(std::string("abc"), std::string(""), false))
89 (case_t(std::string("abc"), std::string("abcd"), false))
90 (case_t(std::string("abcd"), std::string("abc"), false))
91 (case_t(std::string("abd"), std::string("abc"), false))
92 (case_t(std::string("abc"), std::string("abd"), false))
93 (case_t(std::string("abc"), std::string("Abc"), true))
94 (case_t(std::string("Abc"), std::string("abc"), true))
97 for(const case_t
& val
: cases
) {
99 res
= pdns_iequals(val
.get
<0>(), val
.get
<1>());
100 BOOST_CHECK_EQUAL(res
, val
.get
<2>());
104 BOOST_AUTO_TEST_CASE(test_stripDot
) {
105 BOOST_CHECK_EQUAL(stripDot("."), "");
106 BOOST_CHECK_EQUAL(stripDot(""), "");
107 BOOST_CHECK_EQUAL(stripDot("www.powerdns.com."), "www.powerdns.com");
108 BOOST_CHECK_EQUAL(stripDot("www.powerdns.com"), "www.powerdns.com");
111 BOOST_AUTO_TEST_CASE(test_labelReverse
) {
112 BOOST_CHECK_EQUAL(DNSName("www.powerdns.com").labelReverse().toString(" ", false), "com powerdns www");
116 BOOST_AUTO_TEST_CASE(test_AtomicCounter
) {
120 BOOST_CHECK_EQUAL(ac
, 2);
123 BOOST_AUTO_TEST_CASE(test_endianness
) {
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
));
131 BOOST_FAIL("Did not detect endianness at all");
135 BOOST_AUTO_TEST_CASE(test_parseService
) {
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);
144 BOOST_AUTO_TEST_CASE(test_ternary
) {
146 BOOST_CHECK_EQUAL(defTer(maxqps
, 16384), maxqps
);
147 BOOST_CHECK_EQUAL(defTer(0, 16384), 16384);
150 BOOST_CHECK_EQUAL(*defTer(qps
, &maxqps
), 1024);
153 BOOST_AUTO_TEST_CASE(test_SimpleMatch
) {
154 BOOST_CHECK_EQUAL(SimpleMatch("").match(std::string("")), true);
155 BOOST_CHECK_EQUAL(SimpleMatch("?").match(std::string("")), false);
156 BOOST_CHECK_EQUAL(SimpleMatch("*").match(std::string("")), true);
158 BOOST_CHECK_EQUAL(SimpleMatch("abc").match(std::string("abc")), true);
159 BOOST_CHECK_EQUAL(SimpleMatch("abc").match(std::string("ab")), false);
160 BOOST_CHECK_EQUAL(SimpleMatch("abc").match(std::string("bc")), false);
162 BOOST_CHECK_EQUAL(SimpleMatch("?").match(std::string("a")), true);
163 BOOST_CHECK_EQUAL(SimpleMatch("a?c").match(std::string("abc")), true);
164 BOOST_CHECK_EQUAL(SimpleMatch("a?c").match(std::string("ab")), false);
165 BOOST_CHECK_EQUAL(SimpleMatch("a?c").match(std::string("bc")), false);
167 BOOST_CHECK_EQUAL(SimpleMatch("*").match(std::string("*")), true);
168 BOOST_CHECK_EQUAL(SimpleMatch("a*c").match(std::string("abc")), true);
169 BOOST_CHECK_EQUAL(SimpleMatch("a*c").match(std::string("ab")), false);
170 BOOST_CHECK_EQUAL(SimpleMatch("a*c").match(std::string("bc")), false);
172 BOOST_CHECK_EQUAL(SimpleMatch("*").match(std::string("abcdefghj")), true);
173 BOOST_CHECK_EQUAL(SimpleMatch("*a").match(std::string("abca")), true);
174 BOOST_CHECK_EQUAL(SimpleMatch("*a").match(std::string("abcb")), false);
175 BOOST_CHECK_EQUAL(SimpleMatch("abc*").match(std::string("abcabcabcabacabac")), true);
176 BOOST_CHECK_EQUAL(SimpleMatch("abc*").match(std::string("abc")), true);
179 BOOST_AUTO_TEST_SUITE_END()