blob: cce7692c0bec5ea40ff1fa4646113541d419d274 [file] [log] [blame]
#include "processor.hpp"
#include "async_resp.hpp"
#include "dbus_utility.hpp"
#include "snapshot_fixture.hpp"
#include <nlohmann/json.hpp>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
namespace redfish
{
namespace
{
using ::dbus::utility::MapperGetSubTreePathsResponse;
using ::dbus::utility::MapperGetSubTreeResponse;
using ::managedStore::KeyType;
using ::managedStore::ManagedType;
using ::managedStore::ValueType;
TEST_F(SnapshotFixture_Platform5_Config0, GetProcessorTest) {
handleProcessorGet(app_, CreateRequest(), share_async_resp_, "system", "cpu0");
RunIoUntilDone();
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(json["@odata.id"].get<std::string>(), "/redfish/v1/Systems/system/Processors/cpu0");
EXPECT_EQ(json["Name"].get<std::string>(), "Processor");
EXPECT_EQ(json["Id"].get<std::string>(), "cpu0");
// cores and threads
EXPECT_EQ(json["TotalCores"].get<int>(), 128);
EXPECT_EQ(json["TotalThreads"].get<int>(), 256);
EXPECT_EQ(json["TotalEnabledCores"].get<int>(), 128);
EXPECT_EQ(share_async_resp_->res.result(), boost::beast::http::status::ok);
}
TEST_F(SnapshotFixture, GetProcessorAndStateLinkTest)
{
KeyType key(ManagedType::kManagedSubtreePaths,
"/xyz/openbmc_project/inventory", 0,
{"xyz.openbmc_project.Inventory.Item.ProcessorState"});
MapperGetSubTreePathsResponse mockProcState = {
"/xyz/openbmc_project/inventory/system/processorstate/PROC1",
"/xyz/openbmc_project/inventory/system/processorstate/PROC2"};
ASSERT_TRUE(
managedStore::GetManagedObjectStore()
->upsertMockObjectIntoManagedStore(
key, managedStore::MockManagedStoreTest::CreateValueType(
std::move(mockProcState)))
.ok());
handleProcessorGet(app_, CreateRequest(), share_async_resp_, "system",
"cpu0");
RunIoUntilDone();
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(json["@odata.id"].get<std::string>(),
"/redfish/v1/Systems/system/Processors/cpu0");
EXPECT_EQ(json["Name"].get<std::string>(), "Processor");
EXPECT_EQ(json["Id"].get<std::string>(), "cpu0");
EXPECT_TRUE(json.contains("/Oem/Google/ProcessorStates"_json_pointer));
auto processorStates = json["Oem"]["Google"]["ProcessorStates"];
EXPECT_EQ(
processorStates[0]["@odata.id"],
"/redfish/v1/Systems/system/Processors/cpu0/Oem/Google/ProcessorStates/PROC1");
EXPECT_FALSE(processorStates[0].contains("Id"))
<< "Processor State got expanded at level 0";
EXPECT_EQ(
processorStates[1]["@odata.id"],
"/redfish/v1/Systems/system/Processors/cpu0/Oem/Google/ProcessorStates/PROC2");
EXPECT_FALSE(processorStates[1].contains("Id"))
<< "Processor State got expanded at level 0";
EXPECT_EQ(share_async_resp_->res.result(), boost::beast::http::status::ok);
}
TEST_F(SnapshotFixture, GetProcessorCollectionWithExpandOneTest)
{
KeyType key(ManagedType::kManagedSubtreePaths,
"/xyz/openbmc_project/inventory", 0,
{"xyz.openbmc_project.Inventory.Item.ProcessorState"});
MapperGetSubTreePathsResponse mockProcState = {
"/xyz/openbmc_project/inventory/system/processorstate/PROC1",
"/xyz/openbmc_project/inventory/system/processorstate/PROC2"};
ASSERT_TRUE(
managedStore::GetManagedObjectStore()
->upsertMockObjectIntoManagedStore(
key, managedStore::MockManagedStoreTest::CreateValueType(
std::move(mockProcState)))
.ok());
query_param::Query delegatedQuery;
delegatedQuery.expandLevel = 1;
delegatedQuery.expandType = query_param::ExpandType::Both;
handleProcessorCollection(share_async_resp_, delegatedQuery, "");
RunIoUntilDone();
EXPECT_TRUE(share_async_resp_->res.jsonValue.contains("Members"));
nlohmann::json& json = share_async_resp_->res.jsonValue["Members"][0];
EXPECT_EQ(json["@odata.id"].get<std::string>(),
"/redfish/v1/Systems/system/Processors/cpu0");
EXPECT_EQ(json["Name"].get<std::string>(), "Processor");
EXPECT_EQ(json["Id"].get<std::string>(), "cpu0");
EXPECT_TRUE(json.contains("/Oem/Google/ProcessorStates"_json_pointer));
auto processorStates = json["Oem"]["Google"]["ProcessorStates"];
EXPECT_EQ(
processorStates[0]["@odata.id"],
"/redfish/v1/Systems/system/Processors/cpu0/Oem/Google/ProcessorStates/PROC1");
EXPECT_FALSE(processorStates[0].contains("Id"))
<< "Processor State got expanded at level 0";
EXPECT_EQ(
processorStates[1]["@odata.id"],
"/redfish/v1/Systems/system/Processors/cpu0/Oem/Google/ProcessorStates/PROC2");
EXPECT_FALSE(processorStates[1].contains("Id"))
<< "Processor State got expanded at level 0";
EXPECT_EQ(share_async_resp_->res.result(), boost::beast::http::status::ok);
}
void mockProcessorState(const std::string& processorState)
{
KeyType key(ManagedType::kManagedSubtreePaths,
"/xyz/openbmc_project/inventory", 0,
{"xyz.openbmc_project.Inventory.Item.ProcessorState"});
MapperGetSubTreePathsResponse mockProcState = {
"/xyz/openbmc_project/inventory/system/processorstate/" +
processorState};
ASSERT_TRUE(
managedStore::GetManagedObjectStore()
->upsertMockObjectIntoManagedStore(
key, managedStore::MockManagedStoreTest::CreateValueType(
std::move(mockProcState)))
.ok());
managedStore::KeyType presentKey(
managedStore::ManagedType::kManagedProperty,
"xyz.openbmc_project.EntityManager",
{"/xyz/openbmc_project/inventory/system/processorstate/" +
processorState},
"xyz.openbmc_project.Inventory.Item", "Present");
std::shared_ptr<ValueType> mockPresent =
managedStore::MockManagedStoreTest::CreateValueType(std::move(true));
ASSERT_TRUE(managedStore::GetManagedObjectStore()
->upsertMockObjectIntoManagedStore(presentKey, mockPresent)
.ok());
}
TEST_F(SnapshotFixture, GetProcessorCollectionExpand2Test)
{
mockProcessorState("PROC1");
for (int i = 2; i <= 6; i++)
{
query_param::Query delegatedQuery;
delegatedQuery.expandLevel = i;
delegatedQuery.expandType = query_param::ExpandType::Both;
handleProcessorCollection(share_async_resp_, delegatedQuery, "");
RunIoUntilDone();
EXPECT_TRUE(share_async_resp_->res.jsonValue.contains("Members"));
nlohmann::json& json = share_async_resp_->res.jsonValue["Members"][0];
EXPECT_TRUE(json.contains("/Oem/Google/ProcessorStates"_json_pointer));
auto processorStates = json["Oem"]["Google"]["ProcessorStates"];
EXPECT_EQ(
processorStates[0]["@odata.id"],
"/redfish/v1/Systems/system/Processors/cpu0/Oem/Google/ProcessorStates/PROC1");
EXPECT_TRUE(processorStates[0].contains("Id"))
<< "Processor State did not expand at level 2";
EXPECT_EQ(processorStates[0]["Id"], "PROC1");
EXPECT_EQ(processorStates[0]["Name"], "Processor");
EXPECT_EQ(processorStates[0]["@odata.type"],
"#GoogleProcessorState.GoogleProcessorState");
EXPECT_EQ(processorStates[0]["Status"]["State"], "Enabled");
EXPECT_EQ(share_async_resp_->res.result(),
boost::beast::http::status::ok);
}
}
TEST_F(SnapshotFixture, GetProcessorStateTest)
{
mockProcessorState("PROC1");
handleGetProcessorState(app_, CreateRequest(), share_async_resp_, "system",
"cpu0", "PROC1");
RunIoUntilDone();
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(
json["@odata.id"],
"/redfish/v1/Systems/system/Processors/cpu0/Oem/Google/ProcessorStates/PROC1");
EXPECT_EQ(json["Id"], "PROC1");
EXPECT_EQ(json["Name"], "Processor");
EXPECT_EQ(json["@odata.type"],
"#GoogleProcessorState.GoogleProcessorState");
EXPECT_EQ(json["Status"]["State"], "Enabled");
EXPECT_EQ(share_async_resp_->res.result(), boost::beast::http::status::ok);
}
} // namespace
} // namespace redfish