mirror of
https://github.com/espressif/openthread.git
synced 2026-08-01 08:37:47 +00:00
[dnssd-server] use case-insensitive DNS name match (#7189)
This commit updates `Dns::ServiceDiscovery::Server` to use case-insensitive string match when comparing DNS names. It also updates `test_dnssd.py` to use mixed case names when browsing for or resolving services. This validates the case-insensitive treatment of names by SRP client and server and DNS-SD server (resolver) and DNS client.
This commit is contained in:
committed by
Jonathan Hui
parent
9d81f99b94
commit
4ac6b504a4
@@ -103,13 +103,13 @@ class TestDnssd(thread_cert.TestCase):
|
||||
client3_addrs = [client3.get_mleid(), client2.get_rloc()]
|
||||
|
||||
self._config_srp_client_services(client1, server, 'ins1', 'host1', 11111, 1, 1, client1_addrs, ",_s1,_s2")
|
||||
self._config_srp_client_services(client2, server, 'ins2', 'host2', 22222, 2, 2, client2_addrs)
|
||||
self._config_srp_client_services(client3, server, 'ins3', 'host3', 33333, 3, 3, client3_addrs, ",_s1")
|
||||
self._config_srp_client_services(client2, server, 'ins2', 'HOST2', 22222, 2, 2, client2_addrs)
|
||||
self._config_srp_client_services(client3, server, 'ins3', 'host3', 33333, 3, 3, client3_addrs, ",_S1")
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Resolve address (AAAA records)
|
||||
|
||||
answers = client1.dns_resolve(f"host1.{DOMAIN}", server.get_mleid(), 53)
|
||||
answers = client1.dns_resolve(f"host1.{DOMAIN}".upper(), server.get_mleid(), 53)
|
||||
self.assertEqual(set(ipaddress.IPv6Address(ip) for ip, _ in answers),
|
||||
set(map(ipaddress.IPv6Address, client1_addrs)))
|
||||
|
||||
@@ -169,36 +169,36 @@ class TestDnssd(thread_cert.TestCase):
|
||||
}
|
||||
|
||||
# Browse for main service
|
||||
service_instances = client1.dns_browse(f'{SERVICE}.{DOMAIN}', server.get_mleid(), 53)
|
||||
service_instances = client1.dns_browse(f'{SERVICE}.{DOMAIN}'.upper(), server.get_mleid(), 53)
|
||||
self.assertEqual({'ins1', 'ins2', 'ins3'}, set(service_instances.keys()))
|
||||
self._assert_service_instance_equal(service_instances['ins1'], instance1_verify_info)
|
||||
self._assert_service_instance_equal(service_instances['ins2'], instance2_verify_info)
|
||||
self._assert_service_instance_equal(service_instances['ins3'], instance3_verify_info)
|
||||
|
||||
# Browse for service sub-type _s1.
|
||||
service_instances = client1.dns_browse(f'_s1._sub.{SERVICE}.{DOMAIN}', server.get_mleid(), 53)
|
||||
service_instances = client1.dns_browse(f'_s1._sub.{SERVICE}.{DOMAIN}'.upper(), server.get_mleid(), 53)
|
||||
self.assertEqual({'ins1', 'ins3'}, set(service_instances.keys()))
|
||||
self._assert_service_instance_equal(service_instances['ins1'], instance1_verify_info)
|
||||
|
||||
# Browse for service sub-type _s2.
|
||||
service_instances = client1.dns_browse(f'_s2._sub.{SERVICE}.{DOMAIN}', server.get_mleid(), 53)
|
||||
service_instances = client1.dns_browse(f'_s2._sub.{SERVICE}.{DOMAIN}'.upper(), server.get_mleid(), 53)
|
||||
self.assertEqual({'ins1'}, set(service_instances.keys()))
|
||||
self._assert_service_instance_equal(service_instances['ins1'], instance1_verify_info)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Resolve service
|
||||
|
||||
service_instance = client1.dns_resolve_service('ins1', f'{SERVICE}.{DOMAIN}', server.get_mleid(), 53)
|
||||
service_instance = client1.dns_resolve_service('ins1', f'{SERVICE}.{DOMAIN}'.upper(), server.get_mleid(), 53)
|
||||
self._assert_service_instance_equal(service_instance, instance1_verify_info)
|
||||
|
||||
service_instance = client1.dns_resolve_service('ins2', f'{SERVICE}.{DOMAIN}', server.get_mleid(), 53)
|
||||
service_instance = client1.dns_resolve_service('ins2', f'{SERVICE}.{DOMAIN}'.upper(), server.get_mleid(), 53)
|
||||
self._assert_service_instance_equal(service_instance, instance2_verify_info)
|
||||
|
||||
#---------------------------------------------------------------
|
||||
# Add another service with TXT entries to the existing host and
|
||||
# verify that it is properly merged.
|
||||
|
||||
client3.srp_client_add_service('ins4', SERVICE + ",_s1", 44444, 4, 4, txt_entries=['KEY=ABC'])
|
||||
client3.srp_client_add_service('ins4', (SERVICE + ",_s1").upper(), 44444, 4, 4, txt_entries=['KEY=ABC'])
|
||||
self.simulator.go(5)
|
||||
|
||||
service_instances = client1.dns_browse(f'{SERVICE}.{DOMAIN}', server.get_mleid(), 53)
|
||||
@@ -209,7 +209,8 @@ class TestDnssd(thread_cert.TestCase):
|
||||
self._assert_service_instance_equal(service_instances['ins4'], instance4_verify_info)
|
||||
|
||||
def _assert_service_instance_equal(self, instance, info):
|
||||
for f in ('port', 'priority', 'weight', 'host', 'txt_data'):
|
||||
self.assertEqual(instance['host'].lower(), info['host'].lower(), instance)
|
||||
for f in ('port', 'priority', 'weight', 'txt_data'):
|
||||
self.assertEqual(instance[f], info[f], instance)
|
||||
|
||||
verify_addresses = info['address']
|
||||
|
||||
Reference in New Issue
Block a user