X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=t%2Futils%2Fchannel_test.c;h=20fd4543c4360fdbb2b1f473ce2a7ac517f448eb;hb=6fd5b4e58bc635def17fb1d3cde0d21ea689a4b0;hp=7e12de8b0b5c8afd42e19a55ee8029d5952fd8b6;hpb=edab52551e40893193eb56f54609dca9fd3a0f31;p=sysdb.git diff --git a/t/utils/channel_test.c b/t/utils/channel_test.c index 7e12de8..20fd454 100644 --- a/t/utils/channel_test.c +++ b/t/utils/channel_test.c @@ -29,8 +29,11 @@ #include "libsysdb_test.h" #include +#include #include +#include + static struct { int data; int expected_write; @@ -118,6 +121,54 @@ START_TEST(test_create) } END_TEST +START_TEST(test_write_read) +{ + uint32_t data; + int check; + + chan = sdb_channel_create(0, 1); + fail_unless(chan != NULL, + "sdb_channel_create(0, 0) = NULL; expected: channel object"); + + data = 0x00ffff00; + check = sdb_channel_write(chan, &data); + fail_unless(!check, "sdb_channel_write() = %i; expected: 0", check); + check = sdb_channel_write(chan, &data); + fail_unless(check, "sdb_channel_write() = 0; expected: <0"); + + data = 0xffffffff; + check = sdb_channel_read(chan, &data); + /* result depends on endianess */ + fail_unless((data == 0xffffff00) || (data == 0x00ffffff), + "sdb_channel_read() returned data %x; " + "expected: 0xffffff00 || 0x00ffffff", data); + + sdb_channel_destroy(chan); +} +END_TEST + +START_TEST(test_select) +{ + struct timespec ts = { 0, 10 }; + int check; + int data; + + chan = sdb_channel_create(0, 1); + + check = sdb_channel_select(chan, &data, NULL, NULL, NULL, &ts); + fail_unless(check == ETIMEDOUT, + "sdb_channel_select() = %i; expected: %i (ETIMEDOUT)", + check, ETIMEDOUT); + + check = sdb_channel_select(chan, NULL, NULL, &data, NULL, NULL); + fail_unless(! check, "sdb_channel_select() = %i; expected: 0", check); + check = sdb_channel_select(chan, NULL, NULL, &data, NULL, &ts); + fail_unless(! check, "sdb_channel_select() = %i; expected: 0", check); + + sdb_channel_destroy(chan); +} +END_TEST + START_TEST(test_write_int) { size_t i; @@ -156,7 +207,41 @@ START_TEST(test_read_int) fail_unless(check == expected, "sdb_channel_read(chan, %i) = %i; expected: %i", data, check, expected); - if (! check) { + if (check) { + fail_unless(data == (int)i, + "sdb_channel_read() modified data to '%i'; " + "expected: no modification", data); + } + else { + fail_unless(data == golden_data_int[i].data, + "sdb_channel_read() returned data %i; expected: %i", + data, golden_data_int[i].data); + } + } +} +END_TEST + +START_TEST(test_write_read_int) +{ + size_t i; + for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data_int); ++i) { + int data = golden_data_int[i].data; + int check = sdb_channel_write(chan, &data); + fail_unless(check == 0, + "sdb_channel_write(chan, %i) = %i; expected: 0", + data, check); + + data = (int)i; + check = sdb_channel_read(chan, &data); + fail_unless(check == 0, + "sdb_channel_read(chan, %i) = %i; expected: 0", + data, check); + if (check) { + fail_unless(data == (int)i, + "sdb_channel_read() modified data to '%i'; " + "expected: no modification", data); + } + else { fail_unless(data == golden_data_int[i].data, "sdb_channel_read() returned data %i; expected: %i", data, golden_data_int[i].data); @@ -205,8 +290,38 @@ START_TEST(test_read_string) check, expected); if (check) { fail_unless(data == NULL, - "sdb_channel_read() returned data '%s'; expected: none", - data); + "sdb_channel_read() modified data to '%s'; " + "expected: no modification", data); + } + else { + fail_unless(data != NULL, + "sdb_channel_read() did not return any data"); + fail_unless(!strcmp(data, golden_data_string[i].data), + "sdb_channel_read() returned data '%s'; expected: '%s'", + data, golden_data_string[i].data); + } + } +} +END_TEST + +START_TEST(test_write_read_string) +{ + size_t i; + for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data_string); ++i) { + char *data = golden_data_string[i].data; + int check = sdb_channel_write(chan, &data); + fail_unless(check == 0, + "sdb_channel_write(chan, '%s') = %i; expected: 0", + data, check); + + data = NULL; + check = sdb_channel_read(chan, &data); + fail_unless(check == 0, + "sdb_channel_read(chan, '') = %i; expected: 0", check); + if (check) { + fail_unless(data == NULL, + "sdb_channel_read() modified data to '%s'; " + "expected: no modifications", data); } else { fail_unless(data != NULL, @@ -227,18 +342,22 @@ util_channel_suite(void) tc = tcase_create("core"); tcase_add_test(tc, test_create); + tcase_add_test(tc, test_write_read); + tcase_add_test(tc, test_select); suite_add_tcase(s, tc); tc = tcase_create("integer"); tcase_add_checked_fixture(tc, setup_int, teardown); tcase_add_test(tc, test_write_int); tcase_add_test(tc, test_read_int); + tcase_add_test(tc, test_write_read_int); suite_add_tcase(s, tc); tc = tcase_create("string"); tcase_add_checked_fixture(tc, setup_string, teardown); tcase_add_test(tc, test_write_string); tcase_add_test(tc, test_read_string); + tcase_add_test(tc, test_write_read_string); suite_add_tcase(s, tc); return s;