RTC Toolkit 6.0.0
Loading...
Searching...
No Matches
runtimeRepoTestSuite.hpp
Go to the documentation of this file.
1
14
15#ifndef RTCTK_COMPONENTFRAMEWORK_TEST_RUNTIMEREPOTESTSUITE_HPP
16#define RTCTK_COMPONENTFRAMEWORK_TEST_RUNTIMEREPOTESTSUITE_HPP
17
19
21
22TEST_F(Metadata, WriteDataPointReturnsOptionalMetadata) {
23 auto t_start = RepositoryIf::Timestamp{};
24 int initial_value = 0;
25
27 md["timestamp"] = t_start;
28
30 req.CreateDataPoint(path, initial_value);
31 req.WriteDataPoint(path, initial_value, md);
32 repo->SendRequest(req).Wait();
33
34 ASSERT_TRUE(md.Contains("timestamp"));
35 ASSERT_TRUE(md.Contains("sequence_id"));
36
37 EXPECT_EQ(md["timestamp"].Cast<RepositoryIf::Timestamp>(), t_start);
38 EXPECT_EQ(md["sequence_id"].Cast<RtcUInt64>(), 1);
39}
40
41TEST_F(Metadata, TimestampIncrementsOnWrite) {
42 {
43 auto t_start = RepositoryIf::Timestamp{};
44 RepositoryIf::MetaData metadata_read;
45
46 int initial_value = 0;
48 req.CreateDataPoint(path, initial_value);
49 req.ReadMetaData(path, metadata_read);
50 repo->SendRequest(req).Wait();
51
52 ASSERT_TRUE(metadata_read.Contains("timestamp"));
53 EXPECT_GT(metadata_read["timestamp"].Cast<RepositoryIf::Timestamp>(), t_start);
54 }
55
56 {
57 auto t_start = RepositoryIf::Timestamp{};
58 RepositoryIf::MetaData metadata_read;
59
60 int new_value = 4;
62 req.WriteDataPoint(path, new_value);
63 req.ReadMetaData(path, metadata_read);
64 repo->SendRequest(req).Wait();
65
66 ASSERT_TRUE(metadata_read.Contains("timestamp"));
67 EXPECT_GT(metadata_read["timestamp"].Cast<RepositoryIf::Timestamp>(), t_start);
68 }
69}
70
71TEST_F(Metadata, SequenceIdIncrementsOnWrite) {
72 {
73 RepositoryIf::MetaData metadata_read;
74
75 int initial_value = 0;
77 req.CreateDataPoint(path, initial_value);
78 req.ReadMetaData(path, metadata_read);
79 repo->SendRequest(req).Wait();
80
81 ASSERT_TRUE(metadata_read.Contains("sequence_id"));
82 EXPECT_EQ(metadata_read["sequence_id"].Cast<RtcUInt64>(), 0);
83 }
84
85 {
86 RepositoryIf::MetaData metadata_read;
87
88 int new_value = 4;
90 req.WriteDataPoint(path, new_value);
91 req.ReadMetaData(path, metadata_read);
92 repo->SendRequest(req).Wait();
93
94 ASSERT_TRUE(metadata_read.Contains("sequence_id"));
95 EXPECT_EQ(metadata_read["sequence_id"].Cast<RtcUInt64>(), 1);
96 }
97
98 {
99 RepositoryIf::MetaData metadata_write;
100
101 int new_value = 6;
103 req.WriteDataPoint(path, new_value, metadata_write);
104 repo->SendRequest(req).Wait();
105
106 ASSERT_TRUE(metadata_write.Contains("sequence_id"));
107 EXPECT_EQ(metadata_write["sequence_id"].Cast<RtcUInt64>(), 2);
108 }
109}
110
111TEST_F(Metadata, ReadWithSpecificSequenceId) {
112 // First setup the datapoint and write to it two times, making sure the resultant sequence ID
113 // is 2. Then make sure we can successfully read the datapoint and get the correct value.
114 {
115 int int_create = 3;
116 int int_write1 = 4;
117 int int_write2 = 5;
118 RepositoryIf::MetaData metadata;
119
121 req.CreateDataPoint("/foo"_dppath, int_create);
122 req.WriteDataPoint("/foo"_dppath, int_write1);
123 req.WriteDataPoint("/foo"_dppath, int_write2);
124 req.ReadMetaData("/foo"_dppath, metadata);
125 repo->SendRequest(req).Wait();
126
127 ASSERT_EQ(metadata["sequence_id"].Cast<RtcUInt64>(), 2);
128 }
129
130 {
131 int int_read;
132 RepositoryIf::MetaData metadata = {{"sequence_id", static_cast<RtcUInt64>(2)}};
134 req.ReadDataPoint("/foo"_dppath, int_read, metadata);
135 repo->SendRequest(req).Wait();
136 EXPECT_EQ(int_read, 5);
137 }
138}
139
140TEST_F(Metadata, ReadWithWrongSequenceId) {
141 // First setup the datapoint and write to it two times, making sure the resultant sequence ID
142 // is 2. Then make check that an exception is thrown if a ReadDataPoint request is made with
143 // a different sequence ID.
144 {
145 int int_create = 3;
146 int int_write1 = 4;
147 int int_write2 = 5;
148 RepositoryIf::MetaData metadata;
149
151 req.CreateDataPoint("/foo"_dppath, int_create);
152 req.WriteDataPoint("/foo"_dppath, int_write1);
153 req.WriteDataPoint("/foo"_dppath, int_write2);
154 req.ReadMetaData("/foo"_dppath, metadata);
155 repo->SendRequest(req).Wait();
156
157 ASSERT_EQ(metadata["sequence_id"].Cast<RtcUInt64>(), 2);
158 }
159
160 {
161 int int_read;
162 RepositoryIf::MetaData metadata = {{"sequence_id", static_cast<RtcUInt64>(342)}};
164 req.ReadDataPoint("/foo"_dppath, int_read, metadata);
165 EXPECT_THROW({ repo->SendRequest(req).Wait(); }, RtctkException);
166 }
167}
168
169} // namespace rtctk::componentFramework::test
170
171#endif // RTCTK_COMPONENTFRAMEWORK_TEST_RUNTIMEREPOTESTSUITE_HPP
An object representing one or more asynchronous I/O requests to a repository.
Definition repositoryIf.hpp:638
void WriteDataPoint(const DataPointPath &path, const T &buffer, std::optional< std::reference_wrapper< MetaData > > metadata=std::nullopt, const CallbackType &callback=nullptr)
Add request to write a datapoint.
Definition repositoryIf.ipp:1557
void ReadDataPoint(const DataPointPath &path, T &buffer, std::optional< std::reference_wrapper< MetaData > > metadata=std::nullopt, const CallbackType &callback=nullptr) const
Definition repositoryIf.ipp:1459
void ReadMetaData(const DataPointPath &path, MetaData &metadata, const CallbackType &callback=nullptr) const
Definition repositoryIf.cpp:372
void CreateDataPoint(const DataPointPath &path, const T &initial_value, std::optional< std::reference_wrapper< const MetaData > > metadata=std::nullopt, const CallbackType &callback=nullptr)
Add a request to create a new datapoint.
Definition repositoryIf.ipp:1400
Class for passing/receiving metadata to/from the repository.
Definition repositoryIf.hpp:145
bool Contains(const std::string &key) const
Check if the metadata contains a specific key.
Definition repositoryIf.ipp:1306
Clock::time_point Timestamp
Definition repositoryIf.hpp:57
The RtctkException class is the base class for all Rtctk exceptions.
Definition exceptions.hpp:220
Definition repositoryIfTestSuite.hpp:2342
Definition fakeClock.cpp:14
TEST_F(Callbacks, CreateDataPointCallback)
Definition repositoryIfTestSuite.hpp:1668
std::uint64_t RtcUInt64
Definition basicTypes.hpp:44
Header file declaring type parameterised tests for RepositoryIf.