Topic test improvements.

pull/1022/head
Roger A. Light 7 years ago
parent 262ac3fb5b
commit a7fff2ad2e

@ -47,7 +47,7 @@ set (MOSQ_SRCS
sys_tree.c sys_tree.h
../lib/time_mosq.c
../lib/tls_mosq.c
../lib/util_mosq.c ../lib/util_mosq.h
../lib/util_mosq.c ../lib/util_topic.c ../lib/util_mosq.h
../lib/utf8_mosq.c
websockets.c
../lib/will_mosq.c ../lib/will_mosq.h)

@ -54,6 +54,7 @@ OBJS= mosquitto.o \
tls_mosq.o \
utf8_mosq.o \
util_mosq.o \
util_topic.o \
websockets.o \
will_mosq.o
@ -195,6 +196,9 @@ tls_mosq.o : ../lib/tls_mosq.c
util_mosq.o : ../lib/util_mosq.c ../lib/util_mosq.h
${CROSS_COMPILE}${CC} $(BROKER_CFLAGS) -c $< -o $@
util_topic.o : ../lib/util_topic.c ../lib/util_mosq.h
${CROSS_COMPILE}${CC} $(BROKER_CFLAGS) -c $< -o $@
utf8_mosq.o : ../lib/utf8_mosq.c
${CROSS_COMPILE}${CC} $(BROKER_CFLAGS) -c $< -o $@

@ -13,13 +13,13 @@ static void match_helper(const char *sub, const char *topic)
CU_ASSERT_EQUAL(match, true);
}
static void no_match_helper(const char *sub, const char *topic)
static void no_match_helper(int rc_expected, const char *sub, const char *topic)
{
int rc;
bool match;
rc = mosquitto_topic_matches_sub(sub, topic, &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
CU_ASSERT_EQUAL(rc, rc_expected);
CU_ASSERT_EQUAL(match, false);
}
@ -35,26 +35,50 @@ static void TEST_empty_input(void)
rc = mosquitto_topic_matches_sub("sub", NULL, &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub(NULL, "topic", &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub(NULL, NULL, &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub("sub", "", &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub("", "topic", &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub("", "", &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub2("sub", 3, NULL, 0, &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub2(NULL, 0, "topic", 5, &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub2(NULL, 0, NULL, 0, &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub2("sub", 3, "", 0, &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub2("", 0, "topic", 5, &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
rc = mosquitto_topic_matches_sub2("", 0, "", 0, &match);
CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
CU_ASSERT_EQUAL(match, false);
}
/* ========================================================================
@ -64,6 +88,7 @@ static void TEST_empty_input(void)
void TEST_valid_matching(void)
{
match_helper("foo/#", "foo/");
match_helper("foo/#", "foo");
match_helper("foo//bar", "foo//bar");
match_helper("foo//+", "foo//bar");
match_helper("foo/+/+/baz", "foo///baz");
@ -80,27 +105,51 @@ void TEST_valid_matching(void)
match_helper("/#", "/foo/bar");
}
void TEST_no_matching(void)
void TEST_invalid_but_matching(void)
{
/* Matching here is "naive treatment of the wildcards would produce a
* match". They shouldn't really match, they should fail. */
no_match_helper(MOSQ_ERR_INVAL, "+foo", "+foo");
no_match_helper(MOSQ_ERR_INVAL, "fo+o", "fo+o");
no_match_helper(MOSQ_ERR_INVAL, "foo+", "foo+");
no_match_helper(MOSQ_ERR_INVAL, "+foo/bar", "+foo/bar");
no_match_helper(MOSQ_ERR_INVAL, "foo+/bar", "foo+/bar");
no_match_helper(MOSQ_ERR_INVAL, "foo/+bar", "foo/+bar");
no_match_helper(MOSQ_ERR_INVAL, "foo/bar+", "foo/bar+");
no_match_helper(MOSQ_ERR_INVAL, "#foo", "#foo");
no_match_helper(MOSQ_ERR_INVAL, "fo#o", "fo#o");
no_match_helper(MOSQ_ERR_INVAL, "foo#", "foo#");
no_match_helper(MOSQ_ERR_INVAL, "#foo/bar", "#foo/bar");
no_match_helper(MOSQ_ERR_INVAL, "foo#/bar", "foo#/bar");
no_match_helper(MOSQ_ERR_INVAL, "foo/#bar", "foo/#bar");
no_match_helper(MOSQ_ERR_INVAL, "foo/bar#", "foo/bar#");
}
void TEST_valid_no_matching(void)
{
no_match_helper("foo#", "foo");
no_match_helper("fo#o/", "foo");
no_match_helper("foo#", "fooa");
no_match_helper("foo+", "foo");
no_match_helper("foo+", "fooa");
no_match_helper(MOSQ_ERR_INVAL, "foo#", "foo");
no_match_helper(MOSQ_ERR_INVAL, "fo#o/", "foo");
no_match_helper(MOSQ_ERR_INVAL, "foo#", "fooa");
no_match_helper(MOSQ_ERR_INVAL, "foo+", "foo");
no_match_helper(MOSQ_ERR_INVAL, "foo+", "fooa");
no_match_helper("test/6/#", "test/3");
no_match_helper(MOSQ_ERR_INVAL, "test/6/#", "test/3");
no_match_helper("foo/bar", "foo");
no_match_helper("foo/+", "foo/bar/baz");
no_match_helper("foo/+/baz", "foo/bar/bar");
no_match_helper(MOSQ_ERR_INVAL, "foo/bar", "foo");
no_match_helper(MOSQ_ERR_INVAL, "foo/+", "foo/bar/baz");
no_match_helper(MOSQ_ERR_INVAL, "foo/+/baz", "foo/bar/bar");
no_match_helper("foo/+/#", "fo2/bar/baz");
no_match_helper(MOSQ_ERR_INVAL, "foo/+/#", "fo2/bar/baz");
no_match_helper("/#", "foo/bar");
no_match_helper(MOSQ_ERR_INVAL, "/#", "foo/bar");
no_match_helper(MOSQ_ERR_INVAL, "/#a", "foo/bar");
no_match_helper("#", "$SYS/bar");
no_match_helper("$BOB/bar", "$SYS/bar");
no_match_helper(MOSQ_ERR_INVAL, "#", "$SYS/bar");
no_match_helper(MOSQ_ERR_INVAL, "$BOB/bar", "$SYS/bar");
}
/* ========================================================================
@ -120,7 +169,8 @@ int init_util_topic_tests(void)
if(0
|| !CU_add_test(test_suite, "Empty input", TEST_empty_input)
|| !CU_add_test(test_suite, "Valid matching", TEST_valid_matching)
|| !CU_add_test(test_suite, "No matching", TEST_no_matching)
|| !CU_add_test(test_suite, "Valid no matching", TEST_valid_no_matching)
|| !CU_add_test(test_suite, "Invalid but matching", TEST_invalid_but_matching)
){
printf("Error adding util topic CUnit tests.\n");

Loading…
Cancel
Save