You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
4.1 KiB
97 lines
4.1 KiB
From 4895d281d18e244d8238c1f77e597ce43310531c Mon Sep 17 00:00:00 2001 |
|
From: Yu Watanabe <watanabe.yu+github@gmail.com> |
|
Date: Sun, 17 Apr 2022 07:58:45 +0900 |
|
Subject: [PATCH] test: add several tests for track item |
|
|
|
(cherry picked from commit 056a18e465bedb1bd35ce0bf78831be168c636cb) |
|
|
|
Related: #2087652 |
|
--- |
|
src/libsystemd/sd-bus/test-bus-track.c | 58 +++++++++++++++++++++++++- |
|
1 file changed, 57 insertions(+), 1 deletion(-) |
|
|
|
diff --git a/src/libsystemd/sd-bus/test-bus-track.c b/src/libsystemd/sd-bus/test-bus-track.c |
|
index 238934a880..5604e84f52 100644 |
|
--- a/src/libsystemd/sd-bus/test-bus-track.c |
|
+++ b/src/libsystemd/sd-bus/test-bus-track.c |
|
@@ -10,6 +10,7 @@ |
|
|
|
static bool track_cb_called_x = false; |
|
static bool track_cb_called_y = false; |
|
+static bool track_destroy_called_z = false; |
|
|
|
static int track_cb_x(sd_bus_track *t, void *userdata) { |
|
|
|
@@ -39,9 +40,17 @@ static int track_cb_y(sd_bus_track *t, void *userdata) { |
|
return 0; |
|
} |
|
|
|
+static int track_cb_z(sd_bus_track *t, void *userdata) { |
|
+ assert_not_reached(); |
|
+} |
|
+ |
|
+static void track_destroy_z(void *userdata) { |
|
+ track_destroy_called_z = true; |
|
+} |
|
+ |
|
int main(int argc, char *argv[]) { |
|
_cleanup_(sd_event_unrefp) sd_event *event = NULL; |
|
- _cleanup_(sd_bus_track_unrefp) sd_bus_track *x = NULL, *y = NULL; |
|
+ _cleanup_(sd_bus_track_unrefp) sd_bus_track *x = NULL, *y = NULL, *z = NULL; |
|
_cleanup_(sd_bus_unrefp) sd_bus *a = NULL, *b = NULL; |
|
bool use_system_bus = false; |
|
const char *unique; |
|
@@ -83,6 +92,53 @@ int main(int argc, char *argv[]) { |
|
|
|
assert_se(sd_bus_track_add_name(y, unique) >= 0); |
|
|
|
+ /* Basic tests. */ |
|
+ assert_se(sd_bus_track_new(a, &z, track_cb_z, NULL) >= 0); |
|
+ |
|
+ /* non-recursive case */ |
|
+ assert_se(sd_bus_track_set_recursive(z, false) >= 0); |
|
+ assert_se(sd_bus_track_get_recursive(z) == 0); |
|
+ assert_se(!sd_bus_track_contains(z, unique)); |
|
+ assert_se(sd_bus_track_count_name(z, unique) == 0); |
|
+ assert_se(sd_bus_track_remove_name(z, unique) == 0); |
|
+ assert_se(sd_bus_track_add_name(z, unique) >= 0); |
|
+ assert_se(sd_bus_track_add_name(z, unique) >= 0); |
|
+ assert_se(sd_bus_track_add_name(z, unique) >= 0); |
|
+ assert_se(sd_bus_track_set_recursive(z, true) == -EBUSY); |
|
+ assert_se(sd_bus_track_contains(z, unique)); |
|
+ assert_se(sd_bus_track_count_name(z, unique) == 1); |
|
+ assert_se(sd_bus_track_remove_name(z, unique) == 1); |
|
+ assert_se(!sd_bus_track_contains(z, unique)); |
|
+ assert_se(sd_bus_track_count_name(z, unique) == 0); |
|
+ assert_se(sd_bus_track_remove_name(z, unique) == 0); |
|
+ |
|
+ /* recursive case */ |
|
+ assert_se(sd_bus_track_set_recursive(z, true) >= 0); |
|
+ assert_se(sd_bus_track_get_recursive(z) == 1); |
|
+ assert_se(!sd_bus_track_contains(z, unique)); |
|
+ assert_se(sd_bus_track_count_name(z, unique) == 0); |
|
+ assert_se(sd_bus_track_remove_name(z, unique) == 0); |
|
+ assert_se(sd_bus_track_add_name(z, unique) >= 0); |
|
+ assert_se(sd_bus_track_add_name(z, unique) >= 0); |
|
+ assert_se(sd_bus_track_add_name(z, unique) >= 0); |
|
+ assert_se(sd_bus_track_set_recursive(z, false) == -EBUSY); |
|
+ assert_se(sd_bus_track_contains(z, unique)); |
|
+ assert_se(sd_bus_track_count_name(z, unique) == 3); |
|
+ assert_se(sd_bus_track_remove_name(z, unique) == 1); |
|
+ assert_se(sd_bus_track_contains(z, unique)); |
|
+ assert_se(sd_bus_track_count_name(z, unique) == 2); |
|
+ assert_se(sd_bus_track_remove_name(z, unique) == 1); |
|
+ assert_se(sd_bus_track_contains(z, unique)); |
|
+ assert_se(sd_bus_track_count_name(z, unique) == 1); |
|
+ assert_se(sd_bus_track_remove_name(z, unique) == 1); |
|
+ assert_se(!sd_bus_track_contains(z, unique)); |
|
+ assert_se(sd_bus_track_count_name(z, unique) == 0); |
|
+ assert_se(sd_bus_track_remove_name(z, unique) == 0); |
|
+ |
|
+ assert_se(sd_bus_track_set_destroy_callback(z, track_destroy_z) >= 0); |
|
+ z = sd_bus_track_unref(z); |
|
+ assert_se(track_destroy_called_z); |
|
+ |
|
/* Now make b's name disappear */ |
|
sd_bus_close(b); |
|
|
|
|