| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- /*********************************************************************
- * _ _ _
- * _ __ | |_ _ | | __ _ | |__ ___
- * | '__|| __|(_)| | / _` || '_ \ / __|
- * | | | |_ _ | || (_| || |_) |\__ \
- * |_| \__|(_)|_| \__,_||_.__/ |___/
- *
- * 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.
- ********************************************************************/
- #include "utils_for_testing.h"
- #include "mocks.h"
- #include "pf_includes.h"
- #include <gtest/gtest.h>
- class FspmTest : public PnetIntegrationTest
- {
- };
- class FspmUnitTest : public PnetUnitTest
- {
- };
- TEST_F (FspmUnitTest, FspmCheckValidateConfiguration)
- {
- pnet_cfg_t cfg;
- /* Known good values */
- memset (&cfg, 0, sizeof (pnet_cfg_t));
- cfg.tick_us = 1000;
- cfg.min_device_interval = 1;
- cfg.im_0_data.im_supported = 0;
- cfg.if_cfg.main_netif_name = "eth0";
- cfg.num_physical_ports = PNET_MAX_PHYSICAL_PORTS;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), 0);
- /* Check pointer validity */
- EXPECT_EQ (pf_fspm_validate_configuration (NULL), -1);
- /* Check number of ports */
- cfg.num_physical_ports = PNET_MAX_PHYSICAL_PORTS + 1;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), -1);
- cfg.num_physical_ports = 0;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), -1);
- cfg.num_physical_ports = 1;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), 0);
- cfg.num_physical_ports = PNET_MAX_PHYSICAL_PORTS;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), 0);
- /* Check minimum stack update interval */
- cfg.min_device_interval = 0;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), -1);
- cfg.min_device_interval = 0x1000;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), 0);
- cfg.min_device_interval = 0x1001;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), -1);
- cfg.min_device_interval = 0xFFFF;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), -1);
- cfg.min_device_interval = 1;
- /* Check supported I&M fields */
- cfg.im_0_data.im_supported = PNET_SUPPORTED_IM1;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), 0);
- cfg.im_0_data.im_supported = PNET_SUPPORTED_IM1 | PNET_SUPPORTED_IM2;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), 0);
- cfg.im_0_data.im_supported = PNET_SUPPORTED_IM1 | PNET_SUPPORTED_IM2 |
- PNET_SUPPORTED_IM3 | PNET_SUPPORTED_IM4;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), 0);
- cfg.im_0_data.im_supported = PNET_SUPPORTED_IM4;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), 0);
- cfg.im_0_data.im_supported = 1;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), -1);
- cfg.im_0_data.im_supported = 0x0020;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), -1);
- cfg.im_0_data.im_supported = 0x8000;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), -1);
- cfg.im_0_data.im_supported = 0xFFFF;
- EXPECT_EQ (pf_fspm_validate_configuration (&cfg), -1);
- cfg.im_0_data.im_supported = 0;
- }
- TEST_F (FspmTest, FspmGetImLocation)
- {
- const char expected[PNET_LOCATION_MAX_SIZE] = " ";
- char actual[PNET_LOCATION_MAX_SIZE];
- memset (actual, 0xff, sizeof (actual));
- /* Note that as loading from file failed in pf_fspm_init(), location was set
- * to its default value, which is all spaces.
- */
- pf_fspm_get_im_location (net, actual);
- EXPECT_STREQ (actual, expected);
- EXPECT_EQ (strlen (actual), 22u);
- }
- TEST_F (FspmTest, FspmSaveImLocation)
- {
- const char written[PNET_LOCATION_MAX_SIZE] = "location of device";
- const char expected[PNET_LOCATION_MAX_SIZE] = "location of device ";
- char actual[PNET_LOCATION_MAX_SIZE];
- memset (actual, 0xff, sizeof (actual));
- /* Note that extra spaces are added at the end */
- pf_fspm_save_im_location (net, written);
- /* The file save operation below is performed by the background worker
- * during normal execution of the stack.
- */
- pf_fspm_save_im (net);
- pf_fspm_get_im_location (net, actual);
- EXPECT_STREQ (actual, expected);
- EXPECT_EQ (strlen (actual), 22u);
- EXPECT_STREQ (mock_file_data.filename, PF_FILENAME_IM);
- }
- TEST_F (FspmTest, FspmSaveImLocationShouldAddTermination)
- {
- char not_terminated[PNET_LOCATION_MAX_SIZE];
- char actual[PNET_LOCATION_MAX_SIZE];
- memset (actual, 0xff, sizeof (actual));
- memset (not_terminated, 'n', sizeof (not_terminated));
- pf_fspm_save_im_location (net, not_terminated);
- /* The file save operation below is performed by the background worker
- * during normal execution of the stack.
- */
- pf_fspm_save_im (net);
- pf_fspm_get_im_location (net, actual);
- EXPECT_EQ (actual[sizeof (actual) - 1], '\0');
- EXPECT_EQ (strlen (actual), 22u);
- EXPECT_STREQ (mock_file_data.filename, PF_FILENAME_IM);
- }
- TEST_F (FspmTest, FspmSaveImLocationShouldTruncateLargeStrings)
- {
- const char large[] = "123456789012345678901234567890";
- const char expected[] = "1234567890123456789012";
- char actual[PNET_LOCATION_MAX_SIZE];
- memset (actual, 0xff, sizeof (actual));
- pf_fspm_save_im_location (net, large);
- /* The file save operation below is performed by the background worker
- * during normal execution of the stack.
- */
- pf_fspm_save_im (net);
- pf_fspm_get_im_location (net, actual);
- EXPECT_STREQ (actual, expected);
- EXPECT_EQ (strlen (actual), 22u);
- EXPECT_STREQ (mock_file_data.filename, PF_FILENAME_IM);
- }
|