1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 Copyright © 2013 Intel Corporation. All rights reserved.
8 #include <sys/socket.h>
11 #include "sd-dhcp-client.h"
14 #include "alloc-util.h"
15 #include "dhcp-identifier.h"
16 #include "dhcp-internal.h"
17 #include "dhcp-protocol.h"
21 static uint8_t mac_addr
[] = {'A', 'B', 'C', '1', '2', '3'};
23 typedef int (*test_callback_recv_t
)(size_t size
, DHCPMessage
*dhcp
);
25 static bool verbose
= true;
26 static int test_fd
[2];
27 static test_callback_recv_t callback_recv
;
29 static sd_event_source
*test_hangcheck
;
31 static int test_dhcp_hangcheck(sd_event_source
*s
, uint64_t usec
, void *userdata
) {
32 assert_not_reached("Test case should have completed in 2 seconds");
37 static void test_request_basic(sd_event
*e
) {
40 sd_dhcp_client
*client
;
43 printf("* %s\n", __FUNCTION__
);
45 /* Initialize client without Anonymize settings. */
46 r
= sd_dhcp_client_new(&client
, false);
51 r
= sd_dhcp_client_attach_event(client
, e
, 0);
54 assert_se(sd_dhcp_client_set_request_option(NULL
, 0) == -EINVAL
);
55 assert_se(sd_dhcp_client_set_request_address(NULL
, NULL
) == -EINVAL
);
56 assert_se(sd_dhcp_client_set_ifindex(NULL
, 0) == -EINVAL
);
58 assert_se(sd_dhcp_client_set_ifindex(client
, 15) == 0);
59 assert_se(sd_dhcp_client_set_ifindex(client
, -42) == -EINVAL
);
60 assert_se(sd_dhcp_client_set_ifindex(client
, -1) == -EINVAL
);
61 assert_se(sd_dhcp_client_set_ifindex(client
, 0) == -EINVAL
);
62 assert_se(sd_dhcp_client_set_ifindex(client
, 1) == 0);
64 assert_se(sd_dhcp_client_set_hostname(client
, "host") == 1);
65 assert_se(sd_dhcp_client_set_hostname(client
, "host.domain") == 1);
66 assert_se(sd_dhcp_client_set_hostname(client
, NULL
) == 1);
67 assert_se(sd_dhcp_client_set_hostname(client
, "~host") == -EINVAL
);
68 assert_se(sd_dhcp_client_set_hostname(client
, "~host.domain") == -EINVAL
);
70 assert_se(sd_dhcp_client_set_request_option(client
,
71 SD_DHCP_OPTION_SUBNET_MASK
) == -EEXIST
);
72 assert_se(sd_dhcp_client_set_request_option(client
,
73 SD_DHCP_OPTION_ROUTER
) == -EEXIST
);
74 /* This PRL option is not set when using Anonymize, but in this test
75 * Anonymize settings are not being used. */
76 assert_se(sd_dhcp_client_set_request_option(client
,
77 SD_DHCP_OPTION_HOST_NAME
) == -EEXIST
);
78 assert_se(sd_dhcp_client_set_request_option(client
,
79 SD_DHCP_OPTION_DOMAIN_NAME
) == -EEXIST
);
80 assert_se(sd_dhcp_client_set_request_option(client
,
81 SD_DHCP_OPTION_DOMAIN_NAME_SERVER
) == -EEXIST
);
83 assert_se(sd_dhcp_client_set_request_option(client
,
84 SD_DHCP_OPTION_PAD
) == -EINVAL
);
85 assert_se(sd_dhcp_client_set_request_option(client
,
86 SD_DHCP_OPTION_END
) == -EINVAL
);
87 assert_se(sd_dhcp_client_set_request_option(client
,
88 SD_DHCP_OPTION_MESSAGE_TYPE
) == -EINVAL
);
89 assert_se(sd_dhcp_client_set_request_option(client
,
90 SD_DHCP_OPTION_OVERLOAD
) == -EINVAL
);
91 assert_se(sd_dhcp_client_set_request_option(client
,
92 SD_DHCP_OPTION_PARAMETER_REQUEST_LIST
)
95 /* RFC7844: option 33 (SD_DHCP_OPTION_STATIC_ROUTE) is set in the
96 * default PRL when using Anonymize, so it is changed to other option
97 * that is not set by default, to check that it was set successfully.
98 * Options not set by default (using or not anonymize) are option 17
99 * (SD_DHCP_OPTION_ROOT_PATH) and 42 (SD_DHCP_OPTION_NTP_SERVER) */
100 assert_se(sd_dhcp_client_set_request_option(client
, 17) == 0);
101 assert_se(sd_dhcp_client_set_request_option(client
, 17) == -EEXIST
);
102 assert_se(sd_dhcp_client_set_request_option(client
, 42) == 0);
103 assert_se(sd_dhcp_client_set_request_option(client
, 17) == -EEXIST
);
105 sd_dhcp_client_unref(client
);
108 static void test_request_anonymize(sd_event
*e
) {
111 sd_dhcp_client
*client
;
114 printf("* %s\n", __FUNCTION__
);
116 /* Initialize client with Anonymize settings. */
117 r
= sd_dhcp_client_new(&client
, true);
122 r
= sd_dhcp_client_attach_event(client
, e
, 0);
125 assert_se(sd_dhcp_client_set_request_option(client
,
126 SD_DHCP_OPTION_NETBIOS_NAMESERVER
) == -EEXIST
);
127 /* This PRL option is not set when using Anonymize */
128 assert_se(sd_dhcp_client_set_request_option(client
,
129 SD_DHCP_OPTION_HOST_NAME
) == 0);
130 assert_se(sd_dhcp_client_set_request_option(client
,
131 SD_DHCP_OPTION_PARAMETER_REQUEST_LIST
)
134 /* RFC7844: option 101 (SD_DHCP_OPTION_NEW_TZDB_TIMEZONE) is not set in the
135 * default PRL when using Anonymize, */
136 assert_se(sd_dhcp_client_set_request_option(client
, 101) == 0);
137 assert_se(sd_dhcp_client_set_request_option(client
, 101) == -EEXIST
);
139 sd_dhcp_client_unref(client
);
142 static void test_checksum(void) {
144 0x45, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00,
145 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
146 0xff, 0xff, 0xff, 0xff
150 printf("* %s\n", __FUNCTION__
);
152 assert_se(dhcp_packet_checksum((uint8_t*)&buf
, 20) == be16toh(0x78ae));
155 static int check_options(uint8_t code
, uint8_t len
, const void *option
, void *userdata
) {
157 case SD_DHCP_OPTION_CLIENT_IDENTIFIER
:
163 assert_se(dhcp_identifier_set_duid_en(&duid
, &duid_len
) >= 0);
164 assert_se(dhcp_identifier_set_iaid(42, mac_addr
, ETH_ALEN
, &iaid
) >= 0);
166 assert_se(len
== sizeof(uint8_t) + sizeof(uint32_t) + duid_len
);
167 assert_se(len
== 19);
168 assert_se(((uint8_t*) option
)[0] == 0xff);
170 assert_se(memcmp((uint8_t*) option
+ 1, &iaid
, sizeof(iaid
)) == 0);
171 assert_se(memcmp((uint8_t*) option
+ 5, &duid
, duid_len
) == 0);
182 int dhcp_network_send_raw_socket(int s
, const union sockaddr_union
*link
, const void *packet
, size_t len
) {
184 _cleanup_free_ DHCPPacket
*discover
;
185 uint16_t ip_check
, udp_check
;
190 size
= sizeof(DHCPPacket
);
191 assert_se(len
> size
);
193 discover
= memdup(packet
, len
);
195 assert_se(discover
->ip
.ttl
== IPDEFTTL
);
196 assert_se(discover
->ip
.protocol
== IPPROTO_UDP
);
197 assert_se(discover
->ip
.saddr
== INADDR_ANY
);
198 assert_se(discover
->ip
.daddr
== INADDR_BROADCAST
);
199 assert_se(discover
->udp
.source
== be16toh(DHCP_PORT_CLIENT
));
200 assert_se(discover
->udp
.dest
== be16toh(DHCP_PORT_SERVER
));
202 ip_check
= discover
->ip
.check
;
204 discover
->ip
.ttl
= 0;
205 discover
->ip
.check
= discover
->udp
.len
;
207 udp_check
= ~dhcp_packet_checksum((uint8_t*)&discover
->ip
.ttl
, len
- 8);
208 assert_se(udp_check
== 0xffff);
210 discover
->ip
.ttl
= IPDEFTTL
;
211 discover
->ip
.check
= ip_check
;
213 ip_check
= ~dhcp_packet_checksum((uint8_t*)&discover
->ip
, sizeof(discover
->ip
));
214 assert_se(ip_check
== 0xffff);
216 assert_se(discover
->dhcp
.xid
);
217 assert_se(memcmp(discover
->dhcp
.chaddr
, &mac_addr
, ETH_ALEN
) == 0);
219 size
= len
- sizeof(struct iphdr
) - sizeof(struct udphdr
);
221 assert_se(callback_recv
);
222 callback_recv(size
, &discover
->dhcp
);
227 int dhcp_network_bind_raw_socket(
229 union sockaddr_union
*link
,
231 const uint8_t *addr
, size_t addr_len
,
232 uint16_t arp_type
, uint16_t port
) {
234 if (socketpair(AF_UNIX
, SOCK_STREAM
, 0, test_fd
) < 0)
240 int dhcp_network_bind_udp_socket(int ifindex
, be32_t address
, uint16_t port
) {
243 fd
= socket(AF_INET
, SOCK_DGRAM
|SOCK_CLOEXEC
, 0);
250 int dhcp_network_send_udp_socket(int s
, be32_t address
, uint16_t port
, const void *packet
, size_t len
) {
254 static int test_discover_message_verify(size_t size
, struct DHCPMessage
*dhcp
) {
257 res
= dhcp_option_parse(dhcp
, size
, check_options
, NULL
, NULL
);
258 assert_se(res
== DHCP_DISCOVER
);
261 printf(" recv DHCP Discover 0x%08x\n", be32toh(dhcp
->xid
));
266 static void test_discover_message(sd_event
*e
) {
267 sd_dhcp_client
*client
;
271 printf("* %s\n", __FUNCTION__
);
273 r
= sd_dhcp_client_new(&client
, false);
277 r
= sd_dhcp_client_attach_event(client
, e
, 0);
280 assert_se(sd_dhcp_client_set_ifindex(client
, 42) >= 0);
281 assert_se(sd_dhcp_client_set_mac(client
, mac_addr
, ETH_ALEN
, ARPHRD_ETHER
) >= 0);
283 assert_se(sd_dhcp_client_set_request_option(client
, 248) >= 0);
285 callback_recv
= test_discover_message_verify
;
287 res
= sd_dhcp_client_start(client
);
289 assert_se(IN_SET(res
, 0, -EINPROGRESS
));
291 sd_event_run(e
, (uint64_t) -1);
293 sd_dhcp_client_stop(client
);
294 sd_dhcp_client_unref(client
);
296 test_fd
[1] = safe_close(test_fd
[1]);
298 callback_recv
= NULL
;
301 static uint8_t test_addr_acq_offer
[] = {
302 0x45, 0x10, 0x01, 0x48, 0x00, 0x00, 0x00, 0x00,
303 0x80, 0x11, 0xb3, 0x84, 0xc0, 0xa8, 0x02, 0x01,
304 0xc0, 0xa8, 0x02, 0xbf, 0x00, 0x43, 0x00, 0x44,
305 0x01, 0x34, 0x00, 0x00, 0x02, 0x01, 0x06, 0x00,
306 0x6f, 0x95, 0x2f, 0x30, 0x00, 0x00, 0x00, 0x00,
307 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x02, 0xbf,
308 0xc0, 0xa8, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
309 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
310 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
311 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
312 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
313 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
314 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
315 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
316 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
317 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
318 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
320 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
321 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
322 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
323 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
324 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
325 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
326 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
327 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
328 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
329 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
330 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
331 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
332 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
333 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
334 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
335 0x63, 0x82, 0x53, 0x63, 0x35, 0x01, 0x02, 0x36,
336 0x04, 0xc0, 0xa8, 0x02, 0x01, 0x33, 0x04, 0x00,
337 0x00, 0x02, 0x58, 0x01, 0x04, 0xff, 0xff, 0xff,
338 0x00, 0x2a, 0x04, 0xc0, 0xa8, 0x02, 0x01, 0x0f,
339 0x09, 0x6c, 0x61, 0x62, 0x2e, 0x69, 0x6e, 0x74,
340 0x72, 0x61, 0x03, 0x04, 0xc0, 0xa8, 0x02, 0x01,
341 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
342 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
345 static uint8_t test_addr_acq_ack
[] = {
346 0x45, 0x10, 0x01, 0x48, 0x00, 0x00, 0x00, 0x00,
347 0x80, 0x11, 0xb3, 0x84, 0xc0, 0xa8, 0x02, 0x01,
348 0xc0, 0xa8, 0x02, 0xbf, 0x00, 0x43, 0x00, 0x44,
349 0x01, 0x34, 0x00, 0x00, 0x02, 0x01, 0x06, 0x00,
350 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
351 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x02, 0xbf,
352 0xc0, 0xa8, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
353 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
354 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
355 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
356 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
357 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
358 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
359 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
360 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
361 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
362 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
363 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
364 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
365 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
366 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
367 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
368 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
369 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
370 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
371 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
373 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
374 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
376 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
377 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
378 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
379 0x63, 0x82, 0x53, 0x63, 0x35, 0x01, 0x05, 0x36,
380 0x04, 0xc0, 0xa8, 0x02, 0x01, 0x33, 0x04, 0x00,
381 0x00, 0x02, 0x58, 0x01, 0x04, 0xff, 0xff, 0xff,
382 0x00, 0x2a, 0x04, 0xc0, 0xa8, 0x02, 0x01, 0x0f,
383 0x09, 0x6c, 0x61, 0x62, 0x2e, 0x69, 0x6e, 0x74,
384 0x72, 0x61, 0x03, 0x04, 0xc0, 0xa8, 0x02, 0x01,
385 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
386 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
389 static void test_addr_acq_acquired(sd_dhcp_client
*client
, int event
,
391 sd_event
*e
= userdata
;
392 sd_dhcp_lease
*lease
;
396 assert_se(event
== SD_DHCP_CLIENT_EVENT_IP_ACQUIRE
);
398 assert_se(sd_dhcp_client_get_lease(client
, &lease
) >= 0);
401 assert_se(sd_dhcp_lease_get_address(lease
, &addr
) >= 0);
402 assert_se(memcmp(&addr
.s_addr
, &test_addr_acq_ack
[44],
403 sizeof(addr
.s_addr
)) == 0);
405 assert_se(sd_dhcp_lease_get_netmask(lease
, &addr
) >= 0);
406 assert_se(memcmp(&addr
.s_addr
, &test_addr_acq_ack
[285],
407 sizeof(addr
.s_addr
)) == 0);
409 assert_se(sd_dhcp_lease_get_router(lease
, &addr
) >= 0);
410 assert_se(memcmp(&addr
.s_addr
, &test_addr_acq_ack
[308],
411 sizeof(addr
.s_addr
)) == 0);
414 printf(" DHCP address acquired\n");
419 static int test_addr_acq_recv_request(size_t size
, DHCPMessage
*request
) {
420 uint16_t udp_check
= 0;
421 uint8_t *msg_bytes
= (uint8_t *)request
;
424 res
= dhcp_option_parse(request
, size
, check_options
, NULL
, NULL
);
425 assert_se(res
== DHCP_REQUEST
);
426 assert_se(xid
== request
->xid
);
428 assert_se(msg_bytes
[size
- 1] == SD_DHCP_OPTION_END
);
431 printf(" recv DHCP Request 0x%08x\n", be32toh(xid
));
433 memcpy(&test_addr_acq_ack
[26], &udp_check
, sizeof(udp_check
));
434 memcpy(&test_addr_acq_ack
[32], &xid
, sizeof(xid
));
435 memcpy(&test_addr_acq_ack
[56], &mac_addr
, ETHER_ADDR_LEN
);
437 callback_recv
= NULL
;
439 res
= write(test_fd
[1], test_addr_acq_ack
,
440 sizeof(test_addr_acq_ack
));
441 assert_se(res
== sizeof(test_addr_acq_ack
));
444 printf(" send DHCP Ack\n");
449 static int test_addr_acq_recv_discover(size_t size
, DHCPMessage
*discover
) {
450 uint16_t udp_check
= 0;
451 uint8_t *msg_bytes
= (uint8_t *)discover
;
454 res
= dhcp_option_parse(discover
, size
, check_options
, NULL
, NULL
);
455 assert_se(res
== DHCP_DISCOVER
);
457 assert_se(msg_bytes
[size
- 1] == SD_DHCP_OPTION_END
);
462 printf(" recv DHCP Discover 0x%08x\n", be32toh(xid
));
464 memcpy(&test_addr_acq_offer
[26], &udp_check
, sizeof(udp_check
));
465 memcpy(&test_addr_acq_offer
[32], &xid
, sizeof(xid
));
466 memcpy(&test_addr_acq_offer
[56], &mac_addr
, ETHER_ADDR_LEN
);
468 callback_recv
= test_addr_acq_recv_request
;
470 res
= write(test_fd
[1], test_addr_acq_offer
,
471 sizeof(test_addr_acq_offer
));
472 assert_se(res
== sizeof(test_addr_acq_offer
));
475 printf(" sent DHCP Offer\n");
480 static void test_addr_acq(sd_event
*e
) {
481 usec_t time_now
= now(clock_boottime_or_monotonic());
482 sd_dhcp_client
*client
;
486 printf("* %s\n", __FUNCTION__
);
488 r
= sd_dhcp_client_new(&client
, false);
492 r
= sd_dhcp_client_attach_event(client
, e
, 0);
495 assert_se(sd_dhcp_client_set_ifindex(client
, 42) >= 0);
496 assert_se(sd_dhcp_client_set_mac(client
, mac_addr
, ETH_ALEN
, ARPHRD_ETHER
) >= 0);
498 assert_se(sd_dhcp_client_set_callback(client
, test_addr_acq_acquired
, e
) >= 0);
500 callback_recv
= test_addr_acq_recv_discover
;
502 assert_se(sd_event_add_time(e
, &test_hangcheck
,
503 clock_boottime_or_monotonic(),
504 time_now
+ 2 * USEC_PER_SEC
, 0,
505 test_dhcp_hangcheck
, NULL
) >= 0);
507 res
= sd_dhcp_client_start(client
);
508 assert_se(IN_SET(res
, 0, -EINPROGRESS
));
510 assert_se(sd_event_loop(e
) >= 0);
512 test_hangcheck
= sd_event_source_unref(test_hangcheck
);
514 assert_se(sd_dhcp_client_set_callback(client
, NULL
, NULL
) >= 0);
515 assert_se(sd_dhcp_client_stop(client
) >= 0);
516 sd_dhcp_client_unref(client
);
518 test_fd
[1] = safe_close(test_fd
[1]);
520 callback_recv
= NULL
;
524 int main(int argc
, char *argv
[]) {
525 _cleanup_(sd_event_unrefp
) sd_event
*e
;
527 log_set_max_level(LOG_DEBUG
);
528 log_parse_environment();
531 assert_se(sd_event_new(&e
) >= 0);
533 test_request_basic(e
);
534 test_request_anonymize(e
);
537 test_discover_message(e
);
541 /* Make sure the async_close thread has finished.
542 * valgrind would report some of the phread_* structures
543 * as not cleaned up properly. */