From 0e347cb20337bef054c55a500c9fc95c1a69fc9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 24 Jun 2015 10:49:35 +0200 Subject: [PATCH] launch_daemon: Added condition tests. --- src/tests/servers/launch/ConditionsTest.cpp | 170 ++++++++++++++++++ src/tests/servers/launch/ConditionsTest.h | 34 ++++ src/tests/servers/launch/Jamfile | 5 +- .../servers/launch/LaunchDaemonTestAddon.cpp | 2 + 4 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 src/tests/servers/launch/ConditionsTest.cpp create mode 100644 src/tests/servers/launch/ConditionsTest.h diff --git a/src/tests/servers/launch/ConditionsTest.cpp b/src/tests/servers/launch/ConditionsTest.cpp new file mode 100644 index 0000000000..0f483821a8 --- /dev/null +++ b/src/tests/servers/launch/ConditionsTest.cpp @@ -0,0 +1,170 @@ +/* + * Copyright 2015, Axel Dörfler, axeld@pinc-software.de. + * Distributed under the terms of the MIT License. + */ + + +#include "ConditionsTest.h" + +#include + +#include +#include + +#include +#include + +#include "Conditions.h" +#include "SettingsParser.h" + + +class TestConditionContext : public ConditionContext { +public: + bool IsSafeMode() const + { return false; } +}; + + +static TestConditionContext sConditionContext; + + +ConditionsTest::ConditionsTest() +{ +} + + +ConditionsTest::~ConditionsTest() +{ +} + + +void +ConditionsTest::TestSafemode() +{ + Condition* condition = _Condition("safemode"); + CPPUNIT_ASSERT(!condition->Test(sConditionContext)); + + class SafemodeConditionContext : public ConditionContext { + public: + bool IsSafeMode() const + { + return true; + } + } safemodeContext; + CPPUNIT_ASSERT(condition->Test(safemodeContext)); +} + + +void +ConditionsTest::TestFileExists() +{ + Condition* condition = _Condition("file_exists /boot"); + CPPUNIT_ASSERT(condition->Test(sConditionContext)); + + condition = _Condition("file_exists /boot/don't fool me!"); + CPPUNIT_ASSERT(!condition->Test(sConditionContext)); +} + + +void +ConditionsTest::TestOr() +{ + Condition* condition = _Condition("or {\n" + "file_exists /boot\n" + "}\n"); + CPPUNIT_ASSERT(condition->Test(sConditionContext)); + + condition = _Condition("or {\n" + "file_exists /nowhere\n" + "}\n"); + CPPUNIT_ASSERT(!condition->Test(sConditionContext)); + + condition = _Condition("or {\n" + "file_exists /boot\n" + "file_exists /nowhere\n" + "}\n"); + CPPUNIT_ASSERT(condition->Test(sConditionContext)); +} + + +void +ConditionsTest::TestAnd() +{ + Condition* condition = _Condition("and {\n" + "file_exists /boot\n" + "}\n"); + CPPUNIT_ASSERT(condition->Test(sConditionContext)); + + condition = _Condition("and {\n" + "file_exists /nowhere\n" + "}\n"); + CPPUNIT_ASSERT(!condition->Test(sConditionContext)); + + condition = _Condition("and {\n" + "file_exists /boot\n" + "file_exists /nowhere\n" + "}\n"); + CPPUNIT_ASSERT(!condition->Test(sConditionContext)); +} + + +void +ConditionsTest::TestNot() +{ + Condition* condition = _Condition("not safemode"); + CPPUNIT_ASSERT(condition->Test(sConditionContext)); + + class SafemodeConditionContext : public ConditionContext { + public: + bool IsSafeMode() const + { + return true; + } + } safemodeContext; + CPPUNIT_ASSERT(!condition->Test(safemodeContext)); + +} + + +/*static*/ void +ConditionsTest::AddTests(BTestSuite& parent) +{ + CppUnit::TestSuite& suite = *new CppUnit::TestSuite("ConditionsTest"); + + suite.addTest(new CppUnit::TestCaller( + "ConditionsTest::TestSafemode", &ConditionsTest::TestSafemode)); + suite.addTest(new CppUnit::TestCaller( + "ConditionsTest::TestFileExists", &ConditionsTest::TestFileExists)); + suite.addTest(new CppUnit::TestCaller( + "ConditionsTest::TestOr", &ConditionsTest::TestOr)); + suite.addTest(new CppUnit::TestCaller( + "ConditionsTest::TestAnd", &ConditionsTest::TestAnd)); + suite.addTest(new CppUnit::TestCaller( + "ConditionsTest::TestNot", &ConditionsTest::TestNot)); + + parent.addTest("ConditionsTest", &suite); +} + + +Condition* +ConditionsTest::_Condition(const char* string) +{ + SettingsParser parser; + BString input("job A {\nif {"); + input << string << "\n}\n}\n"; + + BMessage jobs; + CPPUNIT_ASSERT_EQUAL(B_OK, parser.Parse(input, jobs)); + + BMessage job; + CPPUNIT_ASSERT_EQUAL(B_OK, jobs.FindMessage("job", 0, &job)); + CPPUNIT_ASSERT_EQUAL(2, job.CountNames(B_ANY_TYPE)); + CPPUNIT_ASSERT_EQUAL(BString("A"), BString(job.GetString("name"))); + + BMessage message; + CPPUNIT_ASSERT_EQUAL(B_OK, job.FindMessage("if", &message)); + + Condition* condition = Conditions::FromMessage(message); + CPPUNIT_ASSERT(condition != NULL); + return condition; +} diff --git a/src/tests/servers/launch/ConditionsTest.h b/src/tests/servers/launch/ConditionsTest.h new file mode 100644 index 0000000000..4ea14e4fc9 --- /dev/null +++ b/src/tests/servers/launch/ConditionsTest.h @@ -0,0 +1,34 @@ +/* + * Copyright 2015, Axel Dörfler, axeld@pinc-software.de. + * Distributed under the terms of the MIT License. + */ +#ifndef CONDITIONS_TEST_H +#define CONDITIONS_TEST_H + + +#include +#include + + +class Condition; + + +class ConditionsTest : public CppUnit::TestCase { +public: + ConditionsTest(); + virtual ~ConditionsTest(); + + void TestSafemode(); + void TestFileExists(); + void TestOr(); + void TestAnd(); + void TestNot(); + + static void AddTests(BTestSuite& suite); + +private: + Condition* _Condition(const char* string); +}; + + +#endif // CONDITIONS_TEST_H diff --git a/src/tests/servers/launch/Jamfile b/src/tests/servers/launch/Jamfile index 90be9b7ffd..e0fb10eee7 100644 --- a/src/tests/servers/launch/Jamfile +++ b/src/tests/servers/launch/Jamfile @@ -2,7 +2,7 @@ SubDir HAIKU_TOP src tests servers launch ; AddSubDirSupportedPlatforms libbe_test ; -UsePrivateHeaders app shared support ; +UsePrivateHeaders app shared storage support ; SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src servers launch ] ; @@ -12,5 +12,8 @@ UnitTestLib liblaunch_daemontest.so : SettingsParserTest.cpp SettingsParser.cpp + ConditionsTest.cpp + Conditions.cpp + : be libshared.a [ TargetLibstdc++ ] [ TargetLibsupc++ ] ; diff --git a/src/tests/servers/launch/LaunchDaemonTestAddon.cpp b/src/tests/servers/launch/LaunchDaemonTestAddon.cpp index 38e272e61c..497d5f6169 100644 --- a/src/tests/servers/launch/LaunchDaemonTestAddon.cpp +++ b/src/tests/servers/launch/LaunchDaemonTestAddon.cpp @@ -7,6 +7,7 @@ #include #include +#include "ConditionsTest.h" #include "SettingsParserTest.h" @@ -16,6 +17,7 @@ getTestSuite() BTestSuite* suite = new BTestSuite("LaunchDaemon"); SettingsParserTest::AddTests(*suite); + ConditionsTest::AddTests(*suite); return suite; }