/ test / src / apps / bridge / sm_config_crc_list_ut.cpp
sm_config_crc_list_ut.cpp
  1  #include "fff.h"
  2  #include "mock_configuration.h"
  3  #include "sm_config_crc_list.h"
  4  #include "gtest/gtest.h"
  5  
  6  DEFINE_FFF_GLOBALS;
  7  
  8  using namespace testing;
  9  
 10  TEST(SMConfigCRCListTests, EmptyList) {
 11    MockConfiguration mock_cfg;
 12    ON_CALL(mock_cfg,
 13            getConfigCbor(StrEq(SMConfigCRCList::KEY), Eq(SMConfigCRCList::KEY_LEN), _, _))
 14        .WillByDefault(
 15            Invoke([](const char *key, size_t key_len, uint8_t *value, size_t &value_len) {
 16              (void)key;
 17              (void)key_len;
 18              uint8_t buf[] = {0x80}; // empty cbor array
 19              value_len = sizeof(buf);
 20              memcpy(value, buf, value_len);
 21              return true;
 22            }));
 23  
 24    SMConfigCRCList sm_config_crc_list(&mock_cfg);
 25    EXPECT_EQ(sm_config_crc_list.contains(0x12345678), false);
 26    uint32_t list_size = 0;
 27    uint32_t *crc_list = sm_config_crc_list.alloc_list(list_size);
 28    EXPECT_EQ(list_size, 0);
 29    EXPECT_EQ(crc_list, nullptr);
 30  }
 31  
 32  TEST(SMConfigCRCListTests, OneItemList) {
 33    MockConfiguration mock_cfg;
 34    ON_CALL(mock_cfg,
 35            getConfigCbor(StrEq(SMConfigCRCList::KEY), Eq(SMConfigCRCList::KEY_LEN), _, _))
 36        .WillByDefault(
 37            Invoke([](const char *key, size_t key_len, uint8_t *value, size_t &value_len) {
 38              (void)key;
 39              (void)key_len;
 40              // cbor array containing one uint32
 41              uint8_t buf[] = {0x81, 0x1A, 0x12, 0x34, 0x56, 0x78};
 42              value_len = sizeof(buf);
 43              memcpy(value, buf, value_len);
 44              return true;
 45            }));
 46  
 47    SMConfigCRCList sm_config_crc_list(&mock_cfg);
 48    EXPECT_EQ(sm_config_crc_list.contains(0x78563412), false);
 49    EXPECT_EQ(sm_config_crc_list.contains(0x12345678), true);
 50  }
 51  
 52  TEST(SMConfigCRCListTests, AddOneItem) {
 53    uint8_t buf[SMConfigCRCList::MAX_BUFFER_SIZE] = {0x81, 0x1A, 0x12, 0x34, 0x56, 0x78};
 54    size_t buf_size = 6;
 55  
 56    MockConfiguration mock_cfg;
 57    ON_CALL(mock_cfg,
 58            getConfigCbor(StrEq(SMConfigCRCList::KEY), Eq(SMConfigCRCList::KEY_LEN), _, _))
 59        .WillByDefault(Invoke([&buf, &buf_size](const char *key, size_t key_len, uint8_t *value,
 60                                                size_t &value_len) {
 61          (void)key;
 62          (void)key_len;
 63          value_len = buf_size;
 64          memcpy(value, buf, value_len);
 65          return true;
 66        }));
 67    EXPECT_CALL(mock_cfg,
 68                setConfigCbor(StrEq(SMConfigCRCList::KEY), Eq(SMConfigCRCList::KEY_LEN), _, _))
 69        .WillOnce(Invoke(
 70            [&buf, &buf_size](const char *key, size_t key_len, uint8_t *value, size_t value_len) {
 71              (void)key;
 72              (void)key_len;
 73              buf_size = value_len;
 74              memcpy(buf, value, value_len);
 75              return true;
 76            }));
 77  
 78    SMConfigCRCList sm_config_crc_list(&mock_cfg);
 79    EXPECT_TRUE(sm_config_crc_list.contains(0x12345678));
 80    EXPECT_FALSE(sm_config_crc_list.contains(0x78563412));
 81    EXPECT_FALSE(sm_config_crc_list.contains(0x21436587));
 82    EXPECT_FALSE(sm_config_crc_list.contains(0x87654321));
 83    sm_config_crc_list.add(0x87654321);
 84    EXPECT_TRUE(sm_config_crc_list.contains(0x87654321));
 85    EXPECT_TRUE(sm_config_crc_list.contains(0x12345678));
 86  }
 87  
 88  TEST(SMConfigCRCListTests, AddMoreItemsThanListMax) {
 89    uint8_t buf[SMConfigCRCList::MAX_BUFFER_SIZE] = {0x80};
 90    size_t buf_size = 1;
 91  
 92    MockConfiguration mock_cfg;
 93    ON_CALL(mock_cfg,
 94            getConfigCbor(StrEq(SMConfigCRCList::KEY), Eq(SMConfigCRCList::KEY_LEN), _, _))
 95        .WillByDefault(Invoke([&buf, &buf_size](const char *key, size_t key_len, uint8_t *value,
 96                                                size_t &value_len) {
 97          (void)key;
 98          (void)key_len;
 99          value_len = buf_size;
100          memcpy(value, buf, value_len);
101          return true;
102        }));
103    ON_CALL(mock_cfg,
104            setConfigCbor(StrEq(SMConfigCRCList::KEY), Eq(SMConfigCRCList::KEY_LEN), _, _))
105        .WillByDefault(Invoke(
106            [&buf, &buf_size](const char *key, size_t key_len, uint8_t *value, size_t value_len) {
107              (void)key;
108              (void)key_len;
109              buf_size = value_len;
110              memcpy(buf, value, value_len);
111              return true;
112            }));
113  
114    SMConfigCRCList sm_config_crc_list(&mock_cfg);
115  
116    // Fill the list and check that they are all there
117    constexpr uint32_t crc_start = 0xF0000001;
118    constexpr uint32_t crc_endcap = crc_start + SMConfigCRCList::MAX_LIST_SIZE;
119    uint32_t crc;
120    for (crc = crc_start; crc < crc_endcap; crc++) {
121      sm_config_crc_list.add(crc);
122    }
123    for (crc = crc_start; crc < crc_endcap; crc++) {
124      EXPECT_TRUE(sm_config_crc_list.contains(crc));
125    }
126  
127    // Add one more and check that the first one is gone
128    sm_config_crc_list.add(crc_endcap);
129    EXPECT_FALSE(sm_config_crc_list.contains(crc_start));
130    for (crc = crc_start + 1; crc <= crc_endcap; crc++) {
131      EXPECT_TRUE(sm_config_crc_list.contains(crc));
132    }
133  }
134  
135  TEST(SMConfigCRCListTests, Clear) {
136    MockConfiguration mock_cfg;
137    ON_CALL(mock_cfg,
138            getConfigCbor(StrEq(SMConfigCRCList::KEY), Eq(SMConfigCRCList::KEY_LEN), _, _))
139        .WillByDefault(
140            Invoke([](const char *key, size_t key_len, uint8_t *value, size_t &value_len) {
141              (void)key;
142              (void)key_len;
143              uint8_t buf[] = {0x81, 0x1A, 0x12, 0x34, 0x56, 0x78};
144              value_len = sizeof(buf);
145              memcpy(value, buf, value_len);
146              return true;
147            }));
148    EXPECT_CALL(mock_cfg,
149                setConfigCbor(StrEq(SMConfigCRCList::KEY), Eq(SMConfigCRCList::KEY_LEN), _, _))
150        .WillOnce(Invoke([](const char *key, size_t key_len, uint8_t *value, size_t value_len) {
151          (void)key;
152          (void)key_len;
153          EXPECT_EQ(value_len, 1);
154          EXPECT_EQ(value[0], 0x80);
155          return true;
156        }));
157  
158    SMConfigCRCList sm_config_crc_list(&mock_cfg);
159    sm_config_crc_list.clear();
160  }
161  
162  TEST(SMConfigCRCListTests, AllocList) {
163    MockConfiguration mock_cfg;
164    ON_CALL(mock_cfg,
165            getConfigCbor(StrEq(SMConfigCRCList::KEY), Eq(SMConfigCRCList::KEY_LEN), _, _))
166        .WillByDefault(
167            Invoke([](const char *key, size_t key_len, uint8_t *value, size_t &value_len) {
168              (void)key;
169              (void)key_len;
170              // cbor array containing one uint32
171              uint8_t buf[] = {0x81, 0x1A, 0x12, 0x34, 0x56, 0x78};
172              value_len = sizeof(buf);
173              memcpy(value, buf, value_len);
174              return true;
175            }));
176  
177    SMConfigCRCList sm_config_crc_list(&mock_cfg);
178    EXPECT_EQ(sm_config_crc_list.contains(0x12345678), true);
179    uint32_t list_size;
180    uint32_t *crc_list = sm_config_crc_list.alloc_list(list_size);
181    EXPECT_EQ(list_size, 1);
182    EXPECT_EQ(crc_list[0], 0x12345678);
183    free(crc_list);
184  }