--- /dev/null
+#!/usr/bin/env python3
+###
+# ============LICENSE_START=======================================================
+# ORAN SMO PACKAGE - PYTHONSDK TESTS
+# ================================================================================
+# Copyright (C) 2022 AT&T Intellectual Property. All rights
+# reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END============================================
+# ===================================================================
+#
+###
+"""Module called by pytest."""
+import logging
+import logging.config
+
+from subprocess import check_output, run
+from requests import RequestException
+from onapsdk.configuration import settings
+from onapsdk.exceptions import ConnectionFailed, APIError
+from urllib3.exceptions import NewConnectionError
+from oransdk.aai.aai import Aai
+from oransdk.msb.msb_microservice import OranMsb
+from oransdk.oof.oof import Oof
+from oransdk.policy.clamp import ClampToscaTemplate
+from oransdk.policy.policy import OranPolicy
+from oransdk.sdc.sdc import SdcTemplate
+from oransdk.sdnc.sdnc import OranSdnc
+from oransdk.so.so import OranSo
+
+logging.config.dictConfig(settings.LOG_CONFIG)
+logger = logging.getLogger("Health check")
+
+clamp = ClampToscaTemplate(settings.CLAMP_BASICAUTH)
+sdnc = OranSdnc()
+policy = OranPolicy()
+aai = Aai()
+sdc = SdcTemplate()
+so = OranSo()
+msb = OranMsb()
+oof = Oof()
+
+class HealthCheck():
+ """Healthcheck class for ONAP component."""
+
+ @classmethod
+ def is_onap_up(cls, up_no) -> bool:
+ """Verify if ONAP platform is up or not."""
+ cmd = "kubectl get pods --field-selector 'status.phase=Failed' -n onap -o name | xargs kubectl delete -n onap"
+ run(cmd, shell=True, check=False)
+ cmd = "kubectl get pods --field-selector status.phase!=Running -n onap | wc -l"
+ result = check_output(cmd, shell=True).decode('utf-8')
+ logger.info("Number of Onap pods not in Running state (expected <= %s): %s", up_no, result)
+ if int(result) <= up_no:
+ logger.info("ONAP is Up")
+ return True
+ logger.info("ONAP is Down")
+ return False
+
+ @classmethod
+ def policy_component_ready(cls):
+ """Check if Policy components are ready."""
+ logger.info("Verify Policy components are ready")
+ try:
+ policy_ready = {"api_ready": False, "pap_ready": False, "apex_ready": False}
+ except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e:
+ logger.error(e)
+ return False
+ policy_status = policy.get_components_status(settings.POLICY_BASICAUTH)
+ if (policy_status["api"]["healthy"] and not policy_ready["api_ready"]):
+ logger.info("Policy Api is ready")
+ policy_ready["api_ready"] = True
+ if (policy_status["pap"]["healthy"] and not policy_ready["pap_ready"]):
+ logger.info("Policy Pap is ready")
+ policy_ready["pap_ready"] = True
+ if (len(policy_status["pdps"]["apex"]) > 0 and policy_status["pdps"]["apex"][0]["healthy"] == "HEALTHY" and not policy_ready["apex_ready"]):
+ logger.info("Policy Apex is ready")
+ policy_ready["apex_ready"] = True
+ return policy_ready["api_ready"] and policy_ready["pap_ready"] and policy_ready["apex_ready"]
+
+ @classmethod
+ def sdnc_component_ready(cls):
+ """Check if SDNC component is ready."""
+ logger.info("Verify SDNC component is ready")
+
+ try:
+ response = OranSdnc.get_events(settings.SDNC_BASICAUTH, "test")
+ except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e:
+ logger.error(e)
+ return False
+ return response.status_code == 200
+
+ @classmethod
+ def clamp_component_ready(cls):
+ """Check if Clamp component is ready."""
+ logger.info("Verify Clamp component is ready")
+ try:
+ response = clamp.get_template_instance()
+ except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e:
+ logger.error(e)
+ return False
+ return response["automationCompositionList"] is not None
+
+ @classmethod
+ def sdc_component_ready(cls):
+ """Check if SDC component is ready."""
+ logger.info("Verify SDC component is ready")
+
+ try:
+ response = sdc.healthcheck()
+ except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e:
+ logger.error(e)
+ return False
+
+ so_ready = {"BE": False, "CASSANDRA": False, "ON_BOARDING": False, "JANUSGRAPH": False}
+ so_list = response["componentsInfo"]
+ for so_status in so_list:
+ if (so_status["healthCheckComponent"] == "BE" and so_status["healthCheckStatus"] == "UP"):
+ so_ready["BE"] = True
+ if (so_status["healthCheckComponent"] == "CASSANDRA" and so_status["healthCheckStatus"] == "UP"):
+ so_ready["CASSANDRA"] = True
+ if (so_status["healthCheckComponent"] == "ON_BOARDING" and so_status["healthCheckStatus"] == "UP"):
+ so_ready["ON_BOARDING"] = True
+ if (so_status["healthCheckComponent"] == "JANUSGRAPH" and so_status["healthCheckStatus"] == "UP"):
+ so_ready["JANUSGRAPH"] = True
+
+ return so_ready["BE"] and so_ready["CASSANDRA"] and so_ready["ON_BOARDING"] and so_ready["JANUSGRAPH"]
+
+ @classmethod
+ def aai_component_ready(cls):
+ """Check if AAI component is ready."""
+ logger.info("Verify AAI component is ready")
+
+ try:
+ response = aai.healthcheck()
+ except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e:
+ logger.error(e)
+ return False
+ return "Successful health check:OK" in str(response)
+
+ @classmethod
+ def so_component_ready(cls):
+ """Check if SO component is ready."""
+ logger.info("Verify SO component is ready")
+
+ try:
+ response = so.healthcheck()
+ except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e:
+ logger.error(e)
+ return False
+ return response["status"] == "UP"
+
+ @classmethod
+ def msb_component_ready(cls):
+ """Check if MSB component is ready."""
+ logger.info("Verify MSB component is ready")
+
+ try:
+ response = msb.get_services()
+ except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e:
+ logger.error(e)
+ return False
+ return response is not None and len(response) > 0
+
+ @classmethod
+ def oof_component_ready(cls):
+ """Check if OOF component is ready."""
+ logger.info("Verify OOF component is ready")
+
+ try:
+ response = oof.get_versions()
+ except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e:
+ logger.error(e)
+ return False
+ return response["versions"] is not None