This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a commit to branch feature/674-use-properties-type-in-filter
in repository https://gitbox.apache.org/repos/asf/celix.git
The following commit(s) were added to
refs/heads/feature/674-use-properties-type-in-filter by this push:
new 51f8c6d4 Add filter unit tests based on coverage results
51f8c6d4 is described below
commit 51f8c6d45e3c45d28610a550b7a9c0ab3b3486b0
Author: Pepijn Noltes <[email protected]>
AuthorDate: Wed Nov 29 20:11:34 2023 +0100
Add filter unit tests based on coverage results
---
.../gtest/src/FilterErrorInjectionTestSuite.cc | 14 ++
libs/utils/gtest/src/FilterTestSuite.cc | 187 +++++++++------------
libs/utils/src/filter.c | 9 -
3 files changed, 90 insertions(+), 120 deletions(-)
diff --git a/libs/utils/gtest/src/FilterErrorInjectionTestSuite.cc
b/libs/utils/gtest/src/FilterErrorInjectionTestSuite.cc
index cf676708..e7cd3123 100644
--- a/libs/utils/gtest/src/FilterErrorInjectionTestSuite.cc
+++ b/libs/utils/gtest/src/FilterErrorInjectionTestSuite.cc
@@ -24,6 +24,7 @@
#include "celix_err.h"
#include "celix_array_list_ei.h"
+#include "celix_utils_ei.h"
#include "malloc_ei.h"
#include "stdio_ei.h"
@@ -35,6 +36,8 @@ class FilterErrorInjectionTestSuite : public ::testing::Test {
celix_ei_expect_calloc(nullptr, 0, nullptr);
celix_ei_expect_open_memstream(nullptr, 0, nullptr);
celix_ei_expect_fclose(nullptr, 0, 0);
+ celix_ei_expect_celix_utils_strdup(nullptr, 0, nullptr);
+ celix_ei_expect_fputc(nullptr, 0, 0);
}
~FilterErrorInjectionTestSuite() override {
@@ -138,6 +141,17 @@ TEST_F(FilterErrorInjectionTestSuite, ErrorFcloseTest) {
EXPECT_EQ(nullptr, filter);
}
+TEST_F(FilterErrorInjectionTestSuite, ErrorStrdupTest) {
+ //Given an error injection for celix_utils_strdup
+ celix_ei_expect_celix_utils_strdup((void*)celix_filter_create, 0, nullptr);
+ //When creating a filter
+ const char* filterStr = "(key1=value1)";
+ //Then the filter creation should fail, because it strdup the filter string
+ celix_filter_t* filter = celix_filter_create(filterStr);
+ EXPECT_EQ(nullptr, filter);
+}
+
+
TEST_F(FilterErrorInjectionTestSuite, ErrorFputcTest) {
// Given an error injection for fputc
celix_ei_expect_fputc((void*)celix_filter_create, 4, EOF);
diff --git a/libs/utils/gtest/src/FilterTestSuite.cc
b/libs/utils/gtest/src/FilterTestSuite.cc
index e571349c..ac54f006 100644
--- a/libs/utils/gtest/src/FilterTestSuite.cc
+++ b/libs/utils/gtest/src/FilterTestSuite.cc
@@ -181,187 +181,138 @@ TEST_F(FilterTestSuite, MatchEqualTest) {
}
TEST_F(FilterTestSuite, MatchTest) {
- char* str;
celix_filter_t* filter;
- celix_properties_t* props = celix_properties_create();
- char* key = celix_utils_strdup("test_attr1");
- char* val = celix_utils_strdup("attr1");
- char* key2 = celix_utils_strdup("test_attr2");
- char* val2 = celix_utils_strdup("attr2");
- celix_properties_set(props, key, val);
- celix_properties_set(props, key2, val2);
+ celix_autoptr(celix_properties_t) props = celix_properties_create();
+ ASSERT_NE(nullptr, props);
+ celix_properties_set(props, "test_attr1", "attr1");
+ celix_properties_set(props, "test_attr2", "attr2");
// Test EQUALS
- str = celix_utils_strdup("(test_attr1=attr1)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr1=attr1)");
bool result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
// Test EQUALS false
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1=falseString)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr1=falseString)");
result = celix_filter_match(filter, props);
EXPECT_FALSE(result);
-
celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1~=attr1)");
- filter = celix_filter_create(str);
+
+ filter = celix_filter_create("(test_attr1~=attr1)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
-
celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1~=ATTR1)");
- filter = celix_filter_create(str);
+
+ filter = celix_filter_create("(test_attr1~=ATTR1)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
// Test PRESENT
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1=*)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr1=*)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
// Test NOT PRESENT
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr3=*)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr3=*)");
result = celix_filter_match(filter, props);
EXPECT_FALSE(result);
+ celix_filter_destroy(filter);
// Test NOT PRESENT
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(!(test_attr3=*))");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(!(test_attr3=*))");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
// Test LESSEQUAL less
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1<=attr5)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr1<=attr5)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
// Test LESSEQUAL equals
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr2<=attr2)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr2<=attr2)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
// test LESSEQUAL false
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr2<=attr1)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr2<=attr1)");
result = celix_filter_match(filter, props);
EXPECT_FALSE(result);
+ celix_filter_destroy(filter);
// test GREATEREQUAL greater
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr2>=attr1)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr2>=attr1)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
// test GREATEREQUAL equals
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr2>=attr2)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr2>=attr2)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
// test GREATEREQUAL false
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1>=attr5)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr1>=attr5)");
result = celix_filter_match(filter, props);
EXPECT_FALSE(result);
+ celix_filter_destroy(filter);
// test LESS less
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1<attr5)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr1<attr5)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
// test LESS equals
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr2<attr2)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr2<attr2)");
result = celix_filter_match(filter, props);
EXPECT_FALSE(result);
+ celix_filter_destroy(filter);
// test LESS false
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr2<attr1)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr2<attr1)");
result = celix_filter_match(filter, props);
EXPECT_FALSE(result);
+ celix_filter_destroy(filter);
+
// test GREATER greater
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr2>attr1)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr2>attr1)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
+ celix_filter_destroy(filter);
+
// test GREATER equals
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr2>attr2)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr2>attr2)");
result = celix_filter_match(filter, props);
EXPECT_FALSE(result);
+ celix_filter_destroy(filter);
+
// test GREATER false
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1>attr5)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr1>attr5)");
result = celix_filter_match(filter, props);
EXPECT_FALSE(result);
+ celix_filter_destroy(filter);
+
// test SUBSTRING equals
- celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1=attr*)");
- filter = celix_filter_create(str);
+ filter = celix_filter_create("(test_attr1=attr*)");
result = celix_filter_match(filter, props);
EXPECT_TRUE(result);
-
celix_filter_destroy(filter);
- free(str);
- str = celix_utils_strdup("(test_attr1=attr*charsNotPresent)");
- filter = celix_filter_create(str);
+
+ filter = celix_filter_create("(test_attr1=attr*charsNotPresent)");
result = celix_filter_match(filter, props);
EXPECT_FALSE(result);
-
- // cleanup
- celix_properties_destroy(props);
celix_filter_destroy(filter);
- free(str);
- free(key);
- free(key2);
- free(val);
- free(val2);
}
TEST_F(FilterTestSuite, MatchRecursionTest) {
@@ -383,21 +334,20 @@ TEST_F(FilterTestSuite, MatchRecursionTest) {
TEST_F(FilterTestSuite, FalseMatchTest) {
auto* str = "(&(test_attr1=attr1)(&(test_attr2=attr2)(test_attr3=attr3)))";
- celix_filter_t* filter = celix_filter_create(str);
- celix_properties_t* props = celix_properties_create();
+ celix_autoptr(celix_filter_t) filter = celix_filter_create(str);
+ celix_autoptr(celix_properties_t) props = celix_properties_create();
auto* key = "test_attr1";
auto* val = "attr1";
auto* key2 = "test_attr2";
auto* val2 = "attr2";
celix_properties_set(props, key, val);
celix_properties_set(props, key2, val2);
-
bool result = celix_filter_match(filter, props);
ASSERT_FALSE(result);
- // cleanup
- celix_properties_destroy(props);
- celix_filter_destroy(filter);
+ celix_autoptr(celix_filter_t) filter2 =
celix_filter_create("(|(non-existing=false))");
+ result = celix_filter_match(filter2, props);
+ ASSERT_FALSE(result);
}
TEST_F(FilterTestSuite, GetStringTest) {
@@ -412,14 +362,20 @@ TEST_F(FilterTestSuite, GetStringTest) {
}
TEST_F(FilterTestSuite, FilterEqualsTest) {
- auto* f1 = celix_filter_create("(test_attr1=attr1)");
- auto* f2 = celix_filter_create("(test_attr1=attr1)");
- auto* f3 = celix_filter_create("(test_attr1=attr2)");
+ celix_autoptr(celix_filter_t) f1 =
celix_filter_create("(test_attr1=attr1)");
+ celix_autoptr(celix_filter_t) f2 =
celix_filter_create("(test_attr1=attr1)");
+ celix_autoptr(celix_filter_t) f3 =
celix_filter_create("(test_attr1>attr1)");
+ celix_autoptr(celix_filter_t) f4 =
celix_filter_create("(&(test_attr1=attr1)(test_attr2=attr2))");
+ celix_autoptr(celix_filter_t) f5 =
celix_filter_create("(&(test_attr1=attr1)(test_attr2=attr2))");
+ celix_autoptr(celix_filter_t) f6 =
celix_filter_create("(&(test_attr1=attr1)(test_attr2=attr2)(test_attr3=attr3))");
+
+
+ EXPECT_TRUE(celix_filter_equals(f1, f1));
+ EXPECT_FALSE(celix_filter_equals(f1, nullptr));
EXPECT_TRUE(celix_filter_equals(f1, f2));
EXPECT_FALSE(celix_filter_equals(f1, f3));
- celix_filter_destroy(f1);
- celix_filter_destroy(f2);
- celix_filter_destroy(f3);
+ EXPECT_TRUE(celix_filter_equals(f4, f5));
+ EXPECT_FALSE(celix_filter_equals(f4, f6));
}
TEST_F(FilterTestSuite, AutoCleanupTest) {
@@ -441,6 +397,8 @@ TEST_F(FilterTestSuite, TypedPropertiesAndFilterTest) {
celix_properties_setLong(props, "long", 1L);
celix_properties_setDouble(props, "double", 0.0);
celix_properties_setBool(props, "bool", true);
+ celix_properties_setBool(props, "bool2", false);
+ celix_properties_set(props, "strBool", "true");
celix_properties_setVersion(props, "version", version);
celix_autoptr(celix_filter_t) filter1 =
@@ -456,8 +414,11 @@ TEST_F(FilterTestSuite, TypedPropertiesAndFilterTest) {
EXPECT_TRUE(celix_filter_match(filter3, props));
celix_autoptr(celix_filter_t) filter4 =
-
celix_filter_create("(&(str!=test)(long!=1)(double!=0.0)(bool!=true)(version!=1.2.3))");
+
celix_filter_create("(&(str!=test)(long!=1)(double!=0.0)(bool!=true)(bool2=true)(version!=1.2.3))");
EXPECT_FALSE(celix_filter_match(filter4, props));
+
+ celix_autoptr(celix_filter_t) filter5 =
celix_filter_create("(strBool=true)");
+ EXPECT_TRUE(celix_filter_match(filter5, props));
}
@@ -566,6 +527,10 @@ TEST_F(FilterTestSuite, DeprecatedApiTest) {
EXPECT_EQ(status, CELIX_SUCCESS);
EXPECT_STREQ(str, "(test_attr1=attr1)");
+ status = filter_match(f1, nullptr, &result);
+ EXPECT_EQ(status, CELIX_SUCCESS);
+ EXPECT_FALSE(result);
+
filter_destroy(f1);
filter_destroy(f2);
}
diff --git a/libs/utils/src/filter.c b/libs/utils/src/filter.c
index fafc1ee6..cdc0a600 100644
--- a/libs/utils/src/filter.c
+++ b/libs/utils/src/filter.c
@@ -743,15 +743,6 @@ celix_filter_t* celix_filter_create(const char*
filterString) {
return NULL;
}
- if (filter->operand != CELIX_FILTER_OPERAND_OR && filter->operand !=
CELIX_FILTER_OPERAND_AND &&
- filter->operand != CELIX_FILTER_OPERAND_NOT && filter->operand !=
CELIX_FILTER_OPERAND_SUBSTRING &&
- filter->operand != CELIX_FILTER_OPERAND_PRESENT) {
- if (filter->attribute == NULL || filter->value == NULL) {
- celix_err_push("Filter Error: Missing attribute or value.");
- return NULL;
- }
- }
-
filter->filterStr = celix_steal_ptr(str);
if (celix_filter_compile(filter) != CELIX_SUCCESS) {
celix_err_push("Failed to compile filter");