blob: 64cb8e9036625f055db7477da854b165eff28229 [file] [log] [blame]
#!/bin/bash
# #############################################
# 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.
# #############################################
LOCAL_HOST=$1
SSH_LOGIN=$2
TESTING_HOST=$3
if [ -z "$3" ];then
echo "Usage: $0 LOCAL_HOST_IP REMOTE_SSH_LOGIN REMOTE_HOST_IP"
echo "Script requare installed 'iperf' on both local and remote hosts."
echo "Also need setting up ssh login without requiring a password. Use for this purpose ssl certificates."
exit 0;
fi
TEST_LOCAL_IPERF=`iperf 2>&1 | grep "Usage: iperf" |wc -l`
if [ "1" != "$TEST_LOCAL_IPERF" ];then
echo "Script requare installed 'iperf' on local host."
exit 0;
fi
TEST_REMOTE_IPERF=`ssh $SSH_LOGIN@$TESTING_HOST "iperf 2>&1 | grep \"Usage: iperf\" |wc -l"`
if [ "1" != "$TEST_REMOTE_IPERF" ];then
echo "Script requare installed 'iperf' on remote host."
exit 0;
fi
test_jitter_with_ping (){
## $1 - size of packets in bites
## $2 - count of send packets
COUNT_PACKETS=1000
if [ -z "$1" ]; then
ping -c 1000 -f -s $1 $TESTING_HOST 2>&1 >${1}b.out.txt
else
ping -c $2 -f -s $1 $TESTING_HOST 2>&1 >${1}b.out.txt
COUNT_PACKETS=$2
fi
MIN=`grep "rtt min" ./${1}b.out.txt | cut -d " " -f4 | cut -d "/" -f1 | cut -d "." -f1`
AVG=`grep "rtt min" ./${1}b.out.txt | cut -d " " -f4 | cut -d "/" -f2 | cut -d "." -f1`
MAX=`grep "rtt min" ./${1}b.out.txt | cut -d " " -f4 | cut -d "/" -f3 | cut -d "." -f1`
let "JITTER=($MAX-$AVG)-($AVG-$MIN)"
if [ "$JITTER" -lt "0" ];then
let "JITTER=-$JITTER"
fi
echo "Jitter = $JITTER for $COUNT_PACKETS packets with size $1 bites (ping)"
echo "Max latency is $MAX"
if [ "$AVG" != "0" ]; then
let "JITTERPS=$JITTER*100/$AVG"
echo "Jitter = $JITTERPS % from $AVG ms"
fi
}
test_opened_ports_with_iperf (){
## Test opened ports
echo "Start testing opened ports"
echo "========================================"
PORTS=$1 #"5080 1935 8088"
AVAIL_PORTS=""
rm server_port_log.txt
for i in $PORTS; do
#echo "ssh $SSH_LOGIN@$TESTING_HOST \"iperf -s -p $i\""
ssh $SSH_LOGIN@$TESTING_HOST "iperf -s -p $i" >>server_port_log.txt 2>&1 &
sleep 2
#echo "telnet -e q $TESTING_HOST $i <telnet_commands.txt"
TELNET_OUT=`echo -e "q\nquit"|telnet -e q $TESTING_HOST $i`
#echo "ssh $SSH_LOGIN@$TESTING_HOST \"ps -C iperf|cut -d \" \" -f1 | xargs kill -9\""
ssh $SSH_LOGIN@$TESTING_HOST "ps -C iperf|cut -d \" \" -f1 | xargs kill -9" >>server_port_log.txt 2>&1 &
PORT_IS_AVAILABLE=`echo "$TELNET_OUT" | grep "Connected to"`
if [ "$PORT_IS_AVAILABLE" != "" ];then
echo "Port $i available"
AVAIL_PORTS="$AVAIL_PORTS $i"
else
echo "Port $i not available"
fi
sleep 2
done
}
test_bandwidth_with_iperf (){
## Test bandwidth of server
echo "Start testing bandwidth of server"
echo "========================================"
PORT=$1
TIME_TO_TEST=30
NUM_THREADS=10
REPORT_INTERVAL=5
#Download test
echo "Start outbound test"
#setup server
#echo "Starting server..."
ssh $SSH_LOGIN@$TESTING_HOST "iperf -s -p $PORT" >server_log.txt 2>&1 &
#wait when server started
sleep 2
#start test
#echo "Start test"
iperf -c $TESTING_HOST -p $PORT -i $REPORT_INTERVAL -P $NUM_THREADS -t $TIME_TO_TEST | tee client_log.txt | grep "SUM"
#stop server
echo "Stop server"
ssh $SSH_LOGIN@$TESTING_HOST "ps -C iperf|cut -d \" \" -f1 | xargs kill -9" >>server_log.txt 2>&1 &
echo "End outbound test"
sleep 2
echo
#Upload test
#Comment: This we can use any port for testing, I use 12100
PORT=12100
echo "Start inbound test"
#setup server
#echo "Starting server..."
iperf -s -p $PORT >local_server_log.txt 2>&1 &
#wait when server started
sleep 2
#start test
#echo "Start test"
ssh $SSH_LOGIN@$TESTING_HOST "iperf -c $LOCAL_HOST -p $PORT -i $REPORT_INTERVAL -P $NUM_THREADS -t $TIME_TO_TEST" | tee remote_client_log.txt | grep "SUM"
#stop server
echo "Stop server"
ps -C iperf | cut -d " " -f1 | xargs kill -9 >local_server_log.txt 2>&1 &
echo "End inbound test"
}
echo "Start testing latency and jitter"
echo "========================================"
test_jitter_with_ping 1000 100
test_jitter_with_ping 1000 1000
test_jitter_with_ping 10000 1000
#Hard test
#test_jitter_with_ping 1024 100000
echo
test_opened_ports_with_iperf "5080 1935 8088"
#echo "$AVAIL_PORTS"
echo
test_bandwidth_with_iperf 1935
## generate file with random content and size 1Mb
#dd if=/dev/urandom of=test.log bs=1k count=1024