Repository: celix
Updated Branches:
  refs/heads/feature/CELIX-237_rsa-ffi 87f3fabf7 -> da86474fb


CELIX-237: Updated celix launcher so that mutiple embedded framework can be 
started (e.g. testing client / server rsa)


Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/55e75be7
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/55e75be7
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/55e75be7

Branch: refs/heads/feature/CELIX-237_rsa-ffi
Commit: 55e75be72c24a62818fe3e2326c396725f1d7557
Parents: 87f3fab
Author: Pepijn Noltes <pepijnnol...@gmail.com>
Authored: Thu Aug 6 13:27:13 2015 +0200
Committer: Pepijn Noltes <pepijnnol...@gmail.com>
Committed: Thu Aug 6 13:27:13 2015 +0200

----------------------------------------------------------------------
 framework/private/src/framework.c               |  2 +
 launcher/private/src/launcher.c                 | 46 ++++++++++----------
 launcher/private/src/main.c                     | 24 ++++++----
 launcher/public/include/launcher.h              | 12 ++---
 .../remote_service_admin_dfi/tst/rsa_tests.cpp  | 24 ++++++----
 .../remote_service_admin_dfi/tst/run_tests.cpp  | 17 --------
 6 files changed, 62 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/55e75be7/framework/private/src/framework.c
----------------------------------------------------------------------
diff --git a/framework/private/src/framework.c 
b/framework/private/src/framework.c
index 3f49cdc..6e6e1ba 100644
--- a/framework/private/src/framework.c
+++ b/framework/private/src/framework.c
@@ -335,6 +335,8 @@ celix_status_t framework_destroy(framework_pt framework) {
        celixThreadMutex_destroy(&framework->mutex);
        celixThreadCondition_destroy(&framework->condition);
 
+    properties_destroy(framework->configurationMap);
+
        free(framework);
 
        return status;

http://git-wip-us.apache.org/repos/asf/celix/blob/55e75be7/launcher/private/src/launcher.c
----------------------------------------------------------------------
diff --git a/launcher/private/src/launcher.c b/launcher/private/src/launcher.c
index 9c021ed..432c709 100644
--- a/launcher/private/src/launcher.c
+++ b/launcher/private/src/launcher.c
@@ -32,23 +32,22 @@
 #include <libgen.h>
 #include <signal.h>
 
+#ifndef CELIX_NO_CURLINIT
 #include <curl/curl.h>
+#endif
 
 #include "framework.h"
 #include "linked_list_iterator.h"
 
-static struct framework * framework;
-static properties_pt config;
-
 #ifdef WITH_APR
 static apr_pool_t *memoryPool;
 #endif
 
-int celixLauncher_launch(const char *configFile) {
+int celixLauncher_launch(const char *configFile, framework_pt *framework) {
     int status = 0;
     FILE *config = fopen(configFile, "r");
     if (config != NULL) {
-        status = celixLauncher_launchWithStream(config);
+        status = celixLauncher_launchWithStream(config, framework);
     } else {
         fprintf(stderr, "Error: invalid or non-existing configuration file: 
'%s'.", configFile);
         perror("");
@@ -57,10 +56,10 @@ int celixLauncher_launch(const char *configFile) {
     return status;
 }
 
-int celixLauncher_launchWithStream(FILE *stream) {
+int celixLauncher_launchWithStream(FILE *stream, framework_pt *framework) {
     int status = 0;
 
-    config = properties_loadWithStream(stream);
+    properties_pt config = properties_loadWithStream(stream);
     fclose(stream);
     // Make sure we've read it and that nothing went wrong with the file 
access...
     if (config == NULL) {
@@ -69,14 +68,16 @@ int celixLauncher_launchWithStream(FILE *stream) {
         status = 1;
     }
 
-    // Set signal handler
+
 #ifdef WITH_APR
     apr_status_t rv;
     apr_status_t s;
 #endif
 
+#ifndef CELIX_NO_CURLINIT
     // Before doing anything else, let's setup Curl
     curl_global_init(CURL_GLOBAL_NOTHING);
+#endif
 
 #ifdef WITH_APR
        rv = apr_initialize();
@@ -93,19 +94,18 @@ int celixLauncher_launchWithStream(FILE *stream) {
 
     if (status == 0) {
         char *autoStart = properties_get(config, "cosgi.auto.start.1");
-        framework = NULL;
         celix_status_t status;
 #ifdef WITH_APR
-        status = framework_create(&framework, memoryPool, config);
+        status = framework_create(framework, memoryPool, config);
 #else
-        status = framework_create(&framework, config);
+        status = framework_create(framework, config);
 #endif
         bundle_pt fwBundle = NULL;
         if (status == CELIX_SUCCESS) {
-            status = fw_init(framework);
+            status = fw_init(*framework);
             if (status == CELIX_SUCCESS) {
                 // Start the system bundle
-                framework_getFrameworkBundle(framework, &fwBundle);
+                framework_getFrameworkBundle(*framework, &fwBundle);
                 bundle_start(fwBundle);
 
                 char delims[] = " ";
@@ -128,7 +128,7 @@ int celixLauncher_launchWithStream(FILE *stream) {
                 // First install all bundles
                 // Afterwards start them
                 arrayList_create(&installed);
-                framework_getFrameworkBundle(framework, &bundle);
+                framework_getFrameworkBundle(*framework, &bundle);
                 bundle_getContext(bundle, &context);
                 iter = linkedListIterator_create(bundles, 0);
                 while (linkedListIterator_hasNext(iter)) {
@@ -164,8 +164,11 @@ int celixLauncher_launchWithStream(FILE *stream) {
        apr_terminate();
 #endif
 
+
+#ifndef CELIX_NO_CURLINIT
         // Cleanup Curl
         curl_global_cleanup();
+#endif
 
         printf("Launcher: Exit\n");
     }
@@ -173,19 +176,16 @@ int celixLauncher_launchWithStream(FILE *stream) {
     return status;
 }
 
-void celixLauncher_waitForShutdown(void) {
+void celixLauncher_waitForShutdown(framework_pt framework) {
     framework_waitForStop(framework);
+}
+
+void celixLauncher_destroy(framework_pt framework) {
     framework_destroy(framework);
-    properties_destroy(config);
 }
 
-void celixLauncher_stop(void) {
+void celixLauncher_stop(framework_pt framework) {
     bundle_pt fwBundle = NULL;
     framework_getFrameworkBundle(framework, &fwBundle);
     bundle_stop(fwBundle);
-}
-
-struct framework *celixLauncher_getFramework(void) {
-    return framework;
-}
-
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/celix/blob/55e75be7/launcher/private/src/main.c
----------------------------------------------------------------------
diff --git a/launcher/private/src/main.c b/launcher/private/src/main.c
index 00b08bd..82530e1 100644
--- a/launcher/private/src/main.c
+++ b/launcher/private/src/main.c
@@ -31,13 +31,13 @@
 #include "launcher.h"
 
 static void show_usage(char* prog_name);
-static void shutdownCelix(int signal);
+static void shutdown_framework(int signal);
 
 #define DEFAULT_CONFIG_FILE "config.properties"
 
-int main(int argc, char *argv[]) {
+static framework_pt framework = NULL;
 
-    (void) signal(SIGINT, shutdownCelix);
+int main(int argc, char *argv[]) {
 
     // Perform some minimal command-line option parsing...
     char *opt = NULL;
@@ -59,15 +59,21 @@ int main(int argc, char *argv[]) {
         config_file = DEFAULT_CONFIG_FILE;
     }
 
-    celixLauncher_launch(config_file);
-    celixLauncher_waitForShutdown();
+
+    // Set signal handler
+    (void) signal(SIGINT, shutdown_framework);
+
+    celixLauncher_launch(config_file, &framework);
+    celixLauncher_waitForShutdown(framework);
+    celixLauncher_destroy(framework);
 }
 
 static void show_usage(char* prog_name) {
     printf("Usage:\n  %s [path/to/config.properties]\n\n", 
basename(prog_name));
 }
 
-static void shutdownCelix(int signal) {
-    celixLauncher_stop();
-}
-
+static void shutdown_framework(int signal) {
+    if (framework != NULL) {
+        celixLauncher_stop(framework); //NOTE main thread will destroy
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/celix/blob/55e75be7/launcher/public/include/launcher.h
----------------------------------------------------------------------
diff --git a/launcher/public/include/launcher.h 
b/launcher/public/include/launcher.h
index 6ee8357..6077e03 100644
--- a/launcher/public/include/launcher.h
+++ b/launcher/public/include/launcher.h
@@ -30,10 +30,12 @@
 #include <stdio.h>
 #include "framework.h"
 
-int celixLauncher_launch(const char *configFile);
-int celixLauncher_launchWithStream(FILE *config);
-void celixLauncher_stop(void);
-void celixLauncher_waitForShutdown(void);
-struct framework *celixLauncher_getFramework(void);
+int celixLauncher_launch(const char *configFile, framework_pt *framework);
+int celixLauncher_launchWithStream(FILE *config, framework_pt *framework);
+
+void celixLauncher_stop(framework_pt framework);
+void celixLauncher_destroy(framework_pt framework);
+
+void celixLauncher_waitForShutdown(framework_pt framework);
 
 #endif //CELIX_LAUNCHER_H

http://git-wip-us.apache.org/repos/asf/celix/blob/55e75be7/remote_services/remote_service_admin_dfi/tst/rsa_tests.cpp
----------------------------------------------------------------------
diff --git a/remote_services/remote_service_admin_dfi/tst/rsa_tests.cpp 
b/remote_services/remote_service_admin_dfi/tst/rsa_tests.cpp
index a5a556a..f23babd 100644
--- a/remote_services/remote_service_admin_dfi/tst/rsa_tests.cpp
+++ b/remote_services/remote_service_admin_dfi/tst/rsa_tests.cpp
@@ -17,16 +17,19 @@ extern "C" {
 #include "remote_service_admin.h"
 
 
+framework_pt framework = NULL;
 bundle_context_pt context = NULL;
 service_reference_pt rsaRef = NULL;
 remote_service_admin_service_pt rsa = NULL;
 
-static void setupContextAndRsa(void) {
+static void setupFm(void) {
     int rc = 0;
-    struct framework *fm = celixLauncher_getFramework();
+
+    rc = celixLauncher_launch("config.properties", &framework);
+    CHECK_EQUAL(CELIX_SUCCESS, rc);
 
     bundle_pt bundle = NULL;
-    rc = framework_getFrameworkBundle(fm, &bundle);
+    rc = framework_getFrameworkBundle(framework, &bundle);
     CHECK_EQUAL(CELIX_SUCCESS, rc);
 
     rc = bundle_getContext(bundle, &context);
@@ -39,13 +42,19 @@ static void setupContextAndRsa(void) {
     CHECK_EQUAL(CELIX_SUCCESS, rc);
 }
 
-static void teardownContextAndRsa(void) {
+static void teardownFm(void) {
     int rc = 0;
     rc = bundleContext_ungetService(context, rsaRef, NULL);
     CHECK_EQUAL(CELIX_SUCCESS, rc);
+
+    celixLauncher_stop(framework);
+    celixLauncher_waitForShutdown(framework);
+    celixLauncher_destroy(framework);
+
     rsaRef = NULL;
     rsa = NULL;
     context = NULL;
+    framework = NULL;
 }
 
 static void testInfo(void) {
@@ -77,14 +86,11 @@ static void testImportService(void) {
 
 TEST_GROUP(RsaDfiTests) {
     void setup() {
-        celixLauncher_launch("config.properties");
-        setupContextAndRsa();
+        setupFm();
     }
 
     void teardown() {
-        teardownContextAndRsa();
-        celixLauncher_stop();
-        celixLauncher_waitForShutdown();
+        teardownFm();
     }
 };
 

http://git-wip-us.apache.org/repos/asf/celix/blob/55e75be7/remote_services/remote_service_admin_dfi/tst/run_tests.cpp
----------------------------------------------------------------------
diff --git a/remote_services/remote_service_admin_dfi/tst/run_tests.cpp 
b/remote_services/remote_service_admin_dfi/tst/run_tests.cpp
index 81d1908..c5e960c 100644
--- a/remote_services/remote_service_admin_dfi/tst/run_tests.cpp
+++ b/remote_services/remote_service_admin_dfi/tst/run_tests.cpp
@@ -4,23 +4,6 @@
 #include <CppUTest/TestHarness.h>
 #include "CppUTest/CommandLineTestRunner.h"
 
-
-extern "C" {
-    #include <stdio.h>
-
-    #include "launcher.h"
-    #include "framework.h"
-
-    static int startCelix(void) {
-        celixLauncher_launch("config.properties");
-    }
-
-    static int stopCelix(void) {
-        celixLauncher_stop();
-        celixLauncher_waitForShutdown();
-    }
-}
-
 int main(int argc, char** argv) {
     return RUN_ALL_TESTS(argc, argv);
 }
\ No newline at end of file

Reply via email to