mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-11 23:16:58 +02:00
remove(tests): Remove old ChromeOS test utilities
None are useful or relevant to us.
This commit is contained in:
parent
2b2576c4ab
commit
9dc6424da6
150
call_autoserv.py
150
call_autoserv.py
@ -1,150 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
"""Script to run client or server tests on a live remote image.
|
||||
|
||||
This script can be used to save results of each test run in timestamped
|
||||
unique results directory.
|
||||
|
||||
"""
|
||||
|
||||
import datetime
|
||||
import glob
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from optparse import OptionParser
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.setLevel(logging.INFO)
|
||||
conlog = logging.StreamHandler()
|
||||
conlog.setLevel(logging.INFO)
|
||||
formatter = logging.Formatter("%(asctime)s %(levelname)s | %(message)s")
|
||||
conlog.setFormatter(formatter)
|
||||
logger.addHandler(conlog)
|
||||
|
||||
def ConnectRemoteMachine(machine_ip):
|
||||
os.system("eval `ssh-agent -s`")
|
||||
os.system("ssh-add testing_rsa")
|
||||
username = os.environ['USER']
|
||||
|
||||
# Removing the machine IP entry from known hosts to avoid identity clash.
|
||||
logger.info("Removing machine IP entry from known hosts to avoid identity"
|
||||
" clash.")
|
||||
host_list = open("/home/%s/.ssh/known_hosts" % username, "r").readlines()
|
||||
index = 0
|
||||
for host in host_list:
|
||||
if machine_ip in host:
|
||||
del host_list[index]
|
||||
break
|
||||
index += 1
|
||||
|
||||
open("/home/%s/.ssh/known_hosts" % username, "w").writelines(host_list)
|
||||
|
||||
# Starting ssh connection to remote test machine.
|
||||
logger.info("Starting ssh connection to remote test machine.")
|
||||
os.system("ssh root@%s true; echo $? > ssh_result_file" % machine_ip)
|
||||
ssh_result = open("ssh_result_file", "r").read()
|
||||
logger.info("Status of ssh connection to remote machine : %s" % ssh_result)
|
||||
|
||||
if ssh_result.strip() != '0':
|
||||
logger.error("Ssh connection to remote test machine FAILED. Exiting the"
|
||||
" test.")
|
||||
sys.exit()
|
||||
|
||||
def TestSearch(suite_path, test_name):
|
||||
test_path = ""
|
||||
filenames = glob.glob(os.path.join(suite_path, test_name))
|
||||
for filename in filenames:
|
||||
if filename == ("%s/%s" % (suite_path, test_name)):
|
||||
test_path = filename
|
||||
break
|
||||
return test_path
|
||||
|
||||
def TriggerTest(test_name, machine_ip):
|
||||
# Creating unique time stamped result folder name.
|
||||
current_time = datetime.datetime.now()
|
||||
result_name = "results." + test_name + current_time.strftime("_%d-%m-%y"
|
||||
"_%H:%M")
|
||||
|
||||
# Setting the test path location based on the test_name.
|
||||
suite_path = "./autotest/client/site_tests/suite_HWQual"
|
||||
test_path = TestSearch(suite_path, "control.%s" % test_name)
|
||||
|
||||
# Looking for test_name under client/site_tests if not under suite_HWQual.
|
||||
if test_path == "":
|
||||
suite_path = ("./autotest/client/site_tests/%s" % test_name)
|
||||
test_path = TestSearch(suite_path, "control")
|
||||
|
||||
# Looking for test_name under server/site_tests if not present under client.
|
||||
if test_path == "":
|
||||
suite_path = ("./autotest/server/site_tests/%s" % test_name)
|
||||
test_path = TestSearch(suite_path, "control")
|
||||
# Looking for test_name under server/site_tests/suites.
|
||||
if test_path == "":
|
||||
suite_path = "./autotest/server/site_tests/suites"
|
||||
test_path = TestSearch(suite_path, "control.%s" % test_name)
|
||||
# Setting command for server tests.
|
||||
run_command = ("./autotest/server/autoserv -r ./autotest/%s -m %s"
|
||||
" -s %s" % (result_name, machine_ip, test_path))
|
||||
else:
|
||||
run_command = ("./autotest/server/autoserv -r ./autotest/%s -m %s "
|
||||
"-c %s" % (result_name, machine_ip, test_path))
|
||||
|
||||
if test_path == "":
|
||||
logger.error("Test not found under client or server directories! Check the "
|
||||
"name of test and do not prefix 'control.' to test name.")
|
||||
sys.exit()
|
||||
|
||||
# Making the call to HWQual test.
|
||||
logger.info("Starting the HWQual test : %s" % test_path)
|
||||
os.system(run_command)
|
||||
|
||||
# Displaying results on test completion.
|
||||
test_result = os.system("./generate_test_report ./autotest/%s" % result_name)
|
||||
|
||||
result_path = ("./autotest/%s" % result_name)
|
||||
if test_result != 0:
|
||||
# Grabbing the results directory as test failed & return value nonzero.
|
||||
log_name = ("%s.tar.bz2" % result_path)
|
||||
os.system("tar cjf %s %s" % (log_name, result_path))
|
||||
logger.info("Logs for the failed test at : %s" % log_name)
|
||||
|
||||
logger.info("Results of test run at : %s" % result_path)
|
||||
|
||||
def main(argv):
|
||||
# Checking the arguments for help, machine ip and test name.
|
||||
parser = OptionParser(usage="USAGE : ./%prog [options]")
|
||||
|
||||
parser.add_option("--ip", dest="dut_ip",
|
||||
help="accepts IP address of device under test <DUT>.")
|
||||
parser.add_option("--test", dest="test_name",
|
||||
help="accepts HWQual test name without prefix 'control.'")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
# Checking for presence of both ip and test parameters.
|
||||
if (options.dut_ip == None) or (options.test_name == None):
|
||||
parser.error("Argument missing! Both --ip and --test arguments required.")
|
||||
|
||||
# Checking for blank values of both ip and test parameters.
|
||||
arg_ip, arg_testname = options.dut_ip, options.test_name
|
||||
if (arg_ip == "") or (arg_testname == ""):
|
||||
parser.error("Blank values are not accepted for arguments.")
|
||||
|
||||
logger.info("HWQual test to trigger : %s" % arg_testname)
|
||||
logger.info("Remote test machine IP : %s" % arg_ip)
|
||||
|
||||
# Setting up ssh connection to remote machine.
|
||||
ConnectRemoteMachine(arg_ip)
|
||||
|
||||
# Triggerring the HWQual test and result handling.
|
||||
TriggerTest(arg_testname, arg_ip)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main(sys.argv)
|
@ -1 +0,0 @@
|
||||
../platform/crostestutils/cros_run_unit_tests
|
@ -1 +0,0 @@
|
||||
../platform/crostestutils/utils_py/generate_test_report.py
|
@ -1 +0,0 @@
|
||||
../platform/dev/host/image_to_live.sh
|
230
remote_access.sh
230
remote_access.sh
@ -1,230 +0,0 @@
|
||||
# Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
# Library for setting up remote access and running remote commands.
|
||||
|
||||
DEFAULT_PRIVATE_KEY="${GCLIENT_ROOT}/src/scripts/mod_for_test_scripts/\
|
||||
ssh_keys/testing_rsa"
|
||||
|
||||
DEFINE_string remote "" "remote hostname/IP of running Chromium OS instance"
|
||||
DEFINE_string private_key "$DEFAULT_PRIVATE_KEY" \
|
||||
"Private key of root account on remote host"
|
||||
DEFINE_integer ssh_port 22 \
|
||||
"SSH port of the remote machine running Chromium OS instance"
|
||||
DEFINE_integer ssh_connect_timeout 30 \
|
||||
"SSH connect timeout in seconds"
|
||||
DEFINE_integer ssh_connection_attempts 4 \
|
||||
"SSH connection attempts"
|
||||
|
||||
ssh_connect_settings() {
|
||||
if [[ -n "$SSH_CONNECT_SETTINGS" ]]; then
|
||||
# If connection settings were fixed in an environment variable, just return
|
||||
# those values.
|
||||
echo -n "$SSH_CONNECT_SETTINGS"
|
||||
else
|
||||
# Otherwise, return the default (or user overridden) settings.
|
||||
local settings=(
|
||||
"Protocol=2"
|
||||
"ConnectTimeout=${FLAGS_ssh_connect_timeout}"
|
||||
"ConnectionAttempts=${FLAGS_ssh_connection_attempts}"
|
||||
"ServerAliveInterval=10"
|
||||
"ServerAliveCountMax=3"
|
||||
"StrictHostKeyChecking=no"
|
||||
)
|
||||
printf -- '-o %s ' "${settings[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Copies $1 to $2 on remote host
|
||||
remote_cp_to() {
|
||||
REMOTE_OUT=$(scp -P ${FLAGS_ssh_port} $(ssh_connect_settings) \
|
||||
-o UserKnownHostsFile=$TMP_KNOWN_HOSTS -i $TMP_PRIVATE_KEY $1 \
|
||||
root@$FLAGS_remote:$2)
|
||||
return ${PIPESTATUS[0]}
|
||||
}
|
||||
|
||||
# Raw rsync access to the remote
|
||||
# Use like: remote_rsync_raw -a /path/from/ root@${FLAGS_remote}:/path/to/
|
||||
remote_rsync_raw() {
|
||||
rsync -e "ssh -p ${FLAGS_ssh_port} $(ssh_connect_settings) \
|
||||
-o UserKnownHostsFile=$TMP_KNOWN_HOSTS -i $TMP_PRIVATE_KEY" \
|
||||
"$@"
|
||||
}
|
||||
|
||||
# Copies a list of remote files specified in file $1 to local location
|
||||
# $2. Directory paths in $1 are collapsed into $2.
|
||||
remote_rsync_from() {
|
||||
remote_rsync_raw --no-R --files-from="$1" root@${FLAGS_remote}:/ "$2"
|
||||
}
|
||||
|
||||
# Send a directory from $1 to $2 on remote host
|
||||
#
|
||||
# Tries to use rsync -a but will fall back to tar if the remote doesn't
|
||||
# have rsync.
|
||||
#
|
||||
# Use like: remote_send_to /build/board/lib/modules/ /lib/modules/
|
||||
remote_send_to() {
|
||||
if [ ! -d "$1" ]; then
|
||||
die "$1 must be a directory"
|
||||
fi
|
||||
|
||||
if remote_sh rsync --version >/dev/null 2>&1; then
|
||||
remote_rsync_raw -a "$1/" root@${FLAGS_remote}:"$2/"
|
||||
else
|
||||
tar -C "$1" -cz . | remote_sh tar -C "$2" -xz
|
||||
fi
|
||||
}
|
||||
|
||||
_remote_sh() {
|
||||
REMOTE_OUT=$(ssh -p ${FLAGS_ssh_port} $(ssh_connect_settings) \
|
||||
-o UserKnownHostsFile=$TMP_KNOWN_HOSTS -i $TMP_PRIVATE_KEY \
|
||||
root@$FLAGS_remote "$@")
|
||||
return ${PIPESTATUS[0]}
|
||||
}
|
||||
|
||||
# Wrapper for ssh that runs the commmand given by the args on the remote host
|
||||
# If an ssh error occurs, re-runs the ssh command.
|
||||
remote_sh() {
|
||||
local ssh_status=0
|
||||
_remote_sh "$@" || ssh_status=$?
|
||||
# 255 indicates an ssh error.
|
||||
if [ ${ssh_status} -eq 255 ]; then
|
||||
_remote_sh "$@"
|
||||
else
|
||||
return ${ssh_status}
|
||||
fi
|
||||
}
|
||||
|
||||
remote_sh_raw() {
|
||||
ssh -p ${FLAGS_ssh_port} $(ssh_connect_settings) \
|
||||
-o UserKnownHostsFile=$TMP_KNOWN_HOSTS -i $TMP_PRIVATE_KEY \
|
||||
$EXTRA_REMOTE_SH_ARGS root@$FLAGS_remote "$@"
|
||||
return $?
|
||||
}
|
||||
|
||||
remote_sh_allow_changed_host_key() {
|
||||
rm -f $TMP_KNOWN_HOSTS
|
||||
remote_sh "$@"
|
||||
}
|
||||
|
||||
set_up_remote_access() {
|
||||
cp $FLAGS_private_key $TMP_PRIVATE_KEY
|
||||
chmod 0400 $TMP_PRIVATE_KEY
|
||||
|
||||
# Verify the client is reachable before continuing
|
||||
local output
|
||||
local status=0
|
||||
if output=$(remote_sh -n "true" 2>&1); then
|
||||
:
|
||||
else
|
||||
status=$?
|
||||
echo "Could not initiate first contact with remote host"
|
||||
echo "$output"
|
||||
fi
|
||||
return $status
|
||||
}
|
||||
|
||||
# Ask the target what board it is
|
||||
learn_board() {
|
||||
[ -n "${FLAGS_board}" ] && return
|
||||
remote_sh -n grep COREOS_RELEASE_BOARD /etc/lsb-release
|
||||
FLAGS_board=$(echo "${REMOTE_OUT}" | cut -d '=' -f 2)
|
||||
if [ -z "${FLAGS_board}" ]; then
|
||||
error "Board required"
|
||||
exit 1
|
||||
fi
|
||||
info "Target reports board is ${FLAGS_board}"
|
||||
}
|
||||
|
||||
learn_arch() {
|
||||
[ -n "${FLAGS_arch}" ] && return
|
||||
remote_sh uname -m
|
||||
FLAGS_arch=$(echo "${REMOTE_OUT}" | sed -e s/armv7l/arm/ -e s/i686/x86/ )
|
||||
if [ -z "${FLAGS_arch}" ]; then
|
||||
error "Arch required"
|
||||
exit 1
|
||||
fi
|
||||
info "Target reports arch is ${FLAGS_arch}"
|
||||
}
|
||||
|
||||
# Checks whether a remote device has rebooted successfully.
|
||||
#
|
||||
# This uses a rapidly-retried SSH connection, which will wait for at most
|
||||
# about ten seconds. If the network returns an error (e.g. host unreachable)
|
||||
# the actual delay may be shorter.
|
||||
#
|
||||
# Return values:
|
||||
# 0: The device has rebooted successfully
|
||||
# 1: The device has not yet rebooted
|
||||
# 255: Unable to communicate with the device
|
||||
_check_if_rebooted() {
|
||||
(
|
||||
# In my tests SSH seems to be waiting rather longer than would be expected
|
||||
# from these parameters. These values produce a ~10 second wait.
|
||||
# (in a subshell to avoid clobbering the global settings)
|
||||
SSH_CONNECT_SETTINGS="$(sed \
|
||||
-e 's/\(ConnectTimeout\)=[0-9]*/\1=2/' \
|
||||
-e 's/\(ConnectionAttempts\)=[0-9]*/\1=2/' \
|
||||
<<<"$(ssh_connect_settings)")"
|
||||
remote_sh_allow_changed_host_key -q -- '[ ! -e /tmp/awaiting_reboot ]'
|
||||
)
|
||||
}
|
||||
|
||||
# Triggers a reboot on a remote device and waits for it to complete.
|
||||
#
|
||||
# This function will not return until the SSH server on the remote device
|
||||
# is available after the reboot.
|
||||
#
|
||||
remote_reboot() {
|
||||
info "Rebooting ${FLAGS_remote}..."
|
||||
remote_sh "touch /tmp/awaiting_reboot; reboot"
|
||||
local start_time=${SECONDS}
|
||||
|
||||
# Wait for five seconds before we start polling
|
||||
sleep 5
|
||||
|
||||
# Add a hard timeout of 5 minutes before giving up.
|
||||
local timeout=300
|
||||
local timeout_expiry=$(( start_time + timeout ))
|
||||
while [ ${SECONDS} -lt ${timeout_expiry} ]; do
|
||||
# Used to throttle the loop -- see step_remaining_time at the bottom.
|
||||
local step_start_time=${SECONDS}
|
||||
|
||||
local status=0
|
||||
_check_if_rebooted || status=$?
|
||||
|
||||
local elapsed=$(( SECONDS - start_time ))
|
||||
case ${status} in
|
||||
0) printf ' %4ds: reboot complete\n' ${elapsed} >&2 ; return 0 ;;
|
||||
1) printf ' %4ds: device has not yet shut down\n' ${elapsed} >&2 ;;
|
||||
255) printf ' %4ds: can not connect to device\n' ${elapsed} >&2 ;;
|
||||
*) die " internal error" ;;
|
||||
esac
|
||||
|
||||
# To keep the loop from spinning too fast, delay until it has taken at
|
||||
# least five seconds. When we are actively trying SSH connections this
|
||||
# should never happen.
|
||||
local step_remaining_time=$(( step_start_time + 5 - SECONDS ))
|
||||
if [ ${step_remaining_time} -gt 0 ]; then
|
||||
sleep ${step_remaining_time}
|
||||
fi
|
||||
done
|
||||
die "Reboot has not completed after ${timeout} seconds; giving up."
|
||||
}
|
||||
|
||||
# Called by clients before exiting.
|
||||
# Part of the remote_access.sh interface but now empty.
|
||||
cleanup_remote_access() {
|
||||
true
|
||||
}
|
||||
|
||||
remote_access_init() {
|
||||
TMP_PRIVATE_KEY=$TMP/private_key
|
||||
TMP_KNOWN_HOSTS=$TMP/known_hosts
|
||||
if [ -z "$FLAGS_remote" ]; then
|
||||
echo "Please specify --remote=<IP-or-hostname> of the Chromium OS instance"
|
||||
exit 1
|
||||
fi
|
||||
set_up_remote_access
|
||||
}
|
@ -1 +0,0 @@
|
||||
../platform/crostestutils/run_remote_tests.sh
|
35
ssh_test.sh
35
ssh_test.sh
@ -1,35 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
||||
# Use of this source code is governed by a BSD-style license that can be
|
||||
# found in the LICENSE file.
|
||||
|
||||
# Run remote access test to ensure ssh access to a host is working. Exits with
|
||||
# a code of 0 if successful and non-zero otherwise. Used by test infrastructure
|
||||
# scripts.
|
||||
|
||||
SCRIPT_ROOT=$(dirname $(readlink -f "$0"))
|
||||
. "${SCRIPT_ROOT}/common.sh" || exit 1
|
||||
. "${SCRIPT_ROOT}/remote_access.sh" || exit 1
|
||||
|
||||
cleanup() {
|
||||
cleanup_remote_access
|
||||
rm -rf "${TMP}"
|
||||
}
|
||||
|
||||
main() {
|
||||
cd "${SCRIPTS_DIR}"
|
||||
|
||||
FLAGS "$@" || exit 1
|
||||
eval set -- "${FLAGS_ARGV}"
|
||||
|
||||
switch_to_strict_mode
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
TMP=$(mktemp -d /tmp/ssh_test.XXXX)
|
||||
|
||||
remote_access_init
|
||||
}
|
||||
|
||||
main $@
|
Loading…
Reference in New Issue
Block a user