osd-contiki/tools/cooja/contiki_tests/sky_checkpointing.js
fros4943 520ad77046 sky checkpointing test:
Tests node local checkpointing on the Sky platform. A single node checkpoints and rollbacks with a repeating echo background process. Running examples/sky-shell/sky-shell.c
2009-02-04 17:53:16 +00:00

95 lines
2.8 KiB
JavaScript

TIMEOUT(120000, log.log("timeout at phase " + phase + ". last message: " + msg + "\n"));
phase=0;
/* Wait until node has booted */
WAIT_UNTIL(msg.startsWith('Starting'));
log.log("Shell started\n");
phase++;
/* 1. BACKGROUND PROCESS - NO CHECKPOINTING */
node.write("repeat 10 1 echo bg process &");
log.log("Starting background process without checkpointing\n");
expected=10;
while (expected > 0) {
YIELD_THEN_WAIT_UNTIL(msg.contains('bg process'));
expected--;
}
/* Make sure background process has exited */
GENERATE_MSG(3000, "continue");
while (!msg.contains('continue')) {
YIELD();
if (msg.contains('bg process')) {
log.log("Too many bg messages at phase: " + phase + "\n");
log.testFailed(); /* We are done! */
while (true) YIELD();
}
}
log.log("Background process without checkpointing done\n\n");
phase++;
/* 2. BACKGROUND PROCESS - CHECKPOINTING EVERY SECOND */
node.write("repeat 10 1 echo bg process &");
log.log("Starting background process with periodic checkpointing\n");
expected=10;
while (expected > 0) {
YIELD_THEN_WAIT_UNTIL(msg.contains('bg process'));
expected--;
node.write("checkpoint file" + expected);
}
/* Make sure background process has exited */
GENERATE_MSG(3000, "continue");
while (!msg.contains('continue')) {
YIELD();
if (msg.contains('bg process')) {
log.log("Too many bg messages at phase: " + phase + "\n");
log.testFailed(); /* We are done! */
while (true) YIELD();
}
}
log.log("Background process with periodic checkpointing done\n\n");
phase++;
/* 3. LIST ALL FILES */
node.write("ls");
YIELD_THEN_WAIT_UNTIL(msg.contains('file9'));
YIELD_THEN_WAIT_UNTIL(msg.contains('file8'));
YIELD_THEN_WAIT_UNTIL(msg.contains('file7'));
YIELD_THEN_WAIT_UNTIL(msg.contains('file6'));
YIELD_THEN_WAIT_UNTIL(msg.contains('file5'));
YIELD_THEN_WAIT_UNTIL(msg.contains('file4'));
YIELD_THEN_WAIT_UNTIL(msg.contains('file3'));
YIELD_THEN_WAIT_UNTIL(msg.contains('file2'));
YIELD_THEN_WAIT_UNTIL(msg.contains('file1'));
YIELD_THEN_WAIT_UNTIL(msg.contains('file0'));
GENERATE_MSG(1000, "continue");
YIELD_THEN_WAIT_UNTIL(msg.contains('continue'));
log.log("All checkpoints are stored in the filesystem\n\n");
phase++;
/* 4. ROLLBACK TO RESTORE BACKGROUND PROCESS */
node.write("rollback file7");
log.log("Rollingt back background process at count 7\n");
expected=7;
while (expected > 0) {
YIELD_THEN_WAIT_UNTIL(msg.contains('bg process'));
expected--;
}
/* Make sure background process has exited */
GENERATE_MSG(3000, "continue");
while (!msg.contains('continue')) {
YIELD();
if (msg.contains('bg process')) {
log.log("Too many bg messages at phase: " + phase + "\n");
log.testFailed(); /* We are done! */
while (true) YIELD();
}
}
log.log("Background process was rolled back successfully\n\n");
phase++;
log.testOK(); /* We are done! */