diff --git a/Makefile.am b/Makefile.am index 12decd3..3a6d77f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -74,11 +74,15 @@ ecutuned_SOURCES = $(SRC_FILES) src/ecutuned.c ecutuned_CFLAGS = -DUSESSL -DTHREADED $(INCLUDE_ALL_DIRS) $(COMPILER_FLAGS) $(LOG_FLAGS) ecutuned_LDFLAGS = $(LD_FLAG) $(EXTERNAL_LIBS) -TESTS = check_j2534 -check_PROGRAMS = check_j2534 +TESTS = check_j2534 check_canbus_shutdown +check_PROGRAMS = check_j2534 check_canbus_shutdown check_j2534_SOURCES = $(ECUTOOLS_TEST_FILES) check_j2534_LDFLAGS = $(LD_FLAG) -lcheck -lj2534 +check_canbus_shutdown_SOURCES = tests/check_canbus_shutdown.c src/canbus.c +check_canbus_shutdown_LDFLAGS = -Wl,--wrap=shutdown +check_canbus_shutdown_LDADD = -lcheck -lsubunit + bundle-install: cd bindings/ruby && bundle install && cd - cd cli && bundle install && cd - diff --git a/src/canbus.c b/src/canbus.c index b304cfb..1d245e7 100755 --- a/src/canbus.c +++ b/src/canbus.c @@ -190,7 +190,7 @@ int canbus_filter(canbus_client *canbus, struct can_filter *filters, unsigned in void canbus_shutdown(canbus_client *canbus, int how) { if(canbus->socket != NULL) { - if(shutdown(canbus->socket, SHUT_RD) != 0) { + if(shutdown(canbus->socket, how) != 0) { syslog(LOG_ERR, "canbus_shutdown: unable to shutdown socket"); } } diff --git a/tests/check_canbus_shutdown.c b/tests/check_canbus_shutdown.c new file mode 100644 index 0000000..bbbea6f --- /dev/null +++ b/tests/check_canbus_shutdown.c @@ -0,0 +1,48 @@ +#include +#include + +#include "canbus.h" + +static int shutdown_fd; +static int shutdown_how; + +int __wrap_shutdown(int fd, int how) +{ + shutdown_fd = fd; + shutdown_how = how; + return 0; +} + +START_TEST(test_canbus_shutdown_forwards_how) +{ + canbus_client client = { + .socket = 42 + }; + + shutdown_fd = -1; + shutdown_how = -1; + + canbus_shutdown(&client, SHUT_WR); + + ck_assert_int_eq(shutdown_fd, 42); + ck_assert_int_eq(shutdown_how, SHUT_WR); +} +END_TEST + +int main(void) +{ + int failed; + Suite *suite = suite_create("canbus_shutdown"); + TCase *core = tcase_create("core"); + SRunner *runner; + + tcase_add_test(core, test_canbus_shutdown_forwards_how); + suite_add_tcase(suite, core); + + runner = srunner_create(suite); + srunner_run_all(runner, CK_NORMAL); + failed = srunner_ntests_failed(runner); + srunner_free(runner); + + return failed == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +}