From 060c5dedce1d3e1328145f9daacc83f09dee7a8e Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 28 Dec 2024 09:48:26 +0100 Subject: [PATCH] add test for canceled complete --- src/kds_s2000w_net.c | 12 +++++++--- tests/kds_s2000w_net_tests.c | 41 ++++++++++++++++++++++++++++---- tests/kds_s2000w_net_tests.h | 1 + tests/kds_s2000w_net_tests_run.c | 1 + 4 files changed, 48 insertions(+), 7 deletions(-) diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index df81a2d..efe087a 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -126,6 +126,13 @@ void _sane_kds_s2000w_net_cancel(SANE_Handle handle) handler* h = (handler*) handle; + if (h->read_info->cancel > 0) { + debug_printf(DEBUG, "scan completed canceled"); + reset_handler(h); + kds_s2000w_handler_recreate_session(h); + return; + } + kds_s2000w_net_handler_get_current_scan_status(h); if (h->current_scan_status->complete_scanned > 0) { @@ -134,9 +141,8 @@ void _sane_kds_s2000w_net_cancel(SANE_Handle handle) return; } - if (h->read_info->cancel > 0 - || h->current_scan_status->available_images <= 0) { - debug_printf(DEBUG, "scan completed - cancel or no availible images"); + if (h->current_scan_status->available_images <= 0) { + debug_printf(DEBUG, "scan completed no availible images"); reset_handler(h); kds_s2000w_handler_recreate_session(h); return; diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index caa47f0..0407529 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -458,6 +458,39 @@ void sane_kds_s2000w_net_cancel() h = NULL; } +void sane_kds_s2000w_net_cancel_canceled() +{ + response* resp_status = kds_s2000w_client_response_init(); + resp_status->data = realloc(resp_status->data, 27); + const char* status = "{\"SessionId\":\"1251877821\"}"; + memcpy(resp_status->data, status, 27); + resp_status->code = 200; + resp_status->size = 27; + will_return(mock_response, resp_status); + will_return(__wrap_kds_s2000w_client_open_session, 0); + response* set_option = kds_s2000w_client_response_init(); + set_option->code = 200; + set_option->size = 0; + will_return(mock_response, set_option); + will_return(__wrap_kds_s2000w_client_set_option, 0); + expect_function_call(__wrap_kds_s2000w_client_close_session); + expect_function_call(__wrap_kds_s2000w_client_open_session); + expect_function_call(__wrap_kds_s2000w_client_set_option); + handler* h = init_handler(); + h->read_info->cancel = 1; + + _sane_kds_s2000w_net_cancel(h); + + assert_int_equal(h->read_info->cancel, 0); + + kds_s2000w_client_response_free(resp_status); + resp_status = NULL; + kds_s2000w_client_response_free(set_option); + set_option = NULL; + free_handler(h); + h = NULL; +} + void sane_kds_s2000w_net_cancel_completed_scan_feeder() { response* resp_status = kds_s2000w_client_response_init(); @@ -512,11 +545,11 @@ void sane_kds_s2000w_net_cancel_completed_scan_flatbed() will_return(mock_response, resp_status); will_return(__wrap_kds_s2000w_client_status_session, 0); response* resp_session = kds_s2000w_client_response_init(); - resp_session->data = realloc(resp_session->data, 28); - const char* responsedata = "{\"SessionId\":\"1251877821\"}\0"; - memcpy(resp_session->data, responsedata, 28); + resp_session->data = realloc(resp_session->data, 27); + const char* responsedata = "{\"SessionId\":\"1251877821\"}"; + memcpy(resp_session->data, responsedata, 27); resp_session->code = 200; - resp_session->size = 28; + resp_session->size = 27; will_return(mock_response, resp_session); will_return(__wrap_kds_s2000w_client_open_session, 0); response* resp_options = kds_s2000w_client_response_init(); diff --git a/tests/kds_s2000w_net_tests.h b/tests/kds_s2000w_net_tests.h index 9cdbb4b..f4cc685 100644 --- a/tests/kds_s2000w_net_tests.h +++ b/tests/kds_s2000w_net_tests.h @@ -12,6 +12,7 @@ void kds_s2000w_net_get_devices_only_remote(); void kds_s2000w_net_set_io_mode(); void kds_s2000w_net_get_select_fd(); void sane_kds_s2000w_net_start_cancel(); +void sane_kds_s2000w_net_cancel_canceled(); void sane_kds_s2000w_net_cancel_completed_scan_flatbed(); void sane_kds_s2000w_net_start(void** state); void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state); diff --git a/tests/kds_s2000w_net_tests_run.c b/tests/kds_s2000w_net_tests_run.c index ef94cec..ed082ed 100644 --- a/tests/kds_s2000w_net_tests_run.c +++ b/tests/kds_s2000w_net_tests_run.c @@ -69,6 +69,7 @@ int main() cmocka_unit_test(kds_s2000w_net_set_io_mode), cmocka_unit_test(kds_s2000w_net_get_select_fd), cmocka_unit_test(sane_kds_s2000w_net_start_cancel), + cmocka_unit_test(sane_kds_s2000w_net_cancel_canceled), cmocka_unit_test(sane_kds_s2000w_net_cancel), cmocka_unit_test(sane_kds_s2000w_net_cancel_completed_scan_feeder), cmocka_unit_test(sane_kds_s2000w_net_cancel_completed_scan_flatbed), -- 2.39.5