sbus_codegen_tests.c revision 58229439447d5617913a5a2e173b78105c694842
a8c5a86d183db25a57bf193c06b41e092ec2e151Timo Sirainen/*
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen SSSD
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen sbus_codegen tests.
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen Authors:
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen Stef Walter <stefw@redhat.com>
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
abf015c9682f0f723db87a7c97bc284ef814818fTimo Sirainen Copyright (C) Red Hat, Inc 2014
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen This program is free software; you can redistribute it and/or modify
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen it under the terms of the GNU General Public License as published by
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen the Free Software Foundation; either version 3 of the License, or
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen (at your option) any later version.
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen This program is distributed in the hope that it will be useful,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen but WITHOUT ANY WARRANTY; without even the implied warranty of
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen GNU General Public License for more details.
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen You should have received a copy of the GNU General Public License
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen along with this program. If not, see <http://www.gnu.org/licenses/>.
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen*/
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen#include <stdlib.h>
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen#include <check.h>
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen#include <talloc.h>
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen#include <tevent.h>
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen#include <popt.h>
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen#include "sbus/sssd_dbus_meta.h"
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen#include "tests/common.h"
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen#include "tests/sbus_codegen_tests_generated.h"
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen#include "util/util_errors.h"
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen#define N_ELEMENTS(arr) \
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen (sizeof(arr) / sizeof(arr[0]))
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen/* The following 2 macros were taken from check's project source files (0.9.10)
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen * http://check.sourceforge.net/
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen */
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen#ifndef _ck_assert_uint
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen#define _ck_assert_uint(X, OP, Y) do { \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen uintmax_t _ck_x = (X); \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen uintmax_t _ck_y = (Y); \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen ck_assert_msg(_ck_x OP _ck_y, "Assertion '"#X#OP#Y"' failed: "#X"==%ju, "#Y"==%ju", _ck_x, _ck_y); \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen} while (0)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen#endif /* _ck_assert_uint */
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen#ifndef ck_assert_uint_eq
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen#define ck_assert_uint_eq(X, Y) _ck_assert_uint(X, ==, Y)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen#endif /* ck_assert_uint_eq */
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen
1388b590dbd85245b591346f860bc1319953318aTimo Sirainenstatic const struct sbus_arg_meta *
49621bf0ef1d55aaaa2dc7d76011cbfeabdcfbe1Timo Sirainenfind_arg(const struct sbus_arg_meta *args,
fa2433aebcf3fccfa30ca9eed9b1a9166cf92ee2Timo Sirainen const char *name)
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const struct sbus_arg_meta *arg;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen for (arg = args; arg->name != NULL; arg++) {
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen if (strcmp (arg->name, name) == 0)
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen return arg;
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen }
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen return NULL;
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen}
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen
12797080b552a3c1727b73b61cc7427bec0c7472Timo SirainenSTART_TEST(test_interfaces)
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(com_planetexpress_Ship_meta.name, "com.planetexpress.Ship");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert(com_planetexpress_Ship_meta.methods != NULL);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert(com_planetexpress_Ship_meta.signals != NULL);
367e28a16854ee9f7247b2518f36f5e9163fcc10Timo Sirainen ck_assert(com_planetexpress_Ship_meta.properties != NULL);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen /* Explicit C Symbol */
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen ck_assert_str_eq(test_pilot_meta.name, "com.planetexpress.Pilot");
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen ck_assert(test_pilot_meta.methods != NULL);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert(test_pilot_meta.signals == NULL); /* no signals */
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen ck_assert(test_pilot_meta.properties != NULL);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen
f3e17726502b6cf1912f30aae7e283b5d31ea69cTimo Sirainen}
367e28a16854ee9f7247b2518f36f5e9163fcc10Timo SirainenEND_TEST
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen
367e28a16854ee9f7247b2518f36f5e9163fcc10Timo SirainenSTART_TEST(test_methods)
e438c85a6b0f77889e25913bbbba808d6078282dStephan Bosch{
e438c85a6b0f77889e25913bbbba808d6078282dStephan Bosch const struct sbus_method_meta *method;
5a9912dcadfd467c5ea54bdc3331eef359f0b1c5Timo Sirainen const struct sbus_arg_meta *arg;
367e28a16854ee9f7247b2518f36f5e9163fcc10Timo Sirainen
367e28a16854ee9f7247b2518f36f5e9163fcc10Timo Sirainen method = sbus_meta_find_method(&com_planetexpress_Ship_meta, "MoveUniverse");
38f227941bcf673e0e523c1ac7267bca9cbcd2c4Timo Sirainen ck_assert(method != NULL);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(method->name, "MoveUniverse");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(method->in_args != NULL);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(method->out_args != NULL);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen arg = find_arg(method->in_args, "smoothly");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(arg != NULL);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_str_eq(arg->name, "smoothly");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_str_eq(arg->type, "b");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen arg = find_arg(method->out_args, "where_we_crashed");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(arg != NULL);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_str_eq(arg->name, "where_we_crashed");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_str_eq(arg->type, "s");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen}
2eb2cf8eeb763bd5ca9b6848dce32f0303e88ec1Timo SirainenEND_TEST
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo SirainenSTART_TEST(test_properties)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const struct sbus_property_meta *prop;
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen prop = sbus_meta_find_property(&com_planetexpress_Ship_meta, "Color");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(prop != NULL);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_str_eq(prop->name, "Color");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_str_eq(prop->type, "s");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_int_eq(prop->flags, SBUS_PROPERTY_READABLE);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen}
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo SirainenEND_TEST
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo SirainenSTART_TEST(test_signals)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen{
367e28a16854ee9f7247b2518f36f5e9163fcc10Timo Sirainen const struct sbus_signal_meta *signal;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const struct sbus_arg_meta *arg;
367e28a16854ee9f7247b2518f36f5e9163fcc10Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen signal = sbus_meta_find_signal(&com_planetexpress_Ship_meta, "BecameSentient");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert(signal != NULL);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(signal->name, "BecameSentient");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(signal->args != NULL);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen arg = find_arg(signal->args, "gender");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(arg != NULL);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_str_eq(arg->name, "gender");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_str_eq(arg->type, "s");
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainen}
7af5f78e9fee296e42430d94ef252ff0333d8024Timo SirainenEND_TEST
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainenstatic int
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainenmock_move_universe(struct sbus_request *dbus_req, void *data,
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen bool arg_smoothly, uint32_t arg_speed_factor)
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen{
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen /*
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen * The above arguments should match the handler signature,
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen * and the below finish function should have the right signature.
7af5f78e9fee296e42430d94ef252ff0333d8024Timo Sirainen *
7af5f78e9fee296e42430d94ef252ff0333d8024Timo Sirainen * Not called, just testing compilation
7af5f78e9fee296e42430d94ef252ff0333d8024Timo Sirainen */
7af5f78e9fee296e42430d94ef252ff0333d8024Timo Sirainen ck_assert(FALSE);
7af5f78e9fee296e42430d94ef252ff0333d8024Timo Sirainen return com_planetexpress_Ship_MoveUniverse_finish(dbus_req, "here");
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen}
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainenstatic int
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainenmock_crash_now(struct sbus_request *dbus_req, void *data,
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen const char *where)
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen{
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen /*
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen * One argument, no return value, yet a finish function should
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen * have been generated.
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen *
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen * Not called, just testing compilation
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen */
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(FALSE);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen return com_planetexpress_Ship_crash_now_finish(dbus_req);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen}
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainenstatic int
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainenmock_land(struct sbus_request *req, void *data)
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen{
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen /*
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen * Raw handler, no finish function, no special arguments.
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen *
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainen * Not called, just testing compilation
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainen */
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainen ck_assert(FALSE);
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainen return 0;
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainen}
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainen
47569a4b2b4d3cc55e786177798c922c3c44233dTimo SirainenSTART_TEST(test_vtable)
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen{
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen struct com_planetexpress_Ship vtable = {
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen { &com_planetexpress_Ship_meta, 0 },
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen mock_move_universe,
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen mock_crash_now,
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen mock_land,
417642ddac19708bea6dd2c2bbeaf6a9578d521bTimo Sirainen };
417642ddac19708bea6dd2c2bbeaf6a9578d521bTimo Sirainen
417642ddac19708bea6dd2c2bbeaf6a9578d521bTimo Sirainen /*
417642ddac19708bea6dd2c2bbeaf6a9578d521bTimo Sirainen * These are not silly tests:
417642ddac19708bea6dd2c2bbeaf6a9578d521bTimo Sirainen * - Will fail compilation if c-symbol name was not respected
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen * - Will fail if method order was not respected
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen */
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(vtable.crash_now == mock_crash_now);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(vtable.MoveUniverse == mock_move_universe);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(vtable.Land == mock_land);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen}
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo SirainenEND_TEST
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo SirainenSTART_TEST(test_constants)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(COM_PLANETEXPRESS_SHIP, "com.planetexpress.Ship");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(COM_PLANETEXPRESS_SHIP_MOVEUNIVERSE, "MoveUniverse");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(COM_PLANETEXPRESS_SHIP_CRASH_NOW, "Crash");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(COM_PLANETEXPRESS_SHIP_BECAMESENTIENT, "BecameSentient");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(COM_PLANETEXPRESS_SHIP_COLOR, "Color");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen /* constants for com.planetexpress.Pilot */
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(TEST_PILOT, "com.planetexpress.Pilot");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(TEST_PILOT_FULLNAME, "FullName");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen}
8d3278a82b964217d95c340ec6f82037cdc59d19Timo SirainenEND_TEST
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo SirainenTCase *create_defs_tests(void)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen TCase *tc = tcase_create("defs");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen /* Do some testing */
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen tcase_add_test(tc, test_interfaces);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen tcase_add_test(tc, test_methods);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen tcase_add_test(tc, test_properties);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen tcase_add_test(tc, test_signals);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen tcase_add_test(tc, test_vtable);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen tcase_add_test(tc, test_constants);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen return tc;
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen}
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen/* This is a handler which has all the basic arguments types */
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenstatic int eject_handler(struct sbus_request *req, void *instance_data,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen uint8_t arg_byte, bool arg_boolean,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen int16_t arg_int16, uint16_t arg_uint16, int32_t arg_int32,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen uint32_t arg_uint32, int64_t arg_int64, uint64_t arg_uint64,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen double arg_double, const char *arg_string, const char *arg_object_path,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen uint8_t arg_byte_array[], int len_byte_array,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen int16_t arg_int16_array[], int len_int16_array,
f3e17726502b6cf1912f30aae7e283b5d31ea69cTimo Sirainen uint16_t arg_uint16_array[], int len_uint16_array,
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen int32_t arg_int32_array[], int len_int32_array,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen uint32_t arg_uint32_array[], int len_uint32_array,
f3e17726502b6cf1912f30aae7e283b5d31ea69cTimo Sirainen int64_t arg_int64_array[], int len_int64_array,
f3e17726502b6cf1912f30aae7e283b5d31ea69cTimo Sirainen uint64_t arg_uint64_array[], int len_uint64_array,
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen double arg_double_array[], int len_double_array,
f3e17726502b6cf1912f30aae7e283b5d31ea69cTimo Sirainen const char *arg_string_array[], int len_string_array,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen const char *arg_object_path_array[], int len_object_path_array)
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen{
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen int i;
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen /* Only called for leela, so double check here */
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen ck_assert_str_eq(instance_data, "Crash into the billboard");
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen /* Murge the various values for test case */
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen ck_assert_uint_eq(arg_byte, 11);
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen arg_byte++;
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen ck_assert(arg_boolean == TRUE);
e30b9e07f9657c35ca09ac36d57d60cbe2ebbc66Timo Sirainen arg_boolean = !arg_boolean;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_int_eq(arg_int16, -2222);
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen arg_int16++;
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen ck_assert_uint_eq(arg_uint16, 3333);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen arg_uint16++;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_int_eq(arg_int32, -44444444);
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen arg_int32++;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_uint_eq(arg_uint32, 55555555);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen arg_uint32++;
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen ck_assert(arg_int64 == -6666666666666666);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen arg_int64++;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert(arg_uint64 == 7777777777777777);
e438c85a6b0f77889e25913bbbba808d6078282dStephan Bosch arg_uint64++;
e438c85a6b0f77889e25913bbbba808d6078282dStephan Bosch ck_assert(arg_double == 1.1);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen arg_double++;
4c261fb48e6e36570a0841aa51ca483024d6a0a6Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(arg_string, "hello");
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen arg_string = "bears, beets, battlestar galactica";
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_str_eq(arg_object_path, "/original/object/path");
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen arg_object_path = "/another/object/path";
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen arg_byte_array = talloc_memdup(req, arg_byte_array, sizeof(uint8_t) * len_byte_array);
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen for (i = 0; i < len_byte_array; i++)
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen arg_byte_array[i]++;
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen arg_int16_array = talloc_memdup(req, arg_int16_array, sizeof(int16_t) * len_int16_array);
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen for (i = 0; i < len_int16_array; i++)
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen arg_int16_array[i]++;
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen len_int16_array--;
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch arg_uint16_array = talloc_memdup(req, arg_uint16_array, sizeof(uint16_t) * len_uint16_array);
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen for (i = 0; i < len_uint16_array; i++)
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen arg_uint16_array[i]++;
5a9912dcadfd467c5ea54bdc3331eef359f0b1c5Timo Sirainen
5a9912dcadfd467c5ea54bdc3331eef359f0b1c5Timo Sirainen arg_int32_array = talloc_memdup(req, arg_int32_array, sizeof(int32_t) * len_int32_array);
5a9912dcadfd467c5ea54bdc3331eef359f0b1c5Timo Sirainen for (i = 0; i < len_int32_array; i++)
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen arg_int32_array[i]++;
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen len_int32_array--;
18c209a06941ef583b08b173dadfbe4571995bf9Timo Sirainen
4c261fb48e6e36570a0841aa51ca483024d6a0a6Timo Sirainen arg_uint32_array = talloc_memdup(req, arg_uint32_array, sizeof(uint32_t) * len_uint32_array);
4c261fb48e6e36570a0841aa51ca483024d6a0a6Timo Sirainen for (i = 0; i < len_uint32_array; i++)
18c209a06941ef583b08b173dadfbe4571995bf9Timo Sirainen arg_uint32_array[i]++;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen arg_int64_array = talloc_memdup(req, arg_int64_array, sizeof(int64_t) * len_int64_array);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen for (i = 0; i < len_int64_array; i++)
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen arg_int64_array[i]++;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen arg_uint64_array = talloc_memdup(req, arg_uint64_array, sizeof(uint64_t) * len_uint64_array);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen for (i = 0; i < len_uint64_array; i++)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen arg_uint64_array[i]++;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen arg_double_array = talloc_memdup(req, arg_double_array, sizeof(double) * len_double_array);
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen for (i = 0; i < len_double_array; i++)
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen arg_double_array[i]++;
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen arg_string_array = talloc_memdup(req, arg_string_array, sizeof(char *) * len_string_array);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen for (i = 0; i < len_double_array; i++) {
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen ck_assert_str_eq(arg_string_array[i], "bears");
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen arg_string_array[i] = "beets";
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen }
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen len_string_array--;
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen
b9dc21a94401638c00e40b695998875e1563ce77Timo Sirainen arg_object_path_array = talloc_memdup(req, arg_object_path_array, sizeof(char *) * len_object_path_array);
b9dc21a94401638c00e40b695998875e1563ce77Timo Sirainen for (i = 0; i < len_object_path_array; i++) {
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen ck_assert_str_eq(arg_object_path_array[i], "/original");
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen arg_object_path_array[i] = "/changed";
27ca6cb0548c6478005c77d04be641356ec7d83cTimo Sirainen }
27ca6cb0548c6478005c77d04be641356ec7d83cTimo Sirainen
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen /* And reply with those values */
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen return test_pilot_Eject_finish(req, arg_byte, arg_boolean, arg_int16,
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen arg_uint16, arg_int32, arg_uint32,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen arg_int64, arg_uint64, arg_double,
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen arg_string, arg_object_path,
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen arg_byte_array, len_byte_array,
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen arg_int16_array, len_int16_array,
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen arg_uint16_array, len_uint16_array,
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen arg_int32_array, len_int32_array,
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen arg_uint32_array, len_uint32_array,
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen arg_int64_array, len_int64_array,
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen arg_uint64_array, len_uint64_array,
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen arg_double_array, len_double_array,
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen arg_string_array, len_string_array,
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen arg_object_path_array, len_object_path_array);
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen}
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen#define getter_body(in, out) do { \
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert(dbus_req != NULL); \
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert(out != NULL); \
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen *out = in; \
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen} while(0);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenstatic const bool pilot_bool = true;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenvoid pilot_get_boolean_handler(struct sbus_request *dbus_req,
9261dbf0675204898c6557591c7aa376e23a52b2Timo Sirainen void *instance_data,
9261dbf0675204898c6557591c7aa376e23a52b2Timo Sirainen bool *val)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen{
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen getter_body(pilot_bool, val);
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen}
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenstatic const char *pilot_full_name = "Turanga Leela";
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenvoid pilot_get_full_name_handler(struct sbus_request *dbus_req,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen void *instance_data,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen const char **name)
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen{
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen getter_body(pilot_full_name, name);
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen}
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenstatic const uint8_t pilot_byte = 42;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenvoid pilot_get_byte_handler(struct sbus_request *dbus_req,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen void *instance_data,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen uint8_t *byte)
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen getter_body(pilot_byte, byte);
9261dbf0675204898c6557591c7aa376e23a52b2Timo Sirainen}
9261dbf0675204898c6557591c7aa376e23a52b2Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenstatic const int16_t pilot_int16 = -123;
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenvoid pilot_get_int16_handler(struct sbus_request *dbus_req,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen void *instance_data,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen int16_t *int16)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen{
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen getter_body(pilot_int16, int16);
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen}
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenstatic const uint16_t pilot_uint16 = 123;
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenvoid pilot_get_uint16_handler(struct sbus_request *dbus_req,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen void *instance_data,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen uint16_t *uint16)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen getter_body(pilot_uint16, uint16);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainenstatic const int32_t pilot_int32 = -456;
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_int32_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen int32_t *int32)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen getter_body(pilot_int32, int32);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic const uint32_t pilot_uint32 = 456;
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_uint32_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen uint32_t *uint32)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen getter_body(pilot_uint32, uint32);
b55f914c0ade77252cfd798ea8eb9a84bda56315Timo Sirainen}
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainenstatic const int64_t pilot_int64 = -456;
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainenvoid pilot_get_int64_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen int64_t *int64)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen getter_body(pilot_int64, int64);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic const uint64_t pilot_uint64 = 456;
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_uint64_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen uint64_t *uint64)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen getter_body(pilot_uint64, uint64);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic const double pilot_double = 3.14;
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_double_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
b55f914c0ade77252cfd798ea8eb9a84bda56315Timo Sirainen double *double_val)
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen{
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen getter_body(pilot_double, double_val);
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen}
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainenstatic const char *pilot_string = "leela";
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainenvoid pilot_get_string_handler(struct sbus_request *dbus_req,
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen void *instance_data,
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen const char **string_val)
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen *string_val = pilot_string;
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainenstatic const char *pilot_path = "/path/leela";
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainenvoid pilot_get_objpath_handler(struct sbus_request *dbus_req,
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainen void *instance_data,
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainen const char **path_val)
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainen{
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainen *path_val = pilot_path;
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainen}
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainen
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainenvoid pilot_get_null_string_handler(struct sbus_request *dbus_req,
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen void *instance_data,
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainen const char **string_val)
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen *string_val = NULL;
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen#define array_getter_body(in, out, outlen) do { \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen ck_assert(dbus_req != NULL); \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen ck_assert(out != NULL); \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen ck_assert(outlen != NULL); \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen *out = in; \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen *outlen = N_ELEMENTS(in); \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen} while(0);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic uint8_t pilot_byte_array[] = { 42, 0 };
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_byte_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen uint8_t **arr_out, int *arr_len)
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_byte_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainenstatic int16_t pilot_int16_array[] = { -123, 0 };
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_int16_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen int16_t **arr_out, int *arr_len)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen array_getter_body(pilot_int16_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic uint16_t pilot_uint16_array[] = { 123, 0 };
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenvoid pilot_get_uint16_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen uint16_t **arr_out, int *arr_len)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_uint16_array, arr_out, arr_len);
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen}
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainenstatic int32_t pilot_int32_array[] = { -456, 0 };
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_int32_array_handler(struct sbus_request *dbus_req,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen void *instance_data,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen int32_t **arr_out, int *arr_len)
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen{
216cd45a5f47c9bd46fe67c1b3bd6b1a42f6e39cTimo Sirainen array_getter_body(pilot_int32_array, arr_out, arr_len);
216cd45a5f47c9bd46fe67c1b3bd6b1a42f6e39cTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainenstatic uint32_t pilot_uint32_array[] = { 456, 0 };
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenvoid pilot_get_uint32_array_handler(struct sbus_request *dbus_req,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen void *instance_data,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen uint32_t **arr_out, int *arr_len)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_uint32_array, arr_out, arr_len);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic int64_t pilot_int64_array[] = { -789, 0 };
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenvoid pilot_get_int64_array_handler(struct sbus_request *dbus_req,
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen void *instance_data,
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen int64_t **arr_out, int *arr_len)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen array_getter_body(pilot_int64_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen
216cd45a5f47c9bd46fe67c1b3bd6b1a42f6e39cTimo Sirainenstatic uint64_t pilot_uint64_array[] = { 789, 0 };
216cd45a5f47c9bd46fe67c1b3bd6b1a42f6e39cTimo Sirainenvoid pilot_get_uint64_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen uint64_t **arr_out, int *arr_len)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_uint64_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic double pilot_double_array[] = { 3.14, 0 };
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_double_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *instance_data,
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen double **arr_out, int *arr_len)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen array_getter_body(pilot_double_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic const char *pilot_string_array[] = { "Turanga", "Leela" };
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_string_array_handler(struct sbus_request *dbus_req,
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen void *data,
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen const char ***arr_out,
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen int *arr_len)
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen{
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen array_getter_body(pilot_string_array, arr_out, arr_len);
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen}
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainenstatic const char *pilot_path_array[] = { "/some/path", "/another/path" };
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainenvoid pilot_get_path_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen void *data,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen const char ***arr_out,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen int *arr_len)
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen{
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_path_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen}
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstruct test_pilot pilot_iface = {
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen { &test_pilot_meta, 0 },
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .Eject = eject_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_FullName = pilot_get_full_name_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_byte = pilot_get_byte_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_boolean = pilot_get_boolean_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_int16 = pilot_get_int16_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_uint16 = pilot_get_uint16_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_int32 = pilot_get_int32_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_uint32 = pilot_get_uint32_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_int64 = pilot_get_int64_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_uint64 = pilot_get_uint64_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_double = pilot_get_double_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_string = pilot_get_string_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_object_path = pilot_get_objpath_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen .test_pilot_get_null_string = pilot_get_null_string_handler,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
7f472e15b5f19a3536634863950c80a88079da23Timo Sirainen .test_pilot_get_byte_array = pilot_get_byte_array_handler,
7f472e15b5f19a3536634863950c80a88079da23Timo Sirainen .test_pilot_get_int16_array = pilot_get_int16_array_handler,
0139fcb57a88f6ed27a1bb4a1bd537b04fd2b5d6Timo Sirainen .test_pilot_get_uint16_array = pilot_get_uint16_array_handler,
0139fcb57a88f6ed27a1bb4a1bd537b04fd2b5d6Timo Sirainen .test_pilot_get_int32_array = pilot_get_int32_array_handler,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen .test_pilot_get_uint32_array = pilot_get_uint32_array_handler,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen .test_pilot_get_int64_array = pilot_get_int64_array_handler,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen .test_pilot_get_uint64_array = pilot_get_uint64_array_handler,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen .test_pilot_get_double_array = pilot_get_double_array_handler,
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen .test_pilot_get_string_array = pilot_get_string_array_handler,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen .test_pilot_get_object_path_array = pilot_get_path_array_handler,
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen};
9aceb071780a949f4e8bf41d3cf80735d9ac7fdfTimo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenstatic int pilot_test_server_init(struct sbus_connection *server, void *unused)
1503ac7619d97193d6690292b5f9523552c5d6ceTimo Sirainen{
1503ac7619d97193d6690292b5f9523552c5d6ceTimo Sirainen int ret;
1503ac7619d97193d6690292b5f9523552c5d6ceTimo Sirainen
1503ac7619d97193d6690292b5f9523552c5d6ceTimo Sirainen ret = sbus_conn_add_interface(server,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen sbus_new_interface(server, "/test/leela",
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen &pilot_iface.vtable,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen "Crash into the billboard"));
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen ck_assert_int_eq(ret, EOK);
f3e17726502b6cf1912f30aae7e283b5d31ea69cTimo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen return EOK;
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen}
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen
b00c511e4675c4a1270d92924fc445cfb8631cf3Timo SirainenSTART_TEST(test_marshal_basic_types)
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen{
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen unsigned char arg_byte = 11;
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen dbus_bool_t arg_boolean = TRUE;
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen dbus_int16_t arg_int16 = -2222;
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen dbus_uint16_t arg_uint16 = 3333;
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen dbus_int32_t arg_int32 = -44444444;
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen dbus_uint32_t arg_uint32 = 55555555;
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen dbus_int64_t arg_int64 = -6666666666666666;
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen dbus_uint64_t arg_uint64 = 7777777777777777;
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen double arg_double = 1.1;
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen const char *arg_string = "hello";
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen const char *arg_object_path = "/original/object/path";
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen unsigned char v_byte[] = { 11, 12 };
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen dbus_int16_t v_int16[] = { 1, -22, 333, -4444 };
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen dbus_uint16_t v_uint16[] = { 1, 2, 3, 4, 5 };
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen dbus_int32_t v_int32[] = { -1, -23, 34, -56, -90000000, 78 };
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen dbus_uint32_t v_uint32[] = { 11111111, 22222222, 33333333 };
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen dbus_int64_t v_int64[] = { -6666666666666666, 7777777777777777 };
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen dbus_uint64_t v_uint64[] = { 7777777777777777, 888888888888888888 };
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen double v_double[] = { 1.1, 2.2, 3.3 };
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen char *v_string[] = { "bears", "bears", "bears" };
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen char *v_object_path[] = { "/original", "/original" };
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen unsigned char *arr_byte = v_byte;
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen dbus_int16_t *arr_int16 = v_int16;
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen dbus_uint16_t *arr_uint16 = v_uint16;
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen dbus_int32_t *arr_int32 = v_int32;
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen dbus_uint32_t *arr_uint32 = v_uint32;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen dbus_int64_t *arr_int64 = v_int64;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen dbus_uint64_t *arr_uint64 = v_uint64;
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen double *arr_double = v_double;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen char **arr_string = v_string;
62fc2fe221eccc834ac6b11b94b55335d5027cd1Timo Sirainen char **arr_object_path = v_object_path;
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
62fc2fe221eccc834ac6b11b94b55335d5027cd1Timo Sirainen int len_byte = N_ELEMENTS(v_byte);
62fc2fe221eccc834ac6b11b94b55335d5027cd1Timo Sirainen int len_int16 = N_ELEMENTS(v_int16);
62fc2fe221eccc834ac6b11b94b55335d5027cd1Timo Sirainen int len_uint16 = N_ELEMENTS(v_uint16);
62fc2fe221eccc834ac6b11b94b55335d5027cd1Timo Sirainen int len_int32 = N_ELEMENTS(v_int32);
62fc2fe221eccc834ac6b11b94b55335d5027cd1Timo Sirainen int len_uint32 = N_ELEMENTS(v_uint32);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen int len_int64 = N_ELEMENTS(v_int64);
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen int len_uint64 = N_ELEMENTS(v_uint64);
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen int len_double = N_ELEMENTS(v_double);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen int len_string = N_ELEMENTS(v_string);
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen int len_object_path = N_ELEMENTS(v_object_path);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen TALLOC_CTX *ctx;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBusConnection *client;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen DBusError error = DBUS_ERROR_INIT;
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen DBusMessage *reply;
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen ctx = talloc_new(NULL);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen reply = test_dbus_call_sync(client,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen "/test/leela",
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen TEST_PILOT,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen TEST_PILOT_EJECT,
1e40531c1de45bc87e72a9d5866ff2af79b63cebTimo Sirainen &error,
1e40531c1de45bc87e72a9d5866ff2af79b63cebTimo Sirainen DBUS_TYPE_BYTE, &arg_byte,
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen DBUS_TYPE_BOOLEAN, &arg_boolean,
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen DBUS_TYPE_INT16, &arg_int16,
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen DBUS_TYPE_UINT16, &arg_uint16,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen DBUS_TYPE_INT32, &arg_int32,
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen DBUS_TYPE_UINT32, &arg_uint32,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen DBUS_TYPE_INT64, &arg_int64,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen DBUS_TYPE_UINT64, &arg_uint64,
e438c85a6b0f77889e25913bbbba808d6078282dStephan Bosch DBUS_TYPE_DOUBLE, &arg_double,
5a9912dcadfd467c5ea54bdc3331eef359f0b1c5Timo Sirainen DBUS_TYPE_STRING, &arg_string,
ab90f702ceedb7ba445a9a592be0b213b27cbafaStephan Bosch DBUS_TYPE_OBJECT_PATH, &arg_object_path,
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &arr_byte, len_byte,
330096f204a221d8b8beb7f408a03d28c7572537Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_INT16, &arr_int16, len_int16,
330096f204a221d8b8beb7f408a03d28c7572537Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_UINT16, &arr_uint16, len_uint16,
e438c85a6b0f77889e25913bbbba808d6078282dStephan Bosch DBUS_TYPE_ARRAY, DBUS_TYPE_INT32, &arr_int32, len_int32,
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &arr_uint32, len_uint32,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_INT64, &arr_int64, len_int64,
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_UINT64, &arr_uint64, len_uint64,
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_DOUBLE, &arr_double, len_double,
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &arr_string, len_string,
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &arr_object_path, len_object_path,
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen DBUS_TYPE_INVALID);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen ck_assert(reply != NULL);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen ck_assert(!dbus_error_is_set(&error));
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen ck_assert(dbus_message_get_args(reply, NULL,
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen DBUS_TYPE_BYTE, &arg_byte,
fa2a11210f20fb8998ed656f75e163191c8047e6Timo Sirainen DBUS_TYPE_BOOLEAN, &arg_boolean,
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen DBUS_TYPE_INT16, &arg_int16,
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen DBUS_TYPE_UINT16, &arg_uint16,
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen DBUS_TYPE_INT32, &arg_int32,
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen DBUS_TYPE_UINT32, &arg_uint32,
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen DBUS_TYPE_INT64, &arg_int64,
02a6291366caff79793db35d479e2a062bec2af4Timo Sirainen DBUS_TYPE_UINT64, &arg_uint64,
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen DBUS_TYPE_DOUBLE, &arg_double,
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen DBUS_TYPE_STRING, &arg_string,
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen DBUS_TYPE_OBJECT_PATH, &arg_object_path,
573085b4b25b0bbae8d27969df2c91702eefa23eTimo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &arr_byte, &len_byte,
0ee3fdb5e94ae6f34cb873ca3c9858342621e55fTimo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_INT16, &arr_int16, &len_int16,
0ee3fdb5e94ae6f34cb873ca3c9858342621e55fTimo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_UINT16, &arr_uint16, &len_uint16,
0ee3fdb5e94ae6f34cb873ca3c9858342621e55fTimo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_INT32, &arr_int32, &len_int32,
0ee3fdb5e94ae6f34cb873ca3c9858342621e55fTimo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &arr_uint32, &len_uint32,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_INT64, &arr_int64, &len_int64,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_UINT64, &arr_uint64, &len_uint64,
e5acc283bf030b0b5c79ca4e52d315c516a299faPascal Volk DBUS_TYPE_ARRAY, DBUS_TYPE_DOUBLE, &arr_double, &len_double,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &arr_string, &len_string,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &arr_object_path, &len_object_path,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBUS_TYPE_INVALID));
1b04762685272a53643ac2179939537a44c7c044Timo Sirainen
1b04762685272a53643ac2179939537a44c7c044Timo Sirainen ck_assert_uint_eq(arg_byte, 12);
1b04762685272a53643ac2179939537a44c7c044Timo Sirainen ck_assert(arg_boolean == FALSE);
1b04762685272a53643ac2179939537a44c7c044Timo Sirainen ck_assert_int_eq(arg_int16, -2221);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen ck_assert_uint_eq(arg_uint16, 3334);
303e375b7e76278f4ec541f49af0476d3e4ee710Timo Sirainen ck_assert_int_eq(arg_int32, -44444443);
303e375b7e76278f4ec541f49af0476d3e4ee710Timo Sirainen ck_assert_uint_eq(arg_uint32, 55555556);
303e375b7e76278f4ec541f49af0476d3e4ee710Timo Sirainen ck_assert(arg_int64 ==-6666666666666665);
303e375b7e76278f4ec541f49af0476d3e4ee710Timo Sirainen ck_assert(arg_uint64 == 7777777777777778);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert(arg_double == 2.1);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(arg_string, "bears, beets, battlestar galactica");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(arg_object_path, "/another/object/path");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_int_eq(len_byte, 2);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_int_eq(arr_byte[0], 12);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_int_eq(arr_byte[1], 13);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_int_eq(len_int16, 3);
ca4526e3b5fbf5ea3dd477a2098522a44c9ac52cTimo Sirainen ck_assert_int_eq(arr_int16[0], 2);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_int_eq(arr_int16[1], -21);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_int_eq(arr_int16[2], 334);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_int_eq(len_uint16, 5);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_uint_eq(arr_uint16[0], 2);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_uint_eq(arr_uint16[1], 3);
ca4526e3b5fbf5ea3dd477a2098522a44c9ac52cTimo Sirainen ck_assert_uint_eq(arr_uint16[2], 4);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_uint_eq(arr_uint16[3], 5);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_uint_eq(arr_uint16[4], 6);
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen ck_assert_int_eq(len_int32, 5);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen ck_assert_int_eq(arr_int32[0], 0);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen ck_assert_int_eq(arr_int32[1], -22);
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen ck_assert_int_eq(arr_int32[2], 35);
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen ck_assert_int_eq(arr_int32[3], -55);
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen ck_assert_int_eq(arr_int32[4], -89999999);
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen ck_assert_int_eq(len_uint32, 3);
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen ck_assert_uint_eq(arr_uint32[0], 11111112);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_uint_eq(arr_uint32[1], 22222223);
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen ck_assert_uint_eq(arr_uint32[2], 33333334);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen ck_assert_int_eq(len_int64, 2);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert(arr_int64[0] == -6666666666666665);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert(arr_int64[1] == 7777777777777778);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen
8abe071cb14a622b9d84b00a9269f96d01a576f6Timo Sirainen ck_assert_int_eq(len_uint64, 2);
8abe071cb14a622b9d84b00a9269f96d01a576f6Timo Sirainen ck_assert(arr_uint64[0] == 7777777777777778);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert(arr_uint64[1] == 888888888888888889);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_int_eq(len_double, 3);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert(arr_double[0] == 2.1);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert(arr_double[1] == 3.2);
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen ck_assert(arr_double[2] == 4.3);
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_int_eq(len_string, 2);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_str_eq(arr_string[0], "beets");
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_str_eq(arr_string[1], "beets");
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen dbus_free_string_array(arr_string);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_int_eq(len_object_path, 2);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_str_eq(arr_object_path[0], "/changed");
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_str_eq(arr_object_path[1], "/changed");
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen dbus_free_string_array(arr_object_path);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen dbus_message_unref (reply);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen talloc_free(ctx);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen}
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo SirainenEND_TEST
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen
0992011130e9d0a498ca860ddbe4028398a530c5Timo Sirainenstatic void parse_get_reply(DBusMessage *reply, const int type, void *val)
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen{
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen DBusMessageIter iter;
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen DBusMessageIter variter;
0992011130e9d0a498ca860ddbe4028398a530c5Timo Sirainen dbus_bool_t dbret;
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen dbret = dbus_message_iter_init(reply, &iter);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert(dbret == TRUE);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_int_eq(dbus_message_iter_get_arg_type(&iter), DBUS_TYPE_VARIANT);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen dbus_message_iter_recurse(&iter, &variter);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_int_eq(dbus_message_iter_get_arg_type(&variter), type);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen dbus_message_iter_get_basic(&variter, val);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen}
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainenstatic void call_get(DBusConnection *client,
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen const char *object_path,
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen const char *iface,
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen const char *prop,
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen int type,
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen void *val)
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen{
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBusMessage *reply;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen DBusError error = DBUS_ERROR_INIT;
3c932c0a21349f23dd38c50c12b3a24717dfbc28Timo Sirainen
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen reply = test_dbus_call_sync(client,
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen object_path,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBUS_PROPERTIES_INTERFACE,
3c932c0a21349f23dd38c50c12b3a24717dfbc28Timo Sirainen "Get",
3c932c0a21349f23dd38c50c12b3a24717dfbc28Timo Sirainen &error,
3c932c0a21349f23dd38c50c12b3a24717dfbc28Timo Sirainen DBUS_TYPE_STRING, &iface,
3c932c0a21349f23dd38c50c12b3a24717dfbc28Timo Sirainen DBUS_TYPE_STRING, &prop,
3c932c0a21349f23dd38c50c12b3a24717dfbc28Timo Sirainen DBUS_TYPE_INVALID);
3c932c0a21349f23dd38c50c12b3a24717dfbc28Timo Sirainen ck_assert(reply != NULL);
3c932c0a21349f23dd38c50c12b3a24717dfbc28Timo Sirainen parse_get_reply(reply, type, val);
1cb065514fcfe00b684ee274239e3f0390c7fc47Timo Sirainen}
1cb065514fcfe00b684ee274239e3f0390c7fc47Timo Sirainen
1cb065514fcfe00b684ee274239e3f0390c7fc47Timo SirainenSTART_TEST(test_get_basic_types)
1cb065514fcfe00b684ee274239e3f0390c7fc47Timo Sirainen{
1cb065514fcfe00b684ee274239e3f0390c7fc47Timo Sirainen TALLOC_CTX *ctx;
1cb065514fcfe00b684ee274239e3f0390c7fc47Timo Sirainen DBusConnection *client;
1cb065514fcfe00b684ee274239e3f0390c7fc47Timo Sirainen dbus_bool_t bool_val;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen const char *string_val;
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen const char *path_val;
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen uint8_t byte_val;
f934b271c69c7b3e5e3bca23ff9b3ab6187262c2Timo Sirainen int16_t int16_val;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen uint16_t uint16_val;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen int32_t int32_val;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen uint32_t uint32_val;
f38485358ffc04c3466b917770575e29deef24c3Timo Sirainen int64_t int64_val;
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen uint64_t uint64_val;
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen double double_val;
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ctx = talloc_new(NULL);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "boolean",
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen DBUS_TYPE_BOOLEAN, &bool_val);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert(bool_val == pilot_bool);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "FullName",
878a83a906e1be6354b563ead096955a22ad5fbeTimo Sirainen DBUS_TYPE_STRING, &string_val);
878a83a906e1be6354b563ead096955a22ad5fbeTimo Sirainen ck_assert_str_eq(string_val, pilot_full_name);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen
b879ed8dd4b5850987e6b89a92f794d87c6be7d7Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "byte",
b879ed8dd4b5850987e6b89a92f794d87c6be7d7Timo Sirainen DBUS_TYPE_BYTE, &byte_val);
b879ed8dd4b5850987e6b89a92f794d87c6be7d7Timo Sirainen ck_assert_int_eq(byte_val, pilot_byte);
b879ed8dd4b5850987e6b89a92f794d87c6be7d7Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "int16",
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen DBUS_TYPE_INT16, &int16_val);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_int_eq(int16_val, pilot_int16);
705f6fbad395e6f014838e797b7dbcaceafd2f1dTimo Sirainen
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "uint16",
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen DBUS_TYPE_UINT16, &uint16_val);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert_int_eq(uint16_val, pilot_uint16);
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "int32",
8f5b34c22e4c3bfb35ca13c4744867eb5ddbd3d6Timo Sirainen DBUS_TYPE_INT32, &int32_val);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_int_eq(int32_val, pilot_int32);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "uint32",
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen DBUS_TYPE_UINT32, &uint32_val);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_int_eq(uint32_val, pilot_uint32);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen
2eb0402a28bd0422e0170160808c67d6c7274689Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "int64",
97180ea9c26c4de0807daaad21e03c80643b09fdTimo Sirainen DBUS_TYPE_INT64, &int64_val);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_int_eq(int64_val, pilot_int64);
2eb0402a28bd0422e0170160808c67d6c7274689Timo Sirainen
2eb0402a28bd0422e0170160808c67d6c7274689Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "uint64",
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen DBUS_TYPE_UINT64, &uint64_val);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen ck_assert_int_eq(uint64_val, pilot_uint64);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "double",
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen DBUS_TYPE_DOUBLE, &double_val);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen ck_assert_int_eq(double_val, pilot_double);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "string",
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen DBUS_TYPE_STRING, &string_val);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen ck_assert_str_eq(string_val, pilot_string);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "object_path",
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen DBUS_TYPE_OBJECT_PATH, &path_val);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen ck_assert_str_eq(path_val, pilot_path);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen /* If a string getter returns NULL, the caller should receive "" */
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "null_string",
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen DBUS_TYPE_STRING, &string_val);
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen ck_assert_str_eq(string_val, "");
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen}
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo SirainenEND_TEST
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainenstatic void parse_get_array_reply(DBusMessage *reply, const int type,
9b78c0d5e13141f4df6c6e483f854e5acb861288Timo Sirainen void **values, int *nels)
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen{
dbe06905918a415a34c5621b9fdf45be0b9c8e64Timo Sirainen DBusMessageIter iter;
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen DBusMessageIter variter;
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen DBusMessageIter arriter;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen dbus_bool_t dbret;
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainen
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainen dbret = dbus_message_iter_init(reply, &iter);
8d5c97bf940e43e8ec6e9f1ec8655f3b20edafbeTimo Sirainen ck_assert(dbret == TRUE);
8d5c97bf940e43e8ec6e9f1ec8655f3b20edafbeTimo Sirainen ck_assert_int_eq(dbus_message_iter_get_arg_type(&iter), DBUS_TYPE_VARIANT);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen dbus_message_iter_recurse(&iter, &variter);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_int_eq(dbus_message_iter_get_arg_type(&variter), DBUS_TYPE_ARRAY);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_int_eq(dbus_message_iter_get_element_type(&variter), type);
d5eb47a791ec56149fd711cd8e44efc8babeaae5Timo Sirainen dbus_message_iter_recurse(&variter, &arriter);
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen if (type == DBUS_TYPE_STRING || type == DBUS_TYPE_OBJECT_PATH) {
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen int n = 0, i = 0;;
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen const char **strings;
762e17079d29d9f1838114ff5fec9ceaba8eb6a8Timo Sirainen const char *s;
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen
50349cd047ca9e7c100cbeb70acfe26672649959Timo Sirainen do {
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen n++;
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen } while (dbus_message_iter_next(&arriter));
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen /* Allocating on NULL is bad, but this is unit test */
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen strings = talloc_array(NULL, const char *, n);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert(strings != NULL);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen dbus_message_iter_recurse(&variter, &arriter);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen do {
d2ca20a479e76af8557b4a74b0b51e4de0e3c9e3Timo Sirainen dbus_message_iter_get_basic(&arriter, &s);
d2ca20a479e76af8557b4a74b0b51e4de0e3c9e3Timo Sirainen strings[i] = talloc_strdup(strings, s);
d2ca20a479e76af8557b4a74b0b51e4de0e3c9e3Timo Sirainen ck_assert(strings[i] != NULL);
674f541b16689c0ed090dac32db94463c5af3977Timo Sirainen i++;
674f541b16689c0ed090dac32db94463c5af3977Timo Sirainen } while (dbus_message_iter_next(&arriter));
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen
674f541b16689c0ed090dac32db94463c5af3977Timo Sirainen *nels = n;
faca2afa3576c50caf28e0f009555325d2a49e0bTimo Sirainen *values = strings;
faca2afa3576c50caf28e0f009555325d2a49e0bTimo Sirainen } else {
faca2afa3576c50caf28e0f009555325d2a49e0bTimo Sirainen /* Fixed types are easy */
faca2afa3576c50caf28e0f009555325d2a49e0bTimo Sirainen dbus_message_iter_get_fixed_array(&arriter, values, nels);
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen }
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen}
dbe06905918a415a34c5621b9fdf45be0b9c8e64Timo Sirainen
674f541b16689c0ed090dac32db94463c5af3977Timo Sirainenstatic void call_get_array(DBusConnection *client,
d2ca20a479e76af8557b4a74b0b51e4de0e3c9e3Timo Sirainen const char *object_path,
d2ca20a479e76af8557b4a74b0b51e4de0e3c9e3Timo Sirainen const char *iface,
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen const char *prop,
9b78c0d5e13141f4df6c6e483f854e5acb861288Timo Sirainen int type,
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen void **values,
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen int *nels)
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen{
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen DBusMessage *reply;
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen DBusError error = DBUS_ERROR_INIT;
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen
9b78c0d5e13141f4df6c6e483f854e5acb861288Timo Sirainen reply = test_dbus_call_sync(client,
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen object_path,
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen DBUS_PROPERTIES_INTERFACE,
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen "Get",
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen &error,
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainen DBUS_TYPE_STRING, &iface,
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainen DBUS_TYPE_STRING, &prop,
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen DBUS_TYPE_INVALID);
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen ck_assert(reply != NULL);
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen parse_get_array_reply(reply, type, values, nels);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen}
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen
9b78c0d5e13141f4df6c6e483f854e5acb861288Timo Sirainen#define _check_array(reply, len, known, fn) do { \
9b78c0d5e13141f4df6c6e483f854e5acb861288Timo Sirainen fn(len, 2); \
9b78c0d5e13141f4df6c6e483f854e5acb861288Timo Sirainen fn(reply[0], known[0]); \
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen fn(reply[1], known[1]); \
9b78c0d5e13141f4df6c6e483f854e5acb861288Timo Sirainen} while(0); \
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen#define check_int_array(reply, len, known) \
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen _check_array(reply, len, known, ck_assert_int_eq)
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen#define check_uint_array(reply, len, known) \
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen _check_array(reply, len, known, ck_assert_uint_eq)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen
8d3278a82b964217d95c340ec6f82037cdc59d19Timo SirainenSTART_TEST(test_get_basic_array_types)
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen{
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen TALLOC_CTX *ctx;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen DBusConnection *client;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen const char **string_arr_val;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen int string_arr_len;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen const char **path_arr_val;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen int path_arr_len;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen uint8_t *byte_arr_val;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen int byte_arr_len;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen int16_t *int16_arr_val;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen int int16_arr_len;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen uint16_t *uint16_arr_val;
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen int uint16_arr_len;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen int32_t *int32_arr_val;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen int int32_arr_len;
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen uint32_t *uint32_arr_val;
f934b271c69c7b3e5e3bca23ff9b3ab6187262c2Timo Sirainen int uint32_arr_len;
72f2a851238e5661695c63bff0e9a9e800ba577aTimo Sirainen int64_t *int64_arr_val;
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen int int64_arr_len;
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen uint64_t *uint64_arr_val;
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen int uint64_arr_len;
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen double *double_arr_val;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen int double_arr_len;
50b9773bebe5c66485728e21e4da6e99db388c92Timo Sirainen
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen ctx = talloc_new(NULL);
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "byte_array",
9ba7e76c20be775f368254e3059a6189fe789f16Timo Sirainen DBUS_TYPE_BYTE, (void **) &byte_arr_val, &byte_arr_len);
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen check_uint_array(byte_arr_val, byte_arr_len, pilot_byte_array);
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen
9ba7e76c20be775f368254e3059a6189fe789f16Timo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "int16_array",
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen DBUS_TYPE_INT16, (void **) &int16_arr_val, &int16_arr_len);
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen check_int_array(int16_arr_val, int16_arr_len, pilot_int16_array);
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen
705f6fbad395e6f014838e797b7dbcaceafd2f1dTimo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "uint16_array",
b7835adbfddd8c92b51d6653fb759f963302fa78Timo Sirainen DBUS_TYPE_UINT16, (void **) &uint16_arr_val, &uint16_arr_len);
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen check_uint_array(uint16_arr_val, uint16_arr_len, pilot_uint16_array);
9ba7e76c20be775f368254e3059a6189fe789f16Timo Sirainen
bd63b5b860658b01b1f46f26d406e1e4a9dc019aTimo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "int32_array",
8552b0cad8ffe9ccb8270577ba28b8010c89af11Timo Sirainen DBUS_TYPE_INT32, (void **) &int32_arr_val, &int32_arr_len);
98c3aa2587ad3e81e1548a3a4f79b2a24566cec3Timo Sirainen check_int_array(int32_arr_val, int32_arr_len, pilot_int32_array);
9ba7e76c20be775f368254e3059a6189fe789f16Timo Sirainen
72f2a851238e5661695c63bff0e9a9e800ba577aTimo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "uint32_array",
9ba7e76c20be775f368254e3059a6189fe789f16Timo Sirainen DBUS_TYPE_UINT32, (void **) &uint32_arr_val, &uint32_arr_len);
38f227941bcf673e0e523c1ac7267bca9cbcd2c4Timo Sirainen check_uint_array(uint32_arr_val, uint32_arr_len, pilot_uint32_array);
38f227941bcf673e0e523c1ac7267bca9cbcd2c4Timo Sirainen
38f227941bcf673e0e523c1ac7267bca9cbcd2c4Timo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "int64_array",
38f227941bcf673e0e523c1ac7267bca9cbcd2c4Timo Sirainen DBUS_TYPE_INT64, (void **) &int64_arr_val, &int64_arr_len);
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen check_int_array(int64_arr_val, int64_arr_len, pilot_int64_array);
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "uint64_array",
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen DBUS_TYPE_UINT64, (void **) &uint64_arr_val, &uint64_arr_len);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen check_uint_array(uint64_arr_val, uint64_arr_len, pilot_uint64_array);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "double_array",
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen DBUS_TYPE_DOUBLE, (void **) &double_arr_val, &double_arr_len);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen check_int_array(double_arr_val, double_arr_len, pilot_double_array);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "string_array",
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen DBUS_TYPE_STRING, (void **) &string_arr_val, &string_arr_len);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen ck_assert_int_eq(string_arr_len, 2);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen ck_assert_str_eq(string_arr_val[0], pilot_string_array[0]);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen ck_assert_str_eq(string_arr_val[1], pilot_string_array[1]);
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen
c56500d4363beba4ffa954069ab30f4401849156Timo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "string_array",
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen DBUS_TYPE_STRING, (void **) &string_arr_val, &string_arr_len);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_int_eq(string_arr_len, 2);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_str_eq(string_arr_val[0], pilot_string_array[0]);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_str_eq(string_arr_val[1], pilot_string_array[1]);
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen call_get_array(client, "/test/leela", test_pilot_meta.name, "object_path_array",
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen DBUS_TYPE_OBJECT_PATH, (void **) &path_arr_val, &path_arr_len);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_int_eq(path_arr_len, 2);
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen ck_assert_str_eq(path_arr_val[0], pilot_path_array[0]);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_str_eq(path_arr_val[1], pilot_path_array[1]);
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen}
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo SirainenEND_TEST
32b78da5dfbbf6a06b3dbdc9278c60b55714f9bcTimo Sirainen
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo SirainenTCase *create_handler_tests(void)
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen{
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen TCase *tc = tcase_create("handler");
33bd898e7756b289e65f43133312d9637afc1371Timo Sirainen
984e5c91288139f8a2582be705ee7ef0d157a3f6Timo Sirainen tcase_add_test(tc, test_marshal_basic_types);
984e5c91288139f8a2582be705ee7ef0d157a3f6Timo Sirainen tcase_add_test(tc, test_get_basic_types);
984e5c91288139f8a2582be705ee7ef0d157a3f6Timo Sirainen tcase_add_test(tc, test_get_basic_array_types);
984e5c91288139f8a2582be705ee7ef0d157a3f6Timo Sirainen
984e5c91288139f8a2582be705ee7ef0d157a3f6Timo Sirainen return tc;
984e5c91288139f8a2582be705ee7ef0d157a3f6Timo Sirainen}
984e5c91288139f8a2582be705ee7ef0d157a3f6Timo Sirainen
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo SirainenSuite *create_suite(void)
984e5c91288139f8a2582be705ee7ef0d157a3f6Timo Sirainen{
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen Suite *s = suite_create("sbus_codegen");
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen suite_add_tcase(s, create_defs_tests ());
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen suite_add_tcase(s, create_handler_tests ());
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainen
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainen return s;
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainen}
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainen
49fd8c950e3da2ed32506e617a4b1480a07f874fTimo Sirainenint main(int argc, const char *argv[])
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen{
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen int opt;
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen poptContext pc;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen int failure_count;
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen Suite *suite;
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen SRunner *sr;
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen struct poptOption long_options[] = {
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen POPT_AUTOHELP
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen POPT_TABLEEND
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen };
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen pc = poptGetContext(argv[0], argc, argv, long_options, 0);
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen while ((opt = poptGetNextOpt(pc)) != -1) {
32b78da5dfbbf6a06b3dbdc9278c60b55714f9bcTimo Sirainen switch (opt) {
32b78da5dfbbf6a06b3dbdc9278c60b55714f9bcTimo Sirainen default:
32b78da5dfbbf6a06b3dbdc9278c60b55714f9bcTimo Sirainen fprintf(stderr, "\nInvalid option %s: %s\n\n",
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen poptBadOption(pc, 0), poptStrerror(opt));
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen poptPrintUsage(pc, stderr, 0);
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen return 1;
48ada47cce07fb7195a3437224c7c25f542326b0Timo Sirainen }
9ba7e76c20be775f368254e3059a6189fe789f16Timo Sirainen }
cf0ad1a0bddb0787f3d7b408a96d721a8b2a98a3Timo Sirainen poptFreeContext(pc);
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen suite = create_suite();
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen sr = srunner_create(suite);
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen /* If CK_VERBOSITY is set, use that, otherwise it defaults to CK_NORMAL */
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen srunner_run_all(sr, CK_ENV);
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen failure_count = srunner_ntests_failed(sr);
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen srunner_free(sr);
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen return (failure_count == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen}
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen