lib_shmm.exp
#==================================================
#proc : ShMM
#==================================================
proc shmm_ssh_login {} {
global error_message Con_server_prompt sendU_log console_server_ip shmm_prompt shmm_ip dut_linux_user
#spawn ssh $dut_linux_user@$shmm_ip
send -s "\r"
send -s "ssh $dut_linux_user@$shmm_ip\r"
expect {
"*login*" { send "$dut_linux_user\r" ; exp_continue}
-ex "(yes/no)?" { send "yes\r"; exp_continue}
"*?assword:" { send "\r" ; exp_continue}
"$shmm_prompt" { sendU_log "$shmm_prompt Shmm_ssh_login : pass\n"}
default {append error_message "Shmm_ssh_login : fail\n" ; exit}
}
}
proc shmm_ssh_logout {} {
global error_message sendU_log Con_server_prompt console_server_ip shmm_ip shmm_prompt
puts "\nrunning proc shmm_ssh_logout {}"
send -s "exit\r"
expect {
"Connection to $shmm_ip closed" {sendU_log "Shmm_ssh_logout : pass\n"}
default { sendU_log "Shmm_ssh_logout : fail\n";append error_message "Shmm_ssh_logout : fail\n"}
}
}
proc Shmm_ssh_login {} {
global error_message Con_server_prompt sendU_log console_server_ip shmm_prompt shmm_ip
puts "\nrunning proc Shmm_ssh_login {}"
expect {
$Con_server_prompt {
send -s "ssh root@$shmm_ip\r"
expect {
"*login*" { send "$dut_linux_user\r" ; exp_continue}
-ex "(yes/no)?" { send "yes\r"; exp_continue}
"*?assword:" { send "\r" ; exp_continue}
"$shmm_prompt" { sendU_log "$shmm_prompt Shmm_ssh_login : pass\n"}
default {append error_message "Shmm_ssh_login : fail\n" ; exit}
}
sleep_sec 1
}
}
}
proc Shmm_ssh_logout {} {
global error_message sendU_log Con_server_prompt console_server_ip shmm_ip shmm_prompt
puts "\nrunning proc Shmm_ssh_logout {}"
expect {
$shmm_prompt {
send -s "exit\r"
expect {
"Connection to $shmm_ip closed" {sendU_log "Shmm_ssh_logout : pass\n"}
default { sendU_log "Shmm_ssh_logout : fail\n";append error_message "Shmm_ssh_logout : fail\n"}
}
send -s "\r"
expect {
"$Con_server_prompt" { sendU_log "$shmm_prompt Shmm_ssh_logout : pass\n"}
default {append error_message "Shmm_ssh_logout : fail\n" ; exit}
}
sleep_sec 1
}
}
}
proc Shmm_send {{sub_function *} {expected_result *}} {
global error_message sendU_log Con_server_prompt console_server_ip shmm_ip shmm_prompt
puts "\nrunning proc Shmm_send { sub_function = $sub_function}"
#set result {}
#send -s "\r"
expect {
$shmm_prompt {
send -s "$sub_function\r"
sleep_sec 3
#send -s "\r"
expect {
"$expected_result" {sendU_log "Shmm_send expected_result = $expected_result : pass\n"}
default { sendU_log "Shmm_send expected_result = $expected_result : fail\n";append error_message "Shmm_send expected_result = $expected_result : fail\n"}
}
sleep_sec 1
}
}
}
proc Shmm_hpi_shell_login {} {
global error_message sendU_log Con_server_prompt console_server_ip shmm_ip shmm_prompt hpi_prompt
#set result {}
send -s "\r"
expect {
$shmm_prompt {
send -s "hpi_shell\r"
sleep_sec 3
expect {
NO_RESPONSE { sleep 20 ; send "hpi_shell\r" ; exp_continue}
$hpi_prompt {sendU_log "Shmm_hpi_shell_login : pass\n"}
#"$expected_result" {sendU_log "Shmm_send expected_result = $expected_result : pass\n"; set result pass}
default { sendU_log "Shmm_hpi_shell_login : fail\n";append error_message "Shmm_hpi_shell_login : fail\n"} return fail
}
sleep_sec 1
}
}
}
proc Shmm_expectout {{sub_function *} {reg *} {expected_result *} {failexit 0} {sub_test_case default_none} } {
global error_message sendU_log DUT_prompt BMC_ip BMC_user BMC_pw Con_server_prompt expectout shmm_prompt
puts "\nrunning proc Shmm_expectout {}"
expect {
$shmm_prompt {
if { $sub_function != "" } {
###### improve sub_test_case info 20161217
send_user "\n***** sub_test_case info : $sub_test_case *****\n"
send -s "$sub_function\r"
expect {
-re "$reg" {set expectout $expect_out(0,string);send -s "\r"}
#-re "\r\n(.*)$shmm_prompt" {set expectout $expect_out(0,string);send -s "\r"}
}
if {[string match $expected_result $expectout ]==1} {
sendU_log "\nstring match ($expected_result) : pass\n"
send_user "error_message = $error_message"
} else {
sendU_log "\nstring match ($expected_result) : fail\n";append error_message "\nstring match : fail\n"
send_user "error_message = $error_message"
puts "expected_result = $expected_result"
puts "expectout = $expectout"
if { $failexit == 1} {
exit
}
}
} else {
send_user "please provide sub-function for testing"
}
}
}
}
proc Shmm_hpi_shell_expectout {{check_id 1} {sub_function *} {reg *} {expected_result *} {sub_test_case default_none} } {
global error_message sendU_log DUT_prompt BMC_ip BMC_user BMC_pw Con_server_prompt expectout ipmb_addr shmm_ip
puts "\nrunning proc Shmm_hpi_shell_expectout {}"
#puts "check_id = $check_id"
#set a $DUT_prompt
#puts $DUT_prompt
#puts "a = $a"
expect {
hpi_shell> {
switch -exact $check_id {
1 {
if { $sub_function != "" } {
###### improve sub_test_case info 20161217
send_user "\n***** sub_test_case info : $sub_test_case *****\n"
send -s "$sub_function\r"
expect {
-re "$reg" {set expectout $expect_out(0,string);send -s "\r"}
}
if {[string match $expected_result $expectout ]==1} {
sendU_log "\nstring match ($expected_result) : pass\n"
send_user "error_message = $error_message"
} else {
sendU_log "\nstring match ($expected_result) : fail\n";append error_message "\nstring match : fail\n"
send_user "error_message = $error_message"
puts "expected_result = $expected_result"
puts "expectout = $expectout"
exit
}
} else {
send_user "please provide sub-function for testing"
}
}
2 {
send -s "\x1d"
expect {
"telnet>" {send -s "q\r";sendU_log "logout DUT : pass\n"}
}
sleep_sec 3
if { $sub_function != "" } {
###### improve sub_test_case info 20161217
send_user "\n***** sub_test_case info : $sub_test_case *****\n"
send -s "ipmitool -I lan -H $BMC_ip -U $BMC_user -P $BMC_pw $sub_function\r"
expect {
-re "ipmitool(.*)$Con_server_prompt" {set expectout $expect_out(0,string);send -s "\r"}
}
if {[string match $expected_result $expectout ]==1} {
sendU_log "\nstring match ($expected_result) : pass\n"
send_user "error_message = $error_message"
} else {
sendU_log "\nstring match ($expected_result) : fail\n";append error_message "\nstring match : fail\n"
send_user "error_message = $error_message"
}
} else {
send_user "please provide sub-function for testing"
}
DUT_login
}
default {puts "do nothing!";}
}
}
}
}
proc Shmm_telnet_login {} {
global error_message Con_server_prompt sendU_log shmm_ip shmm_port
puts "\nrunning proc Shmm_telnet_login {}"
expect {
$Con_server_prompt {
send -s "telnet 0 $shmm_port\r"
send -s "\r"
expect {
$ {sendU_log "login Shelfmanager : pass\n"}
default { sendU_log "login Shelfmanager : fail\n";append error_message "login Shelfmanager : fail\n"}
}
}
}
}
proc Shmm_telnet_logout {} {
global error_message sendU_log
puts "\nrunning proc Shmm_telnet_logout {}"
expect {
$ {
send -s "\x1d"
expect {
"telnet>" {send -s "q\r\r";sendU_log "logout Shelfmanager : pass\n"}
}
}
}
}
proc Shmm_check_board {} {
global error_message sendU_log slot_num
puts "\nrunning proc Shmm_check_board {}"
send -s "\r"
expect {
-ex "(yes/no)?" { send "yes\r"; exp_continue}
"*?assword:" { send "\r" ; exp_continue}
"*login*" { send "root\r" ; exp_continue}
$ { sendU_log "enter Shelfmanager success\n"}
default {append error_message "enter Shelfmanager : fail\n" ; exit}
}
expect {
$ {
send -s "clia board $slot_num\r"
sleep_sec 3
expect {
"*Hot Swap State: M4 (Active)*" {sendU_log "shelf check board $slot_num : pass\n"}
default {sendU_log "shelf check board $slot_num : fail\n";append error_message "shelf check board $slot_num : fail\n"}
}
}
}
}
proc DUT_IPMB_address_check {} {
global error_message sendU_log DUT_prompt card_slot
puts "\nrunning proc DUT_IPMB_address_check {}"
expect {
-ex "(yes/no)?" { send "yes\r"; exp_continue}
"*?assword:" { send "qwerty\r" ; exp_continue}
"*login*" { send "root\r" ; exp_continue}
$DUT_prompt { sendU_log "login DUT : pass\n"}
default {append error_message "login DUT : fail\n" ; exit}
}
expect {
$DUT_prompt {
sleep_sec 2
send -s "ipmitool picmg addrinfo\r"
sleep_sec 3
expect {
"*IPMB-0 Address : $card_slot*" {sendU_log "IPMB Address: $card_slot correct : pass\n"}
default { sendU_log "IPMB Address: $card_slot incorrect : fail\n";append error_message "IPMB Address: $card_slot incorrect : fail\n" ; exit}
}
}
}
}