You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2020/03/09 12:57:27 UTC

[celix] branch feature/#91-rsa_double_free created (now bd08d2d)

This is an automated email from the ASF dual-hosted git repository.

pnoltes pushed a change to branch feature/#91-rsa_double_free
in repository https://gitbox.apache.org/repos/asf/celix.git.


      at bd08d2d  #91 Refactors rsa tests from cpputest to googletest, split up tests so that they can be run separately and fixes an issue with double frees in libdfi.

This branch includes the following new commits:

     new bd08d2d  #91 Refactors rsa tests from cpputest to googletest, split up tests so that they can be run separately and fixes an issue with double frees in libdfi.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[celix] 01/01: #91 Refactors rsa tests from cpputest to googletest, split up tests so that they can be run separately and fixes an issue with double frees in libdfi.

Posted by pn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

pnoltes pushed a commit to branch feature/#91-rsa_double_free
in repository https://gitbox.apache.org/repos/asf/celix.git

commit bd08d2d82980bb9536200e604ed373405c439f03
Author: Pepijn Noltes <pe...@gmail.com>
AuthorDate: Mon Mar 9 13:57:15 2020 +0100

    #91 Refactors rsa tests from cpputest to googletest, split up tests so that they can be run separately and fixes an issue with double frees in libdfi.
---
 .../remote_service_admin_dfi/CMakeLists.txt        |   2 +-
 .../{test => gtest}/CMakeLists.txt                 |  10 +-
 .../{test => gtest}/client.properties.in           |   0
 .../{test => gtest}/config.properties.in           |   0
 .../{test => gtest}/server.properties.in           |   0
 .../remote_service_admin_dfi/gtest/src/main.cc     |  26 +++
 .../gtest/src/rsa_client_server_tests.cc           | 190 +++++++++++++++++++++
 .../src/rsa_tests.cpp => gtest/src/rsa_tests.cc}   |  74 ++++----
 .../{test => gtest}/src/tst_activator.c            |   0
 .../{test => gtest}/src/tst_service.h              |   0
 .../test/src/rsa_client_server_tests.cpp           | 129 --------------
 .../test/src/run_tests.cpp                         |  26 ---
 libs/dfi/src/dyn_type.c                            |   3 +-
 13 files changed, 262 insertions(+), 198 deletions(-)

diff --git a/bundles/remote_services/remote_service_admin_dfi/CMakeLists.txt b/bundles/remote_services/remote_service_admin_dfi/CMakeLists.txt
index 3aa1936..d15ca97 100644
--- a/bundles/remote_services/remote_service_admin_dfi/CMakeLists.txt
+++ b/bundles/remote_services/remote_service_admin_dfi/CMakeLists.txt
@@ -48,7 +48,7 @@ if (RSA_REMOTE_SERVICE_ADMIN_DFI)
     )
 
     if (ENABLE_TESTING)
-        add_subdirectory(test)
+        add_subdirectory(gtest)
     endif()
 
 
diff --git a/bundles/remote_services/remote_service_admin_dfi/test/CMakeLists.txt b/bundles/remote_services/remote_service_admin_dfi/gtest/CMakeLists.txt
similarity index 94%
rename from bundles/remote_services/remote_service_admin_dfi/test/CMakeLists.txt
rename to bundles/remote_services/remote_service_admin_dfi/gtest/CMakeLists.txt
index 6355e95..793d167 100644
--- a/bundles/remote_services/remote_service_admin_dfi/test/CMakeLists.txt
+++ b/bundles/remote_services/remote_service_admin_dfi/gtest/CMakeLists.txt
@@ -36,15 +36,17 @@ target_link_libraries(rsa_dfi_tst_bundle PRIVATE ${CPPUTEST_LIBRARY} calculator_
 target_include_directories(rsa_dfi_tst_bundle PRIVATE src)
 
 add_executable(test_rsa_dfi
-    src/run_tests.cpp
-    src/rsa_tests.cpp
-    src/rsa_client_server_tests.cpp
+    src/main.cc
+    src/rsa_tests.cc
+    src/rsa_client_server_tests.cc
 )
 target_include_directories(test_rsa_dfi PRIVATE src)
-target_link_libraries(test_rsa_dfi PRIVATE CURL::libcurl ${CPPUTEST_LIBRARY}
+target_link_libraries(test_rsa_dfi PRIVATE
+        CURL::libcurl
         Celix::framework
         Celix::rsa_common
         calculator_api
+        GTest::GTest
 )
 
 get_property(rsa_bundle_file TARGET rsa_dfi PROPERTY BUNDLE_FILE)
diff --git a/bundles/remote_services/remote_service_admin_dfi/test/client.properties.in b/bundles/remote_services/remote_service_admin_dfi/gtest/client.properties.in
similarity index 100%
rename from bundles/remote_services/remote_service_admin_dfi/test/client.properties.in
rename to bundles/remote_services/remote_service_admin_dfi/gtest/client.properties.in
diff --git a/bundles/remote_services/remote_service_admin_dfi/test/config.properties.in b/bundles/remote_services/remote_service_admin_dfi/gtest/config.properties.in
similarity index 100%
rename from bundles/remote_services/remote_service_admin_dfi/test/config.properties.in
rename to bundles/remote_services/remote_service_admin_dfi/gtest/config.properties.in
diff --git a/bundles/remote_services/remote_service_admin_dfi/test/server.properties.in b/bundles/remote_services/remote_service_admin_dfi/gtest/server.properties.in
similarity index 100%
rename from bundles/remote_services/remote_service_admin_dfi/test/server.properties.in
rename to bundles/remote_services/remote_service_admin_dfi/gtest/server.properties.in
diff --git a/bundles/remote_services/remote_service_admin_dfi/gtest/src/main.cc b/bundles/remote_services/remote_service_admin_dfi/gtest/src/main.cc
new file mode 100644
index 0000000..09731c4
--- /dev/null
+++ b/bundles/remote_services/remote_service_admin_dfi/gtest/src/main.cc
@@ -0,0 +1,26 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements.  See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership.  The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+
+#include <gtest/gtest.h>
+
+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/bundles/remote_services/remote_service_admin_dfi/gtest/src/rsa_client_server_tests.cc b/bundles/remote_services/remote_service_admin_dfi/gtest/src/rsa_client_server_tests.cc
new file mode 100644
index 0000000..9c42951
--- /dev/null
+++ b/bundles/remote_services/remote_service_admin_dfi/gtest/src/rsa_client_server_tests.cc
@@ -0,0 +1,190 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "gtest/gtest.h"
+#include <remote_constants.h>
+#include <tst_service.h>
+#include "celix_api.h"
+
+extern "C" {
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#include "celix_launcher.h"
+#include "framework.h"
+#include "remote_service_admin.h"
+
+    static celix_framework_t *serverFramework = NULL;
+    static celix_bundle_context_t *serverContext = NULL;
+
+    static celix_framework_t *clientFramework = NULL;
+    static celix_bundle_context_t *clientContext = NULL;
+
+    static void setupFm(void) {
+        //server
+        celix_properties_t *serverProps = celix_properties_load("server.properties");
+        ASSERT_TRUE(serverProps != NULL);
+        serverFramework = celix_frameworkFactory_createFramework(serverProps);
+        ASSERT_TRUE(serverFramework != NULL);
+        serverContext = celix_framework_getFrameworkContext(serverFramework);
+        ASSERT_TRUE(serverContext != NULL);
+
+        //client
+        celix_properties_t *clientProperties = celix_properties_load("client.properties");
+        ASSERT_TRUE(clientProperties != NULL);
+        clientFramework = celix_frameworkFactory_createFramework(clientProperties);
+        ASSERT_TRUE(clientFramework != NULL);
+        clientContext = celix_framework_getFrameworkContext(clientFramework);
+        ASSERT_TRUE(clientContext != NULL);
+    }
+
+    static void teardownFm(void) {
+        celix_frameworkFactory_destroyFramework(serverFramework);
+        celix_frameworkFactory_destroyFramework(clientFramework);
+    }
+
+    static void testComplex(void *handle __attribute__((unused)), void *svc) {
+        auto *tst = static_cast<tst_service_t *>(svc);
+
+        bool discovered = tst->isRemoteExampleDiscovered(tst->handle);
+        ASSERT_TRUE(discovered);
+
+        bool ok = tst->testRemoteComplex(tst->handle);
+        ASSERT_TRUE(ok);
+    };
+
+    static void testAction(void *handle __attribute__((unused)), void *svc) {
+        auto *tst = static_cast<tst_service_t *>(svc);
+
+        bool discovered = tst->isRemoteExampleDiscovered(tst->handle);
+        ASSERT_TRUE(discovered);
+
+        bool ok = tst->testRemoteAction(tst->handle);
+        ASSERT_TRUE(ok);
+    };
+
+    static void testNumbers(void *handle __attribute__((unused)), void *svc) {
+        auto *tst = static_cast<tst_service_t *>(svc);
+
+        bool discovered = tst->isRemoteExampleDiscovered(tst->handle);
+        ASSERT_TRUE(discovered);
+
+        bool ok = tst->testRemoteNumbers(tst->handle);
+        ASSERT_TRUE(ok);
+    };
+
+    static void testString(void *handle __attribute__((unused)), void *svc) {
+        auto *tst = static_cast<tst_service_t *>(svc);
+
+        bool discovered = tst->isRemoteExampleDiscovered(tst->handle);
+        ASSERT_TRUE(discovered);
+
+        bool ok = tst->testRemoteString(tst->handle);
+        ASSERT_TRUE(ok);
+    };
+
+    static void testEnum(void *handle __attribute__((unused)), void *svc) {
+        auto *tst = static_cast<tst_service_t *>(svc);
+
+        bool discovered = tst->isRemoteExampleDiscovered(tst->handle);
+        ASSERT_TRUE(discovered);
+
+        bool ok = tst->testRemoteEnum(tst->handle);
+        ASSERT_TRUE(ok);
+    };
+
+    static void testConstString(void *handle __attribute__((unused)), void *svc) {
+        auto *tst = static_cast<tst_service_t *>(svc);
+
+        bool discovered = tst->isRemoteExampleDiscovered(tst->handle);
+        ASSERT_TRUE(discovered);
+
+        bool ok = tst->testRemoteConstString(tst->handle);
+        ASSERT_TRUE(ok);
+    };
+
+    static void testCalculator(void *handle __attribute__((unused)), void *svc) {
+        auto *tst = static_cast<tst_service_t *>(svc);
+
+        bool ok;
+
+        bool discovered = tst->isCalcDiscovered(tst->handle);
+        ASSERT_TRUE(discovered);
+
+        ok = tst->testCalculator(tst->handle);
+        ASSERT_TRUE(ok);
+    };
+
+}
+
+template<typename F>
+static void test(F&& f) {
+    celix_service_use_options_t opts{};
+    opts.filter.serviceName = TST_SERVICE_NAME;
+    opts.use = f;
+    opts.filter.ignoreServiceLanguage = true;
+    opts.waitTimeoutInSeconds = 2;
+    bool called = celix_bundleContext_useServiceWithOptions(clientContext, &opts);
+    ASSERT_TRUE(called);
+}
+
+class RsaDfiClientServerTests : public ::testing::Test {
+public:
+    RsaDfiClientServerTests() {
+        setupFm();
+    }
+    ~RsaDfiClientServerTests() override {
+        teardownFm();
+    }
+
+};
+
+
+TEST_F(RsaDfiClientServerTests, TestRemoteCalculator) {
+    test(testCalculator);
+}
+
+TEST_F(RsaDfiClientServerTests, TestRemoteComplex) {
+    test(testComplex);
+}
+
+TEST_F(RsaDfiClientServerTests, TestRemoteNumbers) {
+    test(testNumbers);
+}
+
+TEST_F(RsaDfiClientServerTests, TestRemoteString) {
+    test(testString);
+}
+
+TEST_F(RsaDfiClientServerTests, TestRemoteConstString) {
+    test(testConstString);
+}
+
+TEST_F(RsaDfiClientServerTests, TestRemoteEnum) {
+    test(testEnum);
+}
+
+TEST_F(RsaDfiClientServerTests, TestRemoteAction) {
+    test(testAction);
+}
diff --git a/bundles/remote_services/remote_service_admin_dfi/test/src/rsa_tests.cpp b/bundles/remote_services/remote_service_admin_dfi/gtest/src/rsa_tests.cc
similarity index 82%
rename from bundles/remote_services/remote_service_admin_dfi/test/src/rsa_tests.cpp
rename to bundles/remote_services/remote_service_admin_dfi/gtest/src/rsa_tests.cc
index 334575a..b2fee66 100644
--- a/bundles/remote_services/remote_service_admin_dfi/test/src/rsa_tests.cpp
+++ b/bundles/remote_services/remote_service_admin_dfi/gtest/src/rsa_tests.cc
@@ -17,13 +17,12 @@
  * under the License.
  */
 
+#include "gtest/gtest.h"
+
 #include <remote_constants.h>
 #include "celix_api.h"
 #include "calculator_service.h"
 
-#include <CppUTest/TestHarness.h>
-#include <CppUTest/CommandLineTestRunner.h>
-
 extern "C" {
 
 #include "remote_service_admin.h"
@@ -38,15 +37,15 @@ extern "C" {
 
     static void setupFm(void) {
         celix_properties_t *fwProperties = celix_properties_load("config.properties");
-        CHECK_TRUE(fwProperties != NULL);
+        ASSERT_TRUE(fwProperties != NULL);
         framework = celix_frameworkFactory_createFramework(fwProperties);
-        CHECK_TRUE(framework != NULL);
+        ASSERT_TRUE(framework != NULL);
         context = celix_framework_getFrameworkContext(framework);
-        CHECK_TRUE(context != NULL);
+        ASSERT_TRUE(context != NULL);
 
 
         calcSvcId = celix_bundleContext_findService(context, CALCULATOR_SERVICE);
-        CHECK_TRUE(calcSvcId >= 0L);
+        ASSERT_TRUE(calcSvcId >= 0L);
     }
 
     static void teardownFm(void) {
@@ -59,12 +58,12 @@ extern "C" {
         celix_array_list_t *imported = celix_arrayList_create();
 
         int rc = rsa->getExportedServices(rsa->admin, &exported);
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
-        CHECK_EQUAL(0, celix_arrayList_size(exported));
+        ASSERT_EQ(CELIX_SUCCESS, rc);
+        ASSERT_EQ(0, celix_arrayList_size(exported));
 
         rc = rsa->getImportedEndpoints(rsa->admin, &imported);
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
-        CHECK_EQUAL(0, celix_arrayList_size(imported));
+        ASSERT_EQ(CELIX_SUCCESS, rc);
+        ASSERT_EQ(0, celix_arrayList_size(imported));
 
         celix_arrayList_destroy(imported);
         celix_arrayList_destroy(exported);
@@ -77,7 +76,7 @@ extern "C" {
         opts.filter.ignoreServiceLanguage = true;
         opts.waitTimeoutInSeconds = 0.25;
         bool called = celix_bundleContext_useServiceWithOptions(context, &opts);
-        CHECK_TRUE(called);
+        ASSERT_TRUE(called);
     }
 
     static void testExportServiceCallback(void *handle __attribute__((unused)), void *svc) {
@@ -88,12 +87,12 @@ extern "C" {
 
         celix_array_list_t *svcRegistration = NULL;
         int rc = rsa->exportService(rsa->admin, strSvcId, NULL, &svcRegistration);
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
+        ASSERT_EQ(CELIX_SUCCESS, rc);
 
-        CHECK_EQUAL(1, celix_arrayList_size(svcRegistration));
+        ASSERT_EQ(1, celix_arrayList_size(svcRegistration));
 
         rc = rsa->exportRegistration_close(rsa->admin,(export_registration_t *)(arrayList_get(svcRegistration,0)));
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
+        ASSERT_EQ(CELIX_SUCCESS, rc);
     }
 
 
@@ -104,7 +103,7 @@ extern "C" {
         opts.filter.ignoreServiceLanguage = true;
         opts.waitTimeoutInSeconds = 0.25;
         bool called = celix_bundleContext_useServiceWithOptions(context, &opts);
-        CHECK_TRUE(called);
+        ASSERT_TRUE(called);
     }
 
     static void testImportServiceCallback(void *handle __attribute__((unused)), void *svc) {
@@ -122,28 +121,28 @@ extern "C" {
         celix_properties_set(props, OSGI_FRAMEWORK_OBJECTCLASS, "org.apache.celix.Example");
 
         rc = endpointDescription_create(props, &endpoint);
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
+        ASSERT_EQ(CELIX_SUCCESS, rc);
 
         rc = rsa->importService(rsa->admin, endpoint, &reg);
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
-        CHECK(reg != NULL);
+        ASSERT_EQ(CELIX_SUCCESS, rc);
+        ASSERT_TRUE(reg != NULL);
 
         service_reference_pt ref = NULL;
         rc = bundleContext_getServiceReference(context, (char *)"org.apache.celix.Example", &ref);
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
-        CHECK(ref != NULL);
+        ASSERT_EQ(CELIX_SUCCESS, rc);
+        ASSERT_TRUE(ref != NULL);
 
         rc = bundleContext_ungetServiceReference(context, ref);
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
+        ASSERT_EQ(CELIX_SUCCESS, rc);
 
         rc = endpointDescription_destroy(endpoint);
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
+        ASSERT_EQ(CELIX_SUCCESS, rc);
 
         /* Cannot test. uses requesting bundles descriptor
         void *service = NULL;
         rc = bundleContext_getService(context, ref, &service);
-        CHECK_EQUAL(CELIX_SUCCESS, rc);
-        CHECK(service != NULL);
+        ASSERT_EQ(CELIX_SUCCESS, rc);
+        ASSERT_TRUE(service != NULL);
          */
     }
 
@@ -154,15 +153,15 @@ extern "C" {
         opts.filter.ignoreServiceLanguage = true;
         opts.waitTimeoutInSeconds = 0.25;
         bool called = celix_bundleContext_useServiceWithOptions(context, &opts);
-        CHECK_TRUE(called);
+        ASSERT_TRUE(called);
     }
 
     static void testBundles(void) {
         array_list_pt bundles = NULL;
 
         int rc = bundleContext_getBundles(context, &bundles);
-        CHECK_EQUAL(0, rc);
-        CHECK_EQUAL(3, arrayList_size(bundles)); //framework, rsa_dfi & calc
+        ASSERT_EQ(0, rc);
+        ASSERT_EQ(3, arrayList_size(bundles)); //framework, rsa_dfi & calc
 
         /*
         int size = arrayList_size(bundles);
@@ -183,29 +182,30 @@ extern "C" {
 
 }
 
-
-TEST_GROUP(RsaDfiTests) {
-    void setup() {
+class RsaDfiTests : public ::testing::Test {
+public:
+    RsaDfiTests() {
         setupFm();
     }
-
-    void teardown() {
+    ~RsaDfiTests() override {
         teardownFm();
     }
+
 };
 
-TEST(RsaDfiTests, InfoTest) {
+
+TEST_F(RsaDfiTests, InfoTest) {
     testServices();
 }
 
-TEST(RsaDfiTests, ExportService) {
+TEST_F(RsaDfiTests, ExportService) {
     testExportService();
 }
 
-TEST(RsaDfiTests, ImportService) {
+TEST_F(RsaDfiTests, ImportService) {
     testImportService();
 }
 
-TEST(RsaDfiTests, TestBundles) {
+TEST_F(RsaDfiTests, TestBundles) {
     testBundles();
 }
diff --git a/bundles/remote_services/remote_service_admin_dfi/test/src/tst_activator.c b/bundles/remote_services/remote_service_admin_dfi/gtest/src/tst_activator.c
similarity index 100%
rename from bundles/remote_services/remote_service_admin_dfi/test/src/tst_activator.c
rename to bundles/remote_services/remote_service_admin_dfi/gtest/src/tst_activator.c
diff --git a/bundles/remote_services/remote_service_admin_dfi/test/src/tst_service.h b/bundles/remote_services/remote_service_admin_dfi/gtest/src/tst_service.h
similarity index 100%
rename from bundles/remote_services/remote_service_admin_dfi/test/src/tst_service.h
rename to bundles/remote_services/remote_service_admin_dfi/gtest/src/tst_service.h
diff --git a/bundles/remote_services/remote_service_admin_dfi/test/src/rsa_client_server_tests.cpp b/bundles/remote_services/remote_service_admin_dfi/test/src/rsa_client_server_tests.cpp
deleted file mode 100644
index 74f7ef4..0000000
--- a/bundles/remote_services/remote_service_admin_dfi/test/src/rsa_client_server_tests.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-#include <remote_constants.h>
-#include <tst_service.h>
-#include "celix_api.h"
-
-#include <CppUTest/CommandLineTestRunner.h>
-#include <CppUTest/TestHarness.h>
-
-extern "C" {
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <unistd.h>
-
-#include "celix_launcher.h"
-#include "framework.h"
-#include "remote_service_admin.h"
-
-    static celix_framework_t *serverFramework = NULL;
-    static celix_bundle_context_t *serverContext = NULL;
-
-    static celix_framework_t *clientFramework = NULL;
-    static celix_bundle_context_t *clientContext = NULL;
-
-    static void setupFm(void) {
-        //server
-        celix_properties_t *serverProps = celix_properties_load("server.properties");
-        CHECK_TRUE(serverProps != NULL);
-        serverFramework = celix_frameworkFactory_createFramework(serverProps);
-        CHECK_TRUE(serverFramework != NULL);
-        serverContext = celix_framework_getFrameworkContext(serverFramework);
-        CHECK_TRUE(serverContext != NULL);
-
-        //client
-        celix_properties_t *clientProperties = celix_properties_load("client.properties");
-        CHECK_TRUE(clientProperties != NULL);
-        clientFramework = celix_frameworkFactory_createFramework(clientProperties);
-        CHECK_TRUE(clientFramework != NULL);
-        clientContext = celix_framework_getFrameworkContext(clientFramework);
-        CHECK_TRUE(clientContext != NULL);
-    }
-
-    static void teardownFm(void) {
-        celix_frameworkFactory_destroyFramework(serverFramework);
-        celix_frameworkFactory_destroyFramework(clientFramework);
-    }
-
-    static void testCallback(void *handle __attribute__((unused)), void *svc) {
-        auto *tst = static_cast<tst_service_t *>(svc);
-
-        bool ok;
-
-        bool discovered = tst->isCalcDiscovered(tst->handle);
-        CHECK_TRUE(discovered);
-
-        ok = tst->testCalculator(tst->handle);
-        CHECK_TRUE(ok);
-
-        discovered = tst->isRemoteExampleDiscovered(tst->handle);
-        CHECK_TRUE(discovered);
-
-        ok = tst->testRemoteComplex(tst->handle);
-        CHECK_TRUE(ok);
-
-        ok = tst->testRemoteAction(tst->handle);
-        CHECK_TRUE(ok);
-
-        ok = tst->testRemoteNumbers(tst->handle);
-        CHECK_TRUE(ok);
-
-        ok = tst->testRemoteString(tst->handle);
-        CHECK_TRUE(ok);
-
-        ok = tst->testRemoteConstString(tst->handle);
-        CHECK_TRUE(ok);
-
-        //TODO fix for apple dfi handling, see issue #91
-        //ok = tst->testRemoteEnum(tst->handle);
-        //CHECK_TRUE(ok);
-    };
-
-    static void test(void) {
-        celix_service_use_options_t opts{};
-        opts.filter.serviceName = TST_SERVICE_NAME;
-        opts.use = testCallback;
-        opts.filter.ignoreServiceLanguage = true;
-        opts.waitTimeoutInSeconds = 2;
-        bool called = celix_bundleContext_useServiceWithOptions(clientContext, &opts);
-        CHECK_TRUE(called);
-    }
-
-}
-
-
-TEST_GROUP(RsaDfiClientServerTests) {
-    void setup() {
-        setupFm();
-    }
-
-    void teardown() {
-        teardownFm();
-    }
-};
-
-TEST(RsaDfiClientServerTests, Test1) {
-    test();
-}
diff --git a/bundles/remote_services/remote_service_admin_dfi/test/src/run_tests.cpp b/bundles/remote_services/remote_service_admin_dfi/test/src/run_tests.cpp
deleted file mode 100644
index efaee82..0000000
--- a/bundles/remote_services/remote_service_admin_dfi/test/src/run_tests.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include <CppUTest/TestHarness.h>
-#include "CppUTest/CommandLineTestRunner.h"
-
-int main(int argc, char** argv) {
-    MemoryLeakWarningPlugin::turnOffNewDeleteOverloads();
-    return RUN_ALL_TESTS(argc, argv);
-}
\ No newline at end of file
diff --git a/libs/dfi/src/dyn_type.c b/libs/dfi/src/dyn_type.c
index 09cca39..4f93fb9 100644
--- a/libs/dfi/src/dyn_type.c
+++ b/libs/dfi/src/dyn_type.c
@@ -679,7 +679,8 @@ void dynType_deepFree(dyn_type *type, void *loc, bool alsoDeleteSelf) {
         char *text = NULL;
         switch (type->type) {
             case DYN_TYPE_REF:
-                dynType_deepFree(type->ref.ref, loc, alsoDeleteSelf);
+                //NOTE: do not recursively forward asloDeleteSelf, because this is already handled in this function)
+                dynType_deepFree(type->ref.ref, loc, false);
                 break;
             case DYN_TYPE_COMPLEX :
                 dynType_freeComplexType(type, loc);