mirror of
https://github.com/espressif/openthread.git
synced 2026-09-06 01:00:09 +00:00
This commit updates DNS client to add `otDnsServiceMode` to the `otDnsQueryConfig`. This new config property determines which records to query and allow the API user to control the behavior during service resolution: We can query for SRV record only or TXT record only, or query for both SRV and TXT records in the same message, or in parallel in different messages, or an "optimized" mode where client will first try to query for both records together in the same message but if server responds with an error, it then retries using two parallel separate queries. This gives flexibility and control to the API user. It also helps address situations where the server (DNS resolver) may not accept queries with more than one questions. To support this new feature, this commit updates and enhances the internal design of the `Dns::Client`. A new mechanism is added to allow multiple `Query` instances to be associated with each other under a main `Query` and responses for the related queries are saved until all are received and validated before finalizing the main `Query` and invoking the callback and allowing caller to retrieve the info. This commit also adds a detailed unit test `test_dns_client` which covers DNS client browse and service resolution validating behavior under all service modes. In order to test `Client` functionality, this commit also adds a `TestMode` in `Dns::ServiceDiscovery::Server` allowing us to change server behavior, e.g., reject messages with more than one question in query.
47 lines
1.9 KiB
Plaintext
Executable File
47 lines
1.9 KiB
Plaintext
Executable File
#!/usr/bin/expect -f
|
|
#
|
|
# Copyright (c) 2020, The OpenThread Authors.
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
# 3. Neither the name of the copyright holder nor the
|
|
# names of its contributors may be used to endorse or promote products
|
|
# derived from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
# POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
|
|
source "tests/scripts/expect/_common.exp"
|
|
source "tests/scripts/expect/_multinode.exp"
|
|
|
|
spawn_node 2 "cli"
|
|
spawn_node 1
|
|
setup_leader
|
|
setup_node 2 "rnd" "router"
|
|
|
|
switch_node 1
|
|
set addr_1 [get_ipaddr mleid]
|
|
|
|
switch_node 2
|
|
send "dns resolve ipv6.google.com $addr_1 2000 6000 4 1 def tcp\n"
|
|
expect "DNS response for ipv6.google.com"
|
|
expect_line "Done"
|
|
|
|
dispose_all
|