]> git.ipfire.org Git - thirdparty/pdns.git/blame - pdns/test-svc_records_cc.cc
Meson: Separate test files from common files
[thirdparty/pdns.git] / pdns / test-svc_records_cc.cc
CommitLineData
1c2d079d 1#ifndef BOOST_TEST_DYN_LINK
77ea4f4c 2#define BOOST_TEST_DYN_LINK
1c2d079d
FM
3#endif
4
77ea4f4c 5#define BOOST_TEST_NO_MAIN
1c2d079d 6
77ea4f4c
PL
7#ifdef HAVE_CONFIG_H
8#include "config.h"
9#endif
10#include <boost/test/unit_test.hpp>
11#include <bitset>
12#include "svc-records.hh"
13#include "base64.hh"
14
15using namespace boost;
16
17BOOST_AUTO_TEST_SUITE(test_svc_records_cc)
18BOOST_AUTO_TEST_CASE(test_SvcParam_keyFromString) {
19 SvcParam::SvcParamKey k;
20
21 k = SvcParam::keyFromString("mandatory");
373914dc
PL
22 BOOST_CHECK(k == 0);
23 BOOST_CHECK(k == SvcParam::mandatory);
77ea4f4c
PL
24
25 k = SvcParam::keyFromString("alpn");
373914dc
PL
26 BOOST_CHECK(k == 1);
27 BOOST_CHECK(k == SvcParam::alpn);
77ea4f4c
PL
28
29 k = SvcParam::keyFromString("no-default-alpn");
373914dc
PL
30 BOOST_CHECK(k == 2);
31 BOOST_CHECK(k == SvcParam::no_default_alpn);
77ea4f4c
PL
32
33 k = SvcParam::keyFromString("port");
373914dc
PL
34 BOOST_CHECK(k == 3);
35 BOOST_CHECK(k == SvcParam::port);
77ea4f4c
PL
36
37 k = SvcParam::keyFromString("ipv4hint");
373914dc
PL
38 BOOST_CHECK(k == 4);
39 BOOST_CHECK(k == SvcParam::ipv4hint);
77ea4f4c 40
4f254e34 41 k = SvcParam::keyFromString("ech");
373914dc 42 BOOST_CHECK(k == 5);
4f254e34 43 BOOST_CHECK(k == SvcParam::ech);
77ea4f4c
PL
44
45 k = SvcParam::keyFromString("ipv6hint");
373914dc
PL
46 BOOST_CHECK(k == 6);
47 BOOST_CHECK(k == SvcParam::ipv6hint);
77ea4f4c
PL
48
49 k = SvcParam::keyFromString("key0");
373914dc
PL
50 BOOST_CHECK(k == 0);
51 BOOST_CHECK(k == SvcParam::mandatory);
77ea4f4c
PL
52
53 k = SvcParam::keyFromString("key666");
373914dc 54 BOOST_CHECK(k == 666);
77ea4f4c
PL
55
56 BOOST_CHECK_THROW(SvcParam::keyFromString("MANDATORY"), std::invalid_argument);
57}
58
59BOOST_AUTO_TEST_CASE(test_SvcParam_keyToString) {
60 BOOST_CHECK_EQUAL(SvcParam::keyToString(SvcParam::mandatory), "mandatory");
61 BOOST_CHECK_EQUAL(SvcParam::keyToString(SvcParam::alpn), "alpn");
62 BOOST_CHECK_EQUAL(SvcParam::keyToString(SvcParam::no_default_alpn), "no-default-alpn");
63 BOOST_CHECK_EQUAL(SvcParam::keyToString(SvcParam::port), "port");
64 BOOST_CHECK_EQUAL(SvcParam::keyToString(SvcParam::ipv4hint), "ipv4hint");
4f254e34 65 BOOST_CHECK_EQUAL(SvcParam::keyToString(SvcParam::ech), "ech");
77ea4f4c
PL
66 BOOST_CHECK_EQUAL(SvcParam::keyToString(SvcParam::ipv6hint), "ipv6hint");
67 BOOST_CHECK_EQUAL(SvcParam::keyToString(SvcParam::SvcParamKey(7)), "key7");
68 BOOST_CHECK_EQUAL(SvcParam::keyToString(SvcParam::SvcParamKey(666)), "key666");
69}
70
71BOOST_AUTO_TEST_CASE(test_SvcParam_ctor_no_value) {
373914dc
PL
72 BOOST_CHECK_NO_THROW(SvcParam(SvcParam::keyFromString("no-default-alpn")));
73 BOOST_CHECK_THROW(SvcParam(SvcParam::keyFromString("alpn")), std::invalid_argument);
77ea4f4c
PL
74 BOOST_CHECK_THROW(SvcParam(SvcParam::keyFromString("key666")), std::invalid_argument);
75}
76
77BOOST_AUTO_TEST_CASE(test_SvcParam_ctor_value) {
78 string val = "foobar";
79 auto base64val = Base64Encode(val);
77ea4f4c
PL
80
81 BOOST_CHECK_THROW(SvcParam(SvcParam::mandatory, val), std::invalid_argument);
82 BOOST_CHECK_THROW(SvcParam(SvcParam::alpn, val), std::invalid_argument);
83 BOOST_CHECK_THROW(SvcParam(SvcParam::no_default_alpn, val), std::invalid_argument);
84 BOOST_CHECK_THROW(SvcParam(SvcParam::port, val), std::invalid_argument);
85 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv4hint, val), std::invalid_argument);
86 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv6hint, val), std::invalid_argument);
87
b9516294 88 SvcParam param(SvcParam::keyFromString("no-default-alpn"));
4f254e34
PL
89 BOOST_CHECK_NO_THROW(param = SvcParam(SvcParam::ech, base64val));
90 BOOST_CHECK_EQUAL(param.getECH(), base64val);
77ea4f4c
PL
91 BOOST_CHECK_THROW(param.getValue(), std::invalid_argument);
92 BOOST_CHECK_THROW(param.getALPN(), std::invalid_argument);
93 BOOST_CHECK_THROW(param.getIPHints(), std::invalid_argument);
94 BOOST_CHECK_THROW(param.getMandatory(), std::invalid_argument);
95 BOOST_CHECK_THROW(param.getPort(), std::invalid_argument);
96
97 // TODO test bad base64 value
4f254e34 98 // BOOST_CHECK_THROW(SvcParam(SvcParam::ech, val), std::invalid_argument);
77ea4f4c
PL
99
100 // Any string is allowed.....
101 BOOST_CHECK_NO_THROW(param = SvcParam(SvcParam::keyFromString("key666"), base64val));
102 BOOST_CHECK_EQUAL(param.getValue(), base64val);
103 BOOST_CHECK_NO_THROW(param = SvcParam(SvcParam::keyFromString("key666"), val));
104 BOOST_CHECK_EQUAL(param.getValue(), val);
105
106 BOOST_CHECK_THROW(param.getALPN(), std::invalid_argument);
4f254e34 107 BOOST_CHECK_THROW(param.getECH(), std::invalid_argument);
77ea4f4c
PL
108 BOOST_CHECK_THROW(param.getIPHints(), std::invalid_argument);
109 BOOST_CHECK_THROW(param.getMandatory(), std::invalid_argument);
110 BOOST_CHECK_THROW(param.getPort(), std::invalid_argument);
111}
112
113BOOST_AUTO_TEST_CASE(test_SvcParam_ctor_set_string_value) {
114 set<string> val({"foo", "bar", "baz"});
115
96fdac2a
PL
116 BOOST_CHECK_THROW(SvcParam(SvcParam::alpn, std::move(val)), std::invalid_argument);
117 BOOST_CHECK_THROW(SvcParam(SvcParam::no_default_alpn, std::move(val)), std::invalid_argument);
118 BOOST_CHECK_THROW(SvcParam(SvcParam::port, std::move(val)), std::invalid_argument);
119 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv4hint, std::move(val)), std::invalid_argument);
4f254e34 120 BOOST_CHECK_THROW(SvcParam(SvcParam::ech, std::move(val)), std::invalid_argument);
96fdac2a 121 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv6hint, std::move(val)), std::invalid_argument);
77ea4f4c 122
373914dc
PL
123 set<string> mandatoryVal = {"alpn", "key666"};
124 set<SvcParam::SvcParamKey> mandatoryExpected = {SvcParam::alpn, (SvcParam::SvcParamKey)666};
b9516294 125 SvcParam param(SvcParam::keyFromString("no-default-alpn"));
96fdac2a 126 BOOST_CHECK_NO_THROW(param = SvcParam(SvcParam::keyFromString("mandatory"), std::move(mandatoryVal)));
77ea4f4c
PL
127
128 auto retval = param.getMandatory();
373914dc 129 BOOST_CHECK(retval == mandatoryExpected);
77ea4f4c 130 BOOST_CHECK_THROW(param.getALPN(), std::invalid_argument);
4f254e34 131 BOOST_CHECK_THROW(param.getECH(), std::invalid_argument);
77ea4f4c
PL
132 BOOST_CHECK_THROW(param.getIPHints(), std::invalid_argument);
133 BOOST_CHECK_THROW(param.getPort(), std::invalid_argument);
134 BOOST_CHECK_THROW(param.getValue(), std::invalid_argument);
373914dc 135}
77ea4f4c 136
373914dc
PL
137BOOST_AUTO_TEST_CASE(test_SvcParam_ctor_vector_string_value) {
138 auto val = vector<string>({"h3, h2"});
96fdac2a 139 auto checkVal = val;
373914dc 140
96fdac2a
PL
141 BOOST_CHECK_THROW(SvcParam(SvcParam::mandatory, std::move(val)), std::invalid_argument);
142 BOOST_CHECK_THROW(SvcParam(SvcParam::no_default_alpn, std::move(val)), std::invalid_argument);
143 BOOST_CHECK_THROW(SvcParam(SvcParam::port, std::move(val)), std::invalid_argument);
144 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv4hint, std::move(val)), std::invalid_argument);
4f254e34 145 BOOST_CHECK_THROW(SvcParam(SvcParam::ech, std::move(val)), std::invalid_argument);
96fdac2a 146 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv6hint, std::move(val)), std::invalid_argument);
373914dc 147
b9516294 148 SvcParam param(SvcParam::keyFromString("no-default-alpn"));
96fdac2a 149 BOOST_CHECK_NO_THROW(param = SvcParam(SvcParam::keyFromString("alpn"), std::move(val)));
373914dc
PL
150 auto alpns = param.getALPN();
151
96fdac2a 152 BOOST_CHECK_EQUAL_COLLECTIONS(alpns.begin(), alpns.end(), checkVal.begin(), checkVal.end());
77ea4f4c 153 BOOST_CHECK_THROW(param.getMandatory(), std::invalid_argument);
4f254e34 154 BOOST_CHECK_THROW(param.getECH(), std::invalid_argument);
77ea4f4c
PL
155 BOOST_CHECK_THROW(param.getIPHints(), std::invalid_argument);
156 BOOST_CHECK_THROW(param.getPort(), std::invalid_argument);
157 BOOST_CHECK_THROW(param.getValue(), std::invalid_argument);
158}
159
160BOOST_AUTO_TEST_CASE(test_SvcParam_ctor_set_comboaddress_value) {
161 ComboAddress ca1("192.0.2.1");
162 ComboAddress ca2("192.0.2.2");
163 ComboAddress ca3("2001:db8::1");
164 ComboAddress ca4("2001:db8::2");
165
373914dc
PL
166 vector<ComboAddress> mixedVal({ca1, ca3});
167 vector<ComboAddress> v4Val({ca1, ca2});
96fdac2a 168 auto v4CheckVal = v4Val;
373914dc 169 vector<ComboAddress> v6Val({ca3, ca4});
96fdac2a 170 auto v6CheckVal = v6Val;
77ea4f4c 171
96fdac2a
PL
172 BOOST_CHECK_THROW(SvcParam(SvcParam::mandatory, std::move(v4Val)), std::invalid_argument);
173 BOOST_CHECK_THROW(SvcParam(SvcParam::alpn, std::move(v4Val)), std::invalid_argument);
174 BOOST_CHECK_THROW(SvcParam(SvcParam::no_default_alpn, std::move(v4Val)), std::invalid_argument);
175 BOOST_CHECK_THROW(SvcParam(SvcParam::port, std::move(v4Val)), std::invalid_argument);
4f254e34 176 BOOST_CHECK_THROW(SvcParam(SvcParam::ech, std::move(v4Val)), std::invalid_argument);
77ea4f4c 177
96fdac2a
PL
178 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv6hint, std::move(v4Val)), std::invalid_argument);
179 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv4hint, std::move(v6Val)), std::invalid_argument);
180 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv6hint, std::move(mixedVal)), std::invalid_argument);
181 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv4hint, std::move(mixedVal)), std::invalid_argument);
77ea4f4c 182
b9516294 183 SvcParam param(SvcParam::keyFromString("no-default-alpn"));
96fdac2a 184 BOOST_CHECK_NO_THROW(param = SvcParam(SvcParam::ipv4hint, std::move(v4Val)));
77ea4f4c
PL
185
186 auto retval = param.getIPHints();
96fdac2a 187 BOOST_CHECK(retval == v4CheckVal);
77ea4f4c
PL
188 BOOST_CHECK_THROW(param.getMandatory(), std::invalid_argument);
189 BOOST_CHECK_THROW(param.getALPN(), std::invalid_argument);
4f254e34 190 BOOST_CHECK_THROW(param.getECH(), std::invalid_argument);
77ea4f4c
PL
191 BOOST_CHECK_THROW(param.getPort(), std::invalid_argument);
192 BOOST_CHECK_THROW(param.getValue(), std::invalid_argument);
193
96fdac2a 194 BOOST_CHECK_NO_THROW(param = SvcParam(SvcParam::ipv6hint, std::move(v6Val)));
77ea4f4c
PL
195 retval.clear();
196 retval = param.getIPHints();
96fdac2a 197 BOOST_CHECK(retval == v6CheckVal);
77ea4f4c
PL
198 BOOST_CHECK_THROW(param.getMandatory(), std::invalid_argument);
199 BOOST_CHECK_THROW(param.getALPN(), std::invalid_argument);
4f254e34 200 BOOST_CHECK_THROW(param.getECH(), std::invalid_argument);
77ea4f4c
PL
201 BOOST_CHECK_THROW(param.getPort(), std::invalid_argument);
202 BOOST_CHECK_THROW(param.getValue(), std::invalid_argument);
203}
204
205BOOST_AUTO_TEST_CASE(test_SvcParam_ctor_uint16_value) {
206 uint16_t port(53);
207
208 BOOST_CHECK_THROW(SvcParam(SvcParam::mandatory, port), std::invalid_argument);
209 BOOST_CHECK_THROW(SvcParam(SvcParam::alpn, port), std::invalid_argument);
210 BOOST_CHECK_THROW(SvcParam(SvcParam::no_default_alpn, port), std::invalid_argument);
211 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv4hint, port), std::invalid_argument);
4f254e34 212 BOOST_CHECK_THROW(SvcParam(SvcParam::ech, port), std::invalid_argument);
77ea4f4c
PL
213 BOOST_CHECK_THROW(SvcParam(SvcParam::ipv6hint, port), std::invalid_argument);
214
b9516294 215 SvcParam param(SvcParam::keyFromString("no-default-alpn"));
77ea4f4c
PL
216 BOOST_CHECK_NO_THROW(param = SvcParam(SvcParam::port, port));
217 BOOST_CHECK_EQUAL(param.getPort(), port);
218 BOOST_CHECK_THROW(param.getMandatory(), std::invalid_argument);
219 BOOST_CHECK_THROW(param.getALPN(), std::invalid_argument);
4f254e34 220 BOOST_CHECK_THROW(param.getECH(), std::invalid_argument);
77ea4f4c
PL
221 BOOST_CHECK_THROW(param.getIPHints(), std::invalid_argument);
222 BOOST_CHECK_THROW(param.getValue(), std::invalid_argument);
223}
224
373914dc 225BOOST_AUTO_TEST_SUITE_END()