Skip to content

Commit a91ead8

Browse files
committed
feat(mdns): Console test for lookup service APIs
1 parent e425a3c commit a91ead8

File tree

2 files changed

+77
-1
lines changed

2 files changed

+77
-1
lines changed

components/mdns/mdns_console.c

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ static void mdns_print_results(mdns_result_t *results)
1919
mdns_ip_addr_t *a = NULL;
2020
int i = 1;
2121
while (r) {
22-
printf("%d: Interface: %s, Type: %s\n", i++, esp_netif_get_ifkey(r->esp_netif), ip_protocol_str[r->ip_protocol]);
22+
if (r->esp_netif) {
23+
printf("%d: Interface: %s, Type: %s, TTL: %" PRIu32 "\n", i++, esp_netif_get_ifkey(r->esp_netif),
24+
ip_protocol_str[r->ip_protocol], r->ttl);
25+
}
2326
if (r->instance_name) {
2427
printf(" PTR : %s\n", r->instance_name);
2528
}
@@ -1031,6 +1034,73 @@ static void register_mdns_service_remove_all(void)
10311034
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_free) );
10321035
}
10331036

1037+
#define MDNS_MAX_LOOKUP_RESULTS CONFIG_MDNS_MAX_SERVICES
1038+
1039+
static struct {
1040+
struct arg_str *instance;
1041+
struct arg_str *service;
1042+
struct arg_str *proto;
1043+
struct arg_lit *delegated;
1044+
struct arg_end *end;
1045+
} mdns_lookup_service_args;
1046+
1047+
static esp_err_t lookup_service(const char *instance, const char *service, const char *proto, size_t max_results,
1048+
mdns_result_t **result, bool delegated)
1049+
{
1050+
if (delegated) {
1051+
return mdns_lookup_delegated_service(instance, service, proto, max_results, result);
1052+
}
1053+
return mdns_lookup_selfhosted_service(instance, service, proto, max_results, result);
1054+
}
1055+
1056+
static int cmd_mdns_lookup_service(int argc, char **argv)
1057+
{
1058+
int nerrors = arg_parse(argc, argv, (void **) &mdns_lookup_service_args);
1059+
if (nerrors != 0) {
1060+
arg_print_errors(stderr, mdns_lookup_service_args.end, argv[0]);
1061+
return 1;
1062+
}
1063+
1064+
if (!mdns_lookup_service_args.instance->sval[0] || !mdns_lookup_service_args.service->sval[0] || !mdns_lookup_service_args.proto->sval[0]) {
1065+
printf("ERROR: Bad arguments!\n");
1066+
return 1;
1067+
}
1068+
mdns_result_t *results = NULL;
1069+
esp_err_t err = lookup_service(mdns_lookup_service_args.instance->count ? mdns_lookup_service_args.instance->sval[0] : NULL,
1070+
mdns_lookup_service_args.service->sval[0], mdns_lookup_service_args.proto->sval[0],
1071+
MDNS_MAX_LOOKUP_RESULTS, &results, mdns_lookup_service_args.delegated->count);
1072+
if (err) {
1073+
printf("Service lookup failed\n");
1074+
return 1;
1075+
}
1076+
if (!results) {
1077+
printf("No results found!\n");
1078+
return 0;
1079+
}
1080+
mdns_print_results(results);
1081+
mdns_query_results_free(results);
1082+
return 0;
1083+
}
1084+
1085+
static void register_mdns_lookup_service(void)
1086+
{
1087+
mdns_lookup_service_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
1088+
mdns_lookup_service_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
1089+
mdns_lookup_service_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
1090+
mdns_lookup_service_args.delegated = arg_lit0("d", "delegated", "Lookup delegated services");
1091+
mdns_lookup_service_args.end = arg_end(4);
1092+
1093+
const esp_console_cmd_t cmd_lookup_service = {
1094+
.command = "mdns_service_lookup",
1095+
.help = "Lookup registered service",
1096+
.hint = NULL,
1097+
.func = &cmd_mdns_lookup_service,
1098+
.argtable = &mdns_lookup_service_args
1099+
};
1100+
1101+
ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_lookup_service) );
1102+
}
1103+
10341104
void mdns_console_register(void)
10351105
{
10361106
register_mdns_init();
@@ -1046,6 +1116,8 @@ void mdns_console_register(void)
10461116
register_mdns_service_txt_remove();
10471117
register_mdns_service_remove_all();
10481118

1119+
register_mdns_lookup_service();
1120+
10491121
#ifdef CONFIG_LWIP_IPV4
10501122
register_mdns_query_a();
10511123
#endif

components/mdns/tests/host_test/pytest_mdns.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,15 @@ def test_mdns_init(mdns_console, dig_app):
6060
def test_add_service(mdns_console, dig_app):
6161
mdns_console.send_input('mdns_service_add _http _tcp 80 -i test_service')
6262
mdns_console.get_output('MDNS: Service Instance: test_service')
63+
mdns_console.send_input('mdns_service_lookup _http _tcp')
64+
mdns_console.get_output('PTR : test_service')
6365
dig_app.check_record('_http._tcp.local', query_type='PTR', expected=True)
6466

6567

6668
def test_remove_service(mdns_console, dig_app):
6769
mdns_console.send_input('mdns_service_remove _http _tcp')
70+
mdns_console.send_input('mdns_service_lookup _http _tcp')
71+
mdns_console.get_output('No results found!')
6872
dig_app.check_record('_http._tcp.local', query_type='PTR', expected=False)
6973

7074

0 commit comments

Comments
 (0)