bus: add test for bloom filter prefix match
This commit is contained in:
parent
86312ab8de
commit
f11e11e344
|
@ -49,6 +49,8 @@ void bloom_add_data(uint64_t filter[BLOOM_SIZE/8], const void *data, size_t n) {
|
|||
|
||||
for (k = 0; k < ELEMENTSOF(hash); k++)
|
||||
set_bit(filter, hash[k] & 511);
|
||||
|
||||
/* log_debug("bloom: adding <%.*s>", (int) n, (char*) data); */
|
||||
}
|
||||
|
||||
void bloom_add_pair(uint64_t filter[BLOOM_SIZE/8], const char *a, const char *b) {
|
||||
|
|
|
@ -406,8 +406,10 @@ int bus_add_match_internal(
|
|||
break;
|
||||
|
||||
case BUS_MATCH_PATH_NAMESPACE:
|
||||
bloom_add_pair(bloom, "path-slash-prefix", c->value_str);
|
||||
using_bloom = true;
|
||||
if (!streq(c->value_str, "/")) {
|
||||
bloom_add_pair(bloom, "path-slash-prefix", c->value_str);
|
||||
using_bloom = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case BUS_MATCH_ARG...BUS_MATCH_ARG_LAST: {
|
||||
|
|
|
@ -141,6 +141,7 @@ static int bus_message_setup_bloom(sd_bus_message *m, void *bloom) {
|
|||
bloom_add_pair(bloom, "member", m->member);
|
||||
if (m->path) {
|
||||
bloom_add_pair(bloom, "path", m->path);
|
||||
bloom_add_pair(bloom, "path-slash-prefix", m->path);
|
||||
bloom_add_prefixes(bloom, "path-slash-prefix", m->path, '/');
|
||||
}
|
||||
|
||||
|
|
|
@ -68,9 +68,11 @@ static void test_one(
|
|||
r = sd_bus_start(b);
|
||||
assert_se(r >= 0);
|
||||
|
||||
log_debug("match");
|
||||
r = sd_bus_add_match(b, match, NULL, NULL);
|
||||
assert_se(r >= 0);
|
||||
|
||||
log_debug("signal");
|
||||
r = sd_bus_emit_signal(a, path, interface, member, "s", arg0);
|
||||
assert_se(r >= 0);
|
||||
|
||||
|
@ -95,5 +97,16 @@ int main(int argc, char *argv[]) {
|
|||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo',interface='waldo.com',member='Piep',arg0='foobar'", true);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo',interface='waldo.com',member='Piep',arg0='foobar2'", false);
|
||||
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo'", true);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar'", false);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo'", false);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/'", false);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path='/foo/bar/waldo/quux'", false);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/foo/bar/waldo'", true);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/foo/bar'", true);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/foo'", true);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/'", true);
|
||||
test_one("/foo/bar/waldo", "waldo.com", "Piep", "foobar", "path_namespace='/quux'", false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue