]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/resolve/test-resolved-packet.c
network: DHCP version logging typos
[thirdparty/systemd.git] / src / resolve / test-resolved-packet.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3 #include "hexdecoct.h"
4 #include "log.h"
5 #include "resolved-dns-packet.h"
6 #include "tests.h"
7
8 TEST(dns_packet_new) {
9 size_t i;
10 _cleanup_(dns_packet_unrefp) DnsPacket *p2 = NULL;
11
12 for (i = 0; i <= DNS_PACKET_SIZE_MAX; i++) {
13 _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
14
15 assert_se(dns_packet_new(&p, DNS_PROTOCOL_DNS, i, DNS_PACKET_SIZE_MAX) == 0);
16
17 log_debug("dns_packet_new: %zu → %zu", i, p->allocated);
18 assert_se(p->allocated >= MIN(DNS_PACKET_SIZE_MAX, i));
19
20 if (i > DNS_PACKET_SIZE_START + 10 && i < DNS_PACKET_SIZE_MAX - 10)
21 i = MIN(i * 2, DNS_PACKET_SIZE_MAX - 10);
22 }
23
24 assert_se(dns_packet_new(&p2, DNS_PROTOCOL_DNS, DNS_PACKET_SIZE_MAX + 1, DNS_PACKET_SIZE_MAX) == -EFBIG);
25 }
26
27 TEST(naptr) {
28 _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
29
30 static const char twilio_reply[] =
31 "Sq+BgAABAAkAAAABBnR3aWxpbwNjb20AACMAAcAMACMAAQAABwgAMgAUAAoBUwdTSVArRDJUAARf"
32 "c2lwBF90Y3AEcHN0bgdpZTEtdG54BnR3aWxpbwNjb20AwAwAIwABAAAHCAAyAAoACgFTB1NJUCtE"
33 "MlUABF9zaXAEX3VkcARwc3RuB3VzMi10bngGdHdpbGlvA2NvbQDADAAjAAEAAAcIADQAFAAKAVMI"
34 "U0lQUytEMlQABV9zaXBzBF90Y3AEcHN0bgd1czEtdG54BnR3aWxpbwNjb20AwAwAIwABAAAHCAAy"
35 "AAoACgFTB1NJUCtEMlUABF9zaXAEX3VkcARwc3RuB2llMS10bngGdHdpbGlvA2NvbQDADAAjAAEA"
36 "AAcIADIAFAAKAVMHU0lQK0QyVAAEX3NpcARfdGNwBHBzdG4HdXMyLXRueAZ0d2lsaW8DY29tAMAM"
37 "ACMAAQAABwgANAAUAAoBUwhTSVBTK0QyVAAFX3NpcHMEX3RjcARwc3RuB3VzMi10bngGdHdpbGlv"
38 "A2NvbQDADAAjAAEAAAcIADQAFAAKAVMIU0lQUytEMlQABV9zaXBzBF90Y3AEcHN0bgdpZTEtdG54"
39 "BnR3aWxpbwNjb20AwAwAIwABAAAHCAAyAAoACgFTB1NJUCtEMlUABF9zaXAEX3VkcARwc3RuB3Vz"
40 "MS10bngGdHdpbGlvA2NvbQDADAAjAAEAAAcIADIAFAAKAVMHU0lQK0QyVAAEX3NpcARfdGNwBHBz"
41 "dG4HdXMxLXRueAZ0d2lsaW8DY29tAAAAKQIAAAAAAAAA";
42
43 static const char twilio_reply_string[] =
44 "20 10 \"S\" \"SIP+D2T\" \"\" _sip._tcp.pstn.ie1-tnx.twilio.com.\n"
45 "10 10 \"S\" \"SIP+D2U\" \"\" _sip._udp.pstn.us2-tnx.twilio.com.\n"
46 "20 10 \"S\" \"SIPS+D2T\" \"\" _sips._tcp.pstn.us1-tnx.twilio.com.\n"
47 "10 10 \"S\" \"SIP+D2U\" \"\" _sip._udp.pstn.ie1-tnx.twilio.com.\n"
48 "20 10 \"S\" \"SIP+D2T\" \"\" _sip._tcp.pstn.us2-tnx.twilio.com.\n"
49 "20 10 \"S\" \"SIPS+D2T\" \"\" _sips._tcp.pstn.us2-tnx.twilio.com.\n"
50 "20 10 \"S\" \"SIPS+D2T\" \"\" _sips._tcp.pstn.ie1-tnx.twilio.com.\n"
51 "10 10 \"S\" \"SIP+D2U\" \"\" _sip._udp.pstn.us1-tnx.twilio.com.\n"
52 "20 10 \"S\" \"SIP+D2T\" \"\" _sip._tcp.pstn.us1-tnx.twilio.com.\n";
53
54 static const char twilio_reply_json[] =
55 "[\n"
56 " {\n"
57 " \"key\" : {\n"
58 " \"class\" : 1,\n"
59 " \"type\" : 35,\n"
60 " \"name\" : \"twilio.com\"\n"
61 " },\n"
62 " \"order\" : 20,\n"
63 " \"preference\" : 10,\n"
64 " \"naptrFlags\" : \"S\",\n"
65 " \"services\" : \"SIP+D2T\",\n"
66 " \"regexp\" : \"\",\n"
67 " \"replacement\" : \"_sip._tcp.pstn.ie1-tnx.twilio.com\"\n"
68 " },\n"
69 " {\n"
70 " \"key\" : {\n"
71 " \"class\" : 1,\n"
72 " \"type\" : 35,\n"
73 " \"name\" : \"twilio.com\"\n"
74 " },\n"
75 " \"order\" : 10,\n"
76 " \"preference\" : 10,\n"
77 " \"naptrFlags\" : \"S\",\n"
78 " \"services\" : \"SIP+D2U\",\n"
79 " \"regexp\" : \"\",\n"
80 " \"replacement\" : \"_sip._udp.pstn.us2-tnx.twilio.com\"\n"
81 " },\n"
82 " {\n"
83 " \"key\" : {\n"
84 " \"class\" : 1,\n"
85 " \"type\" : 35,\n"
86 " \"name\" : \"twilio.com\"\n"
87 " },\n"
88 " \"order\" : 20,\n"
89 " \"preference\" : 10,\n"
90 " \"naptrFlags\" : \"S\",\n"
91 " \"services\" : \"SIPS+D2T\",\n"
92 " \"regexp\" : \"\",\n"
93 " \"replacement\" : \"_sips._tcp.pstn.us1-tnx.twilio.com\"\n"
94 " },\n"
95 " {\n"
96 " \"key\" : {\n"
97 " \"class\" : 1,\n"
98 " \"type\" : 35,\n"
99 " \"name\" : \"twilio.com\"\n"
100 " },\n"
101 " \"order\" : 10,\n"
102 " \"preference\" : 10,\n"
103 " \"naptrFlags\" : \"S\",\n"
104 " \"services\" : \"SIP+D2U\",\n"
105 " \"regexp\" : \"\",\n"
106 " \"replacement\" : \"_sip._udp.pstn.ie1-tnx.twilio.com\"\n"
107 " },\n"
108 " {\n"
109 " \"key\" : {\n"
110 " \"class\" : 1,\n"
111 " \"type\" : 35,\n"
112 " \"name\" : \"twilio.com\"\n"
113 " },\n"
114 " \"order\" : 20,\n"
115 " \"preference\" : 10,\n"
116 " \"naptrFlags\" : \"S\",\n"
117 " \"services\" : \"SIP+D2T\",\n"
118 " \"regexp\" : \"\",\n"
119 " \"replacement\" : \"_sip._tcp.pstn.us2-tnx.twilio.com\"\n"
120 " },\n"
121 " {\n"
122 " \"key\" : {\n"
123 " \"class\" : 1,\n"
124 " \"type\" : 35,\n"
125 " \"name\" : \"twilio.com\"\n"
126 " },\n"
127 " \"order\" : 20,\n"
128 " \"preference\" : 10,\n"
129 " \"naptrFlags\" : \"S\",\n"
130 " \"services\" : \"SIPS+D2T\",\n"
131 " \"regexp\" : \"\",\n"
132 " \"replacement\" : \"_sips._tcp.pstn.us2-tnx.twilio.com\"\n"
133 " },\n"
134 " {\n"
135 " \"key\" : {\n"
136 " \"class\" : 1,\n"
137 " \"type\" : 35,\n"
138 " \"name\" : \"twilio.com\"\n"
139 " },\n"
140 " \"order\" : 20,\n"
141 " \"preference\" : 10,\n"
142 " \"naptrFlags\" : \"S\",\n"
143 " \"services\" : \"SIPS+D2T\",\n"
144 " \"regexp\" : \"\",\n"
145 " \"replacement\" : \"_sips._tcp.pstn.ie1-tnx.twilio.com\"\n"
146 " },\n"
147 " {\n"
148 " \"key\" : {\n"
149 " \"class\" : 1,\n"
150 " \"type\" : 35,\n"
151 " \"name\" : \"twilio.com\"\n"
152 " },\n"
153 " \"order\" : 10,\n"
154 " \"preference\" : 10,\n"
155 " \"naptrFlags\" : \"S\",\n"
156 " \"services\" : \"SIP+D2U\",\n"
157 " \"regexp\" : \"\",\n"
158 " \"replacement\" : \"_sip._udp.pstn.us1-tnx.twilio.com\"\n"
159 " },\n"
160 " {\n"
161 " \"key\" : {\n"
162 " \"class\" : 1,\n"
163 " \"type\" : 35,\n"
164 " \"name\" : \"twilio.com\"\n"
165 " },\n"
166 " \"order\" : 20,\n"
167 " \"preference\" : 10,\n"
168 " \"naptrFlags\" : \"S\",\n"
169 " \"services\" : \"SIP+D2T\",\n"
170 " \"regexp\" : \"\",\n"
171 " \"replacement\" : \"_sip._tcp.pstn.us1-tnx.twilio.com\"\n"
172 " }\n"
173 "]\n";
174
175 _cleanup_free_ void *buf = NULL;
176 size_t sz = 0;
177
178 assert_se(unbase64mem(twilio_reply, &buf, &sz) >= 0);
179
180 assert_se(dns_packet_new(&p, DNS_PROTOCOL_DNS, sz, DNS_PACKET_SIZE_MAX) == 0);
181 assert_se(p->allocated >= sz);
182
183 memcpy(DNS_PACKET_DATA(p), buf, sz);
184 p->size = sz;
185
186 assert_se(dns_packet_extract(p) >= 0);
187
188 _cleanup_(json_variant_unrefp) JsonVariant *a = NULL;
189 _cleanup_free_ char *joined = NULL;
190 DnsResourceRecord *rr;
191 DNS_ANSWER_FOREACH(rr, p->answer) {
192 const char *s;
193
194 s = ASSERT_PTR(dns_resource_record_to_string(rr));
195 printf("%s\n", s);
196
197 assert_se(strextend(&joined, s, "\n"));
198
199 _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
200 assert_se(dns_resource_record_to_json(rr, &v) >= 0);
201
202 assert_se(json_variant_append_array(&a, v) >= 0);
203 }
204
205 assert(streq(joined, twilio_reply_string));
206
207 _cleanup_(json_variant_unrefp) JsonVariant *parsed = NULL;
208 assert_se(json_parse(twilio_reply_json, /* flags= */ 0, &parsed, /* ret_line= */ NULL, /* ret_column= */ NULL) >= 0);
209
210 assert_se(json_variant_equal(parsed, a));
211 }
212
213 DEFINE_TEST_MAIN(LOG_DEBUG);