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