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