From: Uwe Hermann Date: Fri, 29 Aug 2014 19:32:34 +0000 (+0200) Subject: unit tests: Update to recent API changes. X-Git-Tag: libsigrok-0.4.0~1061 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=95bc7725949836f8fb9851a51fcc755b25e4fc6f;p=libsigrok.git unit tests: Update to recent API changes. --- diff --git a/tests/check_input_all.c b/tests/check_input_all.c index 0e2d6b64..feee6309 100644 --- a/tests/check_input_all.c +++ b/tests/check_input_all.c @@ -1,7 +1,7 @@ /* * This file is part of the libsigrok project. * - * Copyright (C) 2013 Uwe Hermann + * Copyright (C) 2013-2014 Uwe Hermann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,7 +26,7 @@ /* Check whether at least one input module is available. */ START_TEST(test_input_available) { - struct sr_input_format **inputs; + const struct sr_input_module **inputs; inputs = sr_input_list(); fail_unless(inputs != NULL, "No input modules found."); diff --git a/tests/check_input_binary.c b/tests/check_input_binary.c index cd2e7777..2ec39c8b 100644 --- a/tests/check_input_binary.c +++ b/tests/check_input_binary.c @@ -1,7 +1,7 @@ /* * This file is part of the libsigrok project. * - * Copyright (C) 2013 Uwe Hermann + * Copyright (C) 2013-2014 Uwe Hermann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,12 +23,13 @@ #include "../include/libsigrok/libsigrok.h" #include "lib.h" -#define FILENAME "foo.dat" -#define MAX_FILESIZE (1 * 1000000) +#define BUFSIZE 1000000 -#define CHECK_ALL_LOW 0 -#define CHECK_ALL_HIGH 1 -#define CHECK_HELLO_WORLD 2 +enum { + CHECK_ALL_LOW, + CHECK_ALL_HIGH, + CHECK_HELLO_WORLD, +}; static uint64_t df_packet_counter = 0, sample_counter = 0; static gboolean have_seen_df_end = FALSE; @@ -37,37 +38,37 @@ static int check_to_perform; static uint64_t expected_samples; static uint64_t *expected_samplerate; -static void check_all_low(const struct sr_datafeed_logic *logic) +static void check_all_low(const struct sr_datafeed_logic *logic, uint64_t n) { uint64_t i; uint8_t *data; - for (i = 0; i < logic->length; i++) { + for (i = 0; i < n; i++) { data = logic->data; if (data[i * logic->unitsize] != 0) fail("Logic data was not all-0x00."); } } -static void check_all_high(const struct sr_datafeed_logic *logic) +static void check_all_high(const struct sr_datafeed_logic *logic, uint64_t n) { uint64_t i; uint8_t *data; - for (i = 0; i < logic->length; i++) { + for (i = 0; i < n; i++) { data = logic->data; if (data[i * logic->unitsize] != 0xff) fail("Logic data was not all-0xff."); } } -static void check_hello_world(const struct sr_datafeed_logic *logic) +static void check_hello_world(const struct sr_datafeed_logic *logic, uint64_t n) { uint64_t i; uint8_t *data, b; const char *h = "Hello world"; - for (i = 0; i < logic->length; i++) { + for (i = 0; i < n; i++) { data = logic->data; b = data[sample_counter + i]; if (b != h[sample_counter + i]) @@ -152,11 +153,11 @@ static void datafeed_in(const struct sr_dev_inst *sdi, // "unitsize %d).", logic->length, logic->unitsize); if (check_to_perform == CHECK_ALL_LOW) - check_all_low(logic); + check_all_low(logic, expected_samples); else if (check_to_perform == CHECK_ALL_HIGH) - check_all_high(logic); + check_all_high(logic, expected_samples); else if (check_to_perform == CHECK_HELLO_WORLD) - check_hello_world(logic); + check_hello_world(logic, expected_samples); sample_counter += logic->length / logic->unitsize; @@ -179,14 +180,15 @@ static void datafeed_in(const struct sr_dev_inst *sdi, } } -static void check_buf(const char *filename, GHashTable *param, - const uint8_t *buf, int check, uint64_t samples, - uint64_t *samplerate) +static void check_buf(GHashTable *options, const uint8_t *buf, int check, + uint64_t samples, uint64_t *samplerate) { int ret; struct sr_input *in; - struct sr_input_format *in_format; + const struct sr_input_module *imod; struct sr_session *session; + struct sr_dev_inst *sdi; + GString *gbuf; /* Initialize global variables for this run. */ df_packet_counter = sample_counter = 0; @@ -196,52 +198,58 @@ static void check_buf(const char *filename, GHashTable *param, expected_samples = samples; expected_samplerate = samplerate; - in_format = srtest_input_get("binary"); + gbuf = g_string_new_len((gchar *)buf, (gssize)samples); - in = g_try_malloc0(sizeof(struct sr_input)); - fail_unless(in != NULL); + imod = sr_input_find("binary"); + fail_unless(imod != NULL, "Failed to find input module."); - in->format = in_format; - in->param = param; + in = sr_input_new(imod, options); + fail_unless(in != NULL, "Failed to create input instance."); - srtest_buf_to_file(filename, buf, samples); /* Create a file. */ + sdi = sr_input_dev_inst_get(in); + fail_unless(sdi != NULL, "Failed to get device instance."); - ret = in->format->init(in, filename); - fail_unless(ret == SR_OK, "Input format init error: %d", ret); - sr_session_new(&session); sr_session_datafeed_callback_add(session, datafeed_in, NULL); - sr_session_dev_add(session, in->sdi); - in_format->loadfile(in, filename); + sr_session_dev_add(session, sdi); + + ret = sr_input_send(in, gbuf); + fail_unless(ret == SR_OK, "sr_input_send() error: %d", ret); + + ret = sr_input_free(in); + fail_unless(ret == SR_OK, "Failed to free input instance: %d", ret); + sr_session_destroy(session); - g_unlink(filename); /* Delete file again. */ + g_string_free(gbuf, TRUE); } START_TEST(test_input_binary_all_low) { uint64_t i, samplerate; + GHashTable *options; uint8_t *buf; - GHashTable *param; + GVariant *gvar; - buf = g_try_malloc0(MAX_FILESIZE); - fail_unless(buf != NULL); + buf = g_malloc0(BUFSIZE); - param = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); - fail_unless(param != NULL); - g_hash_table_insert(param, g_strdup("samplerate"), g_strdup("1250")); + gvar = g_variant_new_uint64(1250); + options = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, + (GDestroyNotify)g_variant_unref); + g_hash_table_insert(options, g_strdup("samplerate"), + g_variant_ref_sink(gvar)); samplerate = SR_HZ(1250); /* Check various filesizes, with/without specifying a samplerate. */ - check_buf(FILENAME, NULL, buf, CHECK_ALL_LOW, 0, NULL); - check_buf(FILENAME, param, buf, CHECK_ALL_LOW, 0, &samplerate); - for (i = 1; i < MAX_FILESIZE; i *= 3) { - check_buf(FILENAME, NULL, buf, CHECK_ALL_LOW, i, NULL); - check_buf(FILENAME, param, buf, CHECK_ALL_LOW, i, &samplerate); + check_buf(NULL, buf, CHECK_ALL_LOW, 0, NULL); + check_buf(options, buf, CHECK_ALL_LOW, 0, &samplerate); + for (i = 1; i < BUFSIZE; i *= 3) { + check_buf(NULL, buf, CHECK_ALL_LOW, i, NULL); + check_buf(options, buf, CHECK_ALL_LOW, i, &samplerate); } - g_hash_table_destroy(param); + g_hash_table_destroy(options); g_free(buf); } END_TEST @@ -251,12 +259,12 @@ START_TEST(test_input_binary_all_high) uint64_t i; uint8_t *buf; - buf = g_try_malloc(MAX_FILESIZE); - memset(buf, 0xff, MAX_FILESIZE); + buf = g_malloc(BUFSIZE); + memset(buf, 0xff, BUFSIZE); - check_buf(FILENAME, NULL, buf, CHECK_ALL_LOW, 0, NULL); - for (i = 1; i < MAX_FILESIZE; i *= 3) - check_buf(FILENAME, NULL, buf, CHECK_ALL_HIGH, i, NULL); + check_buf(NULL, buf, CHECK_ALL_HIGH, 0, NULL); + for (i = 1; i < BUFSIZE; i *= 3) + check_buf(NULL, buf, CHECK_ALL_HIGH, i, NULL); g_free(buf); } @@ -265,13 +273,15 @@ END_TEST START_TEST(test_input_binary_all_high_loop) { uint8_t *buf; + uint64_t bufsize; /* Note: _i is the loop variable from tcase_add_loop_test(). */ - buf = g_try_malloc((_i * 10) + 1); - memset(buf, 0xff, _i * 10); + bufsize = (_i * 10); + buf = g_malloc(BUFSIZE); + memset(buf, 0xff, BUFSIZE); - check_buf(FILENAME, NULL, buf, CHECK_ALL_HIGH, _i * 10, NULL); + check_buf(NULL, buf, CHECK_ALL_HIGH, bufsize, NULL); g_free(buf); } @@ -281,20 +291,23 @@ START_TEST(test_input_binary_hello_world) { uint64_t samplerate; uint8_t *buf; - GHashTable *param; + GHashTable *options; + GVariant *gvar; buf = (uint8_t *)g_strdup("Hello world"); - param = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); - fail_unless(param != NULL); - g_hash_table_insert(param, g_strdup("samplerate"), g_strdup("1250")); + gvar = g_variant_new_uint64(1250); + options = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, + (GDestroyNotify)g_variant_unref); + g_hash_table_insert(options, g_strdup("samplerate"), + g_variant_ref_sink(gvar)); samplerate = SR_HZ(1250); /* Check with and without specifying a samplerate. */ - check_buf(FILENAME, NULL, buf, CHECK_HELLO_WORLD, 11, NULL); - check_buf(FILENAME, param, buf, CHECK_HELLO_WORLD, 11, &samplerate); + check_buf(NULL, buf, CHECK_HELLO_WORLD, 11, NULL); + check_buf(options, buf, CHECK_HELLO_WORLD, 11, &samplerate); - g_hash_table_destroy(param); + g_hash_table_destroy(options); g_free(buf); } END_TEST @@ -310,7 +323,7 @@ Suite *suite_input_binary(void) tcase_add_checked_fixture(tc, srtest_setup, srtest_teardown); tcase_add_test(tc, test_input_binary_all_low); tcase_add_test(tc, test_input_binary_all_high); - tcase_add_loop_test(tc, test_input_binary_all_high_loop, 0, 10); + tcase_add_loop_test(tc, test_input_binary_all_high_loop, 1, 10); tcase_add_test(tc, test_input_binary_hello_world); suite_add_tcase(s, tc); diff --git a/tests/lib.c b/tests/lib.c index acdca674..cdaff771 100644 --- a/tests/lib.c +++ b/tests/lib.c @@ -63,25 +63,6 @@ struct sr_dev_driver *srtest_driver_get(const char *drivername) return driver; } -/* Get a libsigrok input format by ID. */ -struct sr_input_format *srtest_input_get(const char *id) -{ - struct sr_input_format **inputs, *input = NULL; - int i; - - inputs = sr_input_list(); - fail_unless(inputs != NULL, "No input modules found."); - - for (i = 0; inputs[i]; i++) { - if (strcmp(inputs[i]->id, id)) - continue; - input = inputs[i]; - } - fail_unless(input != NULL, "Input module '%s' not found.", id); - - return input; -} - /* Initialize a libsigrok driver. */ void srtest_driver_init(struct sr_context *sr_ctx, struct sr_dev_driver *driver) { @@ -109,40 +90,6 @@ void srtest_driver_init_all(struct sr_context *sr_ctx) } } -/* Initialize a libsigrok input module. */ -void srtest_input_init(struct sr_context *sr_ctx, struct sr_input_format *input) -{ - int ret; - struct sr_input *in; - - (void)sr_ctx; - - in = g_try_malloc0(sizeof(struct sr_input)); - fail_unless(in != NULL); - - in->format = input; - in->param = NULL; - - ret = in->format->init(in, "nonexisting.dat"); - fail_unless(ret == SR_OK, "Failed to init '%s' input module: %d.", - input->id, ret); - - g_free(in); -} - -/* Initialize all libsigrok input modules. */ -void srtest_input_init_all(struct sr_context *sr_ctx) -{ - struct sr_input_format **inputs; - int i; - - inputs = sr_input_list(); - fail_unless(inputs != NULL, "No input modules found."); - - for (i = 0; inputs[i]; i++) - srtest_input_init(sr_ctx, inputs[i]); -} - /* Set the samplerate for the respective driver to the specified value. */ void srtest_set_samplerate(struct sr_dev_driver *driver, uint64_t samplerate) { @@ -195,21 +142,6 @@ void srtest_check_samplerate(struct sr_context *sr_ctx, const char *drivername, drivername, s); } -void srtest_buf_to_file(const char *filename, const uint8_t *buf, uint64_t len) -{ - FILE *f; - GError *error = NULL; - gboolean ret; - - f = g_fopen(filename, "wb"); - fail_unless(f != NULL); - - ret = g_file_set_contents(filename, (const gchar *)buf, len, &error); - fail_unless(ret == TRUE); - - fclose(f); -} - GArray *srtest_get_enabled_logic_channels(const struct sr_dev_inst *sdi) { struct sr_channel *ch; diff --git a/tests/lib.h b/tests/lib.h index 20a360c8..9e38e5bf 100644 --- a/tests/lib.h +++ b/tests/lib.h @@ -29,20 +29,15 @@ void srtest_setup(void); void srtest_teardown(void); struct sr_dev_driver *srtest_driver_get(const char *drivername); -struct sr_input_format *srtest_input_get(const char *id); void srtest_driver_init(struct sr_context *sr_ctx, struct sr_dev_driver *driver); void srtest_driver_init_all(struct sr_context *sr_ctx); -void srtest_input_init(struct sr_context *sr_ctx, struct sr_input_format *input); -void srtest_input_init_all(struct sr_context *sr_ctx); - void srtest_set_samplerate(struct sr_dev_driver *driver, uint64_t samplerate); uint64_t srtest_get_samplerate(struct sr_dev_driver *driver); void srtest_check_samplerate(struct sr_context *sr_ctx, const char *drivername, uint64_t samplerate); -void srtest_buf_to_file(const char *filename, const uint8_t *buf, uint64_t len); GArray *srtest_get_enabled_logic_channels(const struct sr_dev_inst *sdi); Suite *suite_core(void);