Skip to content

Commit c9a58d7

Browse files
committed
feat(mdns): Console test: add/remove TXT recs for delegated srvs
1 parent 6b9a6ce commit c9a58d7

File tree

2 files changed

+69
-19
lines changed

2 files changed

+69
-19
lines changed

components/mdns/mdns_console.c

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -901,6 +901,8 @@ static void register_mdns_service_port_set(void)
901901
static struct {
902902
struct arg_str *service;
903903
struct arg_str *proto;
904+
struct arg_str *instance;
905+
struct arg_str *host;
904906
struct arg_str *txt;
905907
struct arg_end *end;
906908
} mdns_txt_replace_args;
@@ -918,7 +920,16 @@ static int cmd_mdns_service_txt_replace(int argc, char **argv)
918920
printf("ERROR: Bad arguments!\n");
919921
return 1;
920922
}
921-
923+
const char *instance = NULL;
924+
if (mdns_txt_replace_args.instance->count && mdns_txt_replace_args.instance->sval[0]) {
925+
instance = mdns_txt_replace_args.instance->sval[0];
926+
printf("MDNS: Service Instance: %s\n", instance);
927+
}
928+
const char *host = NULL;
929+
if (mdns_txt_replace_args.host->count && mdns_txt_replace_args.host->sval[0]) {
930+
host = mdns_txt_replace_args.host->sval[0];
931+
printf("MDNS: Service for delegated host: %s\n", host);
932+
}
922933
if (mdns_txt_replace_args.txt->count) {
923934
items = _convert_items(mdns_txt_replace_args.txt->sval, mdns_txt_replace_args.txt->count);
924935
if (!items) {
@@ -927,7 +938,7 @@ static int cmd_mdns_service_txt_replace(int argc, char **argv)
927938

928939
}
929940
}
930-
ESP_ERROR_CHECK( mdns_service_txt_set(mdns_txt_replace_args.service->sval[0], mdns_txt_replace_args.proto->sval[0], items, mdns_txt_replace_args.txt->count) );
941+
ESP_ERROR_CHECK( mdns_service_txt_set_for_host(instance, mdns_txt_replace_args.service->sval[0], mdns_txt_replace_args.proto->sval[0], host, items, mdns_txt_replace_args.txt->count) );
931942
free(items);
932943
return 0;
933944
}
@@ -936,8 +947,10 @@ static void register_mdns_service_txt_replace(void)
936947
{
937948
mdns_txt_replace_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
938949
mdns_txt_replace_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
950+
mdns_txt_replace_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
951+
mdns_txt_replace_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
939952
mdns_txt_replace_args.txt = arg_strn(NULL, NULL, "item", 0, 30, "TXT Items (name=value)");
940-
mdns_txt_replace_args.end = arg_end(2);
953+
mdns_txt_replace_args.end = arg_end(5);
941954

942955
const esp_console_cmd_t cmd_txt_set = {
943956
.command = "mdns_service_txt_replace",
@@ -953,6 +966,8 @@ static void register_mdns_service_txt_replace(void)
953966
static struct {
954967
struct arg_str *service;
955968
struct arg_str *proto;
969+
struct arg_str *instance;
970+
struct arg_str *host;
956971
struct arg_str *var;
957972
struct arg_str *value;
958973
struct arg_end *end;
@@ -970,8 +985,18 @@ static int cmd_mdns_service_txt_set(int argc, char **argv)
970985
printf("ERROR: Bad arguments!\n");
971986
return 1;
972987
}
988+
const char *instance = NULL;
989+
if (mdns_txt_set_args.instance->count && mdns_txt_set_args.instance->sval[0]) {
990+
instance = mdns_txt_set_args.instance->sval[0];
991+
printf("MDNS: Service Instance: %s\n", instance);
992+
}
993+
const char *host = NULL;
994+
if (mdns_txt_set_args.host->count && mdns_txt_set_args.host->sval[0]) {
995+
host = mdns_txt_set_args.host->sval[0];
996+
printf("MDNS: Service for delegated host: %s\n", host);
997+
}
973998

974-
ESP_ERROR_CHECK( mdns_service_txt_item_set(mdns_txt_set_args.service->sval[0], mdns_txt_set_args.proto->sval[0], mdns_txt_set_args.var->sval[0], mdns_txt_set_args.value->sval[0]) );
999+
ESP_ERROR_CHECK( mdns_service_txt_item_set_for_host(instance, mdns_txt_set_args.service->sval[0], mdns_txt_set_args.proto->sval[0], host, mdns_txt_set_args.var->sval[0], mdns_txt_set_args.value->sval[0]) );
9751000
return 0;
9761001
}
9771002

@@ -981,7 +1006,9 @@ static void register_mdns_service_txt_set(void)
9811006
mdns_txt_set_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
9821007
mdns_txt_set_args.var = arg_str1(NULL, NULL, "<var>", "Item Name");
9831008
mdns_txt_set_args.value = arg_str1(NULL, NULL, "<value>", "Item Value");
984-
mdns_txt_set_args.end = arg_end(2);
1009+
mdns_txt_set_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
1010+
mdns_txt_set_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
1011+
mdns_txt_set_args.end = arg_end(6);
9851012

9861013
const esp_console_cmd_t cmd_txt_set = {
9871014
.command = "mdns_service_txt_set",
@@ -998,6 +1025,8 @@ static struct {
9981025
struct arg_str *service;
9991026
struct arg_str *proto;
10001027
struct arg_str *var;
1028+
struct arg_str *instance;
1029+
struct arg_str *host;
10011030
struct arg_end *end;
10021031
} mdns_txt_remove_args;
10031032

@@ -1013,8 +1042,15 @@ static int cmd_mdns_service_txt_remove(int argc, char **argv)
10131042
printf("ERROR: Bad arguments!\n");
10141043
return 1;
10151044
}
1016-
1017-
ESP_ERROR_CHECK( mdns_service_txt_item_remove(mdns_txt_remove_args.service->sval[0], mdns_txt_remove_args.proto->sval[0], mdns_txt_remove_args.var->sval[0]) );
1045+
const char *instance = NULL;
1046+
if (mdns_txt_remove_args.instance->count && mdns_txt_remove_args.instance->sval[0]) {
1047+
instance = mdns_txt_remove_args.instance->sval[0];
1048+
}
1049+
const char *host = NULL;
1050+
if (mdns_txt_remove_args.host->count && mdns_txt_remove_args.host->sval[0]) {
1051+
host = mdns_txt_remove_args.host->sval[0];
1052+
}
1053+
ESP_ERROR_CHECK( mdns_service_txt_item_remove_for_host(instance, mdns_txt_remove_args.service->sval[0], mdns_txt_remove_args.proto->sval[0], host, mdns_txt_remove_args.var->sval[0]) );
10181054
return 0;
10191055
}
10201056

@@ -1023,6 +1059,8 @@ static void register_mdns_service_txt_remove(void)
10231059
mdns_txt_remove_args.service = arg_str1(NULL, NULL, "<service>", "MDNS Service");
10241060
mdns_txt_remove_args.proto = arg_str1(NULL, NULL, "<proto>", "IP Protocol");
10251061
mdns_txt_remove_args.var = arg_str1(NULL, NULL, "<var>", "Item Name");
1062+
mdns_txt_remove_args.instance = arg_str0("i", "instance", "<instance>", "Instance name");
1063+
mdns_txt_remove_args.host = arg_str0("h", "host", "<hostname>", "Service for this (delegated) host");
10261064
mdns_txt_remove_args.end = arg_end(2);
10271065

10281066
const esp_console_cmd_t cmd_txt_remove = {

components/mdns/tests/host_test/pytest_mdns.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,21 +102,33 @@ def test_remove_delegated_service(mdns_console, dig_app):
102102
mdns_console.send_input('mdns_service_lookup _test2 _tcp -d')
103103
mdns_console.get_output('No results found!')
104104
dig_app.check_record('_test2._tcp.local', query_type='PTR', expected=False)
105+
# add the delegated service again, would be used in the TXT test
106+
mdns_console.send_input('mdns_service_add _test2 _tcp 80 -i extern -h delegated')
107+
mdns_console.get_output('MDNS: Service Instance: extern')
108+
109+
110+
def check_txt_for_service(instance, service, proto, mdns_console, dig_app, host=None):
111+
for_host_arg = f'-h {host}' if host is not None else ''
112+
mdns_console.send_input(f'mdns_service_txt_set {service} {proto} {for_host_arg} key1 value1')
113+
dig_app.check_record(f'{instance}.{service}.{proto}.local', query_type='SRV', expected=True)
114+
dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key1=value1')
115+
mdns_console.send_input(f'mdns_service_txt_set {service} {proto} {for_host_arg} key2 value2')
116+
dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key2=value2')
117+
mdns_console.send_input(f'mdns_service_txt_remove {service} {proto} {for_host_arg} key2')
118+
dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=False, expect='key2=value2')
119+
dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key1=value1')
120+
mdns_console.send_input(f'mdns_service_txt_replace {service} {proto} {for_host_arg} key3=value3 key4=value4')
121+
dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=False, expect='key1=value1')
122+
dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key3=value3')
123+
dig_app.check_record(f'{service}.{proto}.local', query_type='TXT', expected=True, expect='key4=value4')
105124

106125

107126
def test_update_txt(mdns_console, dig_app):
108-
mdns_console.send_input('mdns_service_txt_set _test _tcp key1 value1')
109-
dig_app.check_record('local._test._tcp.local', query_type='SRV', expected=True)
110-
dig_app.check_record('_test._tcp.local', query_type='TXT', expected=True, expect='key1=value1')
111-
mdns_console.send_input('mdns_service_txt_set _test _tcp key2 value2')
112-
dig_app.check_record('_test._tcp.local', query_type='TXT', expected=True, expect='key2=value2')
113-
mdns_console.send_input('mdns_service_txt_remove _test _tcp key2')
114-
dig_app.check_record('_test._tcp.local', query_type='TXT', expected=False, expect='key2=value2')
115-
dig_app.check_record('_test._tcp.local', query_type='TXT', expected=True, expect='key1=value1')
116-
mdns_console.send_input('mdns_service_txt_replace _test _tcp key3=value3 key4=value4')
117-
dig_app.check_record('_test._tcp.local', query_type='TXT', expected=False, expect='key1=value1')
118-
dig_app.check_record('_test._tcp.local', query_type='TXT', expected=True, expect='key3=value3')
119-
dig_app.check_record('_test._tcp.local', query_type='TXT', expected=True, expect='key4=value4')
127+
check_txt_for_service('local', '_test', '_tcp', mdns_console=mdns_console, dig_app=dig_app)
128+
129+
130+
def test_update_delegated_txt(mdns_console, dig_app):
131+
check_txt_for_service('extern', '_test2', '_tcp', mdns_console=mdns_console, dig_app=dig_app, host='delegated')
120132

121133

122134
if __name__ == '__main__':

0 commit comments

Comments
 (0)