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:
@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user