2025-10-20 16:33:55,362 - INFO - Using existing project ['admin_domain', 'admin'](eeb09070-0289-47ea-8478-90b170db953d) 2025-10-20 16:33:55,369 - INFO - ================================================================================ 2025-10-20 16:33:55,370 - INFO - STARTING TEST : test_analytics_docs 2025-10-20 16:33:55,370 - INFO - TEST DESCRIPTION : Test docs from analytics API analytics api docs curl -s http://collector_ips[0]:8081/documentation/index.html | grep "Welcome to Contrail Analytics API documentation!" 2025-10-20 16:33:55,652 - DEBUG - Nothing to compare xmpp stats {'10.0.0.22': {'10.0.0.22': '0'}} with 2025-10-20 16:33:55,652 - INFO - Initial checks done. Running the testcase now 2025-10-20 16:33:55,652 - INFO - 2025-10-20 16:33:55,870 - ERROR - AttributeError Python 3.9.21: /usr/bin/python3 Mon Oct 20 16:33:55 2025 A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred. /contrail-test/tcutils/wrappers.py in wrapper(self=<scripts.documentation.test_docs.DocumentationTe...sanity,dev_sanity_dpdk,sanity] id=0x7f32de0f4310>, *args=(), **kwargs={}) 78 log.info('Initial checks done. Running the testcase now') 79 log.info('') 80 result = function(self, *args, **kwargs) 81 if self.inputs.upgrade: 82 pid = os.getpid() result = None function = <function DocumentationTest.test_analytics_docs> self = <scripts.documentation.test_docs.DocumentationTe...sanity,dev_sanity_dpdk,sanity] id=0x7f32de0f4310> args = () kwargs = {} /contrail-test/scripts/documentation/test_docs.py in test_analytics_docs(self=<scripts.documentation.test_docs.DocumentationTe...sanity,dev_sanity_dpdk,sanity] id=0x7f32de0f4310>) 61 return False 62 63 protocol = 'https' if self.contrail_configs.get('SSL_ENABLE') else 'http' 64 resp = requests.get(f"{protocol}://{self.inputs.collector_ips[0]}:8081/documentation/index.html", verify=False) 65 if resp.status_code != 200: protocol undefined self = <scripts.documentation.test_docs.DocumentationTe...sanity,dev_sanity_dpdk,sanity] id=0x7f32de0f4310> self.contrail_configs undefined AttributeError: 'DocumentationTest' object has no attribute 'contrail_configs' __cause__ = None __class__ = <class 'AttributeError'> __context__ = None __delattr__ = <method-wrapper '__delattr__' of AttributeError object> __dict__ = {} __dir__ = <built-in method __dir__ of AttributeError object> __doc__ = 'Attribute not found.' __eq__ = <method-wrapper '__eq__' of AttributeError object> __format__ = <built-in method __format__ of AttributeError object> __ge__ = <method-wrapper '__ge__' of AttributeError object> __getattribute__ = <method-wrapper '__getattribute__' of AttributeError object> __gt__ = <method-wrapper '__gt__' of AttributeError object> __hash__ = <method-wrapper '__hash__' of AttributeError object> __init__ = <method-wrapper '__init__' of AttributeError object> __init_subclass__ = <built-in method __init_subclass__ of type object> __le__ = <method-wrapper '__le__' of AttributeError object> __lt__ = <method-wrapper '__lt__' of AttributeError object> __ne__ = <method-wrapper '__ne__' of AttributeError object> __new__ = <built-in method __new__ of type object> __reduce__ = <built-in method __reduce__ of AttributeError object> __reduce_ex__ = <built-in method __reduce_ex__ of AttributeError object> __repr__ = <method-wrapper '__repr__' of AttributeError object> __setattr__ = <method-wrapper '__setattr__' of AttributeError object> __setstate__ = <built-in method __setstate__ of AttributeError object> __sizeof__ = <built-in method __sizeof__ of AttributeError object> __str__ = <method-wrapper '__str__' of AttributeError object> __subclasshook__ = <built-in method __subclasshook__ of type object> __suppress_context__ = False __traceback__ = <traceback object> args = ("'DocumentationTest' object has no attribute 'contrail_configs'",) with_traceback = <built-in method with_traceback of AttributeError object> The above is a description of an error in a Python program. Here is the original traceback: Traceback (most recent call last): File "/contrail-test/tcutils/wrappers.py", line 80, in wrapper result = function(self, *args, **kwargs) File "/contrail-test/scripts/documentation/test_docs.py", line 63, in test_analytics_docs protocol = 'https' if self.contrail_configs.get('SSL_ENABLE') else 'http' AttributeError: 'DocumentationTest' object has no attribute 'contrail_configs' 2025-10-20 16:33:55,927 - DEBUG - No XMPP flaps were noticed during the test 2025-10-20 16:33:55,928 - INFO - <div id=test_analytics_docs>2025-10-20 16:33:55,928 - INFO - END TEST : test_analytics_docs : FAILED[0:00:00] </div>2025-10-20 16:33:55,928 - INFO - -------------------------------------------------------------------------------- 2025-10-20 16:33:55,931 - INFO - ================================================================================ 2025-10-20 16:33:55,931 - INFO - STARTING TEST : test_config_docs 2025-10-20 16:33:55,931 - INFO - TEST DESCRIPTION : Test docs from config API config api docs curl -s http://cfgm_ips[0]:8082/documentation/index.html | grep "<title>Juniper Contrail Configuration API Model" 2025-10-20 16:33:56,200 - DEBUG - Nothing to compare xmpp stats {'10.0.0.22': {'10.0.0.22': '0'}} with 2025-10-20 16:33:56,200 - INFO - Initial checks done. Running the testcase now 2025-10-20 16:33:56,200 - INFO - 2025-10-20 16:33:56,411 - ERROR - AttributeError Python 3.9.21: /usr/bin/python3 Mon Oct 20 16:33:56 2025 A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred. /contrail-test/tcutils/wrappers.py in wrapper(self=<scripts.documentation.test_docs.DocumentationTe...sanity,dev_sanity_dpdk,sanity] id=0x7f32de0f48e0>, *args=(), **kwargs={}) 78 log.info('Initial checks done. Running the testcase now') 79 log.info('') 80 result = function(self, *args, **kwargs) 81 if self.inputs.upgrade: 82 pid = os.getpid() result = None function = <function DocumentationTest.test_config_docs> self = <scripts.documentation.test_docs.DocumentationTe...sanity,dev_sanity_dpdk,sanity] id=0x7f32de0f48e0> args = () kwargs = {} /contrail-test/scripts/documentation/test_docs.py in test_config_docs(self=<scripts.documentation.test_docs.DocumentationTe...sanity,dev_sanity_dpdk,sanity] id=0x7f32de0f48e0>) 38 return False 39 40 protocol = 'https' if self.contrail_configs.get('SSL_ENABLE') else 'http' 41 resp = requests.get(f"{protocol}://{self.inputs.cfgm_ips[0]}:8082/documentation/index.html", verify=False) 42 if resp.status_code != 200: protocol undefined self = <scripts.documentation.test_docs.DocumentationTe...sanity,dev_sanity_dpdk,sanity] id=0x7f32de0f48e0> self.contrail_configs undefined AttributeError: 'DocumentationTest' object has no attribute 'contrail_configs' __cause__ = None __class__ = <class 'AttributeError'> __context__ = None __delattr__ = <method-wrapper '__delattr__' of AttributeError object> __dict__ = {} __dir__ = <built-in method __dir__ of AttributeError object> __doc__ = 'Attribute not found.' __eq__ = <method-wrapper '__eq__' of AttributeError object> __format__ = <built-in method __format__ of AttributeError object> __ge__ = <method-wrapper '__ge__' of AttributeError object> __getattribute__ = <method-wrapper '__getattribute__' of AttributeError object> __gt__ = <method-wrapper '__gt__' of AttributeError object> __hash__ = <method-wrapper '__hash__' of AttributeError object> __init__ = <method-wrapper '__init__' of AttributeError object> __init_subclass__ = <built-in method __init_subclass__ of type object> __le__ = <method-wrapper '__le__' of AttributeError object> __lt__ = <method-wrapper '__lt__' of AttributeError object> __ne__ = <method-wrapper '__ne__' of AttributeError object> __new__ = <built-in method __new__ of type object> __reduce__ = <built-in method __reduce__ of AttributeError object> __reduce_ex__ = <built-in method __reduce_ex__ of AttributeError object> __repr__ = <method-wrapper '__repr__' of AttributeError object> __setattr__ = <method-wrapper '__setattr__' of AttributeError object> __setstate__ = <built-in method __setstate__ of AttributeError object> __sizeof__ = <built-in method __sizeof__ of AttributeError object> __str__ = <method-wrapper '__str__' of AttributeError object> __subclasshook__ = <built-in method __subclasshook__ of type object> __suppress_context__ = False __traceback__ = <traceback object> args = ("'DocumentationTest' object has no attribute 'contrail_configs'",) with_traceback = <built-in method with_traceback of AttributeError object> The above is a description of an error in a Python program. Here is the original traceback: Traceback (most recent call last): File "/contrail-test/tcutils/wrappers.py", line 80, in wrapper result = function(self, *args, **kwargs) File "/contrail-test/scripts/documentation/test_docs.py", line 40, in test_config_docs protocol = 'https' if self.contrail_configs.get('SSL_ENABLE') else 'http' AttributeError: 'DocumentationTest' object has no attribute 'contrail_configs' 2025-10-20 16:33:56,465 - DEBUG - No XMPP flaps were noticed during the test 2025-10-20 16:33:56,465 - INFO - <div id=test_config_docs>2025-10-20 16:33:56,465 - INFO - END TEST : test_config_docs : FAILED[0:00:01] </div>2025-10-20 16:33:56,465 - INFO - --------------------------------------------------------------------------------