1 #define BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_NO_MAIN
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>
10 #include <arpa/inet.h>
15 BOOST_AUTO_TEST_SUITE(misc_hh
)
16 typedef pair
<std::string
, uint16_t> typedns_t
;
18 BOOST_AUTO_TEST_CASE(test_CIStringCompare
) {
19 set
<std::string
, CIStringCompare
> nsset
;
21 nsset
.insert("ns.example.com");
25 nsset
.insert("ns.example.com");
26 BOOST_CHECK_EQUAL(nsset
.size(), 4);
29 for(set
<std::string
, CIStringCompare
>::const_iterator i
=nsset
.begin();i
!=nsset
.end();++i
) {
32 BOOST_CHECK_EQUAL(s
.str(), "()(abc)(def)(ns.example.com)");
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);
49 for(set
<typedns_t
, CIStringPairCompare
>::const_iterator i
=nsset2
.begin();i
!=nsset2
.end();++i
) {
50 s
<<"("<<i
->first
<<"|"<<i
->second
<<")";
52 BOOST_CHECK_EQUAL(s
.str(), "(|1)(abc|1)(abc|2)(def|1)(ns.example.com|0)(ns.example.com|1)");
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
;
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))
71 BOOST_FOREACH(const case_t
& val
, cases
) {
73 res
= pdns_ilexicographical_compare(val
.get
<0>(), val
.get
<1>());
74 BOOST_CHECK_EQUAL(res
, val
.get
<2>());
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
;
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))
94 BOOST_FOREACH(const case_t
& val
, cases
) {
96 res
= pdns_iequals(val
.get
<0>(), val
.get
<1>());
97 BOOST_CHECK_EQUAL(res
, val
.get
<2>());
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");
108 BOOST_AUTO_TEST_CASE(test_labelReverse
) {
109 BOOST_CHECK_EQUAL(labelReverse("www.powerdns.com"), "com powerdns www");
112 BOOST_AUTO_TEST_CASE(test_makeRelative
) {
113 BOOST_CHECK_EQUAL(makeRelative("www.powerdns.com", "powerdns.com"), "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_SUITE_END()