1#!/usr/bin/expect -f 2# 3# Copyright (c) 2021, 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 30source "tests/scripts/expect/_common.exp" 31source "tests/scripts/expect/_multinode.exp" 32 33 34# The expect on macOS doesn't support `try` or `file tempfile`. 35skip_on_macos 36 37file tempfile socat_out 38set socat_pid [exec socat -d -d pty,raw,echo=0 pty,raw,echo=0 >/dev/null 2>$socat_out &] 39while {true} { 40 if {[exec head -n2 $socat_out | wc -l] == 2} { 41 set radio_pty [exec head -n1 $socat_out | grep -o {/dev/.\+}] 42 set host_pty [exec head -n2 $socat_out | tail -n1 | grep -o {/dev/.\+}] 43 break 44 } 45 sleep 1 46} 47 48puts "Radio PTY: $radio_pty" 49puts "Host PTY: $host_pty" 50 51set rcp_pid [exec $::env(OT_SIMULATION_APPS)/ncp/ot-rcp 1 < $radio_pty > $radio_pty &] 52puts "RCP PID: $rcp_pid" 53 54try { 55 spawn_node 1 "rcp" "spinel+hdlc_uart://$host_pty" 56 spawn_node 2 57 58 setup_two_nodes "rn" false 59 60 switch_node 2 61 set addr [get_ipaddr mleid] 62 63 switch_node 1 64 send "ping $addr\n" 65 expect "16 bytes from $addr: icmp_seq=1" 66 expect_line "Done" 67 send "reset\n" 68 wait_for "state" "disabled" 69 expect_line "Done" 70 send "ifconfig up\n" 71 expect_line "Done" 72 send "thread start\n" 73 expect_line "Done" 74 wait_for "state" "leader" 75 wait_for "ping $addr" "16 bytes from $addr: icmp_seq=\\d+" 76 expect_line "Done" 77} finally { 78 exec kill $rcp_pid 79 exec kill $socat_pid 80} 81