run: move general AMT support to tool/run

Issue #679
This commit is contained in:
Alexander Boettcher 2013-03-11 11:02:43 +01:00 committed by Norman Feske
parent e9f4e6b37d
commit 3593c7fb4d
2 changed files with 95 additions and 36 deletions

View File

@ -119,42 +119,9 @@ proc build_boot_image {binaries} {
proc run_genode_until {{wait_for_re forever} {timeout_value 0}} { proc run_genode_until {{wait_for_re forever} {timeout_value 0}} {
# run qemu if no AMT information are found if {[is_amt_available]} {
if {![info exists ::env(AMT_TEST_MACHINE_IP)] || spawn_amt $wait_for_re $timeout_value;
![info exists ::env(AMT_TEST_MACHINE_PWD)] } { } else {
spawn_qemu $wait_for_re $timeout_value; spawn_qemu $wait_for_re $timeout_value;
return
} }
#
# amttool expects in the environment variable AMT_PASSWORD the password
#
set ::env(AMT_PASSWORD) $::env(AMT_TEST_MACHINE_PWD)
#
# reset the box
#
spawn amttool $::env(AMT_TEST_MACHINE_IP) reset
set timeout 10
expect {
"host" { send "y\r" }
eof { puts stderr "Error: amttool died unexpectedly"; exit -4 }
timeout { puts stderr "Error: amttool timed out"; exit -5 }
}
sleep 5
#
# grab output
#
set amtterm "amtterm -u admin -p $::env(AMT_TEST_MACHINE_PWD) -v $::env(AMT_TEST_MACHINE_IP)"
set timeout [expr $timeout_value + 30]
set pid [eval "spawn $amtterm"]
if {$wait_for_re == "forever"} { interact $pid }
expect {
-re $wait_for_re { }
eof { puts stderr "Error: amtterm died unexpectedly"; exit -3 }
timeout { puts stderr "Error: Test execution timed out"; exit -2 }
}
global output
set output $expect_out(buffer)
} }

View File

@ -471,6 +471,98 @@ proc spawn_qemu { wait_for_re timeout_value } {
} }
##
# Check whether AMT support is available
#
proc is_amt_available { } {
if {![have_spec x86]} { return false }
if {[info exists ::env(AMT_TEST_MACHINE_IP)] &&
[info exists ::env(AMT_TEST_MACHINE_PWD)] &&
[have_installed amtterm] &&
[have_installed amttool]} {
return true;
}
puts "No support for Intel's AMT detected."
return false;
}
##
# Execute scenario using Intel's AMT
#
proc spawn_amt { wait_for_re timeout_value } {
if {![is_amt_available]} {
return }
#
# amttool expects in the environment variable AMT_PASSWORD the password
#
set ::env(AMT_PASSWORD) $::env(AMT_TEST_MACHINE_PWD)
#
# reset the box
#
set timeout 10
set exit_result 1
while { $exit_result != 0 } {
set time_start [ clock seconds ]
spawn amttool $::env(AMT_TEST_MACHINE_IP) reset
expect {
"host" { send "y\r"; }
eof { puts "Error: amttool died unexpectedly"; exit -4 }
timeout { puts "Error: amttool timed out"; exit -5 }
}
catch wait result
set time_end [ clock seconds ]
if {[expr $time_end - $time_start] <= 1} {
incr timeout -1
} else {
incr timeout [expr -1 * ($time_end - $time_start)]
}
if {$timeout < 0} {
set timeout 0
}
set exit_result [lindex $result 3]
}
sleep 5
#
# grab output
#
set amtterm "amtterm -u admin -p $::env(AMT_TEST_MACHINE_PWD) -v $::env(AMT_TEST_MACHINE_IP)"
if {$wait_for_re == "forever"} {
set timeout -1
} else {
set timeout [expr $timeout_value + 30]
}
set exit_result 1
while { $exit_result != 0 } {
set time_start [ clock seconds ]
set pid [eval "spawn $amtterm"]
expect {
-re $wait_for_re { break }
eof { continue }
timeout { puts "Error: Test execution timed out"; exit -2 }
}
catch wait result
set time_end [ clock seconds ]
if {[expr $time_end - $time_start] <= 1} {
incr timeout -1
} else {
incr timeout [expr -1 * ($time_end - $time_start)]
}
if {$timeout < 0} {
set timeout 0
}
set exit_result [lindex $result 3]
}
global output
set output $expect_out(buffer)
}
## ##
# Determine terminal program # Determine terminal program
# #