-
Notifications
You must be signed in to change notification settings - Fork 12
DMTF Standards Compliance Tools
The DMTF (Distributed Management Task Force) provides three official validation tools to ensure Redfish service implementations comply with the Redfish specification. These tools help verify different aspects of the Redfish implementation:
- Service Validator: Validates resources against schema definitions
- Interop Validator: Validates against interoperability profiles
- Protocol Validator: Validates HTTP protocol compliance
The Redfish Service Validator tests the validity of a Redfish service by validating responses against the DMTF-published schemas.
Purpose:
- Validates JSON payloads against Redfish schemas
- Checks property types, required fields, and allowable values
- Verifies OData annotations and metadata
Installation:
git clone https://github.com/DMTF/Redfish-Service-Validator.git
cd Redfish-Service-Validator
pip install -r requirements.txtUsage:
python3 RedfishServiceValidator.py \
-i <host_ip> \
-u <username> \
-p <password> \
--forceauth \
--logdir ./logsKey Options:
-
-i, --ip: Target IP address or hostname -
-u, --username: Username for authentication -
-p, --password: Password for authentication -
--forceauth: Force authentication even for unauthenticated resources -
--logdir: Directory for output logs -
--schema_directory: Path to local schema files -
--oemcheck: Enable OEM property validation -
--collectionlimit: Limit collection member validation
Example:
cd /home/hspe/dp/Redfish-Service-Validator
python3 RedfishServiceValidator.py \
-i http://localhost:8181 \
-u <username> \
-p '<password>' \
--forceauth \
--logdir ./logsThe Redfish Interop Validator tests a Redfish service against a specific interoperability profile to ensure compliance with industry-defined use cases.
Purpose:
- Validates against predefined interoperability profiles
- Ensures required resources and properties are present
- Verifies read/write requirements for specific use cases
- Tests service-level capabilities
Installation:
git clone https://github.com/DMTF/Redfish-Interop-Validator.git
cd Redfish-Interop-Validator
pip install -r requirements.txtUsage:
python3 RedfishInteropValidator.py \
-i <host_ip> \
-u <username> \
-p <password> \
--forceauth \
--logdir ./logs \
<profile.json>Key Options:
-
-i, --ip: Target IP address or hostname -
-u, --username: Username for authentication -
-p, --password: Password for authentication -
--forceauth: Force authentication -
--logdir: Directory for output logs -
--profile: Path to interoperability profile JSON file -
--online_profiles: Use online DMTF profiles -
--warnrecommended: Warn on missing recommended properties -
--writecheck: Perform write/patch tests
Example:
cd /home/hspe/dp/Redfish-Interop-Validator
python3 RedfishInteropValidator.py \
-i http://localhost:8181 \
-u <username> \
-p '<password>' \
--forceauth \
--logdir ./logs \
ConsoleBasicProfile.jsonCreating Custom Profiles:
A basic profile JSON structure:
{
"ProfileName": "ConsoleBasic",
"ProfileVersion": "1.0.0",
"Purpose": "Basic validation profile for Console",
"ContactInfo": "your-email@example.com",
"RequiredProfiles": {},
"Resources": {
"ServiceRoot": {
"PropertyRequirements": {
"RedfishVersion": {},
"UUID": {},
"Systems": {
"ReadRequirement": "Mandatory"
}
}
},
"ComputerSystemCollection": {
"PropertyRequirements": {
"Members": {},
"Members@odata.count": {}
}
},
"ComputerSystem": {
"PropertyRequirements": {
"Id": {},
"Name": {},
"SystemType": {},
"Manufacturer": {},
"Model": {},
"SerialNumber": {},
"UUID": {
"ReadRequirement": "Recommended"
},
"PowerState": {}
}
}
}
}The Redfish Protocol Validator verifies that a Redfish service conforms to the protocol requirements defined in the Redfish specification.
Purpose:
- Validates HTTP protocol compliance (headers, status codes, methods)
- Tests authentication mechanisms (Basic, Session-based)
- Verifies standard URI endpoints
- Checks OData protocol requirements
- Tests error handling and edge cases
**Installation:**s
git clone https://github.com/DMTF/Redfish-Protocol-Validator.git
cd Redfish-Protocol-Validator
pip install -r requirements.txtUsage:
python3 rf_protocol_validator.py \
-u <username> \
-p <password> \
-r <host_url> \
--report-dir ./reports \
--no-cert-checkKey Options:
-
-r, --rhost: Target host URL (e.g., http://localhost:8181) -
-u, --user: Username for authentication -
-p, --password: Password for authentication -
--report-dir: Directory for HTML/TSV reports -
--no-cert-check: Disable SSL certificate verification -
--log-level: Set logging level (DEBUG, INFO, WARNING, ERROR)
Example:
cd /home/hspe/dp/Redfish-Protocol-Validator
python3 rf_protocol_validator.py \
-u <username> \
-p '<password>' \
-r http://localhost:8181 \
--report-dir ./reports \
--no-cert-checkValidation testing was performed on the console Redfish implementation using all three DMTF validators. Below are the consolidated results:
| Validator | Pass | Fail | Warning | Not Tested |
|---|---|---|---|---|
| Redfish Service Validator | 18 | 6 | 5 | - |
| Redfish Interop Validator | 18 | 0 | 1 | 0 |
| Redfish Protocol Validator | 101 | 23 | 0 | 60 |
Version: 2.5.1
Target: http://localhost:8181
Result: FAILED (6 issues found)
- ServiceRoot resource structure and schema compliance
- ComputerSystemCollection schema validation
- ComputerSystem resource validation (18 total passes)
-
Missing Schema Definitions:
NVMeDomainCollection.NVMeDomainCollectionStorageSystemCollection.StorageSystemCollectionStorageServiceCollection.StorageServiceCollection-
HostedStorageServices.HostedStorageServices(multiple occurrences)
-
Mandatory Property Error: Sessions in Links
- Error:
Mandatory prop Sessions does not exist - Location:
/redfish/v1/ServiceRoot.Links - Impact: According to DMTF ServiceRoot v1.19.0 schema,
Sessionsis a required property in the Links object - Status: This is a schema compliance issue - the DMTF specification requires Sessions in Links, but we modified the schema to remove it since SessionService is not implemented
- Error:
-
Schema Version Mismatch: ComputerSystem
- Error:
Linked resource Members reports version ComputerSystem.v1_26_0.ComputerSystem not in Schema - Error:
Missing Namespace Error: Namespace of ComputerSystem.v1_26_0 appears missing from SchemaXML ComputerSystem_v1.xml - Location:
/redfish/v1/Systemsand individual systems - Impact: Service uses v1.26.0 schema but validator only has v1.25.0
- Root Cause: Validator's local schema cache doesn't include the latest v1.26.0 schema
- Resolution: Update validator's schema directory or service can use v1.25.0 for broader compatibility
- Error:
Command Used:
cd /home/hspe/dp/Redfish-Service-Validator
python3 RedfishServiceValidator.py \
-i http://localhost:8181 \
-u standalone \
-p 'G@ppm0ym' \
--forceauth \
--logdir ./logs📄 View Full Validation Log
Redfish Service Validator, version 2.5.1
Writing config file to log directory
Target URI: https://localhost:8181
authtype: Basic
collectionlimit: ['LogEntry', '20']
debugging: False
forceauth: True
ip: https://localhost:8181
logdir: ./logs
oemcheck: True
password: ******
requestattempts: 10
requesttimeout: 10
schema_directory: ./SchemaFiles/metadata
uricheck: False
username: standalone
verbose: 0
Start time: 12/08/25 - 12:26:33
Setting up service...
Constructing metadata...
Redfish Version of Service: 1.19.0
Description of service: System Under Test - Root Service version 1.19.0, 2e4002c8-fa11-4e6d-95b4-1a4e613f50a2
*** Validating /redfish/v1/
Warning: Schema not found for NVMeDomainCollection.NVMeDomainCollection
Warning: Schema not found for StorageSystemCollection.StorageSystemCollection
Warning: Schema not found for StorageServiceCollection.StorageServiceCollection
Type (ServiceRoot.v1_19_0.ServiceRoot), GET SUCCESS (time: 0:00:00.002055)
Mandatory Property Error: Mandatory prop Sessions does not exist
Property Validation Error: Sessions
FAIL...
*** Validating /redfish/v1/Systems
Type (ComputerSystemCollection.ComputerSystemCollection), GET SUCCESS (time: 0:00:00.000008)
Warning: Schema not found for HostedStorageServices.HostedStorageServices
Entity Version Error: Linked resource Members reports version ComputerSystem.v1_26_0.ComputerSystem not in Schema
Property Validation Error: Members[0]
FAIL...
Warning: Schema not found for HostedStorageServices.HostedStorageServices
*** Validating /redfish/v1/Systems/3ffbbffa-e8f8-467c-a877-1393878fb4ef
Missing Namespace Error: Namespace of ComputerSystem.v1_26_0 appears missing from SchemaXML ComputerSystem_v1.xml, attempting highest type: #ComputerSystem.v1_26_0.ComputerSystem
New namespace: ComputerSystem.v1_25_0
Warning: Schema not found for HostedStorageServices.HostedStorageServices
Type (ComputerSystem.v1_25_0.ComputerSystem), GET SUCCESS (time: 0:00:00.000022)
FAIL...
Metadata: Namespaces missing from $metadata: set()
Elapsed time: 0:00:07
Listing any warnings and errors:
/redfish/v1/
Warnings
Warning: Schema not found for NVMeDomainCollection.NVMeDomainCollection
Warning: Schema not found for StorageSystemCollection.StorageSystemCollection
Warning: Schema not found for StorageServiceCollection.StorageServiceCollection
Errors
Mandatory Property Error: Mandatory prop Sessions does not exist
Property Validation Error: Sessions
/redfish/v1/Systems
Warnings
Warning: Schema not found for HostedStorageServices.HostedStorageServices
Errors
Entity Version Error: Linked resource Members reports version ComputerSystem.v1_26_0.ComputerSystem not in Schema
Property Validation Error: Members[0]
/redfish/v1/Systems/3ffbbffa-e8f8-467c-a877-1393878fb4ef
Warnings
Warning: Schema not found for HostedStorageServices.HostedStorageServices
Errors
Missing Namespace Error: Namespace of ComputerSystem.v1_26_0 appears missing from SchemaXML ComputerSystem_v1.xml, attempting highest type: #ComputerSystem.v1_26_0.ComputerSystem
New namespace: ComputerSystem.v1_25_0
Results Summary:
Pass: 18, Fail: 6, Warning: 5
Validation has failed: 6 problems found
Version: 2.3.3
Profile: ConsoleBasicProfile.json
Result: PASSED ✅
- ServiceRoot PropertyRequirements (RedfishVersion, UUID, Systems)
- ComputerSystemCollection Members validation
- ComputerSystem PropertyRequirements validation (18 total passes)
- All service-level checks passed
-
Missing ActionInfo for Reset Action:
- Warning:
Missing ActionInfo Warning: No such ActionInfo exists for this Action, and no AllowableValues exists. Cannot validate the following parameters: ResetType - Location:
/redfish/v1/Systems/{id}ComputerSystem Reset action - Impact: Minimal - clients can still perform reset operations, but don't get metadata about allowed reset types
- Recommendation: Add ActionInfo resource or AllowableValues annotation to document supported ResetType values
- Warning:
Analysis: The interop validator confirms the service correctly implements the ConsoleBasicProfile requirements. The single warning about missing ActionInfo is informational and does not prevent profile compliance.
Command Used:
cd /home/hspe/dp/Redfish-Interop-Validator
python3 RedfishInteropValidator.py \
-i https://localhost:8181 \
-u standalone \
-p 'G@ppm0ym' \
--forceauth \
--logdir ./logs \
ConsoleBasicProfile.json📄 View Full Validation Log
Redfish Interop Validator, version 2.3.3
Writing config file to log directory
Target URI: https://localhost:8181
authtype: Basic
collectionlimit: ['LogEntry', '20']
debugging: False
forceauth: True
ip: https://localhost:8181
logdir: ./logs
oemcheck: True
online_profiles: True
password: ******
profile: ['ConsoleBasicProfile.json']
username: standalone
verbose: 0
warnrecommended: False
writecheck: False
Start time: 12/08/25 - 12:28:44
Setting up service...
Redfish Version of Service: 1.19.0
Description of service: My Target System Root Service, version 1.19.0, 2e4002c8-fa11-4e6d-95b4-1a4e613f50a2
Profile Hashes (run-time):
profile: ConsoleBasicProfile.json ConsoleBasic 1.0.0, dict md5 hash: 3d24e8ca01840bc4b22392be41280816
Profile Hashes (included by ConsoleBasicProfile.json):
Profile Hashes (required by Resource):
*** /redfish/v1/, ServiceRoot
Type (#ServiceRoot.v1_19_0.ServiceRoot), GET SUCCESS (time: 0.001636)
### Validating an InteropResource
### Validating PropertyRequirements for RedfishVersion
### Validating PropertyRequirements for UUID
### Validating PropertyRequirements for Systems
ServiceRoot
PASS
*** /redfish/v1/Systems, ComputerSystemCollection
Type (#ComputerSystemCollection.ComputerSystemCollection), GET SUCCESS (time: 0.00157)
### Validating an InteropResource
### Validating PropertyRequirements for Members
### Validating PropertyRequirements for Members@odata.count
ServiceRoot:Systems
PASS
*** /redfish/v1/Systems/3ffbbffa-e8f8-467c-a877-1393878fb4ef, ComputerSystem
Type (#ComputerSystem.v1_26_0.ComputerSystem), GET SUCCESS (time: 4.666939)
### Validating an InteropResource
### Validating PropertyRequirements for Id
### Validating PropertyRequirements for Name
### Validating PropertyRequirements for SystemType
### Validating PropertyRequirements for Manufacturer
### Validating PropertyRequirements for Model
### Validating PropertyRequirements for SerialNumber
### Validating PropertyRequirements for UUID
Item is recommended but does not exist
### Validating PropertyRequirements for PowerState
Missing ActionInfo Warning: No such ActionInfo exists for this Action, and no AllowableValues exists. Cannot validate the following parameters: ResetType
ServiceRoot:Systems:Members#0
PASS
Service Level Checks
Validating ServiceRoot ReadRequirement
Validating ComputerSystemCollection ReadRequirement
Validating ComputerSystem ReadRequirement
Elapsed time: 0:00:04
Listing any warnings and errors:
/redfish/v1/Systems/3ffbbffa-e8f8-467c-a877-1393878fb4ef
Warnings
Missing ActionInfo Warning: No such ActionInfo exists for this Action, and no AllowableValues exists. Cannot validate the following parameters: ResetType
Results Summary:
Pass: 18, Fail: 0, Warning: 1, Not Tested: 0
Validation has succeeded.
Target: https://localhost:8181
Result: PARTIAL PASS (23 failures, expected for unimplemented features)
- Total Tests: 184
- Passed: 101 (54.9%)
- Failed: 23 (12.5%)
- Not Tested: 60 (32.6%)
Analysis: The 101 passing tests demonstrate solid HTTP protocol compliance. The 23 failures are primarily related to unimplemented features (SessionService, AccountService, /redfish endpoint) that are not advertised in the service root.
SessionService Not Implemented (8 failures - Expected):
-
SEC_BASIC_AUTH_STANDALONE- Session endpoint returns 404 -
SEC_BOTH_AUTH_TYPES- Session service not available -
SEC_SUPPORT_BASIC_AUTH- Sessions endpoint missing -
SEC_REQUIRE_LOGIN_SESSIONS- Cannot create login sessions -
SEC_WRITE_REQUIRES_AUTH- POST to Sessions fails -
REQ_HEADERS_AUTHORIZATION- Sessions endpoint missing -
REQ_POST_CREATE_VIA_COLLECTION- POST to Sessions returns 404 -
REQ_POST_CREATE_TO_MEMBERS_PROP- POST to Sessions/Members returns 404
Analysis: These failures are expected as SessionService is not implemented. The service correctly uses HTTP Basic authentication instead.
Predefined Roles Not Implemented (3 failures - Expected):
-
SEC_PRIV_SUPPORT_PREDEFINED_ROLES- Administrator role not found -
SEC_PRIV_SUPPORT_PREDEFINED_ROLES- Operator role not found -
SEC_PRIV_SUPPORT_PREDEFINED_ROLES- ReadOnly role not found
Analysis: Role-based access control requires AccountService which is not yet implemented.
Missing /redfish Version Endpoint (4 failures - Should Fix):
-
PROTO_STD_URIS_SUPPORTED-/redfishreturns 404 -
PROTO_STD_URI_VERSION-/redfishendpoint missing (version discovery) -
REQ_GET_SERVICE_ROOT_NO_AUTH-/redfishnot accessible without authentication -
SEC_READ_REQUIRES_AUTH-/redfishrequires no auth but returns 404
Analysis: The /redfish endpoint should return {"v1": "/redfish/v1/"} for version discovery. This is a standard Redfish requirement and should be implemented.
HTTP Protocol Headers (4 failures - Should Fix):
-
RESP_HEADERS_ALLOW_GET_OR_HEAD- MissingAllowheader on GET responses -
RESP_HEADERS_LINK_REL_DESCRIBED_BY- MissingLinkheader (2 occurrences) -
RESP_HEADERS_WWW_AUTHENTICATE- MissingWWW-Authenticateheader on 401 responses
Analysis: These HTTP headers improve API discoverability and client experience. Adding them would improve protocol compliance.
Other Protocol Issues (4 failures):
-
PROTO_HTTP_SUPPORTED_METHODS- No successful POST requests (expected - no writable collections) -
REQ_HEADERS_ODATA_VERSION- Accepts unsupported OData-Version 4.1 (should return 412) -
RESP_ODATA_SERVICE_CONTEXT-/redfish/v1/odatahas incorrect @odata.context
Command Used:
cd /home/hspe/dp/Redfish-Protocol-Validator
python3 rf_protocol_validator.py \
-u <username> \
-p '<password>' \
-r http://localhost:8181 \
--report-dir ./reports \
--no-cert-check📄 View Complete Protocol Validation Log
WARNING:root:Creating Redfish session failed with status 404; using Basic authentication
WARNING:root:session POST status: 404, response: <!doctype html>
<meta name="viewport" content="width=device-width">
<pre>
<a href=".gitkeep">.gitkeep</a>
</pre>
ERROR:root:No accounts collection found
ERROR:root:No accounts collection found
ERROR:root:POST on /redfish/v1/SessionService/Sessions/Members did not return valid JSON; assuming an empty object
| Category | Test Name | Status | Details |
|----------|-----------|--------|---------|
| **HTTP Methods** | PROTO_HTTP_SUPPORTED_METHODS (POST) | ❌ FAIL | No POST requests had successful response |
| **Standard URIs** | PROTO_STD_URIS_SUPPORTED | ❌ FAIL | `/redfish` returns 404 |
| **Standard URIs** | PROTO_STD_URI_VERSION | ❌ FAIL | `/redfish` version endpoint missing |
| **Service Root** | REQ_GET_SERVICE_ROOT_NO_AUTH | ❌ FAIL | `/redfish` not accessible without auth (404) |
| **Headers** | REQ_HEADERS_AUTHORIZATION | ❌ FAIL | Sessions endpoint returns 404 |
| **Headers** | REQ_HEADERS_ODATA_VERSION | ❌ FAIL | Accepts unsupported OData-Version 4.1 (should return 412) |
| **Headers** | RESP_HEADERS_ALLOW_GET_OR_HEAD | ❌ FAIL | Missing `Allow` header on GET |
| **Headers** | RESP_HEADERS_LINK_REL_DESCRIBED_BY | ❌ FAIL | Missing `Link` header (2 occurrences) |
| **Headers** | RESP_HEADERS_WWW_AUTHENTICATE | ❌ FAIL | Missing `WWW-Authenticate` on 401 |
| **POST Create** | REQ_POST_CREATE_TO_MEMBERS_PROP | ❌ FAIL | Sessions/Members endpoint 404 |
| **POST Create** | REQ_POST_CREATE_VIA_COLLECTION | ❌ FAIL | Sessions collection POST returns 404 |
| **OData** | RESP_ODATA_SERVICE_CONTEXT | ❌ FAIL | `/odata` has incorrect @odata.context |
| **Authentication** | SEC_BASIC_AUTH_STANDALONE | ❌ FAIL | Sessions endpoint 404 |
| **Authentication** | SEC_BOTH_AUTH_TYPES | ❌ FAIL | Session service not available |
| **Authentication** | SEC_SUPPORT_BASIC_AUTH | ❌ FAIL | Sessions endpoint missing |
| **Authentication** | SEC_REQUIRE_LOGIN_SESSIONS | ❌ FAIL | Cannot create login sessions |
| **Authentication** | SEC_WRITE_REQUIRES_AUTH | ❌ FAIL | POST to Sessions fails (404) |
| **Authentication** | SEC_READ_REQUIRES_AUTH | ❌ FAIL | `/redfish` returns 404 |
| **Roles** | SEC_PRIV_SUPPORT_PREDEFINED_ROLES | ❌ FAIL | Administrator role not found |
| **Roles** | SEC_PRIV_SUPPORT_PREDEFINED_ROLES | ❌ FAIL | Operator role not found |
| **Roles** | SEC_PRIV_SUPPORT_PREDEFINED_ROLES | ❌ FAIL | ReadOnly role not found |
Summary - PASS: 101, WARN: 0, FAIL: 23, NOT_TESTED: 60
Report output:
reports/RedfishProtocolValidationReport_12_08_2025_123304.tsv
reports/RedfishProtocolValidationReport_12_08_2025_123304.html