]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/resolve/test-resolved-packet.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
5 #include "resolved-dns-packet.h"
10 _cleanup_(dns_packet_unrefp
) DnsPacket
*p2
= NULL
;
12 for (i
= 0; i
<= DNS_PACKET_SIZE_MAX
; i
++) {
13 _cleanup_(dns_packet_unrefp
) DnsPacket
*p
= NULL
;
15 assert_se(dns_packet_new(&p
, DNS_PROTOCOL_DNS
, i
, DNS_PACKET_SIZE_MAX
) == 0);
17 log_debug("dns_packet_new: %zu → %zu", i
, p
->allocated
);
18 assert_se(p
->allocated
>= MIN(DNS_PACKET_SIZE_MAX
, i
));
20 if (i
> DNS_PACKET_SIZE_START
+ 10 && i
< DNS_PACKET_SIZE_MAX
- 10)
21 i
= MIN(i
* 2, DNS_PACKET_SIZE_MAX
- 10);
24 assert_se(dns_packet_new(&p2
, DNS_PROTOCOL_DNS
, DNS_PACKET_SIZE_MAX
+ 1, DNS_PACKET_SIZE_MAX
) == -EFBIG
);
28 _cleanup_(dns_packet_unrefp
) DnsPacket
*p
= NULL
;
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";
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";
54 static const char twilio_reply_json
[] =
60 " \"name\" : \"twilio.com\"\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"
73 " \"name\" : \"twilio.com\"\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"
86 " \"name\" : \"twilio.com\"\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"
99 " \"name\" : \"twilio.com\"\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"
112 " \"name\" : \"twilio.com\"\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"
125 " \"name\" : \"twilio.com\"\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"
138 " \"name\" : \"twilio.com\"\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"
151 " \"name\" : \"twilio.com\"\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"
164 " \"name\" : \"twilio.com\"\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"
175 _cleanup_free_
void *buf
= NULL
;
178 assert_se(unbase64mem(twilio_reply
, &buf
, &sz
) >= 0);
180 assert_se(dns_packet_new(&p
, DNS_PROTOCOL_DNS
, sz
, DNS_PACKET_SIZE_MAX
) == 0);
181 assert_se(p
->allocated
>= sz
);
183 memcpy(DNS_PACKET_DATA(p
), buf
, sz
);
186 assert_se(dns_packet_extract(p
) >= 0);
188 _cleanup_(json_variant_unrefp
) JsonVariant
*a
= NULL
;
189 _cleanup_free_
char *joined
= NULL
;
190 DnsResourceRecord
*rr
;
191 DNS_ANSWER_FOREACH(rr
, p
->answer
) {
194 s
= ASSERT_PTR(dns_resource_record_to_string(rr
));
197 assert_se(strextend(&joined
, s
, "\n"));
199 _cleanup_(json_variant_unrefp
) JsonVariant
*v
= NULL
;
200 assert_se(dns_resource_record_to_json(rr
, &v
) >= 0);
202 assert_se(json_variant_append_array(&a
, v
) >= 0);
205 assert(streq(joined
, twilio_reply_string
));
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);
210 assert_se(json_variant_equal(parsed
, a
));
213 DEFINE_TEST_MAIN(LOG_DEBUG
);