blob: 79e4c25664d30eff7acc733711d9c7ae546f48ea [file] [log] [blame]
#include "app.hpp"
#include "async_resp.hpp"
#include "dbus_utility.hpp"
#include "http_request.hpp"
#include "http_response.hpp"
#include "network_adapter.hpp"
#include "snapshot_fixture.hpp"
#include "test/g3/mock_managed_store_test.hpp"
#include <nlohmann/json.hpp>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
using ::dbus::utility::DBusInteracesMap;
using ::dbus::utility::DBusPropertiesMap;
using ::dbus::utility::DbusVariantType;
using ::dbus::utility::ManagedObjectType;
using ::dbus::utility::MapperGetSubTreePathsResponse;
using ::managedStore::KeyType;
using ::managedStore::ManagedObjectStoreContext;
using ::managedStore::ManagedType;
using ::managedStore::SimulateFailedAsyncPostDbusCallThreadSafeAction;
using ::managedStore::
SimulateFailedAsyncPostDbusCallThreadSafeWithEmptyValueAction;
using ::managedStore::SimulateFailedAsyncSetPropertyDbusCallAction;
using ::managedStore::SimulateSuccessfulAsyncPostDbusCallThreadSafeAction;
using ::managedStore::
SimulateSuccessfulAsyncPostDbusCallThreadSafeWithValueAction;
using ::managedStore::SimulateSuccessfulAsyncSetPropertyDbusCallAction;
using ::managedStore::ValueType;
using ::testing::Contains;
namespace redfish
{
namespace
{
MapperGetSubTreePathsResponse CreateMockNcsiSubTree(){
return MapperGetSubTreePathsResponse(
{"/xyz/openbmc_project/inventory/system/cable/NcsiCable/ncsi"});
}
TEST_F(SnapshotFixture, GetNetworkAdaptersReturnsCorrectResponse)
{
handleChassisNetworkAdapterCollectionGetSysfs(share_async_resp_,
"chassis1V2ND");
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(json["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters");
EXPECT_EQ(json["@odata.type"],
"#NetworkAdapterCollection.NetworkAdapterCollection");
EXPECT_EQ(json["Name"],
"Network adapter Collection for chassis chassis1V2ND");
EXPECT_THAT(json["Members"],
Contains(nlohmann::json(
{{"@odata.id",
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0"}})));
EXPECT_EQ(json["Members@odata.count"], 1);
}
TEST_F(SnapshotFixture, GetNetworkAdapterReturnsCorrectResponse)
{
handleChassisNetworkAdapterGetSysfs(share_async_resp_, "chassis1V2ND", "0");
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(json["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0");
EXPECT_EQ(json["@odata.type"], "#NetworkAdapter.NetworkAdapter");
EXPECT_EQ(json["Name"], "Network adapter");
EXPECT_EQ(json["Ports"]["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports");
}
TEST_F(SnapshotFixture, GetPortCollectionReturnsCorrectResponse)
{
handleNetworkPortCollectionGetSysfs(share_async_resp_, "chassis1V2ND", "0");
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(json["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports");
EXPECT_EQ(json["@odata.type"], "#PortCollection.PortCollection");
EXPECT_THAT(
json["Members"],
Contains(nlohmann::json(
{{"@odata.id",
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/ncsi"}})));
EXPECT_THAT(
json["Members"],
Contains(nlohmann::json(
{{"@odata.id",
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/gusbem0"}})));
EXPECT_THAT(
json["Members"],
Contains(nlohmann::json(
{{"@odata.id",
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/front"}})));
EXPECT_EQ(json["Members@odata.count"], 3);
EXPECT_EQ(json["Name"], "Network ports");
}
TEST_F(SnapshotFixture, GetPortsReturnsCorrectResponse1)
{
KeyType key(
ManagedType::kManagedSubtreePaths, "/xyz/openbmc_project/inventory/system/cable/", 0,
{"xyz.openbmc_project.Configuration.Port"}
);
std::shared_ptr<ValueType> mockNcsiSubTreeResponse =
managedStore::MockManagedStoreTest::CreateValueType(CreateMockNcsiSubTree());
ASSERT_TRUE(managedStore::GetManagedObjectStore()
->upsertMockObjectIntoManagedStore(key, mockNcsiSubTreeResponse).ok());
handleNetworkPortGetSysfs(share_async_resp_, "chassis1V2ND", "0", "ncsi");
RunIoUntilDone();
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(json["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/ncsi");
EXPECT_EQ(json["@odata.type"], "#Port.Port");
EXPECT_EQ(json["Id"], "ncsi");
EXPECT_EQ(json["CurrentSpeedGbps"], 0.1);
EXPECT_EQ(json["Name"], "ncsi");
EXPECT_THAT(json["Ethernet"]["AssociatedMACAddresses"],
Contains("24:95:2f:8f:18:0c"));
EXPECT_EQ(json["Ethernet"]["AssociatedMACAddresses"].size(), 1);
EXPECT_EQ(json["LinkState"], "Enabled");
EXPECT_EQ(json["LinkStatus"], "LinkUp");
EXPECT_EQ(json["Oem"]["Google"]["ConnectionPath"], "SIDE");
EXPECT_EQ(json["Location"]["PartLocation"]["ServiceLabel"], "NCSI");
EXPECT_EQ(json["Location"]["Oem"]["Google"]["Devpath"], "/phys/NCSI");
EXPECT_EQ(
json["Metrics"]["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/ncsi/Metrics");
}
TEST_F(SnapshotFixture, GetPortsReturnsCorrectResponse2)
{
handleNetworkPortGetSysfs(share_async_resp_, "chassis1V2ND", "0",
"gusbem0");
RunIoUntilDone();
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(
json["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/gusbem0");
EXPECT_EQ(json["@odata.type"], "#Port.Port");
EXPECT_EQ(json["Id"], "gusbem0");
EXPECT_EQ(json["CurrentSpeedGbps"], 0.0);
EXPECT_EQ(json["Name"], "gusbem0");
EXPECT_THAT(json["Ethernet"]["AssociatedMACAddresses"],
Contains("3a:1b:f6:ef:56:62"));
EXPECT_EQ(json["Ethernet"]["AssociatedMACAddresses"].size(), 1);
EXPECT_EQ(json["LinkState"], "Enabled");
EXPECT_EQ(json["LinkStatus"], "LinkUp");
EXPECT_EQ(
json["Metrics"]["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/gusbem0/Metrics");
}
TEST_F(SnapshotFixture, GetPortsReturnsCorrectResponse3)
{
KeyType key(ManagedType::kManagedProperty,
"xyz.openbmc_project.EntityManager",
sdbusplus::message::object_path(
"/xyz/openbmc_project/inventory/system/board/chassis1V2ND/BmcNet"),
"xyz.openbmc_project.Configuration.BmcNet", "LocationCode");
std::shared_ptr<ValueType> mockBmcNetLocation =
managedStore::MockManagedStoreTest::CreateValueType("1G_LAN");
ASSERT_TRUE(managedStore::GetManagedObjectStore()
->upsertMockObjectIntoManagedStore(key, mockBmcNetLocation)
.ok());
handleNetworkPortGetSysfs(share_async_resp_, "chassis1V2ND", "0", "front");
RunIoUntilDone();
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(json["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/front");
EXPECT_EQ(json["@odata.type"], "#Port.Port");
EXPECT_EQ(json["Id"], "front");
EXPECT_EQ(json["CurrentSpeedGbps"], 1);
EXPECT_EQ(json["Name"], "front");
EXPECT_THAT(json["Ethernet"]["AssociatedMACAddresses"],
Contains("24:95:2f:8f:18:0c"));
EXPECT_EQ(json["Ethernet"]["AssociatedMACAddresses"].size(), 1);
EXPECT_EQ(json["LinkState"], "Enabled");
EXPECT_EQ(json["LinkStatus"], "LinkUp");
EXPECT_EQ(json["Oem"]["Google"]["ConnectionPath"], "DIRECT");
EXPECT_EQ(json["Location"]["PartLocation"]["ServiceLabel"], "1G_LAN");
EXPECT_EQ(json["Location"]["Oem"]["Google"]["Devpath"],
"/phys/DC_SCM/1G_LAN");
EXPECT_EQ(
json["Metrics"]["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/front/Metrics");
}
TEST_F(SnapshotFixture, GetNetworkPortMetricReturnsCorrectResponse1)
{
handleNetworkPortMetricGetSysfs(share_async_resp_, "chassis1V2ND", "0",
"ncsi");
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(
json["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/ncsi/Metrics");
EXPECT_EQ(json["@odata.type"], "#PortMetrics.PortMetrics");
EXPECT_EQ(json["Name"], "Network port metrics");
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["CarrierChanges"], 1);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["RXCRCErrors"], 4);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["RXErrors"], 4);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["ReceivedPackets"], 3016523);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["ReceivedPacketsDropped"], 0);
}
TEST_F(SnapshotFixture, GetNetworkPortMetricReturnsCorrectResponse2)
{
handleNetworkPortMetricGetSysfs(share_async_resp_, "chassis1V2ND", "0",
"gusbem0");
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(
json["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/gusbem0/Metrics");
EXPECT_EQ(json["@odata.type"], "#PortMetrics.PortMetrics");
EXPECT_EQ(json["Name"], "Network port metrics");
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["CarrierChanges"], 4);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["RXCRCErrors"], 0);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["RXErrors"], 0);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["ReceivedPackets"], 13218);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["ReceivedPacketsDropped"], 0);
}
TEST_F(SnapshotFixture, GetNetworkPortMetricReturnsCorrectResponse3)
{
handleNetworkPortMetricGetSysfs(share_async_resp_, "chassis1V2ND", "0",
"front");
nlohmann::json& json = share_async_resp_->res.jsonValue;
EXPECT_EQ(
json["@odata.id"],
"/redfish/v1/Chassis/chassis1V2ND/NetworkAdapters/0/Ports/front/Metrics");
EXPECT_EQ(json["@odata.type"], "#PortMetrics.PortMetrics");
EXPECT_EQ(json["Name"], "Network port metrics");
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["CarrierChanges"], 1);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["RXCRCErrors"], 0);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["RXErrors"], 0);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["ReceivedPackets"], 458937);
EXPECT_EQ(json["Oem"]["Google"]["Networking"]["ReceivedPacketsDropped"], 0);
}
} // namespace
} // namespace redfish