From 3db34271987c79c7425e1eede6a4ba180844848d Mon Sep 17 00:00:00 2001 From: Christian Dietrich <christian.dietrich@informatik.uni-erlangen.de> Date: Mon, 20 Jan 2014 17:04:05 +0100 Subject: [PATCH] generator/analysis: add testcases for alarms Add some testcase for systems with one Alarm and different activations settings. Change-Id: Ic2fa3fa1f05d9d6e1fcefd774e76196f87c251cd --- app/bcc1/alarm1/CMakeLists.txt | 29 ++++++++++++++++++++++ app/bcc1/alarm1/b.c | 36 +++++++++++++++++++++++++++ app/bcc1/alarm1/c.c | 35 ++++++++++++++++++++++++++ app/bcc1/alarm1/d.c | 36 +++++++++++++++++++++++++++ app/bcc1/alarm1/e.c | 45 ++++++++++++++++++++++++++++++++++ app/bcc1/alarm1/verify_b.py | 36 +++++++++++++++++++++++++++ app/bcc1/alarm1/verify_c.py | 33 +++++++++++++++++++++++++ app/bcc1/alarm1/verify_d.py | 36 +++++++++++++++++++++++++++ app/bcc1/alarm1/verify_e.py | 42 +++++++++++++++++++++++++++++++ 9 files changed, 328 insertions(+) create mode 100644 app/bcc1/alarm1/b.c create mode 100644 app/bcc1/alarm1/c.c create mode 100644 app/bcc1/alarm1/d.c create mode 100644 app/bcc1/alarm1/e.c create mode 100644 app/bcc1/alarm1/verify_b.py create mode 100644 app/bcc1/alarm1/verify_c.py create mode 100644 app/bcc1/alarm1/verify_d.py create mode 100644 app/bcc1/alarm1/verify_e.py diff --git a/app/bcc1/alarm1/CMakeLists.txt b/app/bcc1/alarm1/CMakeLists.txt index e26185e..f4c1f45 100644 --- a/app/bcc1/alarm1/CMakeLists.txt +++ b/app/bcc1/alarm1/CMakeLists.txt @@ -4,3 +4,32 @@ COREDOS_BINARY( VERIFY verify_a.py a.c ) + +COREDOS_BINARY( + NAME bcc1_alarm1b + SYSTEM_XML system.xml + VERIFY verify_b.py + b.c +) + +COREDOS_BINARY( + NAME bcc1_alarm1c + SYSTEM_XML system.xml + VERIFY verify_c.py + c.c +) + +COREDOS_BINARY( + NAME bcc1_alarm1d + SYSTEM_XML system.xml + VERIFY verify_d.py + d.c +) + +COREDOS_BINARY( + NAME bcc1_alarm1e + SYSTEM_XML system.xml + VERIFY verify_e.py + e.c +) + diff --git a/app/bcc1/alarm1/b.c b/app/bcc1/alarm1/b.c new file mode 100644 index 0000000..c62a385 --- /dev/null +++ b/app/bcc1/alarm1/b.c @@ -0,0 +1,36 @@ +#include "os.h" + +DeclareTask(H1); +DeclareTask(H2); +DeclareTask(H3); +DeclareAlarm(A1); +DeclareCounter(C1); + + +TASK(H1) { + TerminateTask(); +} + +TASK(H2) { + ActivateTask(H1); + TerminateTask(); +} + +TASK(H3) { + TerminateTask(); +} + +void os_main() { + OSEKOS_TASK_H1(); +} + +StatusType OSEKOS_TerminateTask() { + return E_OK; + for(;;){}; +} + +StatusType OSEKOS_ActivateTask(TaskType t) { + return E_OK; +} + + diff --git a/app/bcc1/alarm1/c.c b/app/bcc1/alarm1/c.c new file mode 100644 index 0000000..97559ff --- /dev/null +++ b/app/bcc1/alarm1/c.c @@ -0,0 +1,35 @@ +#include "os.h" + +DeclareTask(H1); +DeclareTask(H2); +DeclareTask(H3); +DeclareAlarm(A1); +DeclareCounter(C1); + + +TASK(H1) { + TerminateTask(); +} + +TASK(H2) { + ChainTask(H1); +} + +TASK(H3) { + TerminateTask(); +} + +void os_main() { + OSEKOS_TASK_H1(); +} + +StatusType OSEKOS_TerminateTask() { + return E_OK; + for(;;){}; +} + +StatusType OSEKOS_ActivateTask(TaskType t) { + return E_OK; +} + + diff --git a/app/bcc1/alarm1/d.c b/app/bcc1/alarm1/d.c new file mode 100644 index 0000000..84c8485 --- /dev/null +++ b/app/bcc1/alarm1/d.c @@ -0,0 +1,36 @@ +#include "os.h" + +DeclareTask(H1); +DeclareTask(H2); +DeclareTask(H3); +DeclareAlarm(A1); +DeclareCounter(C1); + + +TASK(H1) { + ActivateTask(H3); + TerminateTask(); +} + +TASK(H2) { + ChainTask(H1); +} + +TASK(H3) { + TerminateTask(); +} + +void os_main() { + OSEKOS_TASK_H1(); +} + +StatusType OSEKOS_TerminateTask() { + return E_OK; + for(;;){}; +} + +StatusType OSEKOS_ActivateTask(TaskType t) { + return E_OK; +} + + diff --git a/app/bcc1/alarm1/e.c b/app/bcc1/alarm1/e.c new file mode 100644 index 0000000..47dbe1d --- /dev/null +++ b/app/bcc1/alarm1/e.c @@ -0,0 +1,45 @@ +#include "os.h" + +DeclareTask(H1); +DeclareTask(H2); +DeclareTask(H3); +DeclareAlarm(A1); +DeclareCounter(C1); + +int a; + +TASK(H1) { + TerminateTask(); +} + +TASK(H2) { + if (a>100) { + ActivateTask(H3); + } + TerminateTask(); +} + +TASK(H3) { + a++; + while (a > 3) { + a++; + ActivateTask(H1); + } + a++; + TerminateTask(); +} + +void os_main() { + OSEKOS_TASK_H1(); +} + +StatusType OSEKOS_TerminateTask() { + return E_OK; + for(;;){}; +} + +StatusType OSEKOS_ActivateTask(TaskType t) { + return E_OK; +} + + diff --git a/app/bcc1/alarm1/verify_b.py b/app/bcc1/alarm1/verify_b.py new file mode 100644 index 0000000..121a361 --- /dev/null +++ b/app/bcc1/alarm1/verify_b.py @@ -0,0 +1,36 @@ +from generator.graph.common import * + +def after_RunningTaskAnalysis(analysis): + # Find all three systemcall handlers + (H1, H2, H3, Idle, StartOS) = \ + get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS"]) + + syscalls = set() + def test(func, syscall, args, expected_subtasks): + abb = reachability_test(analysis, func, syscall, args, expected_subtasks) + syscalls.add(abb) + + # H3 are not activated + syscalls.update(set(H3.get_syscalls())) + + test(StartOS, "StartOS", [], # => + [Idle]) + + activated_test(analysis, [Idle], # => + H2) + + test(H2, "ActivateTask", [H1], # => + [H1]) + + test(H2, "TerminateTask", [], # => + [Idle]) + + test(H1, "TerminateTask", [], # => + [H2]) + + test(Idle, "Idle", [], # => + [Idle]) + + assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \ + %(set(analysis.system.get_syscalls()) - syscalls) + diff --git a/app/bcc1/alarm1/verify_c.py b/app/bcc1/alarm1/verify_c.py new file mode 100644 index 0000000..b0d4de9 --- /dev/null +++ b/app/bcc1/alarm1/verify_c.py @@ -0,0 +1,33 @@ +from generator.graph.common import * + +def after_RunningTaskAnalysis(analysis): + # Find all three systemcall handlers + (H1, H2, H3, Idle, StartOS) = \ + get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS"]) + + syscalls = set() + def test(func, syscall, args, expected_subtasks): + abb = reachability_test(analysis, func, syscall, args, expected_subtasks) + syscalls.add(abb) + + # H3 are not activated + syscalls.update(set(H3.get_syscalls())) + + test(StartOS, "StartOS", [], # => + [Idle]) + + activated_test(analysis, [Idle, H1], # => + H2) + + test(H2, "ChainTask", [H1], # => + [H1]) + + test(H1, "TerminateTask", [], # => + [H2, Idle]) + + test(Idle, "Idle", [], # => + [Idle]) + + assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \ + %(set(analysis.system.get_syscalls()) - syscalls) + diff --git a/app/bcc1/alarm1/verify_d.py b/app/bcc1/alarm1/verify_d.py new file mode 100644 index 0000000..31d0c85 --- /dev/null +++ b/app/bcc1/alarm1/verify_d.py @@ -0,0 +1,36 @@ +from generator.graph.common import * + +def after_RunningTaskAnalysis(analysis): + # Find all three systemcall handlers + (H1, H2, H3, Idle, StartOS) = \ + get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS"]) + + syscalls = set() + def test(func, syscall, args, expected_subtasks): + abb = reachability_test(analysis, func, syscall, args, expected_subtasks) + syscalls.add(abb) + + test(StartOS, "StartOS", [], # => + [Idle]) + + activated_test(analysis, [Idle, H1, H3], # => + H2) + + test(H1, "ActivateTask", [H3], # => + [H1]) + + test(H2, "ChainTask", [H1], # => + [H1]) + + test(H1, "TerminateTask", [], # => + [H2, H3]) + + test(H3, "TerminateTask", [], # => + [Idle]) + + test(Idle, "Idle", [], # => + [Idle]) + + assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \ + %(set(analysis.system.get_syscalls()) - syscalls) + diff --git a/app/bcc1/alarm1/verify_e.py b/app/bcc1/alarm1/verify_e.py new file mode 100644 index 0000000..98f50c0 --- /dev/null +++ b/app/bcc1/alarm1/verify_e.py @@ -0,0 +1,42 @@ +from generator.graph.common import * + +def after_RunningTaskAnalysis(analysis): + # Find all three systemcall handlers + (H1, H2, H3, Idle, StartOS) = \ + get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS"]) + + syscalls = set() + def test(func, syscall, args, expected_subtasks): + abb = reachability_test(analysis, func, syscall, args, expected_subtasks) + syscalls.add(abb) + + test(StartOS, "StartOS", [], # => + [Idle]) + + activated_test(analysis, [Idle, H1, H3], # => + H2) + + test(H1, "TerminateTask", [], # => + [H2, H3]) + + test(H2, "ActivateTask", [H3], # => + [H2]) + + test(H2, "TerminateTask", [], # => + [H3, Idle]) + + + test(H1, "TerminateTask", [], # => + [H2, H3]) + + test(H3, "ActivateTask", [H1], # => + [H1]) + + test(H3, "TerminateTask", [], # => + [Idle]) + + test(Idle, "Idle", [], # => + [Idle]) + + assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \ + %(set(analysis.system.get_syscalls()) - syscalls) -- GitLab