sbus_codegen_tests.c revision b699c4d7f85a5404be1d1ee9450331aea869b886
08b30498acefc69e223baf7eda6429be98cc3a10Timo Sirainen/*
08b30498acefc69e223baf7eda6429be98cc3a10Timo Sirainen SSSD
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
16f816d3f3c32ae3351834253f52ddd0212bcbf3Timo Sirainen sbus_codegen tests.
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen Authors:
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen Stef Walter <stefw@redhat.com>
345212e8f61ebf14ff4f80df26df9e655eb5121eTimo Sirainen
08b30498acefc69e223baf7eda6429be98cc3a10Timo Sirainen Copyright (C) Red Hat, Inc 2014
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen This program is free software; you can redistribute it and/or modify
5363a534097c170ef9cccbdde5ca802f581f5eb7Timo Sirainen it under the terms of the GNU General Public License as published by
5363a534097c170ef9cccbdde5ca802f581f5eb7Timo Sirainen the Free Software Foundation; either version 3 of the License, or
5363a534097c170ef9cccbdde5ca802f581f5eb7Timo Sirainen (at your option) any later version.
5363a534097c170ef9cccbdde5ca802f581f5eb7Timo Sirainen
5363a534097c170ef9cccbdde5ca802f581f5eb7Timo Sirainen This program is distributed in the hope that it will be useful,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen but WITHOUT ANY WARRANTY; without even the implied warranty of
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen GNU General Public License for more details.
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen You should have received a copy of the GNU General Public License
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen along with this program. If not, see <http://www.gnu.org/licenses/>.
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen*/
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#include <stdlib.h>
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#include <check.h>
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen#include <talloc.h>
d371507847d62ba311b4bcc23d18f45c3d0f1a38Timo Sirainen#include <tevent.h>
d371507847d62ba311b4bcc23d18f45c3d0f1a38Timo Sirainen#include <popt.h>
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen#include "sbus/sssd_dbus_meta.h"
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen#include "tests/sbus_codegen_tests_generated.h"
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
2d3aac5be07b96f72cf0551fac35ac74a4f07770Timo Sirainenstatic const struct sbus_arg_meta *
2d3aac5be07b96f72cf0551fac35ac74a4f07770Timo Sirainenfind_arg(const struct sbus_arg_meta *args,
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen const char *name)
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen{
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen const struct sbus_arg_meta *arg;
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen for (arg = args; arg->name != NULL; arg++) {
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen if (strcmp (arg->name, name) == 0)
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen return arg;
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen }
a205d315b0978985ba77d871f44e4a98273612e6Timo Sirainen
a205d315b0978985ba77d871f44e4a98273612e6Timo Sirainen return NULL;
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen}
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo SirainenSTART_TEST(test_interfaces)
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen{
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen ck_assert_str_eq(com_planetexpress_Ship_meta.name, "com.planetexpress.Ship");
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen ck_assert(com_planetexpress_Ship_meta.methods != NULL);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen ck_assert(com_planetexpress_Ship_meta.signals != NULL);
12d34ab79772e0748a1daef30fa749dfe3036608Timo Sirainen ck_assert(com_planetexpress_Ship_meta.properties != NULL);
a6a2b38d806f3ab3198160e39240a8200775e525Timo Sirainen
a6a2b38d806f3ab3198160e39240a8200775e525Timo Sirainen /* Explicit C Symbol */
a6a2b38d806f3ab3198160e39240a8200775e525Timo Sirainen ck_assert_str_eq(test_pilot_meta.name, "com.planetexpress.Pilot");
fb2e0bbb7737f3223b16aa41e4b40fb0cd5f288fTimo Sirainen ck_assert(test_pilot_meta.methods == NULL); /* no methods */
12d34ab79772e0748a1daef30fa749dfe3036608Timo Sirainen ck_assert(test_pilot_meta.signals == NULL); /* no signals */
12d34ab79772e0748a1daef30fa749dfe3036608Timo Sirainen ck_assert(test_pilot_meta.properties != NULL);
12d34ab79772e0748a1daef30fa749dfe3036608Timo Sirainen
12d34ab79772e0748a1daef30fa749dfe3036608Timo Sirainen}
12d34ab79772e0748a1daef30fa749dfe3036608Timo SirainenEND_TEST
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen
f0569d9fbb25c8437760be69f194595a841ad711Timo SirainenSTART_TEST(test_methods)
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen{
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen const struct sbus_method_meta *method;
f0569d9fbb25c8437760be69f194595a841ad711Timo Sirainen const struct sbus_arg_meta *arg;
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen method = sbus_meta_find_method(&com_planetexpress_Ship_meta, "MoveUniverse");
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen ck_assert(method != NULL);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen ck_assert_str_eq(method->name, "MoveUniverse");
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen ck_assert(method->in_args != NULL);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert(method->out_args != NULL);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen arg = find_arg(method->in_args, "smoothly");
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert(arg != NULL);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert_str_eq(arg->name, "smoothly");
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert_str_eq(arg->type, "b");
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
821984ecb6c90696f35c32a8dc4c8a60f9e98f99Timo Sirainen arg = find_arg(method->out_args, "where_we_crashed");
821984ecb6c90696f35c32a8dc4c8a60f9e98f99Timo Sirainen ck_assert(arg != NULL);
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainen ck_assert_str_eq(arg->name, "where_we_crashed");
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainen ck_assert_str_eq(arg->type, "s");
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainen}
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo SirainenEND_TEST
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo SirainenSTART_TEST(test_properties)
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen{
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen const struct sbus_property_meta *prop;
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen prop = sbus_meta_find_property(&com_planetexpress_Ship_meta, "Color");
8d80659e504ffb34bb0c6a633184fece35751b18Timo Sirainen ck_assert(prop != NULL);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert_str_eq(prop->name, "Color");
e5759add4dc24b96606dccc4a989838e260f2a12Timo Sirainen ck_assert_str_eq(prop->type, "s");
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert_int_eq(prop->flags, SBUS_PROPERTY_READABLE);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen}
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo SirainenEND_TEST
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo SirainenSTART_TEST(test_signals)
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen{
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen const struct sbus_signal_meta *signal;
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen const struct sbus_arg_meta *arg;
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen signal = sbus_meta_find_signal(&com_planetexpress_Ship_meta, "BecameSentient");
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert(signal != NULL);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert_str_eq(signal->name, "BecameSentient");
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert(signal->args != NULL);
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen arg = find_arg(signal->args, "gender");
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen ck_assert(arg != NULL);
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen ck_assert_str_eq(arg->name, "gender");
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainen ck_assert_str_eq(arg->type, "s");
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen}
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo SirainenEND_TEST
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo SirainenSuite *create_suite(void)
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen{
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen Suite *s = suite_create("sbus_codegen");
821984ecb6c90696f35c32a8dc4c8a60f9e98f99Timo Sirainen
821984ecb6c90696f35c32a8dc4c8a60f9e98f99Timo Sirainen TCase *tc = tcase_create("defs");
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen
313fe89df4d91cd0cd7f3558dc6d7fd21ad39eeeTimo Sirainen /* Do some testing */
8d80659e504ffb34bb0c6a633184fece35751b18Timo Sirainen tcase_add_test(tc, test_interfaces);
8d80659e504ffb34bb0c6a633184fece35751b18Timo Sirainen tcase_add_test(tc, test_methods);
8d80659e504ffb34bb0c6a633184fece35751b18Timo Sirainen tcase_add_test(tc, test_properties);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen tcase_add_test(tc, test_signals);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen /* Add all test cases to the test suite */
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen suite_add_tcase(s, tc);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen return s;
b5e6f6f27c1461f0f9f202615eeb738a645188c3Timo Sirainen}
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainenint main(int argc, const char *argv[])
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen{
197ad81605dc0f6d2ebc9ad99994db5ca6d76699Timo Sirainen int opt;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen poptContext pc;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen int failure_count;
5363a534097c170ef9cccbdde5ca802f581f5eb7Timo Sirainen Suite *suite;
5363a534097c170ef9cccbdde5ca802f581f5eb7Timo Sirainen SRunner *sr;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen struct poptOption long_options[] = {
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen POPT_AUTOHELP
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen POPT_TABLEEND
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen };
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen pc = poptGetContext(argv[0], argc, argv, long_options, 0);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen while ((opt = poptGetNextOpt(pc)) != -1) {
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen switch (opt) {
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen default:
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen fprintf(stderr, "\nInvalid option %s: %s\n\n",
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen poptBadOption(pc, 0), poptStrerror(opt));
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen poptPrintUsage(pc, stderr, 0);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen return 1;
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen }
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen }
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen poptFreeContext(pc);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen suite = create_suite();
5363a534097c170ef9cccbdde5ca802f581f5eb7Timo Sirainen sr = srunner_create(suite);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen srunner_set_fork_status(sr, CK_FORK);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen /* If CK_VERBOSITY is set, use that, otherwise it defaults to CK_NORMAL */
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen srunner_run_all(sr, CK_ENV);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen failure_count = srunner_ntests_failed(sr);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen srunner_free(sr);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen return (failure_count == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen}
bb10ebcf076c959c752f583746d83805d7686df8Timo Sirainen