blob: 3d125639525799566960852c9352db96a2357aba [file] [log] [blame]
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +00001#include "helpers.hpp"
Krzysztof Grobelny7f06f612020-09-24 13:42:10 +02002#include "mocks/sensor_mock.hpp"
3#include "sensor_cache.hpp"
4
5#include <initializer_list>
6
7#include <gmock/gmock.h>
8
9using namespace testing;
10
11class TestSensorCache : public Test
12{
13 public:
14 SensorCache sut;
15};
16
Krzysztof Grobelny7f06f612020-09-24 13:42:10 +020017struct IdParam
18{
19 IdParam() = default;
20 IdParam(std::string_view service, std::string_view path) :
21 service(service), path(path)
22 {}
23
Michal Orzelb3e03d22024-06-28 13:55:47 +020024 friend void PrintTo(const IdParam& param, std::ostream* os)
25 {
26 *os << "(" << param.service << "): " << param.path;
27 }
28
Krzysztof Grobelny7f06f612020-09-24 13:42:10 +020029 std::string service;
30 std::string path;
31};
32
33class TestSensorCacheP :
34 public TestSensorCache,
35 public WithParamInterface<std::vector<IdParam>>
36{
37 public:
38 void SetUp() override
39 {
40 auto vec = GetParam();
41 ASSERT_THAT(vec, SizeIs(param.size()));
42 std::copy(vec.begin(), vec.end(), param.begin());
43 }
44
45 template <size_t index>
46 const IdParam& id() const
47 {
48 static_assert(index < std::tuple_size_v<decltype(param)>);
49 return param[index];
50 }
51
52 private:
53 std::array<IdParam, 2> param;
54};
55
56INSTANTIATE_TEST_SUITE_P(
57 UniqueIds, TestSensorCacheP,
58 Values(std::vector<IdParam>({IdParam("service1", "path1"),
59 IdParam("service1", "path2")}),
60 std::vector<IdParam>({IdParam("service1", "path1"),
61 IdParam("service2", "path1")}),
62 std::vector<IdParam>({IdParam("service1", "path1"),
63 IdParam("service2", "path2")})));
64
65TEST_P(TestSensorCacheP, shouldReturnDifferentSensorWhenIdsAreDifferent)
66{
Patrick Williams3a1c2972023-05-10 07:51:04 -050067 auto sensor1 = sut.makeSensor<NiceMock<SensorMock>>(id<0>().service,
68 id<0>().path);
69 auto sensor2 = sut.makeSensor<NiceMock<SensorMock>>(id<1>().service,
70 id<1>().path);
Krzysztof Grobelny7f06f612020-09-24 13:42:10 +020071
72 ASSERT_THAT(sensor1.get(), Not(Eq(sensor2.get())));
73 ASSERT_THAT(sensor1->mockId, Not(Eq(sensor2->mockId)));
74}
75
76TEST_F(TestSensorCache, shouldReturnSameSensorWhenSensorWithSameIdStillExists)
77{
Patrick Williams3a1c2972023-05-10 07:51:04 -050078 auto sensor1 = sut.makeSensor<NiceMock<SensorMock>>("sensor-service",
79 "sensor-path");
80 auto sensor2 = sut.makeSensor<NiceMock<SensorMock>>("sensor-service",
81 "sensor-path");
Krzysztof Grobelny7f06f612020-09-24 13:42:10 +020082
83 ASSERT_THAT(sensor1.get(), Eq(sensor2.get()));
84 ASSERT_THAT(sensor1->mockId, Eq(sensor2->mockId));
85}
86
87TEST_F(TestSensorCache, shouldReturnDifferentSensorWhenPreviousSensorExpired)
88{
Patrick Williams3a1c2972023-05-10 07:51:04 -050089 auto mockId1 = sut.makeSensor<NiceMock<SensorMock>>("sensor-service",
90 "sensor-path")
91 ->mockId;
92 auto mockId2 = sut.makeSensor<NiceMock<SensorMock>>("sensor-service",
93 "sensor-path")
94 ->mockId;
Krzysztof Grobelny7f06f612020-09-24 13:42:10 +020095
96 ASSERT_THAT(mockId2, Not(Eq(mockId1)));
97}
98
99TEST_F(TestSensorCache, shouldCreateSensorWithCorrespondingId)
100{
Patrick Williams3a1c2972023-05-10 07:51:04 -0500101 auto id = sut.makeSensor<NiceMock<SensorMock>>("sensor-service",
102 "sensor-path")
103 ->id();
Krzysztof Grobelny7f06f612020-09-24 13:42:10 +0200104
105 auto expected = SensorMock::makeId("sensor-service", "sensor-path");
106
Krzysztof Grobelny6ccfcbf2020-11-04 09:31:36 +0100107 ASSERT_THAT(id, Eq(expected));
Krzysztof Grobelny7f06f612020-09-24 13:42:10 +0200108}