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

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

commit b3271ef634a3214362e488a24e7bc98c79522b1f
Author: Pepijn Noltes <[email protected]>
AuthorDate: Tue May 2 17:04:58 2023 +0200

    Add celix_err test suite with error injection
---
 libs/utils/gtest/CMakeLists.txt                    |  6 +-
 libs/utils/gtest/src/ErrErrorInjectionTestSuite.cc | 76 ++++++++++++++++++++++
 2 files changed, 81 insertions(+), 1 deletion(-)

diff --git a/libs/utils/gtest/CMakeLists.txt b/libs/utils/gtest/CMakeLists.txt
index 79c14238..b006372e 100644
--- a/libs/utils/gtest/CMakeLists.txt
+++ b/libs/utils/gtest/CMakeLists.txt
@@ -84,8 +84,12 @@ if (LINKER_WRAP_SUPPORTED)
             src/FileUtilsErrorInjectionTestSuite.cc
             src/ConvertUtilsErrorInjectionTestSuite.cc
             src/IpUtilsErrorInjectionTestSuite.cc
+            src/ErrErrorInjectionTestSuite.cc
             )
-    target_link_libraries(test_utils_with_ei PRIVATE Celix::zip_ei 
Celix::stdio_ei Celix::stat_ei Celix::fts_ei Celix::utils_obj Celix::utils_ei 
Celix::ifaddrs_ei GTest::gtest GTest::gtest_main)
+    target_link_libraries(test_utils_with_ei PRIVATE
+            Celix::zip_ei Celix::stdio_ei Celix::stat_ei Celix::fts_ei 
Celix::utils_obj Celix::utils_ei
+            Celix::ifaddrs_ei Celix::threads_ei Celix::malloc_ei
+            GTest::gtest GTest::gtest_main)
     target_include_directories(test_utils_with_ei PRIVATE ../src) #for 
version_private (needs refactoring of test)
     celix_deprecated_utils_headers(test_utils_with_ei)
     add_dependencies(test_utils_with_ei test_utils_resources)
diff --git a/libs/utils/gtest/src/ErrErrorInjectionTestSuite.cc 
b/libs/utils/gtest/src/ErrErrorInjectionTestSuite.cc
new file mode 100644
index 00000000..402199b4
--- /dev/null
+++ b/libs/utils/gtest/src/ErrErrorInjectionTestSuite.cc
@@ -0,0 +1,76 @@
+/*
+ * 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 <cstdio>
+#include <fstream>
+
+#include "celix_err.h"
+#include "celix_threads_ei.h"
+#include "malloc_ei.h"
+
+class ErrErrorInjectionTestSuite : public ::testing::Test {
+public:
+    static constexpr const char* CAPTURE_FILENAME = "capture_stderr.txt";
+
+    ErrErrorInjectionTestSuite() {
+        freopen(CAPTURE_FILENAME, "w", stderr);
+    }
+    ~ErrErrorInjectionTestSuite() noexcept override {
+        celix_ei_expect_celix_tss_set(nullptr, 0, CELIX_SUCCESS);
+        celix_ei_expect_malloc(nullptr, 0, CELIX_SUCCESS);
+    }
+};
+
+#ifndef CELIX_ERR_USE_THREAD_LOCAL
+TEST_F(ErrErrorInjectionTestSuite, PushErrorWithTssSetFailingTest) {
+    //Given a primed error injection for celix_tss_set
+    celix_ei_expect_celix_tss_set((void*)celix_err_push, 1, 
CELIX_ILLEGAL_STATE);
+
+    //When an error is pushed
+    celix_err_push("error message");
+
+    fclose(stderr);
+    std::ifstream tempFile{CAPTURE_FILENAME};
+    std::string fileContents((std::istreambuf_iterator<char>(tempFile)),
+                             std::istreambuf_iterator<char>());
+    tempFile.close();
+
+    EXPECT_TRUE(strstr(fileContents.c_str(), "Failed to set thread specific 
storage for celix_err") != nullptr) <<
+        "Expected error message not found in: " << fileContents;
+}
+
+TEST_F(ErrErrorInjectionTestSuite, PushErrorWithMallocFailingTest) {
+    //Given a primed error injection for malloc
+    celix_ei_expect_malloc(CELIX_EI_UNKNOWN_CALLER, 1, nullptr);
+
+    //When an error is pushed
+    celix_err_push("error message");
+
+    fclose(stderr);
+    std::ifstream tempFile{CAPTURE_FILENAME};
+    std::string fileContents((std::istreambuf_iterator<char>(tempFile)),
+                             std::istreambuf_iterator<char>());
+    tempFile.close();
+
+    EXPECT_TRUE(strstr(fileContents.c_str(), "Failed to allocate memory for 
celix_err") != nullptr) <<
+        "Expected error message not found in: " << fileContents;
+}
+#endif

Reply via email to