blob: 4066805e361568127d8379a3cf8746f3c8c18f7a [file] [log] [blame]
#!/bin/bash
#
# Copyright (c) 2017 Nest Labs, Inc.
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# @file
# Manually run happy topology
# M of Thead, WiFi, and WAN networks, which have:
# - N thread-only devices
# - one thread-wifi border_gateway devices
# - one access-point router
# - the onhub router is connected to the Internet
# - fabric seed id 0x0701
# - one mobile phone
# - border_gateway has cellular backup connection
# run_parallel_topology.sh create M N 0x00000 cellular mobile
#
if [ -z "$EUI64_PREFIX" ]; then
#18:B4:30:AA Simulated / Test Weave Device Identifiers
EUI64_PREFIX='18:B4:30:AA:00:'
fi
if [ "$1" != "" ]; then
if [ "$1" == "create" ]; then
echo "create the topology"
elif [ "$1" == "destroy" ]; then
echo "destroy the topology"
else
echo "need parameter create or destroy"
exit
fi
sudo echo "parallel running start"
else
echo "need parameter create or destroy"
exit
fi
total_count=`printf "%d" $2`
if (($?)); then
echo "error: total_count must be a number" >&2; exit 1
fi
echo "process $total_count fabrics"
device_numbers=`printf "%d" $3`
if (($?)); then
echo "error: device_numbers must be a number, need to specify the number of devices within one fabric" >&2; exit 1
fi
echo "process $device_numbers devices within one fabric"
fabric_seed=`printf "%d" $4`
if (($?)); then
echo "error: Fabric seed must be a number" >&2; exit 1
fi
echo "process initial fabric_seed $4"
if [ "$5" == "cellular" ]; then
cellular="--cellular"
fi
if [ "$6" == "mobile" ]; then
mobile="--mobile"
fi
if [ "$7" == "randomFabric" ]; then
enable_random_fabric="--enable_random_fabric"
fi
pids=""
flag=true
count=0
declare -A pid_array
TEST_DIR=$(dirname $(readlink -f $0))
for ((i=0; i <$total_count; i++)); do
action="$1"
x=`printf "%03d" ${i}`
cindex=$((fabric_seed+i))
y=`printf "%05X" ${cindex}`
z=`printf "%s%s:%s:%s" ${EUI64_PREFIX} ${y:0:2} ${y:2:2} ${y:4:1}`
HAPPY_STATE_ID=${x} python $TEST_DIR/topologies/thread_wifi_ap_internet_configurable_topology.py --action=${action} --fabric_id=${y} --customized_eui64_seed=${z} --device_numbers=${device_numbers} ${cellular} ${mobile} ${enable_random_fabric}&
pids+="$! "
pid_array["$!"]=${x}
done
echo "all bullets are on the fly"
for pid in $pids; do
wait $pid
if [ $? -eq 0 ]; then
echo -e "\033[32m SUCCESS - Job $pid, HAPPY_STATE_ID ${pid_array["$pid"]} exited with a status of $?"
echo -e "\033[0m"
else
echo -e "\033[31m FAILED - Job $pid, HAPPY_STATE_ID ${pid_array["$pid"]} exited with a status of $?"
echo -e "\033[0m"
flag=false
count=$(($count+1))
fi
done
printf " success rate for $total_count runs is %%"
echo "scale=2; $((total_count-count))*100/$total_count" | bc
if $flag; then
echo -e "\033[32m parallel run succeeds"
echo -e "\033[0m"
exit 0
else
echo -e "\033[31m parallel running fails"
echo -e "\033[0m"
exit 1
fi