From d17722045a19b0b515c1bf27e7af4df9bb4d7bd1 Mon Sep 17 00:00:00 2001 From: Pawel Szewczyk Date: Wed, 18 Feb 2015 16:00:44 +0100 Subject: [PATCH] libusbgx: tests: Add config attributes getting and setting test Change-Id: I86e5263e11f3794aa1b999f02778dbf6ce32e572 Signed-off-by: Pawel Szewczyk [Update description] Signed-off-by: Krzysztof Opasiak --- tests/test.c | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) diff --git a/tests/test.c b/tests/test.c index c10997c..154060f 100644 --- a/tests/test.c +++ b/tests/test.c @@ -61,6 +61,16 @@ static usbg_config_strs simple_config_strs= { .configuration = "configuration string" }; +static usbg_config_attrs max_config_attrs = { + .bmAttributes = 0xff, + .bMaxPower = 0xff +}; + +static usbg_config_attrs min_config_attrs = { + .bmAttributes = 0x00, + .bMaxPower = 0x00 +}; + /** * @brief Simplest udcs names * @details Used to go through init when testing other things @@ -268,6 +278,22 @@ static struct test_state long_udc_state = { .udcs = long_udcs }; +static usbg_config_attrs *get_random_config_attrs() +{ + usbg_config_attrs *ret; + + ret = malloc(sizeof(*ret)); + if (ret == NULL) + fail(); + free_later(ret); + + srand(time(NULL)); + ret->bmAttributes = rand() % max_config_attrs.bmAttributes; + ret->bMaxPower = rand() % max_config_attrs.bMaxPower; + + return ret; +} + static usbg_gadget_attrs *get_random_gadget_attrs() { usbg_gadget_attrs *ret; @@ -290,6 +316,39 @@ static usbg_gadget_attrs *get_random_gadget_attrs() return ret; } +/** + * @brief Add given attributes to all configs in state + * @return Prepared state where configs has given attributes + */ +static void *prepare_state_with_config_attrs(struct test_state *state, + usbg_config_attrs *attrs) +{ + struct test_gadget *tg; + struct test_config *tc; + + for (tg = state->gadgets; tg->name; ++tg) + for (tc = tg->configs; tc->label; ++tc) + tc->attrs = attrs; + + state = prepare_state(state); + return state; +} + +static void setup_max_config_attrs_state(void **state) +{ + *state = prepare_state_with_config_attrs(&simple_state, &max_config_attrs); +} + +static void setup_min_config_attrs_state(void **state) +{ + *state = prepare_state_with_config_attrs(&simple_state, &min_config_attrs); +} + +static void setup_random_config_attrs_state(void **state) +{ + *state = prepare_state_with_config_attrs(&simple_state, get_random_config_attrs()); +} + static void setup_simple_config_strs_state(void **state) { struct test_gadget *tg; @@ -1459,6 +1518,56 @@ static void test_get_config_strs(void **state) } /** + * @brief Get config attributes + * @details Assume that attributes which will be returned are the same as + * given test state contains. + * @param[in] c Usbg config + * @param[in] tc Test config with set attributes + */ +static void try_get_config_attrs(usbg_config *c, struct test_config *tc) +{ + usbg_config_attrs attrs; + + push_config_attrs(tc, tc->attrs); + usbg_get_config_attrs(c, &attrs); + assert_config_attrs_equal(tc->attrs, &attrs); +} + +/** + * @brief Test getting config attributes + * @details Get config attributes on all configfs in state + * @param[in, out] state Pointer to pointer to correctly initialized test state, + * will point to usbg state when finished. + */ +static void test_get_config_attrs(void **state) +{ + for_each_test_config(state, try_get_config_attrs); +} + +/** + * @brief Set config attributes in given config + * @param[in] c Usbg config + * @param[in] tc Test config with attributes which will be set + */ +static void try_set_config_attrs(usbg_config *c, struct test_config *tc) +{ + pull_config_attrs(tc, tc->attrs); + usbg_set_config_attrs(c, tc->attrs); +} + +/** + * @brief Test setting config attributes + * @details Set config attributes on all configs in state + * @param[in, out] state Pointer to pointer to correctly initialized test state, + * will point to usbg state when finished. + */ +static void test_set_config_attrs(void **state) +{ + for_each_test_config(state, try_set_config_attrs); +} + +/** + * * @brief cleanup usbg state */ static void teardown_state(void **state) @@ -1865,6 +1974,54 @@ static UnitTest tests[] = { */ USBG_TEST_TS("test_get_config_strs_simple", test_get_config_strs, setup_simple_config_strs_state), + /** + * @usbg_test + * @test_desc{test_get_config_attrs_max, + * Get config attributes with max values, + * usbg_get_config_attrs} + */ + USBG_TEST_TS("test_get_config_attrs_max", + test_get_config_attrs, setup_max_config_attrs_state), + /** + * @usbg_test + * @test_desc{test_get_config_attrs_min, + * Get config attributes with minimum values, + * usbg_get_config_attrs} + */ + USBG_TEST_TS("test_get_config_attrs_min", + test_get_config_attrs, setup_min_config_attrs_state), + /** + * @usbg_test + * @test_desc{test_get_config_attrs_random, + * Get config attributes with random values, + * usbg_get_config_attrs} + */ + USBG_TEST_TS("test_get_config_attrs_random", + test_get_config_attrs, setup_random_config_attrs_state), + /** + * @usbg_test + * @test_desc{test_set_config_attrs_max, + * Set config attributes with max values, + * usbg_set_config_attrs} + */ + USBG_TEST_TS("test_set_config_attrs_max", + test_set_config_attrs, setup_max_config_attrs_state), + /** + * @usbg_test + * @test_desc{test_set_config_attrs_min, + * Set config attributes with minimum values, + * usbg_set_config_attrs} + */ + USBG_TEST_TS("test_set_config_attrs_min", + test_set_config_attrs, setup_min_config_attrs_state), + /** + * @usbg_test + * @test_desc{test_set_config_attrs_random, + * Set config attributes with random values, + * usbg_set_config_attrs} + */ + USBG_TEST_TS("test_set_config_attrs_random", + test_set_config_attrs, setup_random_config_attrs_state), #ifndef DOXYGEN }; -- 2.7.4