storage.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Pavel Kirienko <pavel.kirienko@gmail.com>
3  */
4 
5 #include <gtest/gtest.h>
7 #include "../../helpers.hpp"
8 #include "../memory_storage_backend.hpp"
9 
10 
11 TEST(dynamic_node_id_server_centralized_Storage, Initialization)
12 {
14  using namespace uavcan::dynamic_node_id_server;
15 
16  // No data in the storage - initializing empty
17  {
18  MemoryStorageBackend storage;
19  Storage stor(storage);
20 
21  ASSERT_EQ(0, storage.getNumKeys());
22  ASSERT_LE(0, stor.init());
23 
24  ASSERT_EQ(0, storage.getNumKeys());
25  ASSERT_EQ(0, stor.getSize());
26 
27  ASSERT_FALSE(stor.isNodeIDOccupied(1));
28  ASSERT_FALSE(stor.isNodeIDOccupied(0));
29  }
30  // Nonempty storage, many items
31  {
32  MemoryStorageBackend storage;
33  Storage stor(storage);
34 
35  storage.set("occupation_mask", "0e000000000000000000000000000000"); // node ID 1, 2, 3
36  ASSERT_LE(0, stor.init()); // OK
37 
38  ASSERT_EQ(1, storage.getNumKeys());
39  ASSERT_EQ(3, stor.getSize());
40 
41  ASSERT_TRUE(stor.isNodeIDOccupied(1));
42  ASSERT_TRUE(stor.isNodeIDOccupied(2));
43  ASSERT_TRUE(stor.isNodeIDOccupied(3));
44  ASSERT_FALSE(stor.isNodeIDOccupied(0));
45  ASSERT_FALSE(stor.isNodeIDOccupied(4));
46 
47  UniqueID uid_1;
48  uid_1[0] = 1;
49 
50  UniqueID uid_2;
51  uid_2[0] = 2;
52 
53  UniqueID uid_3;
54  uid_3[0] = 3;
55 
56  ASSERT_FALSE(stor.getNodeIDForUniqueID(uid_1).isValid());
57  ASSERT_FALSE(stor.getNodeIDForUniqueID(uid_2).isValid());
58  ASSERT_FALSE(stor.getNodeIDForUniqueID(uid_3).isValid());
59  ASSERT_FALSE(stor.isNodeIDOccupied(127));
60 
61  storage.set("01000000000000000000000000000000", "1");
62  storage.set("02000000000000000000000000000000", "2");
63  storage.set("03000000000000000000000000000000", "3");
64 
65  ASSERT_EQ(1, stor.getNodeIDForUniqueID(uid_1).get());
66  ASSERT_EQ(2, stor.getNodeIDForUniqueID(uid_2).get());
67  ASSERT_EQ(3, stor.getNodeIDForUniqueID(uid_3).get());
68  ASSERT_FALSE(stor.isNodeIDOccupied(127));
69  }
70 }
71 
72 
73 TEST(dynamic_node_id_server_centralized_Storage, Basic)
74 {
76 
77  MemoryStorageBackend storage;
78  Storage stor(storage);
79 
80  ASSERT_EQ(0, storage.getNumKeys());
81  ASSERT_LE(0, stor.init());
82  storage.print();
83  ASSERT_EQ(0, storage.getNumKeys());
84 
85  /*
86  * Adding one entry to the log, making sure it appears in the storage
87  */
89  unique_id[0] = 1;
90  ASSERT_LE(0, stor.add(1, unique_id));
91 
92  ASSERT_EQ("02000000000000000000000000000000", storage.get("occupation_mask"));
93  ASSERT_EQ("1", storage.get("01000000000000000000000000000000"));
94 
95  ASSERT_EQ(2, storage.getNumKeys());
96  ASSERT_EQ(1, stor.getSize());
97 
98  /*
99  * Adding another entry while storage is failing
100  */
101  storage.failOnSetCalls(true);
102 
103  ASSERT_EQ(2, storage.getNumKeys());
104 
105  unique_id[0] = 2;
106  ASSERT_GT(0, stor.add(2, unique_id));
107 
108  ASSERT_EQ(2, storage.getNumKeys()); // No new entries, we failed
109 
110  ASSERT_EQ(1, stor.getSize());
111 
112  /*
113  * Adding a lot of entries
114  */
115  storage.failOnSetCalls(false);
116 
117  uavcan::NodeID node_id(2);
118  while (stor.getSize() < 127)
119  {
120  ASSERT_LE(0, stor.add(node_id, unique_id));
121 
122  ASSERT_TRUE(stor.getNodeIDForUniqueID(unique_id).isValid());
123  ASSERT_TRUE(stor.isNodeIDOccupied(node_id));
124 
125  node_id = uint8_t(uavcan::min(node_id.get() + 1U, 127U));
126  unique_id[0] = uint8_t(unique_id[0] + 1U);
127  }
128 
129  storage.print();
130 }
uavcan::NodeID::isValid
bool isValid() const
Definition: transfer.hpp:134
uavcan::NodeID::get
uint8_t get() const
Definition: transfer.hpp:132
uavcan::NodeID
Definition: transfer.hpp:112
MemoryStorageBackend::print
void print() const
Definition: memory_storage_backend.hpp:46
TEST
TEST(dynamic_node_id_server_centralized_Storage, Initialization)
Definition: storage.cpp:11
uavcan::dynamic_node_id_server::centralized::Storage
Definition: storage.hpp:24
uavcan::dynamic_node_id_server::centralized::Storage::init
int init()
Definition: storage.hpp:73
uavcan::dynamic_node_id_server::centralized::Storage::isNodeIDOccupied
bool isNodeIDOccupied(NodeID node_id) const
Definition: storage.hpp:141
uavcan::dynamic_node_id_server::centralized
Definition: centralized/server.hpp:19
uavcan::uint8_t
std::uint8_t uint8_t
Definition: std.hpp:24
MemoryStorageBackend::set
virtual void set(const String &key, const String &value)
Definition: memory_storage_backend.hpp:32
uavcan::min
const UAVCAN_EXPORT T & min(const T &a, const T &b)
Definition: templates.hpp:281
uavcan::dynamic_node_id_server::centralized::Storage::getSize
uint8_t getSize() const
Definition: storage.hpp:143
MemoryStorageBackend::get
virtual String get(const String &key) const
Definition: memory_storage_backend.hpp:22
storage.hpp
MemoryStorageBackend
Definition: memory_storage_backend.hpp:10
uavcan::dynamic_node_id_server
Definition: abstract_server.hpp:16
uavcan::dynamic_node_id_server::centralized::Storage::add
int add(const NodeID node_id, const UniqueID &unique_id)
Definition: storage.hpp:86
MemoryStorageBackend::getNumKeys
unsigned getNumKeys() const
Definition: memory_storage_backend.hpp:44
uavcan::dynamic_node_id_server::UniqueID
protocol::dynamic_node_id::server::Entry::FieldTypes::unique_id UniqueID
Definition: protocol/dynamic_node_id_server/types.hpp:22
MemoryStorageBackend::failOnSetCalls
void failOnSetCalls(bool really)
Definition: memory_storage_backend.hpp:40
uavcan::dynamic_node_id_server::centralized::Storage::getNodeIDForUniqueID
NodeID getNodeIDForUniqueID(const UniqueID &unique_id) const
Definition: storage.hpp:133


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:03