xref: /aosp_15_r20/external/autotest/utils/update_chameleons.sh (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#!/bin/sh
2*9c5db199SXin Li
3*9c5db199SXin Li# Copyright 2017 The Chromium OS Authors. All rights reserved.
4*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
5*9c5db199SXin Li# found in the LICENSE file.
6*9c5db199SXin Li
7*9c5db199SXin Li# This script updates chameleon boards and cle in the audioboxes
8*9c5db199SXin Li# and atlantis labs. This script takes about 15-30s per board.
9*9c5db199SXin Li
10*9c5db199SXin LiHOSTS="chromeos9-audiobox1-host2
11*9c5db199SXin Li       chromeos9-audiobox2-host1"
12*9c5db199SXin Li
13*9c5db199SXin Li# NOTE: May need to update based on where test_rsa is located.
14*9c5db199SXin LiSSH_OPTIONS="-q -i ~/.ssh/.test_rsa \
15*9c5db199SXin Li             -o UserKnownHostsFile=/dev/null \
16*9c5db199SXin Li             -o StrictHostKeyChecking=no"
17*9c5db199SXin Li
18*9c5db199SXin LiPROBE_RESULT_DIR="/tmp/chameleon_update_result"
19*9c5db199SXin Li
20*9c5db199SXin LiSEP_LINE="--------------------------------------------------------------------------------"
21*9c5db199SXin Li
22*9c5db199SXin Li
23*9c5db199SXin Lifunction disp_result {
24*9c5db199SXin Li  test "$1" -eq "0" && echo ok || echo "-"
25*9c5db199SXin Li}
26*9c5db199SXin Li
27*9c5db199SXin Lifunction probe_chameleon {
28*9c5db199SXin Li  chameleon="$1-chameleon.cros"
29*9c5db199SXin Li
30*9c5db199SXin Li  # ping test
31*9c5db199SXin Li  ping -q -w 10 -c1 "${chameleon}" > /dev/null 2>&1
32*9c5db199SXin Li  ping_result="$(disp_result $?)"
33*9c5db199SXin Li
34*9c5db199SXin Li  # Check if chameleond is running.
35*9c5db199SXin Li  test $(ssh ${SSH_OPTIONS} root@"$chameleon" \
36*9c5db199SXin Li         ps | awk '$5~"run_chameleond"' | wc -l) -gt "0"
37*9c5db199SXin Li  chameleond_result="$(disp_result $?)"
38*9c5db199SXin Li
39*9c5db199SXin Li  # clear /dev/root space
40*9c5db199SXin Li  ssh $SSH_OPTIONS root@"$chameleon" "echo "" > /www/logs/lighttpd.error.log"
41*9c5db199SXin Li  root_result="$(disp_result $?)"
42*9c5db199SXin Li
43*9c5db199SXin Li  # run update command
44*9c5db199SXin Li  ssh $SSH_OPTIONS root@"$chameleon" "/etc/init.d/chameleon-updater start >/dev/null 2>&1"
45*9c5db199SXin Li  update_result="$(disp_result $?)"
46*9c5db199SXin Li
47*9c5db199SXin Li  # Print the result
48*9c5db199SXin Li  printf "$1-chameleon  %5s %10s %10s      %s\n" "${ping_result}" \
49*9c5db199SXin Li      "${chameleond_result}" "${root_result}" "${update_result}" \
50*9c5db199SXin Li    > "${PROBE_RESULT_DIR}/${chameleon}"
51*9c5db199SXin Li}
52*9c5db199SXin Li
53*9c5db199SXin Lifunction probe_chameleons {
54*9c5db199SXin Li  # Fork parallel processes to probe the chameleon boards.
55*9c5db199SXin Li  for host in $HOSTS; do
56*9c5db199SXin Li    probe_chameleon $host &
57*9c5db199SXin Li    chameleon_pids="${chameleon_pids} $!"
58*9c5db199SXin Li  done
59*9c5db199SXin Li}
60*9c5db199SXin Li
61*9c5db199SXin Lifunction create_ping_result_dir {
62*9c5db199SXin Li  dut_pids=""
63*9c5db199SXin Li  chameleon_pids=""
64*9c5db199SXin Li
65*9c5db199SXin Li  mkdir -p "${PROBE_RESULT_DIR}"
66*9c5db199SXin Li  rm -fr "${PROBE_RESULT_DIR}"/*
67*9c5db199SXin Li}
68*9c5db199SXin Li
69*9c5db199SXin Lifunction print_chameleon_status {
70*9c5db199SXin Li  echo "Chameleon                              ping   chameleond    root   update"
71*9c5db199SXin Li  echo "${SEP_LINE}"
72*9c5db199SXin Li
73*9c5db199SXin Li  # Wait for all probing children processes to terminate.
74*9c5db199SXin Li  for pid in ${chameleon_pids}; do
75*9c5db199SXin Li    wait ${pid}
76*9c5db199SXin Li  done
77*9c5db199SXin Li
78*9c5db199SXin Li  # Sort and print the results.
79*9c5db199SXin Li  cat "${PROBE_RESULT_DIR}"/*-chameleon.cros | sort
80*9c5db199SXin Li  echo; echo
81*9c5db199SXin Li}
82*9c5db199SXin Li
83*9c5db199SXin Licreate_ping_result_dir
84*9c5db199SXin Liprobe_chameleons
85*9c5db199SXin Liprint_chameleon_status
86