sbus_tests.c revision f7adbb15dbdcb79e291f7cf361a400ce25f7b382
e6d40133bc9f858308654afb1262b8b483ec5922Till Mossakowski sbus_codegen tests.
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder Stef Walter <stefw@redhat.com>
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder Copyright (C) Red Hat, Inc 2014
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder This program is free software; you can redistribute it and/or modify
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder it under the terms of the GNU General Public License as published by
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder the Free Software Foundation; either version 3 of the License, or
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder (at your option) any later version.
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder This program is distributed in the hope that it will be useful,
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder but WITHOUT ANY WARRANTY; without even the implied warranty of
0a26144c20fa9cdcd05011ca5019cbac8e4afae0cmaeder MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0a26144c20fa9cdcd05011ca5019cbac8e4afae0cmaeder GNU General Public License for more details.
93603bd881e43d4ff5a57d7ca4e2b9fa619f25b4cmaeder You should have received a copy of the GNU General Public License
d1c667fd9445963d9d31e2cf5d0ead15e77082a4cmaeder along with this program. If not, see <http://www.gnu.org/licenses/>.
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder * Although one would normally rely on the codegen to generate these
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder * structures, we want to test this functionality *before* we test
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder * the codegen in sbus_codegen_tests ... so these are hand rolled.
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n" \
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder " \"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n" \
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder "<node name=\"/test/leela\">\n" \
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder " <interface name=\"org.freedesktop.DBus.Introspectable\">\n" \
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder " <method name=\"Introspect\">\n" \
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder " <arg type=\"s\" name=\"data\" direction=\"out\" />\n" \
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder " </method>\n" \
bbba6dd86153aacb0f662b182b128df0eb09fd54Christian Maeder " </interface>\n" \
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder " <interface name=\"org.freedesktop.DBus.Properties\">\n" \
a461314c811f4187dff85c8be079a41b2f13f176Christian Maeder " <method name=\"Get\">\n" \
4eb859461f8fd904f40f57261cf23e5c73cf8ecaChristian Maeder " <arg type=\"s\" name=\"interface_name\" direction=\"in\" />\n" \
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder " <arg type=\"s\" name=\"property_name\" direction=\"in\" />\n" \
109a53dbf4c9233f869f63ba7a7f3fece49973c3Christian Maeder " <arg type=\"v\" name=\"value\" direction=\"out\" />\n" \
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder " </method>\n" \
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder " <method name=\"Set\">\n" \
be43c3fa0292555bd126784ae27ff5c1d23438cbChristian Maeder " <arg type=\"s\" name=\"interface_name\" direction=\"in\" />\n" \
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder " <arg type=\"s\" name=\"property_name\" direction=\"in\" />\n" \
16b71dad8d398af412d66a4f4763f1ada5b03d23Christian Maeder " <arg type=\"v\" name=\"value\" direction=\"in\" />\n" \
f39b8dd9651dfcc38b06191cda23cacbfc298323Christian Maeder " </method>\n" \
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder " <method name=\"GetAll\">\n" \
7f7460e7095628f3437b116ee78d3043d11f8febChristian Maeder " <arg type=\"s\" name=\"interface_name\" direction=\"in\" />\n" \
3a9d784341454573b50b32fa1b494e7418df3086Christian Maeder " <arg type=\"a{sv}\" name=\"props\" direction=\"out\" />\n" \
dff1de7ad15d1582e25d636c3724dd202874897fChristian Maeder " </method>\n" \
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder " </interface>\n" \
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder " <interface name=\"test.Pilot\">\n" \
9d6562465b41f17c7967d4e5678f34811d958cb2Christian Maeder " <method name=\"Blink\" />\n" \
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder " <method name=\"Eat\" />\n" \
502483734c83d0bf1eadcc94113d0362f8713784Christian Maeder " </interface>\n" \
7f7460e7095628f3437b116ee78d3043d11f8febChristian Maeder/* our vtable */
38c817b94e0a5b1ae94178b1075c187e07bcc5e1Christian Maederconst struct sbus_method_meta pilot_methods[] = {
b53688bfed888214b485cf76439d57262d80e0a7Christian Maederconst struct sbus_interface_meta pilot_meta = {
b53688bfed888214b485cf76439d57262d80e0a7Christian Maederstatic int blink_handler(struct sbus_request *req, void *data)
083bc1972a66d73749760eab3a90bf4eb9ca7951Christian Maeder ck_assert(req->intf->vtable->meta == &pilot_meta);
fefee7e1dee1ee5f0768a03a4abae88d1ca2c3fdRazvan Pascanu ck_assert_str_eq(req->intf->path, req->path);
8c8545dd3bf34fbcbc16904b65d249658f8f9efcChristian Maeder } else if (strcmp(req->path, "/test/leela") == 0) {
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder ck_assert_str_eq(data, "Crash into the billboard");
33fcc19ef2b59493b4e91eebf701df95fd230765Christian Maeder if (!dbus_message_get_args (req->message, &error,
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder /* Pilot crashes when eyes closed too long */
9f4902edfa3d477e42343e0ec357a2f93b1119d1Christian Maederstatic int eat_handler(struct sbus_request *req, void *data)
9ee80c455784287a8b5e1b6bac1f8efa6a2f4bb3cmaeder const char **array;
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &array, &count,
b76d27eba526ecac2a20400fa505ec5c642ae7d2Dominik Luecke return sbus_request_return_and_finish(req, DBUS_TYPE_INVALID);
2353f65833a3da763392f771223250cd50b8d873Christian Maederstatic int pilot_test_server_init(struct sbus_connection *server, void *unused)
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder ret = sbus_conn_register_iface(server, &pilot_impl.vtable, "/test/leela",
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder "Crash into the billboard");
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder ret = sbus_conn_register_iface(server, &pilot_impl.vtable, "/test/fry",
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder "Don't crash");
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder /* Leela crashes with a duration higher than 5 */
34d14197eb3dd643a8e6ef3ed8cba5629528e97fAivaras Jakubauskas ck_assert(dbus_message_get_args(reply, NULL,
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder /* Fry daesn't crash with a duration lower than 5 */
0b13f102310e03a20b38c870b5acb88712f316a4Christian Maeder ck_assert(dbus_message_get_args(reply, NULL,
2360728d4185c0c04279c999941c64d36626af79Christian Maeder const char *args[] = { "one", "two", "three" };
bc263f610d20a9cd3014ddfca903026127fa0d48Christian Maeder client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
0d79ea4ed8512a802ecb6645edac141e0fbcee3fChristian Maeder DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &array, count,
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder ck_assert(dbus_message_get_args(reply, NULL,
0b13f102310e03a20b38c870b5acb88712f316a4Christian Maeder client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
0b13f102310e03a20b38c870b5acb88712f316a4Christian Maeder ck_assert(dbus_error_has_name(&error, DBUS_ERROR_INVALID_ARGS));
0b13f102310e03a20b38c870b5acb88712f316a4Christian Maeder client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
8bb80c9684e905de8dcfcfb1291542677e7d77b6Christian Maeder ck_assert(dbus_message_get_args(reply, NULL,
b53688bfed888214b485cf76439d57262d80e0a7Christian Maeder ck_assert_str_eq(PILOT_IFACE_INTROSPECT, xml);
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder error = sbus_error_new(ctx, DBUS_ERROR_IO_ERROR, "Input-output error");
dff1de7ad15d1582e25d636c3724dd202874897fChristian Maeder ck_assert(dbus_error_has_name(error, DBUS_ERROR_IO_ERROR));
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder error = sbus_error_new(ctx, DBUS_ERROR_IO_ERROR,
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder ck_assert(dbus_error_has_name(error, DBUS_ERROR_IO_ERROR));
00df6fd583c19393fa141d5a0e21ac74c7bf5b19Christian Maeder /* NULL message must also work */
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder error = sbus_error_new(ctx, DBUS_ERROR_IO_ERROR, NULL);
a3a7d8b3cdf05c8040c62dbcf9a15dc5042cd721Christian Maeder ck_assert(dbus_error_has_name(error, DBUS_ERROR_IO_ERROR));
a31430de8b0632d29f42634d6395e982bf31b14dChristian Maeder tcase_add_test(tc, test_request_parse_bad_args);
bc263f610d20a9cd3014ddfca903026127fa0d48Christian Maeder pc = poptGetContext(argv[0], argc, argv, long_options, 0);
00df6fd583c19393fa141d5a0e21ac74c7bf5b19Christian Maeder fprintf(stderr, "\nInvalid option %s: %s\n\n",
8994ef587ce7c7c39ddd20f0f7e4575838a6694aChristian Maeder /* If CK_VERBOSITY is set, use that, otherwise it defaults to CK_NORMAL */