Redfish-Service-Validator icon indicating copy to clipboard operation
Redfish-Service-Validator copied to clipboard

Incorrect DataSourceUri of FanSpeedsPercent collection in EnvironmentMetrics not caught

Open jeaaustx opened this issue 1 year ago • 3 comments

The 2.4.8 version of the Redfish Validator does not find an error in the path DataSourceUri property of a FanSpeedsPercent collection in EnvironmentMetrics. The validator does not visit the DataSourceUri path during the validation.

The validator reports success even though 404 is returned for the DataSourceUri.

Following are excerpts from the log file showing the issue:

INFO - Redfish Service Validator, version 2.4.8
INFO - Attempt 1 of /redfish/v1/Chassis/chassis/EnvironmentMetrics 
Body Response of /redfish/v1/Chassis/chassis/EnvironmentMetrics: b'{\n  "@odata.id": "/redfish/v1/Chassis/chassis/EnvironmentMetrics",\n  "@odata.type": "#EnvironmentMetrics.v1_3_0.EnvironmentMetrics",\n  "FanSpeedsPercent": [\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan0_0",\n      "DeviceName": "Chassis #fan0_0",\n      "SpeedRPM": 18000.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan0_1",\n      "DeviceName": "Chassis #fan0_1",\n      "SpeedRPM": 12036.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan1_0",\n      "DeviceName": "Chassis #fan1_0",\n      "SpeedRPM": 18000.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan1_1",\n      "DeviceName": "Chassis #fan1_1",\n      "SpeedRPM": 12036.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan2_0",\n      "DeviceName": "Chassis #fan2_0",\n      "SpeedRPM": 18000.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan2_1",\n      "DeviceName": "Chassis #fan2_1",\n      "SpeedRPM": 12036.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan3_0",\n      "DeviceName": "Chassis #fan3_0",\n      "SpeedRPM": 18000.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan3_1",\n      "DeviceName": "Chassis #fan3_1",\n      "SpeedRPM": 12036.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan4_0",\n      "DeviceName": "Chassis #fan4_0",\n      "SpeedRPM": 18000.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan4_1",\n      "DeviceName": "Chassis #fan4_1",\n      "SpeedRPM": 12036.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan5_0",\n      "DeviceName": "Chassis #fan5_0",\n      "SpeedRPM": 18000.0\n    },\n    {\n      "DataSourceUri": "/redfish/v1/Chassis/chassis/Sensors/fan5_1",\n      "DeviceName": "Chassis #fan5_1",\n      "SpeedRPM": 12036.0\n    }\n  ],\n  "[email protected]": 12,\n  "Id": "EnvironmentMetrics",\n  "Name": "Chassis Environment Metrics"\n}'
VERBOSE1 - FanSpeedsPercent
VERBOSE1 -      value: [{'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan0_0', 'DeviceName': 'Chassis #fan0_0', 'SpeedRPM': 18000.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan0_1', 'DeviceName': 'Chassis #fan0_1', 'SpeedRPM': 12036.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan1_0', 'DeviceName': 'Chassis #fan1_0', 'SpeedRPM': 18000.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan1_1', 'DeviceName': 'Chassis #fan1_1', 'SpeedRPM': 12036.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan2_0', 'DeviceName': 'Chassis #fan2_0', 'SpeedRPM': 18000.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan2_1', 'DeviceName': 'Chassis #fan2_1', 'SpeedRPM': 12036.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan3_0', 'DeviceName': 'Chassis #fan3_0', 'SpeedRPM': 18000.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan3_1', 'DeviceName': 'Chassis #fan3_1', 'SpeedRPM': 12036.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan4_0', 'DeviceName': 'Chassis #fan4_0', 'SpeedRPM': 18000.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan4_1', 'DeviceName': 'Chassis #fan4_1', 'SpeedRPM': 12036.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan5_0', 'DeviceName': 'Chassis #fan5_0', 'SpeedRPM': 18000.0}, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan5_1', 'DeviceName': 'Chassis #fan5_1', 'SpeedRPM': 12036.0}] <class 'list'>
VERBOSE1 -      is Optional
VERBOSE1 -      is Collection
DEBUG - displayType: (Collection(Sensor.Sensor), entity) -> links: Sensor
VERBOSE1 - ('Morphing Complex', 'Sensor.v1_10_0', 'Sensor', 'v9_9_9')
DEBUG - (Collection(Sensor.Sensor), {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan0_0', 'DeviceName': 'Chassis #fan0_0', 'SpeedRPM': 18000.0}, 'Collection(Sensor.Sensor)', 'NavigationProperty', 'Collection(Sensor.Sensor)')
DEBUG - (Sensor.Sensor, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan0_0', 'DeviceName': 'Chassis #fan0_0', 'SpeedRPM': 18000.0}, 'Sensor.Sensor', 'EntityType', 'Resource.v1_0_0.Resource')
DEBUG - validateEntity: name = FanSpeedsPercent
VERBOSE1 -      Success
DEBUG - displayValue: {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan0_0', 'DeviceName': 'Chassis #fan0_0', 'SpeedRPM': 18000.0} -> [JSON Object]
DEBUG - displayType: (Collection(Sensor.Sensor), entity) -> link: Sensor
VERBOSE1 - ('Morphing Complex', 'Sensor.v1_10_0', 'Sensor', 'v9_9_9')
DEBUG - (Collection(Sensor.Sensor), {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan0_1', 'DeviceName': 'Chassis #fan0_1', 'SpeedRPM': 12036.0}, 'Collection(Sensor.Sensor)', 'NavigationProperty', 'Collection(Sensor.Sensor)')
DEBUG - (Sensor.Sensor, {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan0_1', 'DeviceName': 'Chassis #fan0_1', 'SpeedRPM': 12036.0}, 'Sensor.Sensor', 'EntityType', 'Resource.v1_0_0.Resource')
DEBUG - validateEntity: name = FanSpeedsPercent
VERBOSE1 -      Success
DEBUG - displayValue: {'DataSourceUri': '/redfish/v1/Chassis/chassis/Sensors/fan0_1', 'DeviceName': 'Chassis #fan0_1', 'SpeedRPM': 12036.0} -> [JSON Object]
DEBUG - displayType: (Collection(Sensor.Sensor), entity) -> link: Sensor
// Repeated for each member in collection

VERBOSE1 - Target, EnvironmentMetrics.v1_3_0, EnvironmentMetrics
VERBOSE1 - @odata.id                                               PASS
VERBOSE1 - @odata.type                                             PASS
VERBOSE1 - FanSpeedsPercent                                         ...
VERBOSE1 - [email protected]                            PASS
VERBOSE1 - Id                                                      PASS
VERBOSE1 - Name                                                    PASS
VERBOSE1 - AbsoluteHumidity                                    Optional
VERBOSE1 - EnergyJoules                                        Optional
VERBOSE1 - PowerLoadPercent                                    Optional
VERBOSE1 - PowerLimitWatts                                     Optional
VERBOSE1 - DewPointCelsius                                     Optional
VERBOSE1 - TemperatureCelsius                                  Optional
VERBOSE1 - HumidityPercent                                     Optional
VERBOSE1 - FanSpeedsPercent[0]                                     PASS
VERBOSE1 - FanSpeedsPercent[1]                                     PASS
VERBOSE1 - FanSpeedsPercent[2]                                     PASS
VERBOSE1 - FanSpeedsPercent[3]                                     PASS
VERBOSE1 - FanSpeedsPercent[4]                                     PASS
VERBOSE1 - FanSpeedsPercent[5]                                     PASS
VERBOSE1 - FanSpeedsPercent[6]                                     PASS
VERBOSE1 - FanSpeedsPercent[7]                                     PASS
VERBOSE1 - FanSpeedsPercent[8]                                     PASS
VERBOSE1 - FanSpeedsPercent[9]                                     PASS
VERBOSE1 - FanSpeedsPercent[10]                                    PASS
VERBOSE1 - FanSpeedsPercent[11]                                    PASS
VERBOSE1 - PowerWatts                                          Optional
VERBOSE1 - EnergykWh                                           Optional
VERBOSE1 - Actions                                             Optional
VERBOSE1 - Description                                         Optional
VERBOSE1 - Oem                                                 Optional
INFO -   PASS
VERBOSE1 - EnvironmentMetrics.v1_3_0.EnvironmentMetrics, Counter({'pass': 14, 'skipOptional': 12, 'passGet': 1, 'passRedfishUri': 1})

INFO - metadataNamespaces: 4292
pass: 14
passGet: 1
passRedfishUri: 1
skipOptional: 12
DEBUG - getSchemaDetails() -> CacheInfo(hits=0, misses=4404, maxsize=64, currsize=64)
DEBUG - callResourceURI() -> ['/redfish/v1/$metadata', '/redfish/v1/schema/RedfishExtensions_v1.xml', '/redfish/v1', '/redfish/v1/Chassis/chassis/EnvironmentMetrics']
INFO - Validation has succeeded.

Example showing error with DataSourceUri that is not found by validator:

$ curl -k -H "X-Auth-Token: $token" https://${bmc}/redfish/v1/Chassis/chassis/Sensors/fan0_0
{
  "@odata.id": "/redfish/v1/Chassis/chassis/Sensors/fan0_0",
  "error": {
    "@Message.ExtendedInfo": [
      {
        "@odata.type": "#Message.v1_1_1.Message",
        "Message": "The requested resource of type fan0_0 named 'Sensor' was not found.",
        "MessageArgs": [
          "fan0_0",
          "Sensor"
        ],
        "MessageId": "Base.1.18.1.ResourceNotFound",
        "MessageSeverity": "Critical",
        "Resolution": "Provide a valid resource identifier and resubmit the request."
      }
    ],
    "code": "Base.1.18.1.ResourceNotFound",
    "message": "The requested resource of type fan0_0 named 'Sensor' was not found."
  }
}

I also ran the validator with --uricheck and no problems were reported for the DataSourceUri in that case either.

jeaaustx avatar Jul 29 '24 17:07 jeaaustx