| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- /*********************************************************************
- * _ _ _
- * _ __ | |_ _ | | __ _ | |__ ___
- * | '__|| __|(_)| | / _` || '_ \ / __|
- * | | | |_ _ | || (_| || |_) |\__ \
- * |_| \__|(_)|_| \__,_||_.__/ |___/
- *
- * 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 CminaUnitTest : public PnetUnitTest
- {
- };
- TEST_F (CminaUnitTest, CminaCheckIsStationNameValid)
- {
- EXPECT_TRUE (pf_cmina_is_stationname_valid ("", 0));
- EXPECT_TRUE (pf_cmina_is_stationname_valid ("abc", 3));
- EXPECT_TRUE (pf_cmina_is_stationname_valid ("a1.2.3.4", 8));
- EXPECT_TRUE (
- pf_cmina_is_stationname_valid ("device-1.machine-1.plant-1.vendor", 33));
- EXPECT_TRUE (pf_cmina_is_stationname_valid (
- "xn--mhle1-kva.xn--lmhle1-vxa4c.plant.com",
- 40));
- EXPECT_TRUE (pf_cmina_is_stationname_valid ("port-xyz", 8));
- EXPECT_TRUE (pf_cmina_is_stationname_valid ("port-xyz-abcde", 14));
- EXPECT_TRUE (pf_cmina_is_stationname_valid (
- "abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz1234567890",
- 63));
- EXPECT_TRUE (pf_cmina_is_stationname_valid (
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa."
- "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb."
- "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc."
- "dddddddddddddddddddddddddddddddddddddddddddddddd",
- 240));
- EXPECT_FALSE (pf_cmina_is_stationname_valid (
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa."
- "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb."
- "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc."
- "dddddddddddddddddddddddddddddddddddddddddddddddd",
- 240));
- EXPECT_FALSE (pf_cmina_is_stationname_valid (
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa."
- "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb."
- "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc."
- "ddddddddddddddddddddddddddddddddddddddddddddddddd",
- 241));
- EXPECT_FALSE (pf_cmina_is_stationname_valid ("name_1", 6));
- EXPECT_FALSE (pf_cmina_is_stationname_valid ("name/1", 6));
- EXPECT_FALSE (pf_cmina_is_stationname_valid ("-name", 5));
- EXPECT_FALSE (pf_cmina_is_stationname_valid ("name-", 5));
- EXPECT_FALSE (pf_cmina_is_stationname_valid ("name.-name", 10));
- EXPECT_FALSE (pf_cmina_is_stationname_valid ("name.name-", 10));
- EXPECT_FALSE (pf_cmina_is_stationname_valid (
- "looooooooooooooooooooooooooooooooooooooooooooooooooooooonglabelname",
- 67));
- EXPECT_FALSE (pf_cmina_is_stationname_valid ("1.2.3.4", 7));
- EXPECT_FALSE (pf_cmina_is_stationname_valid ("port-123", 8));
- EXPECT_FALSE (pf_cmina_is_stationname_valid ("port-123-98765", 14));
- }
- TEST_F (CminaUnitTest, CminaCheckIsNetmaskValid)
- {
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (0, 0, 0, 0)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 255, 255)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 255, 254)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 255, 252)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 255, 248)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 255, 240)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 255, 224)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 255, 192)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 255, 128)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 255, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 254, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 252, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 248, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 240, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 224, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 192, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 128, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 255, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 254, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 252, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 248, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 240, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 224, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 192, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 128, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 000, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (254, 000, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (252, 000, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (248, 000, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (240, 000, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (224, 000, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (192, 000, 000, 000)));
- EXPECT_TRUE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (128, 000, 000, 000)));
- EXPECT_FALSE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 0, 255, 255)));
- EXPECT_FALSE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (0, 255, 255, 255)));
- EXPECT_FALSE (pf_cmina_is_netmask_valid (PNAL_MAKEU32 (255, 254, 255, 0)));
- }
- TEST_F (CminaUnitTest, CminaCheckIsIPaddressValid)
- {
- /* 0.0.0.0 /32 Mandatory 0.0.0.0 up to 0.0.0.0
- Special case: No IPsuite assigned in conjunction with
- SubnetMask and StandardGateway set to zero */
- EXPECT_TRUE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (0, 0, 0, 0),
- PNAL_MAKEU32 (0, 0, 0, 0)));
- /* 0.0.0.0 /8 Invalid 0.0.0.0 up to 0.255.255.255
- Reserved according to IETF RFC 6890 */
- EXPECT_FALSE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (255, 0, 0, 0),
- PNAL_MAKEU32 (0, 255, 1, 1)));
- /* 127.0.0.0 /8 Invalid 127.0.0.0 up to 127.255.255.255
- Reserved according to IETF RFC 6890 loopback address */
- EXPECT_FALSE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (255, 0, 0, 0),
- PNAL_MAKEU32 (127, 0, 0, 1)));
- /* 224.0.0.0 /4 Invalid 224.0.0.0 up to 239.255.255.255
- Reserved according to IETF RFC 6890; IPv4 multicast address assignments */
- EXPECT_FALSE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (0xF0, 0, 0, 0),
- PNAL_MAKEU32 (224, 0, 0, 34)));
- /* 240.0.0.0 /4 Invalid 240.0.0.0 up to 255.255.255.255
- Reserved according to IETF RFC 6890; reserved for future addressing */
- EXPECT_FALSE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (0xF0, 0, 0, 0),
- PNAL_MAKEU32 (240, 0, 0, 34)));
- /* Invalid — Subnet part of the IPAddress is “0” */
- EXPECT_FALSE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (255, 255, 0, 0),
- PNAL_MAKEU32 (0, 0, 1, 10)));
- /* Invalid Host part of the IPAddress is a series of consecutive “1”
- (subnet broadcast address)
- IPAddress may be accepted but should be invalid.*/
- EXPECT_FALSE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (255, 255, 0, 0),
- PNAL_MAKEU32 (192, 168, 255, 255)));
- /* Invalid — Host part of the IPAddress is a series of consecutive “0”
- (subnet address)
- IPAddress may be accepted but should be invalid. */
- EXPECT_FALSE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (255, 255, 0, 0),
- PNAL_MAKEU32 (192, 168, 0, 0)));
- /* Other Mandatory — IP address assigned */
- EXPECT_TRUE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (255, 255, 0, 0),
- PNAL_MAKEU32 (192, 168, 1, 1)));
- EXPECT_TRUE (pf_cmina_is_ipaddress_valid (
- PNAL_MAKEU32 (255, 255, 255, 0),
- PNAL_MAKEU32 (10, 10, 0, 35)));
- }
- TEST_F (CminaUnitTest, CminaCheckIsGatewayValid)
- {
- EXPECT_TRUE (pf_cmina_is_gateway_valid (
- PNAL_MAKEU32 (192, 168, 1, 4),
- PNAL_MAKEU32 (255, 255, 255, 0),
- PNAL_MAKEU32 (192, 168, 1, 1)));
- EXPECT_TRUE (pf_cmina_is_gateway_valid (
- PNAL_MAKEU32 (192, 168, 1, 4),
- PNAL_MAKEU32 (255, 255, 255, 0),
- PNAL_MAKEU32 (0, 0, 0, 0)));
- EXPECT_FALSE (pf_cmina_is_gateway_valid (
- PNAL_MAKEU32 (192, 168, 1, 4),
- PNAL_MAKEU32 (255, 255, 255, 0),
- PNAL_MAKEU32 (192, 169, 1, 1)));
- EXPECT_FALSE (pf_cmina_is_gateway_valid (
- PNAL_MAKEU32 (192, 168, 1, 4),
- PNAL_MAKEU32 (255, 255, 255, 0),
- PNAL_MAKEU32 (192, 168, 0, 1)));
- }
- TEST_F (CminaUnitTest, CminaCheckHasTimedOut)
- {
- // Interval length 1 ms (= 32), factor 1
- EXPECT_FALSE (pf_cmina_has_timed_out (0, 0, 32, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (999, 0, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (1000, 0, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (1001, 0, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (UINT32_MAX, 0, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (0, 1000, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (999, 1000, 32, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (1000, 1000, 32, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (1001, 1000, 32, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (1999, 1000, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (2000, 1000, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (2001, 1000, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (3000, 1000, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (4000, 1000, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (UINT32_MAX, 1000, 32, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (0, UINT32_MAX, 32, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (998, UINT32_MAX, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (999, UINT32_MAX, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (1000, UINT32_MAX, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (1001, UINT32_MAX, 32, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (UINT32_MAX - 1, UINT32_MAX, 32, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (UINT32_MAX, UINT32_MAX, 32, 1));
- // Interval length 1 ms, factor 3
- EXPECT_TRUE (pf_cmina_has_timed_out (0, 1000, 32, 3));
- EXPECT_TRUE (pf_cmina_has_timed_out (999, 1000, 32, 3));
- EXPECT_FALSE (pf_cmina_has_timed_out (1000, 1000, 32, 3));
- EXPECT_FALSE (pf_cmina_has_timed_out (1001, 1000, 32, 3));
- EXPECT_FALSE (pf_cmina_has_timed_out (3999, 1000, 32, 3));
- EXPECT_TRUE (pf_cmina_has_timed_out (4000, 1000, 32, 3));
- EXPECT_TRUE (pf_cmina_has_timed_out (4001, 1000, 32, 3));
- EXPECT_TRUE (pf_cmina_has_timed_out (5000, 1000, 32, 3));
- EXPECT_TRUE (pf_cmina_has_timed_out (UINT32_MAX, 1000, 32, 3));
- // Interval length 31.25 microseconds, factor 1
- EXPECT_TRUE (pf_cmina_has_timed_out (0, 1000, 1, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (999, 1000, 1, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (1000, 1000, 1, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (1001, 1000, 1, 1));
- EXPECT_FALSE (pf_cmina_has_timed_out (1030, 1000, 1, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (1031, 1000, 1, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (1032, 1000, 1, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (2000, 1000, 1, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (UINT32_MAX, 1000, 1, 1));
- // No interval
- EXPECT_TRUE (pf_cmina_has_timed_out (0, 1000, 0, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (999, 1000, 0, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (1000, 1000, 0, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (1001, 1000, 0, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (UINT32_MAX, 1000, 0, 1));
- EXPECT_TRUE (pf_cmina_has_timed_out (0, 1000, 32, 0));
- EXPECT_TRUE (pf_cmina_has_timed_out (999, 1000, 32, 0));
- EXPECT_TRUE (pf_cmina_has_timed_out (1000, 1000, 32, 0));
- EXPECT_TRUE (pf_cmina_has_timed_out (1001, 1000, 32, 0));
- EXPECT_TRUE (pf_cmina_has_timed_out (UINT32_MAX, 1000, 32, 0));
- }
|