blob: 6dc1c2a2d5830f657ca0a2d0b04b7cf54c09cc90 [file] [log] [blame]
#include "async_resp.hpp"
#include "google/google_service_root.hpp"
#include "http_request.hpp"
#include "nlohmann/json.hpp"
#include "test/redfish-core/lib/snapshot_fixture.hpp"
#include <cstdint>
#include <gtest/gtest.h>
namespace crow::google_api
{
namespace
{
void validateServiceRootGet(crow::Response& res)
{
nlohmann::json& json = res.jsonValue;
EXPECT_EQ(json["@odata.id"], "/google/v1");
EXPECT_EQ(json["@odata.type"],
"#GoogleServiceRoot.v1_0_0.GoogleServiceRoot");
EXPECT_EQ(json["@odata.id"], "/google/v1");
EXPECT_EQ(json["Id"], "Google Rest RootService");
EXPECT_EQ(json["Name"], "Google Service Root");
EXPECT_EQ(json["Version"], "1.0.0");
EXPECT_EQ(json["RootOfTrustCollection"]["@odata.id"],
"/google/v1/RootOfTrustCollection");
EXPECT_EQ(json["NVMe"]["@odata.id"], "/google/v1/NVMe");
}
TEST(HandleGoogleV1Get, OnSuccess)
{
App app(/*allowSessionEmpty=*/true);
std::error_code ec;
auto asyncResp = std::make_shared<bmcweb::AsyncResp>();
asyncResp->res.setCompleteRequestHandler(validateServiceRootGet);
crow::Request dummyRequest{{boost::beast::http::verb::get, "", 11}, ec};
handleGoogleV1Get(app, dummyRequest, asyncResp);
}
} // namespace
} // namespace crow::google_api
namespace redfish
{
namespace
{
using ::dbus::utility::DBusPropertiesMap;
using managedStore::KeyType;
using managedStore::ManagedType;
TEST_F(SnapshotFixture, HandleRootOfTrustGet)
{
EXPECT_TRUE(
managedStore::GetManagedObjectStore()
->upsertMockObjectIntoManagedStore(
KeyType(ManagedType::kManagedPropertyMap,
"xyz.openbmc_project.Control.Hoth",
sdbusplus::message::object_path(
"/xyz/openbmc_project/Control/Hoth"),
"xyz.openbmc_project.Control.Hoth.State"),
managedStore::MockManagedStoreTest::CreateValueType(
DBusPropertiesMap({
std::make_pair("BootloaderUpdateFailureCode",
uint32_t{0}),
std::make_pair("FirmwareUpdateFailedMinor",
uint32_t{0}),
std::make_pair("FirmwareUpdateFailureCode",
uint32_t{4}),
std::make_pair("ResetFlags", uint32_t{0}),
std::make_pair("RoInfoStrikes", uint32_t{0}),
std::make_pair("RwInfoStrikes", uint32_t{0}),
std::make_pair("UpTime", uint64_t{19441701616}),
std::make_pair("HasPersistentPanicInfo", false),
std::make_pair("PayloadConfirmFailureCode",
uint32_t{0}),
std::make_pair("PayloadUpdateFailureCode", uint32_t{0}),
std::make_pair("HasValidAuthRecord", false),
std::make_pair("AuthRecordCapabilities", uint64_t{0}),
std::make_pair("KeyRotationVersion", uint32_t{1}),
std::make_pair("KeyRotationImageFamily", uint16_t{2}),
std::make_pair("KeyRotationImageFamilyVariant",
uint16_t{3}),
std::make_pair("KeyRotationValidationMethod",
uint32_t{4}),
std::make_pair("KeyRotationValidationKeyData",
uint32_t{5}),
std::make_pair("KeyRotationValidationHashData",
uint32_t{6}),
})))
.ok());
crow::google_api::handleRootOfTrustGet(app_, CreateRequest(),
share_async_resp_, "Hoth");
RunIoUntilDone();
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(json["Status"]["Oem"]["BootloaderUpdateFailureCode"], 0);
EXPECT_EQ(json["Status"]["Oem"]["FirmwareUpdateFailedMinor"], 0);
EXPECT_EQ(json["Status"]["Oem"]["FirmwareUpdateFailureCode"], 4);
EXPECT_EQ(json["Status"]["Oem"]["ResetFlags"], 0);
EXPECT_EQ(json["Status"]["Oem"]["RoInfoStrikes"], 0);
EXPECT_EQ(json["Status"]["Oem"]["RwInfoStrikes"], 0);
EXPECT_EQ(json["Status"]["Oem"]["UpTime"], 19441701616);
EXPECT_EQ(json["Status"]["Oem"]["HasPersistentPanicInfo"], false);
EXPECT_EQ(json["Status"]["Oem"]["Payload"]["ConfirmFailureCode"], 0);
EXPECT_EQ(json["Status"]["Oem"]["Payload"]["UpdateFailureCode"], 0);
EXPECT_EQ(json["Status"]["Oem"]["Authorization"]["Valid"], false);
EXPECT_EQ(json["Status"]["Oem"]["Authorization"]["Capabilities"], 0);
EXPECT_EQ(json["Status"]["Oem"]["KeyRotation"]["Version"], 1);
EXPECT_EQ(json["Status"]["Oem"]["KeyRotation"]["ImageFamily"], 2);
EXPECT_EQ(json["Status"]["Oem"]["KeyRotation"]["ImageFamilyVariant"], 3);
EXPECT_EQ(json["Status"]["Oem"]["KeyRotation"]["ValidationMethod"], 4);
EXPECT_EQ(json["Status"]["Oem"]["KeyRotation"]["ValidationKeyData"], 5);
EXPECT_EQ(json["Status"]["Oem"]["KeyRotation"]["ValidationHashData"], 6);
EXPECT_EQ(share_async_resp_->res.result(), boost::beast::http::status::ok);
}
} // namespace
} // namespace redfish