• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2#
3#  Copyright (c) 2018, The OpenThread Authors.
4#  All rights reserved.
5#
6#  Redistribution and use in source and binary forms, with or without
7#  modification, are permitted provided that the following conditions are met:
8#  1. Redistributions of source code must retain the above copyright
9#     notice, this list of conditions and the following disclaimer.
10#  2. Redistributions in binary form must reproduce the above copyright
11#     notice, this list of conditions and the following disclaimer in the
12#     documentation and/or other materials provided with the distribution.
13#  3. Neither the name of the copyright holder nor the
14#     names of its contributors may be used to endorse or promote products
15#     derived from this software without specific prior written permission.
16#
17#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27#  POSSIBILITY OF SUCH DAMAGE.
28#
29
30#
31# This script includes common utils for testing mdns
32#
33
34set -euxo pipefail
35
36readonly DNS_SD_RESULT=result
37
38case "${OTBR_MDNS}" in
39    mDNSResponder)
40        sudo service avahi-daemon stop || true
41        sudo killall mdnsd || true
42        sudo mdnsd
43        sleep 1
44        ;;
45
46    avahi)
47        sudo killall mdnsd || true
48        sudo service avahi-daemon restart
49        sleep 1
50        ;;
51
52    *)
53        echo >&2 "Not supported"
54        exit 128
55        ;;
56esac
57
58on_exit()
59{
60    readonly EXIT_CODE=$?
61
62    kill "$PID"
63    [[ ! -e ${DNS_SD_RESULT} ]] || rm "${DNS_SD_RESULT}" || true
64
65    exit $EXIT_CODE
66}
67
68start_publisher()
69{
70    "${OTBR_TEST_MDNS}" "$1" &
71    PID=$!
72    trap on_exit EXIT
73    sleep 2
74}
75
76#######################################
77# Check if a service is regisered
78#
79# Arguments:
80#   $1  Name
81#   $2  Type
82#   $3  Text record
83#
84# Returns:
85#   0           Registered
86#   otherwise   Not registered
87#######################################
88dns_sd_check()
89{
90    # dns-sd will not exit
91    dns-sd -L "$1" "$2" local >"${DNS_SD_RESULT}" 2>&1 &
92    DNS_SD_PID=$!
93    sleep 1
94    kill "${DNS_SD_PID}"
95
96    cat "${DNS_SD_RESULT}"
97    grep "$3" "${DNS_SD_RESULT}"
98}
99
100#######################################
101# Check if a service is registered with
102# a given type.
103#
104# Arguments:
105#   $1  Name
106#   $2  Type
107#
108# Returns:
109#   0           Registered
110#   otherwise   Not registered
111#######################################
112dns_sd_check_type()
113{
114    # dns-sd will not exit
115    dns-sd -B "$2" local >"${DNS_SD_RESULT}" 2>&1 &
116    DNS_SD_PID=$!
117    sleep 1
118    kill "${DNS_SD_PID}"
119
120    cat "${DNS_SD_RESULT}"
121    grep "$1" "${DNS_SD_RESULT}"
122}
123
124#######################################
125# Check if a host is regisered
126#
127# Arguments:
128#   $1  hostname
129#   $2  address
130#
131# Returns:
132#   0           Registered
133#   otherwise   Not registered
134#######################################
135dns_sd_check_host()
136{
137    # dns-sd will not exit
138    dns-sd -G v6 "$1" >"${DNS_SD_RESULT}" 2>&1 &
139    DNS_SD_PID=$!
140    sleep 1
141    kill "${DNS_SD_PID}"
142
143    cat "${DNS_SD_RESULT}"
144    grep "$2" "${DNS_SD_RESULT}"
145}
146
147#######################################
148# Check if a service is registered
149#
150# Arguments:
151#   $1  Expected avahi query result string
152#   $2  Service type. If omitted, all
153#       services will be examined.
154#
155# Returns:
156#   0           Registered
157#   otherwise   Not registered
158#######################################
159avahi_check()
160{
161    local service_type
162    (($# == 2)) && service_type="$2" || service_type="-a"
163
164    avahi-browse -prt "$service_type" | tee | grep "$1"
165}
166