| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- /*********************************************************************
- * _ _ _
- * _ __ | |_ _ | | __ _ | |__ ___
- * | '__|| __|(_)| | / _` || '_ \ / __|
- * | | | |_ _ | || (_| || |_) |\__ \
- * |_| \__|(_)|_| \__,_||_.__/ |___/
- *
- * www.rt-labs.com
- * Copyright 2018 rt-labs AB, Sweden.
- *
- * This software is dual-licensed under GPLv3 and a commercial
- * license. See the file LICENSE.md distributed with this software for
- * full license information.
- ********************************************************************/
- /**
- * @file
- * @brief Unit tests of features from the CMDEV state machine.
- *
- */
- #include "utils_for_testing.h"
- #include "mocks.h"
- #include "pf_includes.h"
- #include <gtest/gtest.h>
- class CmdevUnitTest : public PnetUnitTest
- {
- };
- TEST_F (CmdevUnitTest, CmdevCalculateDatadirectionInDescriptor)
- {
- pf_data_direction_values_t resulting_direction;
- int ret;
- /* Module with no cyclic data */
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_NO_IO,
- PF_DIRECTION_INPUT,
- PF_DEV_STATUS_TYPE_IOCS,
- &resulting_direction);
- EXPECT_EQ (-1, ret);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_NO_IO,
- PF_DIRECTION_INPUT,
- PF_DEV_STATUS_TYPE_IOPS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_INPUT, resulting_direction);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_NO_IO,
- PF_DIRECTION_OUTPUT,
- PF_DEV_STATUS_TYPE_IOCS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_INPUT, resulting_direction);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_NO_IO,
- PF_DIRECTION_OUTPUT,
- PF_DEV_STATUS_TYPE_IOPS,
- &resulting_direction);
- EXPECT_EQ (-1, ret);
- /* Input module */
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_INPUT,
- PF_DIRECTION_INPUT,
- PF_DEV_STATUS_TYPE_IOCS,
- &resulting_direction);
- EXPECT_EQ (-1, ret);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_INPUT,
- PF_DIRECTION_INPUT,
- PF_DEV_STATUS_TYPE_IOPS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_INPUT, resulting_direction);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_INPUT,
- PF_DIRECTION_OUTPUT,
- PF_DEV_STATUS_TYPE_IOCS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_INPUT, resulting_direction);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_INPUT,
- PF_DIRECTION_OUTPUT,
- PF_DEV_STATUS_TYPE_IOPS,
- &resulting_direction);
- EXPECT_EQ (-1, ret);
- /* Output module */
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_OUTPUT,
- PF_DIRECTION_INPUT,
- PF_DEV_STATUS_TYPE_IOCS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_OUTPUT, resulting_direction);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_OUTPUT,
- PF_DIRECTION_INPUT,
- PF_DEV_STATUS_TYPE_IOPS,
- &resulting_direction);
- EXPECT_EQ (-1, ret);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_OUTPUT,
- PF_DIRECTION_OUTPUT,
- PF_DEV_STATUS_TYPE_IOCS,
- &resulting_direction);
- EXPECT_EQ (-1, ret);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_OUTPUT,
- PF_DIRECTION_OUTPUT,
- PF_DEV_STATUS_TYPE_IOPS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_OUTPUT, resulting_direction);
- /* Input and output module */
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_IO,
- PF_DIRECTION_INPUT,
- PF_DEV_STATUS_TYPE_IOCS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_OUTPUT, resulting_direction);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_IO,
- PF_DIRECTION_INPUT,
- PF_DEV_STATUS_TYPE_IOPS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_INPUT, resulting_direction);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_IO,
- PF_DIRECTION_OUTPUT,
- PF_DEV_STATUS_TYPE_IOCS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_INPUT, resulting_direction);
- ret = pf_cmdev_calculate_exp_sub_data_descriptor_direction (
- PNET_DIR_IO,
- PF_DIRECTION_OUTPUT,
- PF_DEV_STATUS_TYPE_IOPS,
- &resulting_direction);
- EXPECT_EQ (0, ret);
- EXPECT_EQ (PF_DIRECTION_OUTPUT, resulting_direction);
- }
- TEST_F (CmdevUnitTest, CmdevCheckZero)
- {
- int ret;
- int ix;
- /* Shortest buffer */
- uint8_t buffer_1[1] = {0};
- ret = pf_cmdev_check_zero (buffer_1, 1);
- EXPECT_EQ (0, ret);
- for (ix = 1; ix < 0x100; ix++)
- {
- buffer_1[0] = ix;
- ret = pf_cmdev_check_zero (buffer_1, 1);
- EXPECT_EQ (-1, ret);
- }
- /* Small buffer */
- uint8_t buffer_5[5] = {0};
- ret = pf_cmdev_check_zero (buffer_5, 5);
- EXPECT_EQ (0, ret);
- for (ix = 1; ix < 0x100; ix++)
- {
- buffer_5[3] = ix;
- ret = pf_cmdev_check_zero (buffer_5, 5);
- EXPECT_EQ (-1, ret);
- }
- /* Buffer size larger than uint8_t */
- uint8_t buffer_500[500] = {0};
- ret = pf_cmdev_check_zero (buffer_500, 500);
- EXPECT_EQ (0, ret);
- for (ix = 1; ix < 0x100; ix++)
- {
- buffer_500[260] = ix;
- ret = pf_cmdev_check_zero (buffer_500, 500);
- EXPECT_EQ (-1, ret);
- }
- memset (buffer_500, 0, sizeof (buffer_500));
- ret = pf_cmdev_check_zero (buffer_500, 500);
- EXPECT_EQ (0, ret);
- memset (buffer_500, 9, sizeof (buffer_500));
- ret = pf_cmdev_check_zero (buffer_500, 500);
- EXPECT_EQ (-1, ret);
- /* Pass in length zero */
- ret = pf_cmdev_check_zero (buffer_500, 0);
- EXPECT_EQ (0, ret);
- }
- TEST_F (CmdevUnitTest, CmdevCheckVisibleString)
- {
- int ix;
- int ret;
- ret = pf_cmdev_check_visible_string ("");
- EXPECT_EQ (-1, ret);
- ret = pf_cmdev_check_visible_string ("abc");
- EXPECT_EQ (0, ret);
- /* Short string */
- char buffer_20[20] = {0};
- ret = pf_cmdev_check_visible_string (buffer_20);
- EXPECT_EQ (-1, ret);
- buffer_20[0] = "A"[0];
- ret = pf_cmdev_check_visible_string (buffer_20);
- EXPECT_EQ (0, ret);
- memset (buffer_20, "A"[0], sizeof (buffer_20) - 1);
- ret = pf_cmdev_check_visible_string (buffer_20);
- EXPECT_EQ (0, ret);
- /* Test all character values */
- for (ix = 0x01; ix <= 0x1F; ix++)
- {
- buffer_20[10] = ix;
- ret = pf_cmdev_check_visible_string (buffer_20);
- EXPECT_EQ (-1, ret);
- }
- for (ix = 0x20; ix <= 0x7E; ix++)
- {
- buffer_20[10] = ix;
- ret = pf_cmdev_check_visible_string (buffer_20);
- EXPECT_EQ (0, ret);
- }
- for (ix = 0x7F; ix <= 0xFF; ix++)
- {
- buffer_20[10] = ix;
- ret = pf_cmdev_check_visible_string (buffer_20);
- EXPECT_EQ (-1, ret);
- }
- /* String length larger than uint8_t */
- char buffer_500[500] = {0};
- memset (buffer_500, "A"[0], sizeof (buffer_500) - 1);
- ret = pf_cmdev_check_visible_string (buffer_500);
- EXPECT_EQ (0, ret);
- buffer_500[300] = 0x07;
- ret = pf_cmdev_check_visible_string (buffer_500);
- EXPECT_EQ (-1, ret);
- }
- TEST_F (CmdevUnitTest, CmdevCheckNoStraddle)
- {
- uint16_t start_a;
- uint16_t length_a;
- uint16_t start_b;
- uint16_t length_b;
- /* x Area A */
- /* 0 1 2 3 4 5 6 7 8 9 */
- /* x Area B, initial position */
- start_a = 0;
- length_a = 1;
- length_b = 1;
- EXPECT_EQ (-1, pf_cmdev_check_no_straddle (start_a, length_a, 0, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 1, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 2, length_b));
- /* Area A */
- /* 0 1 2 3 4 5 6 7 8 9 */
- /* x Area B, initial position */
- start_a = 0;
- length_a = 0;
- length_b = 1;
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 0, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 1, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 2, length_b));
- /* Area A */
- /* 0 1 2 3 4 5 6 7 8 9 */
- /* Area B, initial position */
- start_a = 0;
- length_a = 0;
- length_b = 0;
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 0, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 1, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 2, length_b));
- /* x Area A */
- /* 0 1 2 3 4 5 6 7 8 9 */
- /* x Area B, initial position */
- start_a = 2;
- length_a = 1;
- length_b = 1;
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 0, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 1, length_b));
- EXPECT_EQ (-1, pf_cmdev_check_no_straddle (start_a, length_a, 2, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 3, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 4, length_b));
- /* x x Area A */
- /* 0 1 2 3 4 5 6 7 8 9 */
- /* x Area B, initial position */
- start_a = 2;
- length_a = 2;
- length_b = 1;
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 0, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 1, length_b));
- EXPECT_EQ (-1, pf_cmdev_check_no_straddle (start_a, length_a, 2, length_b));
- EXPECT_EQ (-1, pf_cmdev_check_no_straddle (start_a, length_a, 3, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 4, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 5, length_b));
- /* x x x Area A */
- /* 0 1 2 3 4 5 6 7 8 9 */
- /* x x Area B, initial position */
- start_a = 4;
- length_a = 3;
- length_b = 2;
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 0, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 1, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 2, length_b));
- EXPECT_EQ (-1, pf_cmdev_check_no_straddle (start_a, length_a, 3, length_b));
- EXPECT_EQ (-1, pf_cmdev_check_no_straddle (start_a, length_a, 4, length_b));
- EXPECT_EQ (-1, pf_cmdev_check_no_straddle (start_a, length_a, 5, length_b));
- EXPECT_EQ (-1, pf_cmdev_check_no_straddle (start_a, length_a, 6, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 7, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 8, length_b));
- EXPECT_EQ (0, pf_cmdev_check_no_straddle (start_a, length_a, 9, length_b));
- /* Values larger than uint8_t */
- start_a = 1000;
- length_a = 500;
- length_b = 300;
- for (start_b = 0; start_b <= 700; start_b++)
- {
- EXPECT_EQ (
- 0,
- pf_cmdev_check_no_straddle (start_a, length_a, start_b, length_b));
- EXPECT_EQ (
- 0,
- pf_cmdev_check_no_straddle (start_b, length_b, start_a, length_a));
- }
- for (start_b = 701; start_b <= 1499; start_b++)
- {
- EXPECT_EQ (
- -1,
- pf_cmdev_check_no_straddle (start_a, length_a, start_b, length_b));
- EXPECT_EQ (
- -1,
- pf_cmdev_check_no_straddle (start_b, length_b, start_a, length_a));
- }
- for (start_b = 1500; start_b < 0xFFFF; start_b++)
- {
- EXPECT_EQ (
- 0,
- pf_cmdev_check_no_straddle (start_a, length_a, start_b, length_b));
- EXPECT_EQ (
- 0,
- pf_cmdev_check_no_straddle (start_b, length_b, start_a, length_a));
- }
- EXPECT_EQ (
- 0,
- pf_cmdev_check_no_straddle (start_a, length_a, 0xFFFF, length_b));
- EXPECT_EQ (
- 0,
- pf_cmdev_check_no_straddle (0xFFFF, length_b, start_a, length_a));
- }
- TEST_F (CmdevUnitTest, CmdevCheckArType)
- {
- int ret;
- for (uint16_t ar_type = 0; ar_type < 0xFF; ar_type++)
- {
- ret = pf_cmdev_check_ar_type (ar_type);
- if (ar_type == PF_ART_IOCAR_SINGLE)
- {
- EXPECT_EQ (0, ret);
- }
- else
- {
- EXPECT_EQ (-1, ret);
- }
- }
- ret = pf_cmdev_check_ar_type (0xFFFF);
- EXPECT_EQ (-1, ret);
- }
|