From 608031c2e72b18bc710f33ea5e754d8f42a7f944 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Mon, 25 Mar 2024 19:53:41 +0100 Subject: [PATCH] add test for one and two page scan --- src/kds_s2000w_net.c | 6 + tests/kds_s2000w_net_tests.c | 189 +++++++++++++++++++++++++++++++ tests/kds_s2000w_net_tests.h | 2 + tests/kds_s2000w_net_tests_run.c | 2 + 4 files changed, 199 insertions(+) diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 21d00f4..1cc71cb 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -182,6 +182,12 @@ SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle) return SANE_STATUS_NO_DOCS; } + if (h->current_scan_status->complete_scanned + && h->current_scan_status->available_images <= 0) { + kds_s2000w_handler_recreate_session(h); + return SANE_STATUS_GOOD; + } + if (h->current_scan_status->complete_scanned) { kds_s2000w_handler_stop_scan(h); return SANE_STATUS_GOOD; diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index e026b32..d33b25b 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -579,6 +579,7 @@ void sane_kds_s2000w_net_start(void** state) int result = _sane_kds_s2000w_net_start(h); assert_int_equal(result, SANE_STATUS_GOOD); + assert_int_equal(h->current_scan_status->complete_scanned, 0); assert_int_equal(h->current_metadata->depth, 8); assert_int_equal(h->current_metadata->channels, 3); assert_int_equal(h->current_metadata->format, 1); @@ -650,6 +651,7 @@ void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state) int result = _sane_kds_s2000w_net_start(h); assert_int_equal(result, SANE_STATUS_GOOD); + assert_int_equal(h->current_scan_status->complete_scanned, 0); assert_int_equal(h->current_metadata->depth, 8); assert_int_equal(h->current_metadata->channels, 3); assert_int_equal(h->current_metadata->format, 1); @@ -670,6 +672,193 @@ void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state) h = NULL; } +void sane_kds_s2000w_net_start_one_page_per_feeder(void** state) +{ + response** response_list = (response**) *state; + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_start_scan, 0); + response* resp_status = kds_s2000w_client_response_init(); + resp_status->data = realloc(resp_status->data, 210); + const char* status = "{ \ + \"Status\": { \ + \"NumImagesScanned\": 1, \ + \"NumImagesStored\": 1, \ + \"State\": \"Done Scanning\", \ + \"ErrorNum\": 0, \ + \"LastError\": \"Status: 200 Success\", \ + \"PaperDetected\": \"0\", \ + \"PercentAvailable\": 99 \ + }}\0"; + memcpy(resp_status->data, status, 210); + resp_status->code = 200; + resp_status->size = 210; + will_return(mock_response, resp_status); + will_return(__wrap_kds_s2000w_client_status_session, 0); + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_get_image, 0); + will_return(mock_response, response_list[1]); + will_return(__wrap_kds_s2000w_client_get_metadata, 0); + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_delete_image, 0); + response* resp_open_session = kds_s2000w_client_response_init(); + resp_open_session->data = realloc(resp_open_session->data, 25); + const char* session_data = "{\"SessionId\":\"8154711\"}\0"; + memcpy(resp_open_session->data, session_data, 25); + resp_open_session->code = 200; + resp_open_session->size = 25; + will_return(mock_response, resp_open_session); + will_return(__wrap_kds_s2000w_client_open_session, 0); + response* resp_set_option = kds_s2000w_client_response_init(); + resp_set_option->code = 200; + will_return(mock_response, resp_set_option); + will_return(__wrap_kds_s2000w_client_set_option, 0); + expect_function_call(__wrap_kds_s2000w_client_start_scan); + expect_function_call(__wrap_kds_s2000w_client_status_session); + expect_function_call(__wrap_kds_s2000w_client_get_image); + expect_function_call(__wrap_kds_s2000w_client_get_metadata); + expect_function_call(__wrap_kds_s2000w_client_delete_image); + 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(); + const char* test_config = "{\"Configuration\": { \"ColorMode\": \"Color\" } }"; + h->current_scanner_config = json_tokener_parse(test_config); + + int result = _sane_kds_s2000w_net_start(h); + + assert_int_equal(result, SANE_STATUS_GOOD); + assert_int_equal(h->current_scan_status->complete_scanned, 1); + assert_int_equal(h->current_metadata->depth, 8); + assert_int_equal(h->current_metadata->channels, 3); + assert_int_equal(h->current_metadata->format, 1); + assert_int_equal(h->current_metadata->pixels_per_line, 1000); + assert_int_equal(h->current_metadata->lines, 1000); + assert_int_equal(h->current_metadata->valid, 1); + assert_int_equal(h->current_metadata->is_last, 1); + + json_object_put(h->current_scanner_config); + h->current_scanner_config = NULL; + kds_s2000w_client_response_free(resp_status); + resp_status = NULL; + kds_s2000w_client_response_free(resp_open_session); + resp_open_session = NULL; + kds_s2000w_client_response_free(resp_set_option); + resp_set_option = NULL; + free_handler(h); + h = NULL; +} + +void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state) +{ + response** response_list = (response**) *state; + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_start_scan, 0); + response* resp_status = kds_s2000w_client_response_init(); + resp_status->data = realloc(resp_status->data, 210); + const char* status = "{ \ + \"Status\": { \ + \"NumImagesScanned\": 2, \ + \"NumImagesStored\": 2, \ + \"State\": \"Done Scanning\", \ + \"ErrorNum\": 0, \ + \"LastError\": \"Status: 200 Success\", \ + \"PaperDetected\": \"0\", \ + \"PercentAvailable\": 99 \ + }}\0"; + memcpy(resp_status->data, status, 210); + resp_status->code = 200; + resp_status->size = 210; + will_return(mock_response, resp_status); + will_return(__wrap_kds_s2000w_client_status_session, 0); + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_get_image, 0); + will_return(mock_response, response_list[1]); + will_return(__wrap_kds_s2000w_client_get_metadata, 0); + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_delete_image, 0); + response* resp_stop_scan = kds_s2000w_client_response_init(); + resp_stop_scan->code = 200; + will_return(mock_response, resp_stop_scan); + will_return(__wrap_kds_s2000w_client_stop_scan, 0); + expect_function_call(__wrap_kds_s2000w_client_start_scan); + expect_function_call(__wrap_kds_s2000w_client_status_session); + expect_function_call(__wrap_kds_s2000w_client_get_image); + expect_function_call(__wrap_kds_s2000w_client_get_metadata); + expect_function_call(__wrap_kds_s2000w_client_delete_image); + expect_function_call(__wrap_kds_s2000w_client_stop_scan); + + handler* h = init_handler(); + const char* test_config = "{\"Configuration\": { \"ColorMode\": \"Color\" } }"; + h->current_scanner_config = json_tokener_parse(test_config); + + int result = _sane_kds_s2000w_net_start(h); + + const char* status2 = "{ \ + \"Status\": { \ + \"NumImagesScanned\": 2, \ + \"NumImagesStored\": 1, \ + \"State\": \"Done Scanning\", \ + \"ErrorNum\": 0, \ + \"LastError\": \"Status: 200 Success\", \ + \"PaperDetected\": \"0\", \ + \"PercentAvailable\": 99 \ + }}\0"; + memcpy(resp_status->data, status2, 210); + resp_status->code = 200; + resp_status->size = 210; + will_return(mock_response, resp_status); + will_return(__wrap_kds_s2000w_client_status_session, 0); + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_get_image, 0); + will_return(mock_response, response_list[1]); + will_return(__wrap_kds_s2000w_client_get_metadata, 0); + will_return(mock_response, response_list[0]); + will_return(__wrap_kds_s2000w_client_delete_image, 0); + response* resp_open_session = kds_s2000w_client_response_init(); + resp_open_session->data = realloc(resp_open_session->data, 25); + const char* session_data = "{\"SessionId\":\"8154711\"}\0"; + memcpy(resp_open_session->data, session_data, 25); + resp_open_session->code = 200; + resp_open_session->size = 25; + will_return(mock_response, resp_open_session); + will_return(__wrap_kds_s2000w_client_open_session, 0); + response* resp_set_option = kds_s2000w_client_response_init(); + resp_set_option->code = 200; + will_return(mock_response, resp_set_option); + will_return(__wrap_kds_s2000w_client_set_option, 0); + expect_function_call(__wrap_kds_s2000w_client_status_session); + expect_function_call(__wrap_kds_s2000w_client_get_image); + expect_function_call(__wrap_kds_s2000w_client_get_metadata); + expect_function_call(__wrap_kds_s2000w_client_delete_image); + 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); + result = _sane_kds_s2000w_net_start(h); + + assert_int_equal(result, SANE_STATUS_GOOD); + assert_int_equal(h->current_scan_status->complete_scanned, 1); + assert_int_equal(h->current_metadata->depth, 8); + assert_int_equal(h->current_metadata->channels, 3); + assert_int_equal(h->current_metadata->format, 1); + assert_int_equal(h->current_metadata->pixels_per_line, 1000); + assert_int_equal(h->current_metadata->lines, 1000); + assert_int_equal(h->current_metadata->valid, 1); + assert_int_equal(h->current_metadata->is_last, 1); + + json_object_put(h->current_scanner_config); + h->current_scanner_config = NULL; + kds_s2000w_client_response_free(resp_status); + resp_status = NULL; + kds_s2000w_client_response_free(resp_open_session); + resp_open_session = NULL; + kds_s2000w_client_response_free(resp_set_option); + resp_set_option = NULL; + kds_s2000w_client_response_free(resp_stop_scan); + resp_stop_scan = NULL; + free_handler(h); + h = NULL; +} + void sane_kds_s2000w_net_get_parameter_cancel() { handler* h = init_handler(); diff --git a/tests/kds_s2000w_net_tests.h b/tests/kds_s2000w_net_tests.h index f0167e7..61b997c 100644 --- a/tests/kds_s2000w_net_tests.h +++ b/tests/kds_s2000w_net_tests.h @@ -36,6 +36,8 @@ void sane_kds_s2000w_net_control_get_option_twentytwo(void** state); void sane_kds_s2000w_net_start_cancel(); void sane_kds_s2000w_net_start(void** state); void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state); +void sane_kds_s2000w_net_start_one_page_per_feeder(void** state); +void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state); void sane_kds_s2000w_net_get_parameter_cancel(); void sane_kds_s2000w_net_cancel(); void sane_kds_s2000w_net_open(); diff --git a/tests/kds_s2000w_net_tests_run.c b/tests/kds_s2000w_net_tests_run.c index 2f3cc82..f3a7959 100644 --- a/tests/kds_s2000w_net_tests_run.c +++ b/tests/kds_s2000w_net_tests_run.c @@ -128,6 +128,8 @@ int main() cmocka_unit_test(sane_kds_s2000w_net_start_cancel), cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start, setup_net_start, teardown_net_start), cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_one_page_per_flatscan, setup_net_start, teardown_net_start), + cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_one_page_per_feeder, setup_net_start, teardown_net_start), + cmocka_unit_test_setup_teardown(sane_kds_s2000w_net_start_two_pages_per_feeder, setup_net_start, teardown_net_start), cmocka_unit_test(sane_kds_s2000w_net_get_parameter_cancel), cmocka_unit_test(sane_kds_s2000w_net_cancel), cmocka_unit_test(sane_kds_s2000w_net_open) -- 2.39.5