1#!/usr/bin/expect -f
2#
3#  Copyright (c) 2020, 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"
31
32set JOINER_PSK "J01NME"
33
34proc setup_two_nodes {{childmode "r"} {should_spawn_node true}} {
35    # Sets up a Thread network with 2 nodes, spawn_1 as the leader and spawn_2
36    # as a child.
37
38    if {$should_spawn_node} {
39        spawn_node 2
40        spawn_node 1
41    } else {
42        switch_node 1
43    }
44    setup_leader
45    setup_node 2 $childmode "child"
46}
47
48proc setup_node {node {mode "r"} {role "child"}} {
49    switch_node $node
50    send "eui64\n"
51    expect "eui64"
52    expect -re {([0-9a-f]{16})}
53    set eui64 $expect_out(1,string)
54    expect_line "Done"
55
56    switch_node 1
57    send "commissioner state\n"
58    expect {
59        "disabled" {
60            expect_line "Done"
61            send "commissioner start\n"
62            expect_line "Done"
63            expect "Commissioner: active"
64        }
65        "active" {
66            expect_line "Done"
67        }
68    }
69    send "commissioner joiner add $eui64 $::JOINER_PSK\n"
70    expect_line "Done"
71    wait_for "netdata steeringdata check $eui64" "Done"
72
73    switch_node $node
74    send "mode $mode\n"
75    expect_line "Done"
76    send "ifconfig up\n"
77    expect_line "Done"
78    send "joiner start $::JOINER_PSK\n"
79    expect_line "Done"
80    wait_for "" "Join success" "Join failed"
81    send "thread start\n"
82    expect_line "Done"
83    wait_for "state" $role
84    expect_line "Done"
85
86    switch_node 1
87    send "commissioner joiner remove $eui64\n"
88    expect_line "Done"
89}
90