* [PATCH] unit: Try dbus-properties tests on Dbus1 and kdbus
2016-05-06 10:18 [PATCH] unit: End to end FD passing test Andrew Zaborowski
@ 2016-05-06 10:18 ` Andrew Zaborowski
2016-05-06 15:51 ` Denis Kenzior
2016-05-06 10:18 ` [PATCH 1/2] unit: Remove dbus watch tests using old API Andrew Zaborowski
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Andrew Zaborowski @ 2016-05-06 10:18 UTC (permalink / raw)
To: ell
[-- Attachment #1: Type: text/plain, Size: 5529 bytes --]
Same as test-dbus-message-fds.
---
unit/test-dbus-properties.c | 124 +++++++++++++++++++++++++-------------------
1 file changed, 70 insertions(+), 54 deletions(-)
diff --git a/unit/test-dbus-properties.c b/unit/test-dbus-properties.c
index 3238cf6..6eae592 100644
--- a/unit/test-dbus-properties.c
+++ b/unit/test-dbus-properties.c
@@ -40,7 +40,7 @@ static int kdbus_fd = -1;
static char bus_address[128];
-static void start_dbus_daemon(void)
+static bool start_dbus_daemon(void)
{
char *prg_argv[6];
char *prg_envp[1];
@@ -60,7 +60,7 @@ static void start_dbus_daemon(void)
pid = fork();
if (pid < 0) {
l_error("failed to fork new process");
- return;
+ return false;
}
if (pid == 0) {
@@ -73,9 +73,11 @@ static void start_dbus_daemon(void)
dbus_daemon_pid = pid;
strcpy(bus_address, TEST_BUS_ADDRESS);
+
+ return true;
}
-static void create_kdbus(void)
+static bool create_kdbus(void)
{
char bus_name[64];
@@ -84,11 +86,13 @@ static void create_kdbus(void)
kdbus_fd = _dbus_kernel_create_bus(bus_name);
if (kdbus_fd < 0) {
l_warn("kdbus not available");
- return;
+ return false;
}
snprintf(bus_address, sizeof(bus_address),
"kernel:path=/dev/kdbus/%s/bus", bus_name);
+
+ return true;
}
static void signal_handler(struct l_signal *signal, uint32_t signo,
@@ -131,6 +135,7 @@ struct dbus_test {
static bool success;
static struct l_queue *tests;
+static const struct l_queue_entry *current;
static void test_add(const char *name,
void (*start)(struct l_dbus *dbus, void *),
@@ -150,19 +155,24 @@ static void test_add(const char *name,
static void test_next()
{
- struct dbus_test *test = l_queue_pop_head(tests);
+ struct dbus_test *test;
- if (!test) {
+ if (current)
+ current = current->next;
+ else
+ current = l_queue_get_entries(tests);
+
+ if (!current) {
success = true;
l_main_quit();
return;
}
+ test = current->data;
+
l_info("TEST: %s", test->name);
test->start(dbus, test->data);
-
- l_free(test);
}
#define test_assert(cond) \
@@ -916,42 +926,9 @@ static void test_object_manager_signals(struct l_dbus *dbus, void *test_data)
NULL));
}
-int main(int argc, char *argv[])
+static void test_run(void)
{
- struct l_signal *signal;
- sigset_t mask;
- int i;
- bool kdbus = false;
-
- for (i = 1; i < argc; i++) {
- if (!strcmp(argv[i], "--kdbus"))
- kdbus = true;
- }
-
- sigemptyset(&mask);
- sigaddset(&mask, SIGINT);
- sigaddset(&mask, SIGTERM);
- sigaddset(&mask, SIGCHLD);
-
- signal = l_signal_create(&mask, signal_handler, NULL, NULL);
-
- l_log_set_stderr();
-
- if (kdbus)
- create_kdbus();
- else
- start_dbus_daemon();
-
- if (!bus_address[0])
- return -1;
-
- for (i = 0; i < 10; i++) {
- usleep(200 * 1000);
-
- dbus = l_dbus_new(bus_address);
- if (dbus)
- break;
- }
+ success = false;
l_dbus_set_ready_handler(dbus, ready_callback, dbus, NULL);
l_dbus_set_disconnect_handler(dbus, disconnect_callback, NULL, NULL);
@@ -959,18 +936,18 @@ int main(int argc, char *argv[])
if (!l_dbus_register_interface(dbus, "org.test", setup_test_interface,
NULL, true)) {
l_info("Unable to register interface");
- goto done;
+ return;
}
if (!l_dbus_object_add_interface(dbus, "/test", "org.test", NULL)) {
l_info("Unable to instantiate interface");
- goto done;
+ return;
}
if (!l_dbus_object_add_interface(dbus, "/test",
"org.freedesktop.DBus.Properties", NULL)) {
l_info("Unable to instantiate the properties interface");
- goto done;
+ return;
}
l_dbus_add_signal_watch(dbus, "org.test", "/test", "org.test",
@@ -984,7 +961,7 @@ int main(int argc, char *argv[])
if (!l_dbus_object_manager_enable(dbus)) {
l_info("Unable to enable Object Manager");
- goto done;
+ return;
}
l_dbus_add_signal_watch(dbus, "org.test", "/",
@@ -992,6 +969,15 @@ int main(int argc, char *argv[])
NULL, L_DBUS_MATCH_NONE,
om_signal_callback, NULL);
+ l_main_run();
+}
+
+int main(int argc, char *argv[])
+{
+ struct l_signal *signal;
+ sigset_t mask;
+ int i;
+
test_add("Legacy properties get", test_old_get, NULL);
test_add("Legacy properties set", test_old_set, NULL);
test_add("Legacy optional property", test_old_optional_get, NULL);
@@ -1003,21 +989,51 @@ int main(int argc, char *argv[])
test_add("org.freedesktop.DBus.ObjectManager signals",
test_object_manager_signals, NULL);
- l_main_run();
+ sigemptyset(&mask);
+ sigaddset(&mask, SIGINT);
+ sigaddset(&mask, SIGTERM);
+ sigaddset(&mask, SIGCHLD);
- l_queue_destroy(tests, l_free);
+ signal = l_signal_create(&mask, signal_handler, NULL, NULL);
+
+ l_log_set_stderr();
+
+ if (!start_dbus_daemon())
+ return -1;
+
+ for (i = 0; i < 10; i++) {
+ usleep(200 * 1000);
+
+ dbus = l_dbus_new(bus_address);
+ if (dbus)
+ break;
+ }
+
+ test_run();
-done:
l_dbus_destroy(dbus);
- if (dbus_daemon_pid > 0)
- kill(dbus_daemon_pid, SIGKILL);
+ kill(dbus_daemon_pid, SIGKILL);
- if (kdbus_fd >= 0)
- close(kdbus_fd);
+ if (!success)
+ goto done;
+ if (!create_kdbus())
+ goto done;
+
+ dbus = l_dbus_new(bus_address);
+
+ test_run();
+
+ l_dbus_destroy(dbus);
+
+ close(kdbus_fd);
+
+done:
l_signal_remove(signal);
+ l_queue_destroy(tests, l_free);
+
if (!success)
abort();
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 1/2] unit: Remove dbus watch tests using old API
2016-05-06 10:18 [PATCH] unit: End to end FD passing test Andrew Zaborowski
2016-05-06 10:18 ` [PATCH] unit: Try dbus-properties tests on Dbus1 and kdbus Andrew Zaborowski
@ 2016-05-06 10:18 ` Andrew Zaborowski
2016-05-06 15:52 ` Denis Kenzior
2016-05-06 10:18 ` [PATCH 2/2] dbus: Remove now unused filter logic Andrew Zaborowski
2016-05-06 15:50 ` [PATCH] unit: End to end FD passing test Denis Kenzior
3 siblings, 1 reply; 8+ messages in thread
From: Andrew Zaborowski @ 2016-05-06 10:18 UTC (permalink / raw)
To: ell
[-- Attachment #1: Type: text/plain, Size: 7067 bytes --]
---
unit/test-dbus-watch.c | 226 -------------------------------------------------
1 file changed, 226 deletions(-)
diff --git a/unit/test-dbus-watch.c b/unit/test-dbus-watch.c
index 46acf06..6b7bcda 100644
--- a/unit/test-dbus-watch.c
+++ b/unit/test-dbus-watch.c
@@ -24,12 +24,8 @@
#include <config.h>
#endif
-#include <unistd.h>
#include <stdlib.h>
-#include <sys/wait.h>
#include <assert.h>
-#include <time.h>
-#include <stdio.h>
#include <ell/ell.h>
#include "ell/dbus-private.h"
@@ -38,213 +34,6 @@
#define DBUS_SERVICE_DBUS "org.freedesktop.DBus"
#define DBUS_PATH_DBUS "/org/freedesktop/DBus"
#define DBUS_INTERFACE_DBUS "org.freedesktop.DBus"
-#define DBUS_MAXIMUM_MATCH_RULE_LENGTH 1024
-
-struct watch_test {
- const char *name;
- const char *service;
- const char *path;
- const char *interface;
- const char *method;
- const char *expected;
-};
-
-static const struct watch_test match_test_1 = {
- .name = ":1.101",
- .service = DBUS_SERVICE_DBUS,
- .path = DBUS_PATH_DBUS,
- .interface = DBUS_INTERFACE_DBUS,
- .method = "NameOwnerChanged",
- .expected = "type='signal',"
- "sender='org.freedesktop.DBus',"
- "path='/org/freedesktop/DBus',"
- "interface='org.freedesktop.DBus',"
- "member='NameOwnerChanged',"
- "arg0=':1.101'",
-};
-
-static const struct watch_test match_test_2 = {
- .name = ":1.102",
- .service = NULL,
- .path = DBUS_PATH_DBUS,
- .interface = DBUS_INTERFACE_DBUS,
- .method = "NameOwnerChanged",
- .expected = "type='signal',"
- "path='/org/freedesktop/DBus',"
- "interface='org.freedesktop.DBus',"
- "member='NameOwnerChanged',"
- "arg0=':1.102'",
-};
-
-static const struct watch_test match_test_3 = {
- .name = ":1.102",
- .service = DBUS_SERVICE_DBUS,
- .path = NULL,
- .interface = DBUS_INTERFACE_DBUS,
- .method = "NameOwnerChanged",
- .expected = "type='signal',"
- "sender='org.freedesktop.DBus',"
- "interface='org.freedesktop.DBus',"
- "member='NameOwnerChanged',"
- "arg0=':1.102'",
-};
-
-static const struct watch_test match_test_4 = {
- .name = ":1.102",
- .service = DBUS_SERVICE_DBUS,
- .path = DBUS_PATH_DBUS,
- .interface = NULL,
- .method = "NameOwnerChanged",
- .expected = "type='signal',"
- "sender='org.freedesktop.DBus',"
- "path='/org/freedesktop/DBus',"
- "member='NameOwnerChanged',"
- "arg0=':1.102'",
-};
-
-static const struct watch_test match_test_5 = {
- .name = ":1.102",
- .service = DBUS_SERVICE_DBUS,
- .path = DBUS_PATH_DBUS,
- .interface = DBUS_INTERFACE_DBUS,
- .method = NULL,
- .expected = "type='signal',"
- "sender='org.freedesktop.DBus',"
- "path='/org/freedesktop/DBus',"
- "interface='org.freedesktop.DBus',"
- "arg0=':1.102'",
-};
-
-static const struct watch_test match_test_6 = {
- .name = NULL,
- .service = DBUS_SERVICE_DBUS,
- .path = DBUS_PATH_DBUS,
- .interface = DBUS_INTERFACE_DBUS,
- .method = "NameOwnerChanged",
- .expected = "type='signal',"
- "sender='org.freedesktop.DBus',"
- "path='/org/freedesktop/DBus',"
- "interface='org.freedesktop.DBus',"
- "member='NameOwnerChanged'",
-};
-
-static const struct watch_test match_test_7 = {
- .name = ":1.101",
- .service = NULL,
- .path = NULL,
- .interface = DBUS_INTERFACE_DBUS,
- .method = "NameOwnerChanged",
- .expected = "type='signal',"
- "interface='org.freedesktop.DBus',"
- "member='NameOwnerChanged',"
- "arg0=':1.101'",
-};
-
-static const struct watch_test match_test_8 = {
- .name = ":1.101",
- .service = NULL,
- .path = NULL,
- .interface = NULL,
- .method = "NameOwnerChanged",
- .expected = "type='signal',"
- "member='NameOwnerChanged',"
- "arg0=':1.101'",
-};
-
-static const struct watch_test match_test_9 = {
- .name = NULL,
- .service = NULL,
- .path = NULL,
- .interface = NULL,
- .method = NULL,
- .expected = "type='signal'",
-};
-
-static struct watch_test disconnect_test = {
- .name = ":101.1",
- .service = DBUS_SERVICE_DBUS,
- .path = DBUS_PATH_DBUS,
- .interface = DBUS_INTERFACE_DBUS,
- .method = "NameOwnerChanged",
-};
-
-static void test_match(const void *test_data)
-{
- const struct watch_test *test = test_data;
- struct dbus1_filter_data *data;
- char rule[DBUS_MAXIMUM_MATCH_RULE_LENGTH];
-
- data = _dbus1_filter_data_get(NULL,
- NULL,
- test->service,
- test->path,
- test->interface,
- test->method,
- test->name,
- NULL,
- NULL,
- NULL);
-
- _dbus1_filter_format_match(data, rule, sizeof(rule));
-
- assert(strcmp(rule, test->expected) == 0);
-
- _dbus1_filter_data_destroy(data);
-}
-
-static void disconnect_cb(struct l_dbus *dbus, void *user_data)
-{
- int *count = user_data;
-
- (*count)++;
-}
-
-static void send_filter_signal(struct dbus1_filter_data *data,
- const char *name, const char *old, const char *new)
-{
- struct l_dbus_message *message;
-
- message = _dbus_message_new_signal(2,
- DBUS_PATH_DBUS,
- DBUS_INTERFACE_DBUS,
- "NameOwnerChanged");
- l_dbus_message_set_arguments(message, "sss", name, old, new);
- _dbus_message_set_sender(message, DBUS_SERVICE_DBUS);
- _dbus1_signal_dispatcher(message, data);
- l_dbus_message_unref(message);
-}
-
-static void test_disconnect_watch(const void *test_data)
-{
- const struct watch_test *test = test_data;
- struct dbus1_filter_data *data;
- int count = 0;
-
- data = _dbus1_filter_data_get(NULL,
- _dbus1_name_owner_changed_filter,
- test->service,
- test->path,
- test->interface,
- test->method,
- test->name,
- disconnect_cb,
- &count,
- NULL);
-
- send_filter_signal(data, ":0.1", ":0.1", "");
- assert(count == 0);
-
- send_filter_signal(data, ":0.1", ":0.1", ":0.2");
- assert(count == 0);
-
- send_filter_signal(data, ":101.1", ":101.1", ":101.1");
- assert(count == 0);
-
- send_filter_signal(data, ":101.1", ":101.1", "");
- assert(count == 1);
-
- _dbus1_filter_data_destroy(data);
-}
static void test_rule_to_str(const void *test_data)
{
@@ -494,21 +283,6 @@ int main(int argc, char *argv[])
{
l_test_init(&argc, &argv);
- l_test_add("DBus filter NameOwnerChanged", test_match, &match_test_1);
- l_test_add("DBus filter NULL service", test_match, &match_test_2);
- l_test_add("DBus filter NULL path", test_match, &match_test_3);
- l_test_add("DBus filter NULL interface", test_match, &match_test_4);
- l_test_add("DBus filter NULL method", test_match, &match_test_5);
- l_test_add("DBus filter NULL argument", test_match, &match_test_6);
- l_test_add("DBus filter NULL service and path", test_match,
- &match_test_7);
- l_test_add("DBus filter NULL service, path and interface", test_match,
- &match_test_8);
- l_test_add("DBus filter NULL all fields", test_match, &match_test_9);
-
- l_test_add("DBus disconnect watch", test_disconnect_watch,
- &disconnect_test);
-
l_test_add("_dbus_filter_rule_to_str", test_rule_to_str, NULL);
l_test_add("DBus filter tree", test_filter_tree, NULL);
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH 2/2] dbus: Remove now unused filter logic
2016-05-06 10:18 [PATCH] unit: End to end FD passing test Andrew Zaborowski
2016-05-06 10:18 ` [PATCH] unit: Try dbus-properties tests on Dbus1 and kdbus Andrew Zaborowski
2016-05-06 10:18 ` [PATCH 1/2] unit: Remove dbus watch tests using old API Andrew Zaborowski
@ 2016-05-06 10:18 ` Andrew Zaborowski
2016-05-06 15:53 ` Denis Kenzior
2016-05-06 15:50 ` [PATCH] unit: End to end FD passing test Denis Kenzior
3 siblings, 1 reply; 8+ messages in thread
From: Andrew Zaborowski @ 2016-05-06 10:18 UTC (permalink / raw)
To: ell
[-- Attachment #1: Type: text/plain, Size: 5791 bytes --]
---
ell/dbus-private.h | 20 -------
ell/dbus.c | 158 -----------------------------------------------------
2 files changed, 178 deletions(-)
diff --git a/ell/dbus-private.h b/ell/dbus-private.h
index 88bea3c..919639b 100644
--- a/ell/dbus-private.h
+++ b/ell/dbus-private.h
@@ -332,23 +332,3 @@ char *_dbus_filter_rule_to_str(const struct _dbus_filter_condition *rule,
int rule_len);
void _dbus_filter_dispatch(struct l_dbus_message *message, void *user_data);
-
-struct dbus1_filter_data;
-
-void _dbus1_filter_format_match(struct dbus1_filter_data *data, char *rule,
- size_t size);
-
-struct dbus1_filter_data *_dbus1_filter_data_get(struct l_dbus *dbus,
- l_dbus_message_func_t filter,
- const char *sender,
- const char *path,
- const char *interface,
- const char *member,
- const char *argument,
- l_dbus_watch_func_t disconnect_func,
- void *user_data,
- l_dbus_destroy_func_t destroy);
-void _dbus1_filter_data_destroy(void *user_data);
-void _dbus1_signal_dispatcher(struct l_dbus_message *message, void *user_data);
-void _dbus1_name_owner_changed_filter(struct l_dbus_message *message,
- void *user_data);
diff --git a/ell/dbus.c b/ell/dbus.c
index 35378b2..7cb4740 100644
--- a/ell/dbus.c
+++ b/ell/dbus.c
@@ -130,23 +130,6 @@ struct signal_callback {
void *user_data;
};
-struct dbus1_filter_data {
- struct l_dbus *dbus;
- char *sender;
- char *path;
- char *interface;
- char *member;
- char *argument;
- void *user_data;
- l_dbus_message_func_t handle_func;
- l_dbus_destroy_func_t destroy_func;
-
- l_dbus_watch_func_t connect_func;
- l_dbus_watch_func_t disconnect_func;
- char *owner;
- uint32_t get_name_owner_id;
-};
-
static void message_queue_destroy(void *data)
{
struct message_callback *callback = data;
@@ -1757,147 +1740,6 @@ LIB_EXPORT bool l_dbus_object_manager_enable(struct l_dbus *dbus)
dbus);
}
-void _dbus1_filter_format_match(struct dbus1_filter_data *data, char *rule,
- size_t size)
-{
- int offset;
-
- offset = snprintf(rule, size, "type='signal'");
-
- if (data->sender)
- offset += snprintf(rule + offset, size - offset,
- ",sender='%s'", data->sender);
- if (data->path)
- offset += snprintf(rule + offset, size - offset,
- ",path='%s'", data->path);
- if (data->interface)
- offset += snprintf(rule + offset, size - offset,
- ",interface='%s'", data->interface);
- if (data->member)
- offset += snprintf(rule + offset, size - offset,
- ",member='%s'", data->member);
- if (data->argument)
- snprintf(rule + offset, size - offset,
- ",arg0='%s'", data->argument);
-}
-
-struct dbus1_filter_data *_dbus1_filter_data_get(struct l_dbus *dbus,
- l_dbus_message_func_t filter,
- const char *sender,
- const char *path,
- const char *interface,
- const char *member,
- const char *argument,
- l_dbus_watch_func_t disconnect_func,
- void *user_data,
- l_dbus_destroy_func_t destroy)
-{
- struct dbus1_filter_data *data;
-
- data = l_new(struct dbus1_filter_data, 1);
-
- data->dbus = dbus;
- data->handle_func = filter;
- data->sender = l_strdup(sender);
- data->path = l_strdup(path);
- data->interface = l_strdup(interface);
- data->member = l_strdup(member);
- data->argument = l_strdup(argument);
- data->user_data = user_data;
- data->destroy_func = destroy;
-
- data->disconnect_func = disconnect_func;
-
- return data;
-}
-
-void _dbus1_filter_data_destroy(void *user_data)
-{
- struct dbus1_filter_data *data = user_data;
-
- l_free(data->sender);
- l_free(data->path);
- l_free(data->interface);
- l_free(data->member);
- l_free(data->argument);
-
- l_free(data->owner);
-
- if (data->get_name_owner_id)
- l_dbus_cancel(data->dbus, data->get_name_owner_id);
-
- if (data->destroy_func)
- data->destroy_func(data->user_data);
-
- l_free(data);
-}
-
-void _dbus1_signal_dispatcher(struct l_dbus_message *message, void *user_data)
-{
- struct dbus1_filter_data *data = user_data;
- const char *sender, *path, *iface, *member;
-
- if (_dbus_message_get_type(message) != DBUS_MESSAGE_TYPE_SIGNAL)
- return;
-
- sender = l_dbus_message_get_sender(message);
- if (!sender)
- return;
-
- if (data->sender && strcmp(sender, data->sender))
- return;
-
- path = l_dbus_message_get_path(message);
- if (data->path && strcmp(path, data->path))
- return;
-
- iface = l_dbus_message_get_interface(message);
- if (data->interface && strcmp(iface, data->interface))
- return;
-
- member = l_dbus_message_get_member(message);
- if (data->member && strcmp(member, data->member))
- return;
-
- if (data->handle_func)
- data->handle_func(message, data);
-}
-
-void _dbus1_name_owner_changed_filter(struct l_dbus_message *message,
- void *user_data)
-{
- struct dbus1_filter_data *data = user_data;
- char *name, *old, *new;
-
- if (!l_dbus_message_get_arguments(message, "sss",
- &name, &old, &new))
- return;
-
- if (strcmp(name, data->argument))
- return;
-
- if (!data->owner) {
- if (data->get_name_owner_id)
- l_dbus_cancel(data->dbus, data->get_name_owner_id);
-
- data->get_name_owner_id = 0;
- } else {
- if (!strcmp(data->owner, new))
- return;
- }
-
- l_free(data->owner);
- data->owner = l_strdup(new);
-
- if (*new == '\0') {
- if (data->disconnect_func)
- data->disconnect_func(data->dbus, data->user_data);
- } else {
- if (data->connect_func)
- data->connect_func(data->dbus, data->user_data);
- }
-}
-
LIB_EXPORT unsigned int l_dbus_add_disconnect_watch(struct l_dbus *dbus,
const char *name,
l_dbus_watch_func_t disconnect_func,
--
2.7.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH] unit: End to end FD passing test
2016-05-06 10:18 [PATCH] unit: End to end FD passing test Andrew Zaborowski
` (2 preceding siblings ...)
2016-05-06 10:18 ` [PATCH 2/2] dbus: Remove now unused filter logic Andrew Zaborowski
@ 2016-05-06 15:50 ` Denis Kenzior
3 siblings, 0 replies; 8+ messages in thread
From: Denis Kenzior @ 2016-05-06 15:50 UTC (permalink / raw)
To: ell
[-- Attachment #1: Type: text/plain, Size: 335 bytes --]
Hi Andrew,
On 05/06/2016 05:18 AM, Andrew Zaborowski wrote:
> ---
> Makefile.am | 3 +
> unit/test-dbus-message-fds.c | 384 +++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 387 insertions(+)
> create mode 100644 unit/test-dbus-message-fds.c
>
Applied, thanks.
Regards,
-Denis
^ permalink raw reply [flat|nested] 8+ messages in thread