#!/bin/sh # # Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. # # Use of this source code is governed by a BSD-style license # that can be found in the LICENSE file in the root of the source # tree. An additional intellectual property rights grant can be found # in the file PATENTS. All contributing project authors may # be found in the AUTHORS file in the root of the source tree. # # This script is used to record a tcp dump of running a loop back test. # Example use case: # # $ ./run-server.sh & # spawns a server to serve the html pages # # on localhost:8080 # # (recording 3 tests with 5mins and bitrates 1mbps, 2mbps and 3mbps) # $ sudo -v # Caches sudo credentials needed # # for tcpdump # $ export INTERFACE=eth1 # Defines interface to record packets # $ export CHROME_UNDER_TESTING=./chrome # Define which chrome to run on tests # $ export TEST="http://localhost:8080/loopback_test.html?auto-mode=true" # $ record-test.sh ./record1.pcap "$TEST&duration=300&max-video-bitrate=1000" # $ record-test.sh ./record2.pcap "$TEST&duration=300&max-video-bitrate=2000" # $ record-test.sh ./record3.pcap "$TEST&duration=300&max-video-bitrate=3000" # Indicate an error and exit with a nonzero status if any of the required # environment variables is Null or Unset. : ${INTERFACE:?"Need to set INTERFACE env variable"} : ${CHROME_UNDER_TESTING:?"Need to set CHROME_UNDER_TESTING env variable"} if [ ! -x "$CHROME_UNDER_TESTING" ]; then echo "CHROME_UNDER_TESTING=$CHROME_UNDER_TESTING does not seem to exist." exit 1 fi if [ "$#" -ne 2 ]; then echo "Usage: $0 " exit 1 fi TEST_URL=$1 OUTPUT_RECORDING=$2 sudo -nv > /dev/null 2>&1 if [ $? != 0 ]; then echo "Run \"sudo -v\" to cache your credentials." \ "They are needed to run tcpdump." exit fi echo "Recording $INTERFACE into ${OUTPUT_RECORDING}" sudo -n tcpdump -i "$INTERFACE" -w - > "${OUTPUT_RECORDING}" & TCPDUMP_PID=$! echo "Starting ${CHROME_UNDER_TESTING} with ${TEST_URL}." # Using real camera instead of --use-fake-device-for-media-stream as it # does not produces images complex enough to reach 3mbps. # Flag --use-fake-ui-for-media-stream automatically allows getUserMedia calls. $CHROME_UNDER_TESTING --use-fake-ui-for-media-stream "${TEST_URL}" kill ${TCPDUMP_PID}