blob: cf31add7c5f043ac5de68a946f4bf48cc5ed58f4 [file] [log] [blame]
#include "mocks/sensor_mock.hpp"
#include "printers.hpp"
#include "sensor_cache.hpp"
#include "utils/sensor_id_eq.hpp"
#include <initializer_list>
#include <gmock/gmock.h>
using namespace testing;
class TestSensorCache : public Test
{
public:
SensorCache sut;
};
struct IdParam
{
IdParam() = default;
IdParam(std::string_view service, std::string_view path) :
service(service), path(path)
{}
std::string service;
std::string path;
};
class TestSensorCacheP :
public TestSensorCache,
public WithParamInterface<std::vector<IdParam>>
{
public:
void SetUp() override
{
auto vec = GetParam();
ASSERT_THAT(vec, SizeIs(param.size()));
std::copy(vec.begin(), vec.end(), param.begin());
}
template <size_t index>
const IdParam& id() const
{
static_assert(index < std::tuple_size_v<decltype(param)>);
return param[index];
}
private:
std::array<IdParam, 2> param;
};
INSTANTIATE_TEST_SUITE_P(
UniqueIds, TestSensorCacheP,
Values(std::vector<IdParam>({IdParam("service1", "path1"),
IdParam("service1", "path2")}),
std::vector<IdParam>({IdParam("service1", "path1"),
IdParam("service2", "path1")}),
std::vector<IdParam>({IdParam("service1", "path1"),
IdParam("service2", "path2")})));
TEST_P(TestSensorCacheP, shouldReturnDifferentSensorWhenIdsAreDifferent)
{
auto sensor1 =
sut.makeSensor<NiceMock<SensorMock>>(id<0>().service, id<0>().path);
auto sensor2 =
sut.makeSensor<NiceMock<SensorMock>>(id<1>().service, id<1>().path);
ASSERT_THAT(sensor1.get(), Not(Eq(sensor2.get())));
ASSERT_THAT(sensor1->mockId, Not(Eq(sensor2->mockId)));
}
TEST_F(TestSensorCache, shouldReturnSameSensorWhenSensorWithSameIdStillExists)
{
auto sensor1 =
sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path");
auto sensor2 =
sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path");
ASSERT_THAT(sensor1.get(), Eq(sensor2.get()));
ASSERT_THAT(sensor1->mockId, Eq(sensor2->mockId));
}
TEST_F(TestSensorCache, shouldReturnDifferentSensorWhenPreviousSensorExpired)
{
auto mockId1 =
sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path")
->mockId;
auto mockId2 =
sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path")
->mockId;
ASSERT_THAT(mockId2, Not(Eq(mockId1)));
}
TEST_F(TestSensorCache, shouldCreateSensorWithCorrespondingId)
{
auto id =
sut.makeSensor<NiceMock<SensorMock>>("sensor-service", "sensor-path")
->id();
auto expected = SensorMock::makeId("sensor-service", "sensor-path");
ASSERT_THAT(id, sensorIdEq(expected));
}