1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
|
# BEGIN_ICS_COPYRIGHT8 ****************************************
#
# Copyright (c) 2015, Intel Corporation
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of Intel Corporation nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# END_ICS_COPYRIGHT8 ****************************************
# [ICS VERSION STRING: unknown]
# This is an expect (tcl) library of procedures to aid integration testing
# These functions provide support for pre-built test cases which can be
# provided arguments to indicate the ulp to be tested
## tcl procedures to support testing:
## =============================================
global os_type
set os_type [ exec uname -s ]
proc get_num_hosts {} {
global env
set num_hosts [ llength $env(CFG_HOSTS) ]
}
proc reboot_host { host } {
##
## reboot_host
## -------------------
## reboot a host
##
## Usage:
## reboot_host host
## Arguments:
## host - host to reboot
## Returns:
## None
## Additional Information:
## None
global env
target_root_sh "$host"
send_unix_cmd "reboot"
# wait for host login shell to go down
expect_eof 60 1
sleep 10
# now wait for host to come online
log_message "Waiting for Host $host to come online"
set online 0
for { set i 0 } { $i < 100 } { incr i } {
if { $i != 0 } {
log_message "Retrying: Host $host is not yet up"
# wait before we try again
sleep [ calc_timeout 5 ]
}
if { [ catch { target_root_sh $host } res ] != 0 } {
# send escape sequence to close timed out ssh sessions
catch { exp_send "~.\n" }
} else {
# we got in
target_root_sh_exit
set online 1
break
}
}
if { ! $online } {
set info "Host did not come online within timeout limit"
return -code error -errorinfo $info $info
}
# network can be up before rest of host, allow a little more time
sleep 20
}
proc test_case_reboot { host {iterations 1}} {
##
## test_case_reboot
## -------------------
## test_case to reboot host
##
## Usage:
## test_case_reboot host [iterations]
## Arguments:
## host - host to reboot
## iterations - number of reboot iterations, default is 1
## Returns:
## None
## Additional Information:
## must be used within a test_suite's body, performs test_case calls
## uses case_setup and case_cleanup provided by caller
## no item_setup nor item_cleanup used
global env
test_case "$host.reboot" "$host reboot" "test reboot of $host
confirm host goes down and comes back up
File: TestTools/basic.exp" case_setup case_cleanup {
upvar host host
upvar iterations iterations
for { set i 0 } { $i < $iterations } { incr i } {
reboot_host $host
}
}
}
proc chassis_cmd_reboot_all { } {
##
## chassis_cmd_reboot_all
## -------------------
## issue reboot command to chassis, support older models which don't support
## "reboot now all" command, in which case "reboot now" is used
## Arguments:
## None
## Returns:
## None
## Additional Information:
global spawn_id expect_out spawn_out timeout
global expecting
set_timeout 60
set expecting "reboot command response"
send_chassis_cmd "reboot now all"
# if we get a usage message indicating the command is not supported
# we will try "reboot now" command instead
expect {
"Goodbye" return
"sage" noop
"upported" noop
}
expect_chassis_prompt 60
send_chassis_cmd "reboot now"
expect_list 60 { "Goodbye" }
}
proc chassis_wait_reboot_done { chassis } {
##
## chassis_wait_reboot_done
## -------------------
## wait for the reboot command which was just issued to the chassis to complete
## and for the chassis to come back online
## Arguments:
## chassis - chassis being rebooted
## Returns:
## None
## Additional Information:
global spawn_id expect_out spawn_out timeout
global expecting
global env
# make sure chassis has time to go down (its usually immediate)
sleep 10
# use a local shell for ping to verify chassis comes back
# it reboots too fast for us to observe it go away
local_sh
if { [ auto_execok /usr/lib/opa/tools/opagetipaddrtype ] != "" } {
send_unix_cmd "/usr/lib/opa/tools/opagetipaddrtype $chassis"
set out [expect_any 60 {"ipv6" "ipv4" } {"Error:" "Usage:"}]
regexp {([ip]+)([A-Za-z0-9]+)} $out iptype
} else {
set iptype "ipv4"
}
if { $iptype == "ipv4" } {
send_unix_cmd "ping -i 1 $chassis"
} else {
send_unix_cmd "ping6 -i 1 $chassis"
}
# allow 3 minutes for chassis to complete reboot
expect_list 180 {bytes from}
local_sh_exit
# give it a few seconds to boot
sleep 5
# now wait for CLI to come online
# 12800 can take 650 seconds = 130 * 5
log_message "Waiting for Chassis $chassis CLI to come online"
set online 0
for { set i 0 } { $i < 130 } { incr i } {
if { $i != 0 } {
log_message "Retrying: Chassis $chassis CLI is not yet up"
# wait before we try again
sleep [ calc_timeout 5 ]
}
if { [ catch { target_chassis_admin_sh $chassis } res ] != 0 } {
# send escape sequence to close timed out ssh sessions
catch { exp_send "~.\n" }
} else {
# we got in
target_chassis_admin_sh_exit
set online 1
break
}
}
if { ! $online } {
set info "Chassis CLI did not come online within timeout limit"
return -code error -errorinfo $info $info
}
}
proc test_case_chassis_reboot { chassis {iterations 1}} {
##
## test_case_chassis_reboot
## -------------------
## test_case to reboot chassis
##
## Usage:
## test_case_chassis_reboot chassis [iterations]
## Arguments:
## chassis - chassis to reboot
## iterations - number of reboot iterations, default is 1
## Returns:
## None
## Additional Information:
## must be used within a test_suite's body, performs test_case calls
## uses case_setup and case_cleanup provided by caller
## no item_setup nor item_cleanup used
global env
test_case "$chassis.reboot" "$chassis reboot" "test reboot of $chassis
use ping to confirm comes back up
File: TestTools/basic.exp" case_setup case_cleanup {
upvar chassis chassis
upvar iterations iterations
for { set i 0 } { $i < $iterations } { incr i } {
# chassis CLI shell for reboot command
target_chassis_admin_sh $chassis
chassis_cmd_reboot_all
# may not be able to send logout command, so just get out of dodge
expect_eof 60 1
chassis_wait_reboot_done $chassis
}
}
}
|