regression-test-experiment update

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1497 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
hellwig
2012-08-16 12:25:07 +00:00
parent 3e0b39fcc6
commit 7deb9eda0f
3 changed files with 137 additions and 9 deletions

View File

@ -7,11 +7,18 @@
#include "sal/Listener.hpp"
#include "util/Logger.hpp"
#include "config/FailConfig.hpp"
#include "sal/bochs/BochsRegister.hpp"
//ToDo:
// more flow-control by BreakpointListener
// life-counter (counter over BreakpointListener) monitor whether a test takes too much "time"
// more tests + test of plugins
// Check if configuration dependencies are satisfied:
#if !defined(CONFIG_EVENT_BREAKPOINTS)
#error This experiment needs: breakpoints. Enable these in the configuration.
#if !defined(CONFIG_EVENT_BREAKPOINTS) || !defined(CONFIG_EVENT_MEMREAD) \
|| !defined(CONFIG_EVENT_MEMWRITE) || !defined(CONFIG_SR_SAVE) || !defined(CONFIG_SR_RESTORE) \
|| !defined(CONFIG_SR_REBOOT) || !defined(CONFIG_EVENT_TRAP)
#error This experiment needs: breakpoints, memread, memwrite. Enable these in the configuration.
#endif
using namespace std;
@ -19,6 +26,7 @@ using namespace fail;
bool RegressionTest::run()
{
BPSingleListener bpPather(ANY_ADDR);
int count = 0;
Logger log("Regression-Test", false);
@ -68,9 +76,125 @@ bool RegressionTest::run()
break;
}
}
simulator.clearListeners(this);
//simulator.clearListeners(this);
log << "Breakpoint-Test end" << endl;
//Memory test TODO..
/*
log << "Memory-Test start." << endl;
MemReadListener memread(REGRESSION_FUNC_MTEST_READ);
MemWriteListener memwrite(REGRESSION_FUNC_MTEST_READ);
simulator.resume();
B D
log << "Memaddr: " << hex <<memread.getTriggerAddress() << dec <<endl;
log << "Memory-Test end." << endl;
*/
//Jump test
log << "Jump-Test start" << endl;
bpPather.setWatchInstructionPointer(REGRESSION_FUNC_JUMP);
simulator.addListener(&bpPather);
simulator.resume();
log << "Begin of Jump-Function found." << endl;
JumpListener jump(ANY_INSTR);
simulator.addListener(&jump);
simulator.resume();
log << "Jump-Instruction found: " << jump.getOpcode() << endl;
log << "current Instruction-Pointer: 0x" << hex <<\
simulator.getRegisterManager().getInstructionPointer() << dec << endl;
log << "Jump-Test end" << endl;
//Interrupt test
log << "Interrupt-Test start" << endl;
InterruptListener interrupt(32);
simulator.addListener(&interrupt);
simulator.resume();
log << "Interrupt-Test SUCCESS" << endl;
log << "Interrupt-Test end" << endl;
// Save / Restore test
log << "Save-/Restore-Test start" << endl;
simulator.save("regression-save");
long beforeRestore = simulator.getRegisterManager().getInstructionPointer();
log << "InstructionPointer before restore : 0x" << hex << beforeRestore << dec << " DEZ: "<< beforeRestore << endl;
simulator.restore("regression-save");
long afterRestore = simulator.getRegisterManager().getInstructionPointer();
log << "InstructionPointer after restore: 0x" << hex << afterRestore << dec << " DEZ: "<< afterRestore << endl;
if(beforeRestore == afterRestore) {
log << "Save-/Restore-Test SUCCESS." << endl;
}else {
log << "Save-/Restore-Test FAILED." << endl;
}
log << "Save-/Restore-Test end" << endl;
// Reboot test
log << "Reboot-Test start" << endl;
BPSingleListener bpReboot(ANY_ADDR);
simulator.addListener(&bpReboot);
simulator.resume();
long beforeReboot = bpReboot.getTriggerInstructionPointer();
log << "Before Reboot-Addr: 0x" << hex << beforeReboot << dec << endl;
bpReboot.setWatchInstructionPointer(beforeReboot);
simulator.addListener(&bpReboot);
simulator.reboot();
long afterReboot = bpReboot.getTriggerInstructionPointer();
log << "After Reboot-Addr: 0x" << hex << beforeReboot << dec << endl;
if (beforeReboot == afterReboot){
log << "Reboot-Test SUCCESS." << endl;
}else {
log << "Reboot-Test FAILED." << endl;
}
log << "Reboot-Test end" << endl;
// Trap test
log << "Trap-Test start" << endl;
bpPather.setWatchInstructionPointer(REGRESSION_FUNC_TRAP);
simulator.addListener(&bpPather);
simulator.resume();
log << "Begin of Trap-Function found." << endl;
TrapListener trap(ANY_TRAP);
simulator.addListener(&trap);
simulator.resume();
log << "Trap found." << endl;
log << "Trap-Test end" << endl;
return true;
}