File: basic.exp

package info (click to toggle)
opa-ff 10.10.3.0.11-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 17,372 kB
  • sloc: ansic: 189,318; sh: 25,941; perl: 15,145; exp: 8,415; makefile: 5,315; xml: 189; cpp: 93; tcl: 50; python: 44
file content (261 lines) | stat: -rw-r--r-- 7,594 bytes parent folder | download | duplicates (2)
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
		}
	}
}