This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/framework_racecondition in repository https://gitbox.apache.org/repos/asf/celix.git
commit aad0ecd8a173bcea08c2d57f6d4442bc116fbcbc Author: Pepijn Noltes <[email protected]> AuthorDate: Fri Mar 6 11:35:12 2020 +0100 Refactors some celix framework test from cpputest to gtest. --- libs/framework/CMakeLists.txt | 4 +- libs/framework/{test => gtest}/CMakeLists.txt | 18 +- .../framework/{test => gtest}/config.properties.in | 0 .../{test => gtest}/framework1.properties.in | 0 .../{test => gtest}/framework2.properties.in | 0 .../src}/bundle_context_bundles_tests.cpp | 224 ++++++++-------- .../src}/bundle_context_services_test.cpp | 281 +++++++++++---------- libs/framework/{test => gtest/src}/dm_tests.cpp | 38 +-- .../src}/multiple_frameworks_test.cpp | 25 +- libs/framework/{test => gtest/src}/nop_activator.c | 0 libs/framework/{test => gtest/src}/run_tests.cpp | 10 +- .../{test => gtest/src}/single_framework_test.cpp | 41 +-- .../{test => gtest}/subdir/CMakeLists.txt | 0 libs/framework/{test => gtest}/subdir/src/foo.c | 0 14 files changed, 325 insertions(+), 316 deletions(-) diff --git a/libs/framework/CMakeLists.txt b/libs/framework/CMakeLists.txt index 8297a97..a8d551a 100644 --- a/libs/framework/CMakeLists.txt +++ b/libs/framework/CMakeLists.txt @@ -52,9 +52,7 @@ add_library(Celix::framework ALIAS framework) if (ENABLE_TESTING) - find_package(CppUTest REQUIRED) - include_directories(SYSTEM PRIVATE ${CPPUTEST_INCLUDE_DIR}) - add_subdirectory(test) + add_subdirectory(gtest) endif() diff --git a/libs/framework/test/CMakeLists.txt b/libs/framework/gtest/CMakeLists.txt similarity index 84% rename from libs/framework/test/CMakeLists.txt rename to libs/framework/gtest/CMakeLists.txt index 33a7428..33cb7b9 100644 --- a/libs/framework/test/CMakeLists.txt +++ b/libs/framework/gtest/CMakeLists.txt @@ -18,10 +18,10 @@ add_celix_bundle(simple_test_bundle1 NO_ACTIVATOR VERSION 1.0.0) add_celix_bundle(simple_test_bundle2 NO_ACTIVATOR VERSION 1.0.0) add_celix_bundle(simple_test_bundle3 NO_ACTIVATOR VERSION 1.0.0) -add_celix_bundle(bundle_with_exception SOURCES nop_activator.c VERSION 1.0.0) +add_celix_bundle(bundle_with_exception SOURCES src/nop_activator.c VERSION 1.0.0) add_subdirectory(subdir) #simple_test_bundle4, simple_test_bundle5 and sublib -add_celix_bundle(unresolveable_bundle SOURCES nop_activator.c VERSION 1.0.0) +add_celix_bundle(unresolveable_bundle SOURCES src/nop_activator.c VERSION 1.0.0) target_link_libraries(unresolveable_bundle PRIVATE "-L${CMAKE_CURRENT_BINARY_DIR}/subdir -lsublib") if(NOT APPLE) set_target_properties(unresolveable_bundle PROPERTIES LINK_FLAGS -Wl,--no-as-needed) @@ -29,15 +29,15 @@ endif() add_dependencies(unresolveable_bundle sublib) add_executable(test_framework - run_tests.cpp - single_framework_test.cpp - multiple_frameworks_test.cpp - bundle_context_bundles_tests.cpp - bundle_context_services_test.cpp - dm_tests.cpp + src/run_tests.cpp + src/single_framework_test.cpp + src/multiple_frameworks_test.cpp + src/bundle_context_bundles_tests.cpp + src/bundle_context_services_test.cpp + src/dm_tests.cpp ) -target_link_libraries(test_framework Celix::framework CURL::libcurl ${CPPUTEST_LIBRARY}) +target_link_libraries(test_framework Celix::framework CURL::libcurl GTest::GTest) add_dependencies(test_framework simple_test_bundle1_bundle simple_test_bundle2_bundle simple_test_bundle3_bundle simple_test_bundle4_bundle simple_test_bundle5_bundle bundle_with_exception_bundle unresolveable_bundle_bundle) target_include_directories(test_framework PRIVATE ../src) diff --git a/libs/framework/test/config.properties.in b/libs/framework/gtest/config.properties.in similarity index 100% rename from libs/framework/test/config.properties.in rename to libs/framework/gtest/config.properties.in diff --git a/libs/framework/test/framework1.properties.in b/libs/framework/gtest/framework1.properties.in similarity index 100% rename from libs/framework/test/framework1.properties.in rename to libs/framework/gtest/framework1.properties.in diff --git a/libs/framework/test/framework2.properties.in b/libs/framework/gtest/framework2.properties.in similarity index 100% rename from libs/framework/test/framework2.properties.in rename to libs/framework/gtest/framework2.properties.in diff --git a/libs/framework/test/bundle_context_bundles_tests.cpp b/libs/framework/gtest/src/bundle_context_bundles_tests.cpp similarity index 67% rename from libs/framework/test/bundle_context_bundles_tests.cpp rename to libs/framework/gtest/src/bundle_context_bundles_tests.cpp index 72a4891..7295367 100644 --- a/libs/framework/test/bundle_context_bundles_tests.cpp +++ b/libs/framework/gtest/src/bundle_context_bundles_tests.cpp @@ -17,6 +17,8 @@ * under the License. */ +#include <gtest/gtest.h> + #include <thread> #include <chrono> #include <iostream> @@ -27,14 +29,11 @@ #include "celix_api.h" -#include <CppUTest/TestHarness.h> -#include <CppUTest/CommandLineTestRunner.h> - - -TEST_GROUP(CelixBundleContextBundlesTests) { - framework_t* fw = nullptr; - bundle_context_t *ctx = nullptr; - properties_t *properties = nullptr; +class CelixBundleContextBundlesTests : public ::testing::Test { +public: + celix_framework_t* fw = nullptr; + celix_bundle_context_t *ctx = nullptr; + celix_properties_t *properties = nullptr; const char * const TEST_BND1_LOC = "simple_test_bundle1.zip"; const char * const TEST_BND2_LOC = "simple_test_bundle2.zip"; @@ -44,7 +43,7 @@ TEST_GROUP(CelixBundleContextBundlesTests) { const char * const TEST_BND_WITH_EXCEPTION_LOC = "bundle_with_exception.zip"; const char * const TEST_BND_UNRESOLVEABLE_LOC = "unresolveable_bundle.zip"; - void setup() { + CelixBundleContextBundlesTests() { properties = properties_create(); properties_set(properties, "LOGHELPER_ENABLE_STDOUT_FALLBACK", "true"); properties_set(properties, "org.osgi.framework.storage.clean", "onFirstInit"); @@ -53,35 +52,42 @@ TEST_GROUP(CelixBundleContextBundlesTests) { fw = celix_frameworkFactory_createFramework(properties); ctx = framework_getContext(fw); } - - void teardown() { + + ~CelixBundleContextBundlesTests() override { celix_frameworkFactory_destroyFramework(fw); } + + CelixBundleContextBundlesTests(CelixBundleContextBundlesTests&&) = delete; + CelixBundleContextBundlesTests(const CelixBundleContextBundlesTests&) = delete; + CelixBundleContextBundlesTests& operator=(CelixBundleContextBundlesTests&&) = delete; + CelixBundleContextBundlesTests& operator=(const CelixBundleContextBundlesTests&) = delete; }; -TEST(CelixBundleContextBundlesTests, installBundlesTest) { + + +TEST_F(CelixBundleContextBundlesTests, installBundlesTest) { long bndId = celix_bundleContext_installBundle(ctx, "non-existing.zip", true); - CHECK(bndId < 0); + ASSERT_TRUE(bndId < 0); bndId = celix_bundleContext_installBundle(ctx, TEST_BND1_LOC, true); - CHECK(bndId >= 0); + ASSERT_TRUE(bndId >= 0); bndId = celix_bundleContext_installBundle(ctx, TEST_BND4_LOC, true); //not loaded in subdir - CHECK(bndId < 0); + ASSERT_TRUE(bndId < 0); setenv(CELIX_BUNDLES_PATH_NAME, "subdir", true); bndId = celix_bundleContext_installBundle(ctx, TEST_BND4_LOC, true); //subdir now part of CELIX_BUNDLES_PATH - CHECK(bndId >= 0); + ASSERT_TRUE(bndId >= 0); } -TEST(CelixBundleContextBundlesTests, useBundlesTest) { +TEST_F(CelixBundleContextBundlesTests, useBundlesTest) { int count = 0; auto use = [](void *handle, const bundle_t *bnd) { int *c = (int*)handle; *c += 1; long id = celix_bundle_getId(bnd); - CHECK(id >= 0); + ASSERT_TRUE(id >= 0); }; celix_bundleContext_useBundles(ctx, &count, use); @@ -89,193 +95,193 @@ TEST(CelixBundleContextBundlesTests, useBundlesTest) { count = 0; celix_bundleContext_installBundle(ctx, TEST_BND1_LOC, true); celix_bundleContext_useBundles(ctx, &count, use); - CHECK_EQUAL(1, count); + ASSERT_EQ(1, count); }; -TEST(CelixBundleContextBundlesTests, installAndUninstallBundlesTest) { +TEST_F(CelixBundleContextBundlesTests, installAndUninstallBundlesTest) { //install bundles long bndId1 = celix_bundleContext_installBundle(ctx, TEST_BND1_LOC, true); long bndId2 = celix_bundleContext_installBundle(ctx, TEST_BND2_LOC, false); long bndId3 = celix_bundleContext_installBundle(ctx, TEST_BND3_LOC, true); - CHECK_TRUE(bndId1 >= 0L); - CHECK_TRUE(bndId2 >= 0L); - CHECK_TRUE(bndId3 >= 0L); + ASSERT_TRUE(bndId1 >= 0L); + ASSERT_TRUE(bndId2 >= 0L); + ASSERT_TRUE(bndId3 >= 0L); - CHECK_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId1)); - CHECK_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId2)); - CHECK_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId3)); + ASSERT_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId1)); + ASSERT_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId2)); + ASSERT_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId3)); - CHECK_TRUE(celix_bundleContext_isBundleActive(ctx, bndId1)); - CHECK_FALSE(celix_bundleContext_isBundleActive(ctx, bndId2)); //not auto started - CHECK_TRUE(celix_bundleContext_isBundleActive(ctx, bndId3)); + ASSERT_TRUE(celix_bundleContext_isBundleActive(ctx, bndId1)); + ASSERT_FALSE(celix_bundleContext_isBundleActive(ctx, bndId2)); //not auto started + ASSERT_TRUE(celix_bundleContext_isBundleActive(ctx, bndId3)); //uninstall bundles - CHECK_TRUE(celix_bundleContext_uninstallBundle(ctx, bndId1)); - CHECK_TRUE(celix_bundleContext_uninstallBundle(ctx, bndId2)); - CHECK_TRUE(celix_bundleContext_uninstallBundle(ctx, bndId3)); + ASSERT_TRUE(celix_bundleContext_uninstallBundle(ctx, bndId1)); + ASSERT_TRUE(celix_bundleContext_uninstallBundle(ctx, bndId2)); + ASSERT_TRUE(celix_bundleContext_uninstallBundle(ctx, bndId3)); - CHECK_FALSE(celix_bundleContext_isBundleInstalled(ctx, bndId1)); - CHECK_FALSE(celix_bundleContext_isBundleInstalled(ctx, bndId2)); - CHECK_FALSE(celix_bundleContext_isBundleInstalled(ctx, bndId3)); + ASSERT_FALSE(celix_bundleContext_isBundleInstalled(ctx, bndId1)); + ASSERT_FALSE(celix_bundleContext_isBundleInstalled(ctx, bndId2)); + ASSERT_FALSE(celix_bundleContext_isBundleInstalled(ctx, bndId3)); - CHECK_FALSE(celix_bundleContext_isBundleActive(ctx, bndId1)); //not uninstall -> not active - CHECK_FALSE(celix_bundleContext_isBundleActive(ctx, bndId2)); - CHECK_FALSE(celix_bundleContext_isBundleActive(ctx, bndId3)); + ASSERT_FALSE(celix_bundleContext_isBundleActive(ctx, bndId1)); //not uninstall -> not active + ASSERT_FALSE(celix_bundleContext_isBundleActive(ctx, bndId2)); + ASSERT_FALSE(celix_bundleContext_isBundleActive(ctx, bndId3)); //reinstall bundles long bndId4 = celix_bundleContext_installBundle(ctx, TEST_BND1_LOC, true); long bndId5 = celix_bundleContext_installBundle(ctx, TEST_BND2_LOC, false); long bndId6 = celix_bundleContext_installBundle(ctx, TEST_BND3_LOC, true); - CHECK_TRUE(bndId4 >= 0L); - CHECK_FALSE(bndId1 == bndId4); //not new id - CHECK_TRUE(bndId5 >= 0L); - CHECK_FALSE(bndId2 == bndId5); //not new id - CHECK_TRUE(bndId6 >= 0L); - CHECK_FALSE(bndId5 == bndId6); //not new id + ASSERT_TRUE(bndId4 >= 0L); + ASSERT_FALSE(bndId1 == bndId4); //not new id + ASSERT_TRUE(bndId5 >= 0L); + ASSERT_FALSE(bndId2 == bndId5); //not new id + ASSERT_TRUE(bndId6 >= 0L); + ASSERT_FALSE(bndId5 == bndId6); //not new id } -TEST(CelixBundleContextBundlesTests, startBundleWithException) { +TEST_F(CelixBundleContextBundlesTests, startBundleWithException) { long bndId = celix_bundleContext_installBundle(ctx, TEST_BND_WITH_EXCEPTION_LOC, true); - CHECK(bndId > 0); //bundle is installed, but not started + ASSERT_TRUE(bndId > 0); //bundle is installed, but not started bool called = celix_framework_useBundle(fw, false, bndId, nullptr, [](void */*handle*/, const celix_bundle_t *bnd) { auto state = celix_bundle_getState(bnd); - CHECK_EQUAL(state, OSGI_FRAMEWORK_BUNDLE_RESOLVED); + ASSERT_EQ(state, OSGI_FRAMEWORK_BUNDLE_RESOLVED); }); - CHECK_TRUE(called); + ASSERT_TRUE(called); } -TEST(CelixBundleContextBundlesTests, startUnresolveableBundle) { +TEST_F(CelixBundleContextBundlesTests, startUnresolveableBundle) { long bndId = celix_bundleContext_installBundle(ctx, TEST_BND_UNRESOLVEABLE_LOC, true); - CHECK(bndId > 0); //bundle is installed, but not resolved + ASSERT_TRUE(bndId > 0); //bundle is installed, but not resolved bool called = celix_framework_useBundle(fw, false, bndId, nullptr, [](void *, const celix_bundle_t *bnd) { auto state = celix_bundle_getState(bnd); - CHECK_EQUAL(OSGI_FRAMEWORK_BUNDLE_INSTALLED, state); + ASSERT_EQ(OSGI_FRAMEWORK_BUNDLE_INSTALLED, state); }); - CHECK_TRUE(called); + ASSERT_TRUE(called); celix_bundleContext_startBundle(ctx, bndId); called = celix_framework_useBundle(fw, false, bndId, nullptr, [](void *, const celix_bundle_t *bnd) { auto state = celix_bundle_getState(bnd); - CHECK_EQUAL(OSGI_FRAMEWORK_BUNDLE_INSTALLED, state); + ASSERT_EQ(OSGI_FRAMEWORK_BUNDLE_INSTALLED, state); }); - CHECK_TRUE(called); + ASSERT_TRUE(called); } -TEST(CelixBundleContextBundlesTests, useBundleTest) { +TEST_F(CelixBundleContextBundlesTests, useBundleTest) { int count = 0; bool called = celix_bundleContext_useBundle(ctx, 0, &count, [](void *handle, const bundle_t *bnd) { int *c = (int*)handle; *c += 1; long id = celix_bundle_getId(bnd); - CHECK_EQUAL(0, id); + ASSERT_EQ(0, id); }); - CHECK_TRUE(called); - CHECK_EQUAL(1, count); + ASSERT_TRUE(called); + ASSERT_EQ(1, count); }; -TEST(CelixBundleContextBundlesTests, StopStartTest) { +TEST_F(CelixBundleContextBundlesTests, StopStartTest) { long bndId1 = celix_bundleContext_installBundle(ctx, TEST_BND1_LOC, true); long bndId2 = celix_bundleContext_installBundle(ctx, TEST_BND2_LOC, true); long bndId3 = celix_bundleContext_installBundle(ctx, TEST_BND3_LOC, true); - CHECK_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId1)); - CHECK_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId2)); - CHECK_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId3)); - CHECK_FALSE(celix_bundleContext_isBundleInstalled(ctx, 600 /*non existing*/)); + ASSERT_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId1)); + ASSERT_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId2)); + ASSERT_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId3)); + ASSERT_FALSE(celix_bundleContext_isBundleInstalled(ctx, 600 /*non existing*/)); celix_array_list_t *ids = celix_bundleContext_listBundles(ctx); size_t size = arrayList_size(ids); - CHECK_EQUAL(3, size); + ASSERT_EQ(3, size); int count = 0; celix_bundleContext_useBundles(ctx, &count, [](void *handle, const celix_bundle_t *bnd) { auto *c = (int*)handle; - CHECK_EQUAL(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); + ASSERT_EQ(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); *c += 1; }); - CHECK_EQUAL(3, count); + ASSERT_EQ(3, count); for (size_t i = 0; i < size; ++i) { bool stopped = celix_bundleContext_stopBundle(ctx, celix_arrayList_getLong(ids, (int)i)); - CHECK_TRUE(stopped); + ASSERT_TRUE(stopped); } bool stopped = celix_bundleContext_stopBundle(ctx, 42 /*non existing*/); - CHECK_FALSE(stopped); + ASSERT_FALSE(stopped); bool started = celix_bundleContext_startBundle(ctx, 42 /*non existing*/); - CHECK_FALSE(started); + ASSERT_FALSE(started); for (size_t i = 0; i < size; ++i) { - bool started = celix_bundleContext_startBundle(ctx, celix_arrayList_getLong(ids, (int)i)); - CHECK_TRUE(started); + started = celix_bundleContext_startBundle(ctx, celix_arrayList_getLong(ids, (int)i)); + ASSERT_TRUE(started); } count = 0; celix_bundleContext_useBundles(ctx, &count, [](void *handle, const celix_bundle_t *bnd) { auto *c = (int*)handle; - CHECK_EQUAL(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); + ASSERT_EQ(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); *c += 1; }); - CHECK_EQUAL(3, count); + ASSERT_EQ(3, count); celix_arrayList_destroy(ids); } -TEST(CelixBundleContextBundlesTests, DoubleStopTest) { +TEST_F(CelixBundleContextBundlesTests, DoubleStopTest) { long bndId = celix_bundleContext_installBundle(ctx, TEST_BND1_LOC, true); - CHECK_TRUE(bndId > 0); - CHECK_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId)); + ASSERT_TRUE(bndId > 0); + ASSERT_TRUE(celix_bundleContext_isBundleInstalled(ctx, bndId)); bool called = celix_framework_useBundle(fw, false, bndId, nullptr, [](void *, const celix_bundle_t *bnd) { - CHECK_EQUAL(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); + ASSERT_EQ(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); }); - CHECK_TRUE(called); + ASSERT_TRUE(called); //first celix_bundleContext_stopBundle(ctx, bndId); called = celix_framework_useBundle(fw, false, bndId, nullptr, [](void *, const celix_bundle_t *bnd) { - CHECK_EQUAL(OSGI_FRAMEWORK_BUNDLE_RESOLVED, celix_bundle_getState(bnd)); + ASSERT_EQ(OSGI_FRAMEWORK_BUNDLE_RESOLVED, celix_bundle_getState(bnd)); }); - CHECK_TRUE(called); + ASSERT_TRUE(called); //second celix_bundleContext_stopBundle(ctx, bndId); called = celix_framework_useBundle(fw, false, bndId, nullptr, [](void *, const celix_bundle_t *bnd) { - CHECK_EQUAL(OSGI_FRAMEWORK_BUNDLE_RESOLVED, celix_bundle_getState(bnd)); + ASSERT_EQ(OSGI_FRAMEWORK_BUNDLE_RESOLVED, celix_bundle_getState(bnd)); }); - CHECK_TRUE(called); + ASSERT_TRUE(called); //first celix_bundleContext_startBundle(ctx, bndId); called = celix_framework_useBundle(fw, false, bndId, nullptr, [](void *, const celix_bundle_t *bnd) { - CHECK_EQUAL(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); + ASSERT_EQ(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); }); - CHECK_TRUE(called); + ASSERT_TRUE(called); //second celix_bundleContext_startBundle(ctx, bndId); called = celix_framework_useBundle(fw, false, bndId, nullptr, [](void *, const celix_bundle_t *bnd) { - CHECK_EQUAL(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); + ASSERT_EQ(OSGI_FRAMEWORK_BUNDLE_ACTIVE, celix_bundle_getState(bnd)); }); - CHECK_TRUE(called); + ASSERT_TRUE(called); } -TEST(CelixBundleContextBundlesTests, trackBundlesTest) { +TEST_F(CelixBundleContextBundlesTests, trackBundlesTest) { struct data { int count{0}; std::mutex mutex{}; @@ -285,7 +291,7 @@ TEST(CelixBundleContextBundlesTests, trackBundlesTest) { auto started = [](void *handle, const bundle_t *bnd) { struct data *d = static_cast<struct data*>(handle); - CHECK(bnd != nullptr); + ASSERT_TRUE(bnd != nullptr); d->mutex.lock(); d->count += 1; d->cond.notify_all(); @@ -293,7 +299,7 @@ TEST(CelixBundleContextBundlesTests, trackBundlesTest) { }; auto stopped = [](void *handle, const bundle_t *bnd) { struct data *d = static_cast<struct data*>(handle); - CHECK(bnd != nullptr); + ASSERT_TRUE(bnd != nullptr); d->mutex.lock(); d->count -= 1; d->cond.notify_all(); @@ -301,28 +307,28 @@ TEST(CelixBundleContextBundlesTests, trackBundlesTest) { }; long trackerId = celix_bundleContext_trackBundles(ctx, static_cast<void*>(&data), started, stopped); - CHECK_EQUAL(0, data.count); //note default framework bundle is not tracked + ASSERT_EQ(0, data.count); //note default framework bundle is not tracked long bundleId1 = celix_bundleContext_installBundle(ctx, TEST_BND1_LOC, true); - CHECK(bundleId1 >= 0); + ASSERT_TRUE(bundleId1 >= 0); { std::unique_lock<std::mutex> lock{data.mutex}; data.cond.wait_for(lock, std::chrono::milliseconds(100), [&]{return data.count == 2;}); } - CHECK_EQUAL(1, data.count); + ASSERT_EQ(1, data.count); long bundleId2 = celix_bundleContext_installBundle(ctx, TEST_BND2_LOC, true); - CHECK(bundleId2 >= 0); + ASSERT_TRUE(bundleId2 >= 0); { std::unique_lock<std::mutex> lock{data.mutex}; data.cond.wait_for(lock, std::chrono::milliseconds(100), [&]{return data.count == 3;}); } - CHECK_EQUAL(2, data.count); + ASSERT_EQ(2, data.count); celix_bundleContext_uninstallBundle(ctx, bundleId2); { @@ -330,31 +336,31 @@ TEST(CelixBundleContextBundlesTests, trackBundlesTest) { data.cond.wait_for(lock, std::chrono::milliseconds(100), [&]{return data.count == 2;}); } - CHECK_EQUAL(2, data.count); + ASSERT_EQ(2, data.count); long bundleId3 = celix_bundleContext_installBundle(ctx, TEST_BND3_LOC, true); - CHECK(bundleId3 >= 0); + ASSERT_TRUE(bundleId3 >= 0); { std::unique_lock<std::mutex> lock{data.mutex}; data.cond.wait_for(lock, std::chrono::milliseconds(100), [&]{return data.count == 3;}); } - CHECK_EQUAL(3, data.count); + ASSERT_EQ(3, data.count); bundleId2 = celix_bundleContext_installBundle(ctx, TEST_BND2_LOC, true); - CHECK(bundleId3 >= 0); + ASSERT_TRUE(bundleId3 >= 0); { std::unique_lock<std::mutex> lock{data.mutex}; data.cond.wait_for(lock, std::chrono::milliseconds(100), [&]{return data.count == 4;}); } - CHECK_EQUAL(4, data.count); + ASSERT_EQ(4, data.count); celix_bundleContext_stopTracker(ctx, trackerId); }; -TEST(CelixBundleContextBundlesTests, useBundlesConcurrentTest) { +TEST_F(CelixBundleContextBundlesTests, useBundlesConcurrentTest) { struct data { std::mutex mutex{}; @@ -365,7 +371,7 @@ TEST(CelixBundleContextBundlesTests, useBundlesConcurrentTest) { struct data data{}; auto use = [](void *handle, const bundle_t *bnd) { - CHECK(bnd != nullptr); + ASSERT_TRUE(bnd != nullptr); struct data *d = static_cast<struct data*>(handle); @@ -380,7 +386,7 @@ TEST(CelixBundleContextBundlesTests, useBundlesConcurrentTest) { auto call = [&] { bool called = celix_bundleContext_useBundle(ctx, bndId, &data, use); - CHECK(called); + ASSERT_TRUE(called); }; std::thread useThread{call}; @@ -413,7 +419,7 @@ TEST(CelixBundleContextBundlesTests, useBundlesConcurrentTest) { std::cout << "uninstall thread joined" << std::endl; }; -TEST(CelixBundleContextBundlesTests, bundleInfoTests) { +TEST_F(CelixBundleContextBundlesTests, bundleInfoTests) { struct data { int provideCount{0}; int requestedCount{0}; @@ -431,18 +437,18 @@ TEST(CelixBundleContextBundlesTests, bundleInfoTests) { }; bool called = celix_bundleContext_useBundle(ctx, 0, &data, updateCountFp); - CHECK_TRUE(called); - CHECK_EQUAL(0, data.provideCount); - CHECK_EQUAL(0, data.requestedCount); + ASSERT_TRUE(called); + ASSERT_EQ(0, data.provideCount); + ASSERT_EQ(0, data.requestedCount); long svcId = celix_bundleContext_registerService(ctx, (void*)0x42, "NopService", NULL); long trackerId = celix_bundleContext_trackServices(ctx, "AService", NULL, NULL, NULL); called = celix_bundleContext_useBundle(ctx, 0, &data, updateCountFp); - CHECK_TRUE(called); - CHECK_EQUAL(1, data.provideCount); - CHECK_EQUAL(1, data.requestedCount); + ASSERT_TRUE(called); + ASSERT_EQ(1, data.provideCount); + ASSERT_EQ(1, data.requestedCount); celix_bundleContext_unregisterService(ctx, svcId); celix_bundleContext_stopTracker(ctx, trackerId); diff --git a/libs/framework/test/bundle_context_services_test.cpp b/libs/framework/gtest/src/bundle_context_services_test.cpp similarity index 77% rename from libs/framework/test/bundle_context_services_test.cpp rename to libs/framework/gtest/src/bundle_context_services_test.cpp index 262cae2..fa650a4 100644 --- a/libs/framework/test/bundle_context_services_test.cpp +++ b/libs/framework/gtest/src/bundle_context_services_test.cpp @@ -17,14 +17,15 @@ * under the License. */ +#include <gtest/gtest.h> + + #include <thread> #include <chrono> #include <iostream> #include <mutex> #include <condition_variable> -#include <zconf.h> #include <string.h> -#include <map> #include <future> #include "celix_api.h" @@ -32,18 +33,13 @@ #include "celix_service_factory.h" #include "service_tracker_private.h" +class CelixBundleContextServicesTests : public ::testing::Test { +public: + celix_framework_t* fw = nullptr; + celix_bundle_context_t *ctx = nullptr; + celix_properties_t *properties = nullptr; -#include <CppUTest/TestHarness.h> -#include <CppUTest/CommandLineTestRunner.h> - - - -TEST_GROUP(CelixBundleContextServicesTests) { - framework_t* fw = nullptr; - bundle_context_t *ctx = nullptr; - properties_t *properties = nullptr; - - void setup() { + CelixBundleContextServicesTests() { properties = properties_create(); properties_set(properties, "LOGHELPER_ENABLE_STDOUT_FALLBACK", "true"); properties_set(properties, "org.osgi.framework.storage.clean", "onFirstInit"); @@ -53,12 +49,17 @@ TEST_GROUP(CelixBundleContextServicesTests) { ctx = framework_getContext(fw); } - void teardown() { + ~CelixBundleContextServicesTests() override { celix_frameworkFactory_destroyFramework(fw); } + + CelixBundleContextServicesTests(CelixBundleContextServicesTests&&) = delete; + CelixBundleContextServicesTests(const CelixBundleContextServicesTests&) = delete; + CelixBundleContextServicesTests& operator=(CelixBundleContextServicesTests&&) = delete; + CelixBundleContextServicesTests& operator=(const CelixBundleContextServicesTests&) = delete; }; -TEST(CelixBundleContextServicesTests, registerService) { +TEST_F(CelixBundleContextServicesTests, registerService) { struct calc { int (*calc)(int); }; @@ -70,18 +71,18 @@ TEST(CelixBundleContextServicesTests, registerService) { }; long svcId = celix_bundleContext_registerService(ctx, &svc, calcName, nullptr); - CHECK(svcId >= 0); + ASSERT_TRUE(svcId >= 0); celix_bundleContext_unregisterService(ctx, svcId); }; -TEST(CelixBundleContextServicesTests, incorrectUnregisterCalls) { +TEST_F(CelixBundleContextServicesTests, incorrectUnregisterCalls) { celix_bundleContext_unregisterService(ctx, 1); celix_bundleContext_unregisterService(ctx, 2); celix_bundleContext_unregisterService(ctx, -1); celix_bundleContext_unregisterService(ctx, -2); }; -TEST(CelixBundleContextServicesTests, registerMultipleAndUseServices) { +TEST_F(CelixBundleContextServicesTests, registerMultipleAndUseServices) { struct calc { int (*calc)(int); }; @@ -93,16 +94,16 @@ TEST(CelixBundleContextServicesTests, registerMultipleAndUseServices) { }; long svcId1 = celix_bundleContext_registerService(ctx, &svc, calcName, nullptr); - CHECK(svcId1 >= 0); + ASSERT_TRUE(svcId1 >= 0); long svcId2 = celix_bundleContext_registerService(ctx, &svc, calcName, nullptr); - CHECK(svcId2 >= 0); + ASSERT_TRUE(svcId2 >= 0); long svcId3 = celix_bundleContext_registerService(ctx, &svc, calcName, nullptr); - CHECK(svcId3 >= 0); + ASSERT_TRUE(svcId3 >= 0); auto use = [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); int *total = static_cast<int*>(handle); struct calc *calc = static_cast<struct calc*>(svc); int tmp = calc->calc(1); @@ -111,24 +112,24 @@ TEST(CelixBundleContextServicesTests, registerMultipleAndUseServices) { int total = 0; celix_bundleContext_useServices(ctx, "calc", &total, use); - CHECK_EQUAL(42 * 3, total); + ASSERT_EQ(42 * 3, total); celix_bundleContext_unregisterService(ctx, svcId3); total = 0; celix_bundleContext_useServices(ctx, "calc", &total, use); - CHECK_EQUAL(42 * 2, total); + ASSERT_EQ(42 * 2, total); total = 0; bool called = celix_bundleContext_useService(ctx, "calc", &total, use); - CHECK(called); - CHECK_EQUAL(42, total); + ASSERT_TRUE(called); + ASSERT_EQ(42, total); celix_bundleContext_unregisterService(ctx, svcId1); celix_bundleContext_unregisterService(ctx, svcId2); }; -TEST(CelixBundleContextServicesTests, registerAndUseService) { +TEST_F(CelixBundleContextServicesTests, registerAndUseService) { struct calc { int (*calc)(int); }; @@ -140,18 +141,18 @@ TEST(CelixBundleContextServicesTests, registerAndUseService) { }; long svcId = celix_bundleContext_registerService(ctx, &svc, calcName, nullptr); - CHECK(svcId >= 0); + ASSERT_TRUE(svcId >= 0); int result = 0; bool called = celix_bundleContext_useServiceWithId(ctx, svcId, calcName, &result, [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); int *result = static_cast<int*>(handle); struct calc *calc = static_cast<struct calc*>(svc); int tmp = calc->calc(2); *result = tmp; }); - CHECK(called); - CHECK_EQUAL(84, result); + ASSERT_TRUE(called); + ASSERT_EQ(84, result); result = 0; long nonExistingSvcId = 101; @@ -161,13 +162,13 @@ TEST(CelixBundleContextServicesTests, registerAndUseService) { int tmp = calc->calc(2); *result = tmp; }); - CHECK(!called); - CHECK_EQUAL(0, result); //e.g. not called + ASSERT_TRUE(!called); + ASSERT_EQ(0, result); //e.g. not called celix_bundleContext_unregisterService(ctx, svcId); }; -TEST(CelixBundleContextServicesTests, registerAndUseServiceWithTimeout) { +TEST_F(CelixBundleContextServicesTests, registerAndUseServiceWithTimeout) { struct calc { int (*calc)(int); }; @@ -182,7 +183,7 @@ TEST(CelixBundleContextServicesTests, registerAndUseServiceWithTimeout) { opts.filter.serviceName = "calc"; bool called = celix_bundleContext_useServiceWithOptions(ctx, &opts); - CHECK(!called); //service not avail. + ASSERT_TRUE(!called); //service not avail. std::future<bool> result{std::async([&]{ opts.waitTimeoutInSeconds = 5.0; @@ -192,10 +193,10 @@ TEST(CelixBundleContextServicesTests, registerAndUseServiceWithTimeout) { return calledAsync; })}; long svcId = celix_bundleContext_registerService(ctx, &svc, calcName, nullptr); - CHECK(svcId >= 0); + ASSERT_TRUE(svcId >= 0); - CHECK(result.get()); //should return true after waiting for the registered service. + ASSERT_TRUE(result.get()); //should return true after waiting for the registered service. celix_bundleContext_unregisterService(ctx, svcId); @@ -209,12 +210,12 @@ TEST(CelixBundleContextServicesTests, registerAndUseServiceWithTimeout) { printf("returned from use service with timeout. calc called %s.\n", calledAsync ? "true" : "false"); return calledAsync; })}; - CHECK(!result2.get()); + ASSERT_TRUE(!result2.get()); celix_bundleContext_unregisterService(ctx, svcId); } -TEST(CelixBundleContextServicesTests, registerAndUseServiceWithCorrectVersion) { +TEST_F(CelixBundleContextServicesTests, registerAndUseServiceWithCorrectVersion) { struct calc { int (*calc)(int); }; @@ -235,7 +236,7 @@ TEST(CelixBundleContextServicesTests, registerAndUseServiceWithCorrectVersion) { reg_opts.svc = &svc; bool called = celix_bundleContext_useServiceWithOptions(ctx, &use_opts); - CHECK(!called); //service not avail. + ASSERT_TRUE(!called); //service not avail. std::future<bool> result{std::async([&]{ use_opts.waitTimeoutInSeconds = 5.0; @@ -245,14 +246,14 @@ TEST(CelixBundleContextServicesTests, registerAndUseServiceWithCorrectVersion) { return calledAsync; })}; long svcId = celix_bundleContext_registerServiceWithOptions(ctx, ®_opts); - CHECK(svcId >= 0); + ASSERT_TRUE(svcId >= 0); - CHECK(result.get()); //should return true after waiting for the registered service. + ASSERT_TRUE(result.get()); //should return true after waiting for the registered service. celix_bundleContext_unregisterService(ctx, svcId); } -TEST(CelixBundleContextServicesTests, registerAndUseServiceWithIncorrectVersion) { +TEST_F(CelixBundleContextServicesTests, registerAndUseServiceWithIncorrectVersion) { struct calc { int (*calc)(int); }; @@ -273,7 +274,7 @@ TEST(CelixBundleContextServicesTests, registerAndUseServiceWithIncorrectVersion) reg_opts.svc = &svc; bool called = celix_bundleContext_useServiceWithOptions(ctx, &use_opts); - CHECK(!called); //service not avail. + ASSERT_TRUE(!called); //service not avail. std::future<bool> result{std::async([&]{ use_opts.waitTimeoutInSeconds = 1.0; @@ -283,13 +284,13 @@ TEST(CelixBundleContextServicesTests, registerAndUseServiceWithIncorrectVersion) return calledAsync; })}; long svcId = celix_bundleContext_registerServiceWithOptions(ctx, ®_opts); - CHECK(svcId >= 0); - CHECK(!result.get()); + ASSERT_TRUE(svcId >= 0); + ASSERT_TRUE(!result.get()); celix_bundleContext_unregisterService(ctx, svcId); } -TEST(CelixBundleContextServicesTests, registerAndUseWithForcedRaceCondition) { +TEST_F(CelixBundleContextServicesTests, registerAndUseWithForcedRaceCondition) { struct calc { int (*calc)(int); }; @@ -301,7 +302,7 @@ TEST(CelixBundleContextServicesTests, registerAndUseWithForcedRaceCondition) { }; long svcId = celix_bundleContext_registerService(ctx, &svc, calcName, nullptr); - CHECK(svcId >= 0); + ASSERT_TRUE(svcId >= 0); struct sync { std::mutex mutex{}; @@ -314,7 +315,7 @@ TEST(CelixBundleContextServicesTests, registerAndUseWithForcedRaceCondition) { struct sync callInfo{}; auto use = [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); struct sync *h = static_cast<struct sync*>(handle); @@ -333,8 +334,8 @@ TEST(CelixBundleContextServicesTests, registerAndUseWithForcedRaceCondition) { auto call = [&] { bool called = celix_bundleContext_useServiceWithId(ctx, svcId, calcName, &callInfo, use); - CHECK(called); - CHECK_EQUAL(84, callInfo.result); + ASSERT_TRUE(called); + ASSERT_EQ(84, callInfo.result); }; std::thread useThread{call}; @@ -369,71 +370,71 @@ TEST(CelixBundleContextServicesTests, registerAndUseWithForcedRaceCondition) { }; -TEST(CelixBundleContextServicesTests, servicesTrackerTest) { +TEST_F(CelixBundleContextServicesTests, servicesTrackerTest) { int count = 0; auto add = [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); int *c = static_cast<int*>(handle); *c += 1; }; auto remove = [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); int *c = static_cast<int*>(handle); *c -= 1; }; long trackerId = celix_bundleContext_trackServices(ctx, "calc", &count, add, remove); - CHECK(trackerId > 0); - CHECK_EQUAL(0, count); + ASSERT_TRUE(trackerId > 0); + ASSERT_EQ(0, count); long svcId1 = celix_bundleContext_registerService(ctx, (void*)0x100, "calc", nullptr); - CHECK(svcId1 > 0); - CHECK_EQUAL(1, count); + ASSERT_TRUE(svcId1 > 0); + ASSERT_EQ(1, count); long svcId2 = celix_bundleContext_registerService(ctx, (void*)0x200, "calc", nullptr); - CHECK(svcId2 > 0); - CHECK_EQUAL(2, count); + ASSERT_TRUE(svcId2 > 0); + ASSERT_EQ(2, count); celix_bundleContext_unregisterService(ctx, svcId1); - CHECK_EQUAL(1, count); + ASSERT_EQ(1, count); celix_bundleContext_stopTracker(ctx, trackerId); celix_bundleContext_unregisterService(ctx, svcId2); } -TEST(CelixBundleContextServicesTests, servicesTrackerInvalidArgsTest) { +TEST_F(CelixBundleContextServicesTests, servicesTrackerInvalidArgsTest) { long trackerId = celix_bundleContext_trackServices(nullptr, nullptr, nullptr, nullptr, nullptr); - CHECK(trackerId < 0); //required ctx and service name missing + ASSERT_TRUE(trackerId < 0); //required ctx and service name missing trackerId = celix_bundleContext_trackServices(ctx, nullptr, nullptr, nullptr, nullptr); - CHECK(trackerId < 0); //required service name missing + ASSERT_TRUE(trackerId < 0); //required service name missing trackerId = celix_bundleContext_trackServices(ctx, "calc", nullptr, nullptr, nullptr); - CHECK(trackerId >= 0); //valid + ASSERT_TRUE(trackerId >= 0); //valid celix_bundleContext_stopTracker(ctx, trackerId); //opts trackerId = celix_bundleContext_trackServicesWithOptions(nullptr, nullptr); - CHECK(trackerId < 0); //required ctx and opts missing + ASSERT_TRUE(trackerId < 0); //required ctx and opts missing trackerId = celix_bundleContext_trackServicesWithOptions(ctx, nullptr); - CHECK(trackerId < 0); //required opts missing + ASSERT_TRUE(trackerId < 0); //required opts missing celix_service_tracking_options_t opts{}; trackerId = celix_bundleContext_trackServicesWithOptions(ctx, &opts); - CHECK(trackerId < 0); //required opts->serviceName missing + ASSERT_TRUE(trackerId < 0); //required opts->serviceName missing opts.filter.serviceName = "calc"; trackerId = celix_bundleContext_trackServicesWithOptions(ctx, &opts); - CHECK(trackerId >= 0); //valid + ASSERT_TRUE(trackerId >= 0); //valid celix_bundleContext_stopTracker(ctx, trackerId); } -TEST(CelixBundleContextServicesTests, servicesTrackerTestWithAlreadyRegisteredServices) { +TEST_F(CelixBundleContextServicesTests, servicesTrackerTestWithAlreadyRegisteredServices) { int count = 0; auto add = [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); int *c = static_cast<int*>(handle); *c += 1; }; auto remove = [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); int *c = static_cast<int*>(handle); *c -= 1; }; @@ -444,37 +445,37 @@ TEST(CelixBundleContextServicesTests, servicesTrackerTestWithAlreadyRegisteredSe long trackerId = celix_bundleContext_trackServices(ctx, "calc", &count, add, remove); - CHECK(trackerId > 0); - CHECK_EQUAL(2, count); + ASSERT_TRUE(trackerId > 0); + ASSERT_EQ(2, count); long svcId3 = celix_bundleContext_registerService(ctx, (void*)0x100, "calc", nullptr); - CHECK(svcId1 > 0); - CHECK_EQUAL(3, count); + ASSERT_TRUE(svcId1 > 0); + ASSERT_EQ(3, count); long svcId4 = celix_bundleContext_registerService(ctx, (void*)0x200, "calc", nullptr); - CHECK(svcId2 > 0); - CHECK_EQUAL(4, count); + ASSERT_TRUE(svcId2 > 0); + ASSERT_EQ(4, count); celix_bundleContext_unregisterService(ctx, svcId1); celix_bundleContext_unregisterService(ctx, svcId3); - CHECK_EQUAL(2, count); + ASSERT_EQ(2, count); celix_bundleContext_stopTracker(ctx, trackerId); celix_bundleContext_unregisterService(ctx, svcId2); celix_bundleContext_unregisterService(ctx, svcId4); } -TEST(CelixBundleContextServicesTests, servicesTrackerTestWithProperties) { +TEST_F(CelixBundleContextServicesTests, servicesTrackerTestWithProperties) { int count = 0; auto add = [](void *handle, void *svc, const properties_t *props) { - CHECK(svc != nullptr); - STRCMP_EQUAL("C", celix_properties_get(props, CELIX_FRAMEWORK_SERVICE_LANGUAGE, nullptr)); + ASSERT_TRUE(svc != nullptr); + ASSERT_STRCASEEQ("C", celix_properties_get(props, CELIX_FRAMEWORK_SERVICE_LANGUAGE, nullptr)); int *c = static_cast<int*>(handle); *c += 1; }; auto remove = [](void *handle, void *svc, const properties_t *props) { - CHECK(svc != nullptr); - STRCMP_EQUAL("C", celix_properties_get(props, CELIX_FRAMEWORK_SERVICE_LANGUAGE, nullptr)); + ASSERT_TRUE(svc != nullptr); + ASSERT_STRCASEEQ("C", celix_properties_get(props, CELIX_FRAMEWORK_SERVICE_LANGUAGE, nullptr)); int *c = static_cast<int*>(handle); *c -= 1; }; @@ -487,33 +488,33 @@ TEST(CelixBundleContextServicesTests, servicesTrackerTestWithProperties) { opts.addWithProperties = add; opts.removeWithProperties = remove; long trackerId = celix_bundleContext_trackServicesWithOptions(ctx, &opts); - CHECK(trackerId > 0); - CHECK_EQUAL(1, count); + ASSERT_TRUE(trackerId > 0); + ASSERT_EQ(1, count); long svcId2 = celix_bundleContext_registerService(ctx, (void*)0x200, "calc", nullptr); - CHECK(svcId1 > 0); - CHECK_EQUAL(2, count); + ASSERT_TRUE(svcId1 > 0); + ASSERT_EQ(2, count); celix_bundleContext_unregisterService(ctx, svcId1); celix_bundleContext_unregisterService(ctx, svcId2); - CHECK_EQUAL(0, count); + ASSERT_EQ(0, count); celix_bundleContext_stopTracker(ctx, trackerId); } -TEST(CelixBundleContextServicesTests, servicesTrackerTestWithOwner) { +TEST_F(CelixBundleContextServicesTests, servicesTrackerTestWithOwner) { int count = 0; auto add = [](void *handle, void *svc, const properties_t *props, const bundle_t *svcOwner) { - CHECK(svc != nullptr); - STRCMP_EQUAL("C", celix_properties_get(props, CELIX_FRAMEWORK_SERVICE_LANGUAGE, nullptr)); - CHECK(celix_bundle_getId(svcOwner) >= 0); + ASSERT_TRUE(svc != nullptr); + ASSERT_STRCASEEQ("C", celix_properties_get(props, CELIX_FRAMEWORK_SERVICE_LANGUAGE, nullptr)); + ASSERT_TRUE(celix_bundle_getId(svcOwner) >= 0); int *c = static_cast<int*>(handle); *c += 1; }; auto remove = [](void *handle, void *svc, const properties_t *props, const bundle_t *svcOwner) { - CHECK(svc != nullptr); - STRCMP_EQUAL("C", celix_properties_get(props, CELIX_FRAMEWORK_SERVICE_LANGUAGE, nullptr)); - CHECK(celix_bundle_getId(svcOwner) >= 0); + ASSERT_TRUE(svc != nullptr); + ASSERT_STRCASEEQ("C", celix_properties_get(props, CELIX_FRAMEWORK_SERVICE_LANGUAGE, nullptr)); + ASSERT_TRUE(celix_bundle_getId(svcOwner) >= 0); int *c = static_cast<int*>(handle); *c -= 1; }; @@ -526,21 +527,21 @@ TEST(CelixBundleContextServicesTests, servicesTrackerTestWithOwner) { opts.addWithOwner = add; opts.removeWithOwner = remove; long trackerId = celix_bundleContext_trackServicesWithOptions(ctx, &opts); - CHECK(trackerId > 0); - CHECK_EQUAL(1, count); + ASSERT_TRUE(trackerId > 0); + ASSERT_EQ(1, count); long svcId2 = celix_bundleContext_registerService(ctx, (void*)0x200, "calc", nullptr); - CHECK(svcId1 > 0); - CHECK_EQUAL(2, count); + ASSERT_TRUE(svcId1 > 0); + ASSERT_EQ(2, count); celix_bundleContext_unregisterService(ctx, svcId1); celix_bundleContext_unregisterService(ctx, svcId2); - CHECK_EQUAL(0, count); + ASSERT_EQ(0, count); celix_bundleContext_stopTracker(ctx, trackerId); } -TEST(CelixBundleContextServicesTests, serviceTrackerWithRaceConditionTest) { +TEST_F(CelixBundleContextServicesTests, serviceTrackerWithRaceConditionTest) { struct calc { int (*calc)(int); }; @@ -563,7 +564,7 @@ TEST(CelixBundleContextServicesTests, serviceTrackerWithRaceConditionTest) { struct data data{}; auto add = [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); struct data *d = static_cast<struct data*>(handle); @@ -582,7 +583,7 @@ TEST(CelixBundleContextServicesTests, serviceTrackerWithRaceConditionTest) { }; auto remove = [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); struct data *d = static_cast<struct data*>(handle); @@ -636,14 +637,14 @@ TEST(CelixBundleContextServicesTests, serviceTrackerWithRaceConditionTest) { unregisterThread.join(); std::cout << "threads joined" << std::endl; - CHECK_EQUAL(84, data.result); - CHECK(data.inAddCall); - CHECK(data.inRemoveCall); + ASSERT_EQ(84, data.result); + ASSERT_TRUE(data.inAddCall); + ASSERT_TRUE(data.inRemoveCall); celix_bundleContext_stopTracker(ctx, trackerId); }; -TEST(CelixBundleContextServicesTests, servicesTrackerSetTest) { +TEST_F(CelixBundleContextServicesTests, servicesTrackerSetTest) { int count = 0; void *svc1 = (void*)0x100; //no ranking @@ -652,18 +653,18 @@ TEST(CelixBundleContextServicesTests, servicesTrackerSetTest) { void *svc4 = (void*)0x400; //5 ranking auto set = [](void *handle, void *svc) { - CHECK(svc != nullptr); + ASSERT_TRUE(svc != nullptr); static int callCount = 0; callCount += 1; if (callCount == 1) { //first time svc1 should be set (oldest service with equal ranking - CHECK_EQUAL(0x100, (long)svc); + ASSERT_EQ(0x100, (long)svc); } else if (callCount == 2) { - CHECK_EQUAL(0x300, (long)svc); + ASSERT_EQ(0x300, (long)svc); //second time svc3 should be set (highest ranking) } else if (callCount == 3) { //third time svc4 should be set (highest ranking - CHECK_EQUAL(0x400, (long)svc); + ASSERT_EQ(0x400, (long)svc); } int *c = static_cast<int*>(handle); @@ -679,7 +680,7 @@ TEST(CelixBundleContextServicesTests, servicesTrackerSetTest) { opts.filter.serviceName = "NA"; opts.set = set; long trackerId = celix_bundleContext_trackServicesWithOptions(ctx, &opts); - CHECK(trackerId > 0); + ASSERT_TRUE(trackerId > 0); //register svc3 should lead to second set call properties_t *props3 = celix_properties_create(); @@ -699,13 +700,13 @@ TEST(CelixBundleContextServicesTests, servicesTrackerSetTest) { celix_bundleContext_unregisterService(ctx, svcId2); celix_bundleContext_unregisterService(ctx, svcId4); - CHECK_EQUAL(3, count); //check if the set is called the expected times + ASSERT_EQ(3, count); //check if the set is called the expected times } //TODO test tracker with options for properties & service owners -TEST(CelixBundleContextServicesTests, serviceFactoryTest) { +TEST_F(CelixBundleContextServicesTests, serviceFactoryTest) { struct calc { int (*calc)(int); }; @@ -728,7 +729,7 @@ TEST(CelixBundleContextServicesTests, serviceFactoryTest) { }; long facId = celix_bundleContext_registerServiceFactory(ctx, &fac, name, nullptr); - CHECK_TRUE(facId >= 0); + ASSERT_TRUE(facId >= 0); int result = -1; @@ -737,30 +738,30 @@ TEST(CelixBundleContextServicesTests, serviceFactoryTest) { auto *calc = (struct calc*)svc; *r = calc->calc(2); }); - CHECK_TRUE(called); - CHECK_EQUAL(84, result); - CHECK_EQUAL(2, count); //expecting getService & unGetService to be called during the useService call. + ASSERT_TRUE(called); + ASSERT_EQ(84, result); + ASSERT_EQ(2, count); //expecting getService & unGetService to be called during the useService call. celix_bundleContext_unregisterService(ctx, facId); } -TEST(CelixBundleContextServicesTests, findServicesTest) { +TEST_F(CelixBundleContextServicesTests, findServicesTest) { long svcId1 = celix_bundleContext_registerService(ctx, (void*)0x100, "example", nullptr); long svcId2 = celix_bundleContext_registerService(ctx, (void*)0x100, "example", nullptr); long foundId = celix_bundleContext_findService(ctx, "non existing service name"); - CHECK_EQUAL(-1L, foundId); + ASSERT_EQ(-1L, foundId); foundId = celix_bundleContext_findService(ctx, "example"); - CHECK_EQUAL(foundId, svcId1); //oldest should have highest ranking + ASSERT_EQ(foundId, svcId1); //oldest should have highest ranking array_list_t *list = celix_bundleContext_findServices(ctx, "non existintg service name"); - CHECK_EQUAL(0, celix_arrayList_size(list)); + ASSERT_EQ(0, celix_arrayList_size(list)); arrayList_destroy(list); list = celix_bundleContext_findServices(ctx, "example"); - CHECK_EQUAL(2, celix_arrayList_size(list)); + ASSERT_EQ(2, celix_arrayList_size(list)); arrayList_destroy(list); celix_bundleContext_unregisterService(ctx, svcId1); @@ -768,50 +769,50 @@ TEST(CelixBundleContextServicesTests, findServicesTest) { celix_service_filter_options_t opts{}; opts.serviceName = "example"; foundId = celix_bundleContext_findServiceWithOptions(ctx, &opts); - CHECK_EQUAL(foundId, svcId2); //only one left + ASSERT_EQ(foundId, svcId2); //only one left celix_bundleContext_unregisterService(ctx, svcId2); } -TEST(CelixBundleContextServicesTests, trackServiceTrackerTest) { +TEST_F(CelixBundleContextServicesTests, trackServiceTrackerTest) { int count = 0; auto add = [](void *handle, const celix_service_tracker_info_t *info) { - STRCMP_EQUAL("example", info->serviceName); - STRCMP_EQUAL(CELIX_FRAMEWORK_SERVICE_C_LANGUAGE, info->serviceLanguage); + ASSERT_STRCASEEQ("example", info->serviceName); + ASSERT_STRCASEEQ(CELIX_FRAMEWORK_SERVICE_C_LANGUAGE, info->serviceLanguage); auto *c = static_cast<int*>(handle); *c += 1; }; auto remove = [](void *handle, const celix_service_tracker_info_t *info) { - STRCMP_EQUAL("example", info->serviceName); - STRCMP_EQUAL(CELIX_FRAMEWORK_SERVICE_C_LANGUAGE, info->serviceLanguage); + ASSERT_STRCASEEQ("example", info->serviceName); + ASSERT_STRCASEEQ(CELIX_FRAMEWORK_SERVICE_C_LANGUAGE, info->serviceLanguage); auto *c = static_cast<int*>(handle); *c -= 1; }; long trackerId = celix_bundleContext_trackServiceTrackers(ctx, "example", &count, add, remove); - CHECK_TRUE(trackerId >= 0); - CHECK_EQUAL(0, count); + ASSERT_TRUE(trackerId >= 0); + ASSERT_EQ(0, count); long tracker2 = celix_bundleContext_trackService(ctx, "example", nullptr, nullptr); - CHECK_TRUE(tracker2 >= 0); - CHECK_EQUAL(1, count); + ASSERT_TRUE(tracker2 >= 0); + ASSERT_EQ(1, count); long tracker3 = celix_bundleContext_trackServices(ctx, "example", nullptr, nullptr, nullptr); - CHECK_TRUE(tracker3 >= 0); - CHECK_EQUAL(2, count); + ASSERT_TRUE(tracker3 >= 0); + ASSERT_EQ(2, count); long tracker4 = celix_bundleContext_trackServices(ctx, "no-match", nullptr, nullptr, nullptr); - CHECK_TRUE(tracker4 >= 0); - CHECK_EQUAL(2, count); + ASSERT_TRUE(tracker4 >= 0); + ASSERT_EQ(2, count); celix_bundleContext_stopTracker(ctx, tracker2); celix_serviceTracker_syncForContext(ctx); //service tracker shutdown on separate track -> need sync - CHECK_EQUAL(1, count); + ASSERT_EQ(1, count); celix_bundleContext_stopTracker(ctx, tracker3); celix_serviceTracker_syncForContext(ctx); //service tracker shutdown on separate track -> need sync - CHECK_EQUAL(0, count); + ASSERT_EQ(0, count); celix_bundleContext_stopTracker(ctx, trackerId); celix_bundleContext_stopTracker(ctx, tracker4); diff --git a/libs/framework/test/dm_tests.cpp b/libs/framework/gtest/src/dm_tests.cpp similarity index 67% rename from libs/framework/test/dm_tests.cpp rename to libs/framework/gtest/src/dm_tests.cpp index 81eb8c0..18ed4e1 100644 --- a/libs/framework/test/dm_tests.cpp +++ b/libs/framework/gtest/src/dm_tests.cpp @@ -17,18 +17,17 @@ * under the License. */ -#include "celix_api.h" - -#include <CppUTest/TestHarness.h> -#include <CppUTest/CommandLineTestRunner.h> +#include <gtest/gtest.h> +#include "celix_api.h" -TEST_GROUP(DepenencyManagerTests) { - framework_t* fw = nullptr; - bundle_context_t *ctx = nullptr; - properties_t *properties = nullptr; +class DepenencyManagerTests : public ::testing::Test { +public: + celix_framework_t* fw = nullptr; + celix_bundle_context_t *ctx = nullptr; + celix_properties_t *properties = nullptr; - void setup() { + DepenencyManagerTests() { properties = properties_create(); properties_set(properties, "LOGHELPER_ENABLE_STDOUT_FALLBACK", "true"); properties_set(properties, "org.osgi.framework.storage.clean", "onFirstInit"); @@ -38,27 +37,32 @@ TEST_GROUP(DepenencyManagerTests) { ctx = framework_getContext(fw); } - void teardown() { + ~DepenencyManagerTests() override { celix_frameworkFactory_destroyFramework(fw); } + + DepenencyManagerTests(DepenencyManagerTests&&) = delete; + DepenencyManagerTests(const DepenencyManagerTests&) = delete; + DepenencyManagerTests& operator=(DepenencyManagerTests&&) = delete; + DepenencyManagerTests& operator=(const DepenencyManagerTests&) = delete; }; -TEST(DepenencyManagerTests, DmCreateComponent) { +TEST_F(DepenencyManagerTests, DmCreateComponent) { auto *mng = celix_bundleContext_getDependencyManager(ctx); auto *cmp = celix_dmComponent_create(ctx, "test1"); celix_dependencyManager_add(mng, cmp); - CHECK_EQUAL(1, celix_dependencyManager_nrOfComponents(mng)); - CHECK_TRUE(celix_dependencyManager_allComponentsActive(mng)); + ASSERT_EQ(1, celix_dependencyManager_nrOfComponents(mng)); + ASSERT_TRUE(celix_dependencyManager_allComponentsActive(mng)); cmp = celix_dmComponent_create(ctx, "test2"); celix_dependencyManager_add(mng, cmp); - CHECK_EQUAL(2, celix_dependencyManager_nrOfComponents(mng)); - CHECK_TRUE(celix_dependencyManager_allComponentsActive(mng)); + ASSERT_EQ(2, celix_dependencyManager_nrOfComponents(mng)); + ASSERT_TRUE(celix_dependencyManager_allComponentsActive(mng)); } -TEST(DepenencyManagerTests, TestCheckActive) { +TEST_F(DepenencyManagerTests, TestCheckActive) { auto *mng = celix_bundleContext_getDependencyManager(ctx); auto *cmp = celix_dmComponent_create(ctx, "test1"); @@ -69,5 +73,5 @@ TEST(DepenencyManagerTests, TestCheckActive) { celix_dependencyManager_add(mng, cmp); - CHECK_FALSE(celix_dependencyManager_areComponentsActive(mng)); + ASSERT_FALSE(celix_dependencyManager_areComponentsActive(mng)); } diff --git a/libs/framework/test/multiple_frameworks_test.cpp b/libs/framework/gtest/src/multiple_frameworks_test.cpp similarity index 84% rename from libs/framework/test/multiple_frameworks_test.cpp rename to libs/framework/gtest/src/multiple_frameworks_test.cpp index 0797980..910f2b9 100644 --- a/libs/framework/test/multiple_frameworks_test.cpp +++ b/libs/framework/gtest/src/multiple_frameworks_test.cpp @@ -17,8 +17,7 @@ * under the License. */ -#include <CppUTest/TestHarness.h> -#include <CppUTest/CommandLineTestRunner.h> +#include <gtest/gtest.h> extern "C" { @@ -44,26 +43,26 @@ extern "C" { //server rc = celixLauncher_launch("framework1.properties", &serverFramework); - CHECK_EQUAL(CELIX_SUCCESS, rc); + ASSERT_EQ(CELIX_SUCCESS, rc); bundle = nullptr; rc = framework_getFrameworkBundle(serverFramework, &bundle); - CHECK_EQUAL(CELIX_SUCCESS, rc); + ASSERT_EQ(CELIX_SUCCESS, rc); rc = bundle_getContext(bundle, &serverContext); - CHECK_EQUAL(CELIX_SUCCESS, rc); + ASSERT_EQ(CELIX_SUCCESS, rc); //client rc = celixLauncher_launch("framework2.properties", &clientFramework); - CHECK_EQUAL(CELIX_SUCCESS, rc); + ASSERT_EQ(CELIX_SUCCESS, rc); bundle = nullptr; rc = framework_getFrameworkBundle(clientFramework, &bundle); - CHECK_EQUAL(CELIX_SUCCESS, rc); + ASSERT_EQ(CELIX_SUCCESS, rc); rc = bundle_getContext(bundle, &clientContext); - CHECK_EQUAL(CELIX_SUCCESS, rc); + ASSERT_EQ(CELIX_SUCCESS, rc); } static void teardownFm(void) { @@ -88,17 +87,17 @@ extern "C" { } - -TEST_GROUP(CelixMultipleFrameworks) { - void setup() { +class CelixMultipleFrameworks : public ::testing::Test { +public: + CelixMultipleFrameworks() { setupFm(); } - void teardown() { + ~CelixMultipleFrameworks() override { teardownFm(); } }; -TEST(CelixMultipleFrameworks, testFrameworks) { +TEST_F(CelixMultipleFrameworks, testFrameworks) { testFrameworks(); } diff --git a/libs/framework/test/nop_activator.c b/libs/framework/gtest/src/nop_activator.c similarity index 100% rename from libs/framework/test/nop_activator.c rename to libs/framework/gtest/src/nop_activator.c diff --git a/libs/framework/test/run_tests.cpp b/libs/framework/gtest/src/run_tests.cpp similarity index 79% rename from libs/framework/test/run_tests.cpp rename to libs/framework/gtest/src/run_tests.cpp index efaee82..339f725 100644 --- a/libs/framework/test/run_tests.cpp +++ b/libs/framework/gtest/src/run_tests.cpp @@ -17,10 +17,10 @@ * under the License. */ -#include <CppUTest/TestHarness.h> -#include "CppUTest/CommandLineTestRunner.h" +#include <gtest/gtest.h> -int main(int argc, char** argv) { - MemoryLeakWarningPlugin::turnOffNewDeleteOverloads(); - return RUN_ALL_TESTS(argc, argv); +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + int rc = RUN_ALL_TESTS(); + return rc; } \ No newline at end of file diff --git a/libs/framework/test/single_framework_test.cpp b/libs/framework/gtest/src/single_framework_test.cpp similarity index 77% rename from libs/framework/test/single_framework_test.cpp rename to libs/framework/gtest/src/single_framework_test.cpp index b13342b..f2015dd 100644 --- a/libs/framework/test/single_framework_test.cpp +++ b/libs/framework/gtest/src/single_framework_test.cpp @@ -17,8 +17,7 @@ * under the License. */ -#include <CppUTest/TestHarness.h> -#include <CppUTest/CommandLineTestRunner.h> +#include <gtest/gtest.h> extern "C" { @@ -32,21 +31,21 @@ extern "C" { #include "celix_framework_factory.h" - static framework_pt framework = nullptr; - static bundle_context_pt context = nullptr; + static celix_framework_t *framework = nullptr; + static celix_bundle_context_t *context = nullptr; static void setupFm(void) { int rc = 0; rc = celixLauncher_launch("config.properties", &framework); - CHECK_EQUAL(CELIX_SUCCESS, rc); + ASSERT_EQ(CELIX_SUCCESS, rc); bundle_pt bundle = nullptr; rc = framework_getFrameworkBundle(framework, &bundle); - CHECK_EQUAL(CELIX_SUCCESS, rc); + ASSERT_EQ(CELIX_SUCCESS, rc); rc = bundle_getContext(bundle, &context); - CHECK_EQUAL(CELIX_SUCCESS, rc); + ASSERT_EQ(CELIX_SUCCESS, rc); } static void teardownFm(void) { @@ -64,38 +63,40 @@ extern "C" { printf("testing startup/shutdown single framework\n"); } - //TODO test register / use service - } -TEST_GROUP(CelixFramework) { - void setup() { +class CelixFramework : public ::testing::Test { +public: + CelixFramework() { setupFm(); } - void teardown() { + ~CelixFramework() override { teardownFm(); } }; -TEST(CelixFramework, testFramework) { +TEST_F(CelixFramework, testFramework) { testFramework(); } -TEST_GROUP(FrameworkFactory) { +class FrameworkFactory : public ::testing::Test { +public: + FrameworkFactory() = default; + ~FrameworkFactory() override = default; }; -TEST(FrameworkFactory, testFactoryCreate) { +TEST_F(FrameworkFactory, testFactoryCreate) { framework_t* fw = celix_frameworkFactory_createFramework(nullptr); - CHECK(fw != nullptr); + ASSERT_TRUE(fw != nullptr); celix_frameworkFactory_destroyFramework(fw); } -TEST(FrameworkFactory, testFactoryCreateAndToManyStartAndStops) { +TEST_F(FrameworkFactory, testFactoryCreateAndToManyStartAndStops) { framework_t* fw = celix_frameworkFactory_createFramework(nullptr); - CHECK(fw != nullptr); + ASSERT_TRUE(fw != nullptr); framework_start(fw); //should already be done by frameworkFactory_newFramework(); framework_start(fw); @@ -112,9 +113,9 @@ TEST(FrameworkFactory, testFactoryCreateAndToManyStartAndStops) { framework_destroy(fw); //note stop, wait and then destroy is needed .. combine ? } -TEST(FrameworkFactory, restartFramework) { +TEST_F(FrameworkFactory, restartFramework) { framework_t* fw = celix_frameworkFactory_createFramework(nullptr); - CHECK(fw != nullptr); + ASSERT_TRUE(fw != nullptr); /* TODO fix mem leak in restarting framework diff --git a/libs/framework/test/subdir/CMakeLists.txt b/libs/framework/gtest/subdir/CMakeLists.txt similarity index 100% rename from libs/framework/test/subdir/CMakeLists.txt rename to libs/framework/gtest/subdir/CMakeLists.txt diff --git a/libs/framework/test/subdir/src/foo.c b/libs/framework/gtest/subdir/src/foo.c similarity index 100% rename from libs/framework/test/subdir/src/foo.c rename to libs/framework/gtest/subdir/src/foo.c
