sbus_codegen_tests.c revision 58229439447d5617913a5a2e173b78105c694842
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen sbus_codegen tests.
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen Stef Walter <stefw@redhat.com>
abf015c9682f0f723db87a7c97bc284ef814818fTimo Sirainen Copyright (C) Red Hat, Inc 2014
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 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 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/>.
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen#include "tests/sbus_codegen_tests_generated.h"
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen/* The following 2 macros were taken from check's project source files (0.9.10)
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#endif /* _ck_assert_uint */
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen#define ck_assert_uint_eq(X, Y) _ck_assert_uint(X, ==, Y)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen#endif /* ck_assert_uint_eq */
1388b590dbd85245b591346f860bc1319953318aTimo Sirainenstatic const struct sbus_arg_meta *
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);
d1fff80640050631b06bfab904a34b2ad24601e8Timo Sirainen /* Explicit C Symbol */
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen ck_assert_str_eq(test_pilot_meta.name, "com.planetexpress.Pilot");
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert(test_pilot_meta.signals == NULL); /* no signals */
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen ck_assert(test_pilot_meta.properties != NULL);
367e28a16854ee9f7247b2518f36f5e9163fcc10Timo Sirainen method = sbus_meta_find_method(&com_planetexpress_Ship_meta, "MoveUniverse");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(method->name, "MoveUniverse");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen arg = find_arg(method->out_args, "where_we_crashed");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_str_eq(arg->name, "where_we_crashed");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen prop = sbus_meta_find_property(&com_planetexpress_Ship_meta, "Color");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert_int_eq(prop->flags, SBUS_PROPERTY_READABLE);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen signal = sbus_meta_find_signal(&com_planetexpress_Ship_meta, "BecameSentient");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(signal->name, "BecameSentient");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainenmock_move_universe(struct sbus_request *dbus_req, void *data,
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen * The above arguments should match the handler signature,
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen * and the below finish function should have the right signature.
7af5f78e9fee296e42430d94ef252ff0333d8024Timo Sirainen * Not called, just testing compilation
7af5f78e9fee296e42430d94ef252ff0333d8024Timo Sirainen return com_planetexpress_Ship_MoveUniverse_finish(dbus_req, "here");
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainenmock_crash_now(struct sbus_request *dbus_req, void *data,
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen * One argument, no return value, yet a finish function should
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen * have been generated.
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen * Not called, just testing compilation
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen return com_planetexpress_Ship_crash_now_finish(dbus_req);
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainenmock_land(struct sbus_request *req, void *data)
47569a4b2b4d3cc55e786177798c922c3c44233dTimo Sirainen * Raw handler, no finish function, no special arguments.
1f5597beba229acd914e30a6da3c0e62d83b6e8fTimo Sirainen * Not called, just testing compilation
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 ck_assert(vtable.crash_now == mock_crash_now);
c07d7eb3ca9754367697c98f5e66a3982a45d142Timo Sirainen ck_assert(vtable.MoveUniverse == mock_move_universe);
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 /* 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 /* Do some testing */
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 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 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 /* Only called for leela, so double check here */
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen ck_assert_str_eq(instance_data, "Crash into the billboard");
002179a890bf4f1942cad6463787719eaa9fd6c0Timo Sirainen /* Murge the various values for test case */
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen arg_string = "bears, beets, battlestar galactica";
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_str_eq(arg_object_path, "/original/object/path");
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_int16_array = talloc_memdup(req, arg_int16_array, sizeof(int16_t) * len_int16_array);
542e28b384a6b26695f3e8de38fd5727d06f3333Timo Sirainen for (i = 0; i < len_int16_array; i++)
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++)
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++)
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++)
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++)
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++)
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++)
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");
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 /* And reply with those values */
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen return test_pilot_Eject_finish(req, arg_byte, arg_boolean, arg_int16,
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen arg_object_path_array, len_object_path_array);
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenstatic const bool pilot_bool = true;
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenvoid pilot_get_boolean_handler(struct sbus_request *dbus_req,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenstatic const char *pilot_full_name = "Turanga Leela";
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenvoid pilot_get_full_name_handler(struct sbus_request *dbus_req,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainen const char **name)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenvoid pilot_get_byte_handler(struct sbus_request *dbus_req,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenvoid pilot_get_int16_handler(struct sbus_request *dbus_req,
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenvoid pilot_get_uint16_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_int32_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_uint32_handler(struct sbus_request *dbus_req,
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainenvoid pilot_get_int64_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_uint64_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_double_handler(struct sbus_request *dbus_req,
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainenvoid pilot_get_string_handler(struct sbus_request *dbus_req,
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainenvoid pilot_get_objpath_handler(struct sbus_request *dbus_req,
19cadcc25c26af7afea1355d78e20ad64eaad263Timo Sirainenvoid pilot_get_null_string_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen#define array_getter_body(in, out, outlen) do { \
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_byte_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_byte_array, arr_out, arr_len);
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainenstatic int16_t pilot_int16_array[] = { -123, 0 };
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_int16_array_handler(struct sbus_request *dbus_req,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen array_getter_body(pilot_int16_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic uint16_t pilot_uint16_array[] = { 123, 0 };
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenvoid pilot_get_uint16_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_uint16_array, arr_out, arr_len);
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainenstatic int32_t pilot_int32_array[] = { -456, 0 };
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_int32_array_handler(struct sbus_request *dbus_req,
216cd45a5f47c9bd46fe67c1b3bd6b1a42f6e39cTimo Sirainen array_getter_body(pilot_int32_array, arr_out, arr_len);
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainenstatic uint32_t pilot_uint32_array[] = { 456, 0 };
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenvoid pilot_get_uint32_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_uint32_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic int64_t pilot_int64_array[] = { -789, 0 };
70afae43cc78ea6ecca83f6c587072c442a15ec1Timo Sirainenvoid pilot_get_int64_array_handler(struct sbus_request *dbus_req,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen array_getter_body(pilot_int64_array, arr_out, arr_len);
216cd45a5f47c9bd46fe67c1b3bd6b1a42f6e39cTimo Sirainenstatic uint64_t pilot_uint64_array[] = { 789, 0 };
216cd45a5f47c9bd46fe67c1b3bd6b1a42f6e39cTimo Sirainenvoid pilot_get_uint64_array_handler(struct sbus_request *dbus_req,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_uint64_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic double pilot_double_array[] = { 3.14, 0 };
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_double_array_handler(struct sbus_request *dbus_req,
2f90189c6ee66a17f7bf838a8eb8a69868630fb8Timo Sirainen array_getter_body(pilot_double_array, arr_out, arr_len);
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenstatic const char *pilot_string_array[] = { "Turanga", "Leela" };
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainenvoid pilot_get_string_array_handler(struct sbus_request *dbus_req,
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen const char ***arr_out,
20dca965f48c1d7600a268d380c0b5fb5f1011d5Timo Sirainen array_getter_body(pilot_string_array, arr_out, arr_len);
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 const char ***arr_out,
13b063ba3ea51256fd97d7fa883f14cb08842b0dTimo Sirainen array_getter_body(pilot_path_array, arr_out, arr_len);
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,
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,
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainenstatic int pilot_test_server_init(struct sbus_connection *server, void *unused)
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen "Crash into the billboard"));
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen const char *arg_object_path = "/original/object/path";
3c652e7a569c2623d22b4ab30279aebddce4d396Timo Sirainen dbus_int16_t v_int16[] = { 1, -22, 333, -4444 };
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 };
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen char *v_string[] = { "bears", "bears", "bears" };
47e9fdee55c2074425cf0316f4f64fbbb790301cTimo Sirainen char *v_object_path[] = { "/original", "/original" };
c06d6ea0766d0520af1a93e6000c0e73f350e0a2Timo Sirainen int len_object_path = N_ELEMENTS(v_object_path);
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
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,
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 ck_assert_str_eq(arg_string, "bears, beets, battlestar galactica");
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen ck_assert_str_eq(arg_object_path, "/another/object/path");
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen ck_assert(arr_uint64[1] == 888888888888888889);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_str_eq(arr_object_path[0], "/changed");
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_str_eq(arr_object_path[1], "/changed");
0992011130e9d0a498ca860ddbe4028398a530c5Timo Sirainenstatic void parse_get_reply(DBusMessage *reply, const int type, void *val)
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_int_eq(dbus_message_iter_get_arg_type(&iter), DBUS_TYPE_VARIANT);
c3a636e4c9ae776e0eed06b6d7ad1ccfb6003afdTimo Sirainen ck_assert_int_eq(dbus_message_iter_get_arg_type(&variter), type);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "boolean",
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "FullName",
878a83a906e1be6354b563ead096955a22ad5fbeTimo Sirainen ck_assert_str_eq(string_val, pilot_full_name);
b879ed8dd4b5850987e6b89a92f794d87c6be7d7Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "byte",
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "int16",
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "uint16",
1388b590dbd85245b591346f860bc1319953318aTimo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "int32",
8d3278a82b964217d95c340ec6f82037cdc59d19Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "uint32",
2eb0402a28bd0422e0170160808c67d6c7274689Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "int64",
2eb0402a28bd0422e0170160808c67d6c7274689Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "uint64",
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "double",
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "string",
b9b841558c5f91db7f5fc71c0ac62aad1bbf6418Timo Sirainen call_get(client, "/test/leela", test_pilot_meta.name, "object_path",
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",
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainenstatic void parse_get_array_reply(DBusMessage *reply, const int type,
8d5c97bf940e43e8ec6e9f1ec8655f3b20edafbeTimo Sirainen ck_assert_int_eq(dbus_message_iter_get_arg_type(&iter), DBUS_TYPE_VARIANT);
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;
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen /* Allocating on NULL is bad, but this is unit test */
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen strings = talloc_array(NULL, const char *, n);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen dbus_message_iter_recurse(&variter, &arriter);
faca2afa3576c50caf28e0f009555325d2a49e0bTimo Sirainen /* Fixed types are easy */
faca2afa3576c50caf28e0f009555325d2a49e0bTimo Sirainen dbus_message_iter_get_fixed_array(&arriter, values, nels);
674f541b16689c0ed090dac32db94463c5af3977Timo Sirainenstatic void call_get_array(DBusConnection *client,
5d03d9f439e41c90215a3c938ffebe4c2a8ae257Timo Sirainen parse_get_array_reply(reply, type, values, nels);
9b78c0d5e13141f4df6c6e483f854e5acb861288Timo Sirainen#define _check_array(reply, len, known, fn) do { \
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen _check_array(reply, len, known, ck_assert_int_eq)
2fb9ae42f9e36388ec6db24188b9108434043fd0Timo Sirainen _check_array(reply, len, known, ck_assert_uint_eq)
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen client = test_dbus_setup_mock(ctx, NULL, pilot_test_server_init, NULL);
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);
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);
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);
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);
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 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);
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 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 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_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 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_str_eq(string_arr_val[0], pilot_string_array[0]);
4da8c6cdefabd31262318c32da3c13de1d9ea953Timo Sirainen ck_assert_str_eq(string_arr_val[1], pilot_string_array[1]);
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);
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]);
984e5c91288139f8a2582be705ee7ef0d157a3f6Timo Sirainen tcase_add_test(tc, test_get_basic_array_types);
12797080b552a3c1727b73b61cc7427bec0c7472Timo Sirainen pc = poptGetContext(argv[0], argc, argv, long_options, 0);
32b78da5dfbbf6a06b3dbdc9278c60b55714f9bcTimo Sirainen fprintf(stderr, "\nInvalid option %s: %s\n\n",
3482fee0e3733456512ba110780824e6daa7ff9fTimo Sirainen /* If CK_VERBOSITY is set, use that, otherwise it defaults to CK_NORMAL */