|  | #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_ |