implemented Producer API and header, stub and tests. Builds cleanly, tests fail for now

This commit is contained in:
2026-03-10 16:54:28 +00:00
parent a798caf1a8
commit 9c2117e64b
3 changed files with 211 additions and 0 deletions

110
tests/test_producer.cxx Normal file
View File

@@ -0,0 +1,110 @@
#include <gtest/gtest.h>
#include <chrono>
#include <fstream>
#include "Producer.hpp"
TEST(ProducerTest, ProducerCallsBackWhenEnabled)
{
// Arrange create the file and write "1\n" into it.
{
std::ofstream out("fake_sysfs_input");
out << "1\n";
}
// create a fake callback function
std::vector<int> outputs;
// construct a producer with fake file and callback
Producer producer{"fake_sysfs_input", [&outputs](int value)
{ outputs.push_back(value); }, []() { return 42; }};
// Act: initialize producer and stop it.
producer.start();
std::this_thread::sleep_for(std::chrono::milliseconds(1)); // ← 1ms window
producer.stop();
// Assert: we expect one output being 42
ASSERT_EQ(outputs.size(), 1u);
EXPECT_EQ(outputs[0], 42);
}
TEST(ProducerTest, ProducerDoesNotCallWhenUnexpectedValue)
{
// Arrange create the file and write "0\n" into it.
{
std::ofstream out("fake_sysfs_input");
out << "0\n";
}
std::vector<int> outputs;
Producer producer{"fake_sysfs_input",
[&outputs](int value) { outputs.push_back(value); },
[]() { return 42; }, [](std::chrono::milliseconds) {}};
producer.start();
std::this_thread::sleep_for(std::chrono::milliseconds(1)); // ← 1ms window
producer.stop();
// Assert: we expect no output
EXPECT_TRUE(outputs.empty());
}
TEST(ProducerTest, ProducerDoesNotCallWhenEmpty)
{
// Arrange create the file and write "0\n" into it.
{
std::ofstream out("fake_sysfs_input");
out << " ";
}
std::vector<int> outputs;
Producer producer{"fake_sysfs_input",
[&outputs](int value) { outputs.push_back(value); },
[]() { return 42; }, [](std::chrono::milliseconds) {}};
producer.start();
producer.stop();
// Assert: we expect no output
EXPECT_TRUE(outputs.empty());
}
TEST(ProducerTest, ProducerDoesNotCallWhenUnreachable)
{
std::vector<int> outputs;
std::vector<std::string> logs;
Producer producer{"nonexistant_sysfs_input",
[&outputs](int value) { outputs.push_back(value); },
[]() { return 42; }, [](std::chrono::milliseconds) {}};
producer.start();
std::this_thread::sleep_for(std::chrono::milliseconds(1)); // ← 1ms window
producer.stop();
// Assert: we expect no output
EXPECT_TRUE(outputs.empty());
}
TEST(ProducerTest, ProducerDoesNotCallWhenTempTooHigh)
{
// create a file that contains error
{
std::ofstream out("fake_sysfs_input");
out << "error: temp too high";
}
std::vector<int> outputs;
Producer producer{"fake_sysfs_input",
[&outputs](int value) { outputs.push_back(value); },
[]() { return 42; }, [](std::chrono::milliseconds) {}};
producer.start();
std::this_thread::sleep_for(std::chrono::milliseconds(1)); // ← 1ms window
producer.stop();
// Assert: we expect no output
EXPECT_TRUE(outputs.empty());
}