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