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

pnoltes pushed a commit to branch 
feature/685-update-container-config-properties-usage
in repository https://gitbox.apache.org/repos/asf/celix.git


The following commit(s) were added to 
refs/heads/feature/685-update-container-config-properties-usage by this push:
     new bf0011a45 gh-685: Improve celix_launcher coverage and fix memleaks
bf0011a45 is described below

commit bf0011a454450f922f06c3909bab97a750c13975
Author: Pepijn Noltes <pnol...@apache.org>
AuthorDate: Tue Jun 4 21:03:57 2024 +0200

    gh-685: Improve celix_launcher coverage and fix memleaks
---
 .../gtest/src/CelixLauncherErrorInjectionTestSuite.cc   |  9 +++++++++
 libs/framework/gtest/src/CelixLauncherTestSuite.cc      | 17 +++++++++++++++++
 libs/framework/src/celix_launcher.c                     |  3 ++-
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/libs/framework/gtest/src/CelixLauncherErrorInjectionTestSuite.cc 
b/libs/framework/gtest/src/CelixLauncherErrorInjectionTestSuite.cc
index 6b448f013..416d753b6 100644
--- a/libs/framework/gtest/src/CelixLauncherErrorInjectionTestSuite.cc
+++ b/libs/framework/gtest/src/CelixLauncherErrorInjectionTestSuite.cc
@@ -78,4 +78,13 @@ TEST_F(CelixLauncherErrorInjectionTestSuite, 
CombinePropertiesErrorTest) {
 
     //Then an exception is expected
     EXPECT_EQ(1, rc);
+
+    //Given an error injection for celix_properties_setEntry is primed when 
called from celix_launcher_combineProperties
+    
celix_ei_expect_celix_properties_setEntry((void*)celix_launcher_combineProperties,
 0, ENOMEM);
+
+    //When calling celix_launcher_launchAndWait with a create cache flag
+    rc = launch({"programName", "-c"}, nullptr);
+
+    //Then an exception is expected
+    EXPECT_EQ(1, rc);
 }
diff --git a/libs/framework/gtest/src/CelixLauncherTestSuite.cc 
b/libs/framework/gtest/src/CelixLauncherTestSuite.cc
index 58f0da64f..55fc2cfbb 100644
--- a/libs/framework/gtest/src/CelixLauncherTestSuite.cc
+++ b/libs/framework/gtest/src/CelixLauncherTestSuite.cc
@@ -40,6 +40,7 @@ class CelixLauncherTestSuite : public ::testing::Test {
             celix_autofree char* str;
             EXPECT_EQ(CELIX_SUCCESS, celix_properties_saveToString(props, 0, 
&str));
             propsStr = str;
+            celix_properties_destroy(props);
         }
         return std::async(std::launch::async, [args, propsStr, expectedRc] {
             char** argv = new char*[args.size()];
@@ -243,3 +244,19 @@ TEST_F(CelixLauncherTestSuite, 
StartWithInvalidEmbeddedPropertiesTest) {
     //Then the launch will exit with a return code of 1
     EXPECT_EQ(1, rc);
 }
+
+TEST_F(CelixLauncherTestSuite, StartWithInvalidArgumentsTest) {
+    //When launching the framework with invalid arguments and expect a 1 
return code
+    auto future = launchInThread({"programName", "config1.properties", 
"config2.properties"}, nullptr, 1);
+
+    // The launch will exit
+    auto status = 
future.wait_for(std::chrono::milliseconds{LAUNCH_WAIT_TIMEOUT});
+    EXPECT_EQ(status, std::future_status::ready);
+
+    //When launching the framework with invalid arguments and expect a 1 
return code
+    future = launchInThread({"programName", "-c", "-p"}, nullptr, 1);
+
+    // The launch will exit
+    status = future.wait_for(std::chrono::milliseconds{LAUNCH_WAIT_TIMEOUT});
+    EXPECT_EQ(status, std::future_status::ready);
+}
diff --git a/libs/framework/src/celix_launcher.c 
b/libs/framework/src/celix_launcher.c
index 19ec3d3cd..c4bd7188b 100644
--- a/libs/framework/src/celix_launcher.c
+++ b/libs/framework/src/celix_launcher.c
@@ -24,7 +24,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/stat.h>
+#include <libgen.h>
 
 #ifndef CELIX_NO_CURLINIT
 #include <curl/curl.h>
@@ -333,6 +333,7 @@ celix_status_t 
celix_launcher_combineProperties(celix_properties_t* embeddedProp
         CELIX_PROPERTIES_ITERATE(runtimeProps, visit) {
             celix_status_t status = celix_properties_setEntry(embeddedProps, 
visit.key, &visit.entry);
             if (status != CELIX_SUCCESS) {
+                celix_properties_destroy(embeddedProps);
                 return status;
             }
         }

Reply via email to