DMTF / Redfish-Service-Validator

The Redfish Service Validator is a Python3 tool for checking conformance of any "device" with a Redfish service interface against Redfish CSDL schema
Other
37 stars 33 forks source link

The test was not completed but got stuck. #560

Closed xuwh6 closed 8 months ago

xuwh6 commented 10 months ago

I can run the test with Tag 2.3.3 successfully. ConformanceLog_09_04_2023_102211.txt

But when I run the test with Tag 2.3.4 or master, the test will stop after output these info: *** /redfish/v1/ Attempt 1 of /redfish/v1/ Response Time for GET to /redfish/v1/: 0.11497827991843224 seconds. Schema not found for JobService.JobService Schema not found for StorageSystemCollection.StorageSystemCollection Schema not found for StorageServiceCollection.StorageServiceCollection Schema not found for ActionStatus.v1_0_0.ActionStatus ConformanceLog_09_05_2023_110731.txt

The test was not completed but got stuck here.

Info after KeyboardInterrupt: ^CTraceback (most recent call last): File "RedfishServiceValidator.py", line 11, in sys.exit(main()) File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/RedfishServiceValidator.py", line 249, in main statuscode, , _ = validate() File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/RedfishServiceValidator.py", line 189, in validate success, counts, results, xlinks, topobj = validateURITree(currentService, '/redfish/v1/', 'ServiceRoot', expectedJson=jsonData) File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/validateResource.py", line 306, in validateURITree validateSuccess, counts, results, links, thisobj = validateSingleURI(service, URI, uriName, expectedType, expectedJson, parent) File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/validateResource.py", line 107, in validateSingleURI redfish_obj = catalog.RedfishObject(redfish_type, 'Object', parent=parent).populate(me['payload']) if redfish_type else None File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/catalog.py", line 1019, in populate populated_object.properties = {x: y.populate(sub_payload.get(x, REDFISH_ABSENT)) for x, y in populated_object.properties.items()} File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/catalog.py", line 1019, in populated_object.properties = {x: y.populate(sub_payload.get(x, REDFISH_ABSENT)) for x, y in populated_object.properties.items()} File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/catalog.py", line 1047, in populate populated_object.properties[add_name] = object.populate(sub_payload.get(add_name, REDFISH_ABSENT)) File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/catalog.py", line 921, in populate populated_object = RedfishObject(type_obj, populated_object.Name, populated_object.parent).populate(sub_payload, check=check, casted=True) File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/catalog.py", line 846, in init self.properties[prop] = RedfishObject(typ, prop, self) File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/catalog.py", line 842, in init for prop, typ in redfish_type.getProperties().items(): File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/catalog.py", line 596, in getProperties for type_obj in self.getTypeTree(): File "/home/xwh/Desktop/Redfish-Service-Validator/redfish_service_validator/catalog.py", line 541, in getTypeTree type_obj = self.owner.parent_doc.catalog.getSchemaDocByClass(my_type).getTypeInSchemaDoc(my_type) KeyboardInterrupt ^C

mraineri commented 9 months ago

Can you provide the output of /redfish/v1/? Can you also try with --debugging added to the test and provide the log file?

xuwh6 commented 9 months ago

output of /redfish/v1: output of redfish_v1.txt

the log file with "--debugging": ConformanceLog_09_25_2023_140150.txt

Thanks!

mraineri commented 9 months ago

Unfortunately that's not giving me much more detail... Based on your earlier trace, I'm wondering if it's getting stuck in a loop trying to parse the OEM schemas...

I'll see if I can make a branch to get more debug information to see what's going on here...

mraineri commented 9 months ago

Could you also try with --nooemcheck added? That should skip OEM testing (and hopefully also skip traversing OEM schema files).

xuwh6 commented 9 months ago

the log file with "--debugging" and "--nooemcheck": ConformanceLog_09_27_2023_100630.txt

It doesn't seem to have changed much.

xuwh6 commented 8 months ago

Any update?

mraineri commented 8 months ago

@xuwh6 I just pushed the branch "Fix560-Tool-Stuck" to help trace down where it's getting stuck. Could you please run it and provide the output log file?

xuwh6 commented 8 months ago

the log file use the branch "Fix560-Tool-Stuck" with "--debugging" and "--nooemcheck": ConformanceLog_11_01_2023_144234.txt

mraineri commented 8 months ago

@xuwh6 would you be able to provide the schema files "AMIServiceRoot" and "AMIConfigurations"? It's possible "AMIConfigurations" is also part of the same file as AMIServiceRoot. There should be a "SchemaFiles" where the tool places all local copies of the schema files. From the output, it looks like the AMIConfigurations definition is creating a loop; ultimately this would indicate the schema is not defined properly and breaks CSDL schema rules, but if I can get a copy of the file, I can harden the tool to escape from this.

xuwh6 commented 8 months ago

These file is .xml file which are not supported to upload, I change them to .txt. For your reference. AMIServiceRoot: AMIServiceRoot_v1.txt

AMIConfigurations: AMIConfigurations_v1.txt

mraineri commented 8 months ago

Thanks; this does confirm the "AMIConfigurations" definition is broken. Line 21 of AMIConfigurations_v1.xml causes a schema definition loop (the type definition is pointing to itself as the parent definition). AMI needs to fix this schema definition, but at least I should be able to add logic to detect this (or other similar cases) to prevent the tool from hanging.