blob: 8c45d3dabfe8b536e9c610cec15462da2b13480c [file] [log] [blame]
#ifndef THIRD_PARTY_MILOTIC_INTERNAL_CC_BMCWEB_MOCK_MANAGED_STORE_TEST_H_
#define THIRD_PARTY_MILOTIC_INTERNAL_CC_BMCWEB_MOCK_MANAGED_STORE_TEST_H_
#include <unistd.h>
#include <chrono> //NOLINT
#include <memory>
#include <utility>
#include <gtest/gtest.h>
#include "absl/log/log.h"
#include "boost/asio/detail/exception.hpp"
#include "boost/asio/io_context.hpp" // NOLINT
#include "boost/beast/http/message.hpp" //NOLINT
#include "boost/beast/http/string_body.hpp" //NOLINT
#include "boost/system/detail/error_code.hpp"
#include "managed_store.hpp"
#include "managed_store_types.hpp"
#include "test/g3/mock_managed_store.hpp"
namespace managedStore {
class MockManagedStoreTest : public ::testing::Test {
public:
template <typename ValueTypeInput>
static std::shared_ptr<ValueType> CreateValueType(ValueTypeInput&& value) {
auto value_type = std::make_shared<ValueType>(
std::forward<ValueTypeInput>(value), boost::system::error_code(),
std::chrono::steady_clock::now(), std::chrono::steady_clock::now());
LOG(INFO) << "Creating ValueType of type: "
<< ManagedTypeToString(value_type->getManagedType());
return std::move(value_type);
}
template <typename ValueTypeInput>
static std::shared_ptr<ValueType> CreateErrorValueType(
ValueTypeInput&& value, boost::system::error_code&& ec) {
LOG(INFO) << "Creating ValueType with error code: " << ec.what();
auto value_type = std::make_shared<ValueType>(
std::forward<ValueTypeInput>(value),
std::forward<boost::system::error_code>(ec),
std::chrono::steady_clock::now(), std::chrono::steady_clock::now());
LOG(INFO) << "ValueType of type: "
<< ManagedTypeToString(value_type->getManagedType());
return std::move(value_type);
}
// This should be a blocking call that returns when io context finishes its
// queue.
// Since there is no work guard, it will terminate once work is done.
static void RunIoUntilDone() {
// Once an io context is stopped, it must be restarted before running again.
GetStaticIoContext().restart();
while (!GetStaticIoContext().stopped()) {
GetStaticIoContext().run_one();
}
}
protected:
static void SetUpTestSuite() {
// We have to only initialize the managed store once.
managedStore::InitializeManagedStore(
&GetStaticConfig(), &GetStaticIoContext(), nullptr, nullptr,
MockManagedObjectStore::
GetBadPointerToSystemBusWhichShouldNeverBeUsedOtherThanInitializeManagedStoreForUnitTests());
}
// We require these static variables as we need to initialize the global
// managed store before the test fixture is created.
static boost::asio::io_context& GetStaticIoContext() {
// NOLINTNEXTLINE(google3-runtime-global-variables)
static boost::asio::io_context io;
return io;
}
static managedStore::ManagedObjectStoreConfig& GetStaticConfig() {
static managedStore::ManagedObjectStoreConfig config(
true, /*isEnabled*/
5, /*pendingDbusResponsesMax*/
std::chrono::years(10), /*tfixedThreshold*/
std::chrono::years(10), /*tgraceThreshold*/
std::chrono::years(10), /*tLRUThreshold*/
true, /*timetrace*/
100, /*timetrace_size_max*/
true /*snap_shot_mode*/);
return config;
}
};
} // namespace managedStore
#endif // THIRD_PARTY_MILOTIC_INTERNAL_CC_BMCWEB_MOCK_MANAGED_STORE_TEST_H_