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