BareGit
#include "fake_probe.h"

#include <gtest/gtest.h>

namespace
{

using namespace std::chrono_literals;

TEST(FakeProbe, ReturnsConfiguredResult)
{
    for(auto status : {ProbeStatus::GOOD, ProbeStatus::BAD, ProbeStatus::OTHER})
    {
        const ProbeResult configured{status, 123, 456};
        FakeProbe fake(configured, 0ms);
        ProbeInterface& probe = fake;
        auto result = probe.probe();
        ASSERT_TRUE(result);
        EXPECT_EQ(result->status, status);
        EXPECT_EQ(result->timestamp, configured.timestamp);
        EXPECT_EQ(result->duration_microsecond, configured.duration_microsecond);
    }
}

TEST(FakeProbe, DelaysWithoutChangingResult)
{
    const ProbeResult configured{ProbeStatus::BAD, 123, 456};
    FakeProbe probe(configured, 20ms);
    const auto start = std::chrono::steady_clock::now();
    auto result = probe.probe();
    const auto elapsed = std::chrono::steady_clock::now() - start;
    ASSERT_TRUE(result);
    EXPECT_EQ(result->status, configured.status);
    EXPECT_GE(elapsed, 20ms);
    EXPECT_EQ(result->timestamp, configured.timestamp);
    EXPECT_EQ(result->duration_microsecond, configured.duration_microsecond);
}

}