blob: 5e79d24046a925daa17fc8b586fefbc9cce433b5 [file] [log] [blame]
#!/bin/bash
#
# Copyright (c) 2016-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 WdmNext tests in parallel
# for example, create topology with two fabrics where each fabric has three devices and fabric seed is 0701, tier is tunnel01.weave01.iad02.loadtest3.nestlabs.com
# time sh run_parallel_weave_service_test.sh 1 3 0x0701 1 tunnel01.weave01.iad02.loadtest3.nestlabs.com wdmNext/test_weave_wdm_next_service_mutual_subscribe_01.py
#
sudo echo "parallel running start"
pids=""
declare -A pid_array
flag=true
count=0
if [ -z "$BUILD_JOBS" ]; then
export BUILD_JOBS=50
fi
total_count=`printf "%d" $1`
if (($?)); then
echo "error: total_count must be a number" >&2; exit 1
fi
echo "process $total_count fabrics"
device_numbers=`printf "%d" $2`
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 "%04X" $3`
if (($?)); then
echo "error: Fabric seed must be a number" >&2; exit 1
fi
echo "process initial fabric_seed $3"
topology=$4
if [[ "$4" -eq 1 ]] ; then
echo "create topology"
else
echo "not required to create topology"
fi
if [ -z "$happy_dns" ]; then
export happy_dns="8.8.8.8 172.16.255.1 172.16.255.153 172.16.255.53"
fi
weave_service_address=$5
export weave_service_address
echo "service address is $weave_service_address"
test_file=$6
echo "test file is $test_file"
for ((i=0; i<$total_count; i++)); do
while [ $(jobs | wc -l) -ge $BUILD_JOBS ] ; do sleep 1 ; done
action="$1"
x=`printf "%03d" ${i}`
HAPPY_STATE_ID=${x} FABRIC_OFFSET=${i} DEVICE_NUMBERS=${device_numbers} TOPOLOGY=${topology} FABRIC_SEED=${fabric_seed} python $6 &
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"
count=$(($count+1))
flag=false
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