From e011cf052edad0e70ce2846d483fa29f6283bef3 Mon Sep 17 00:00:00 2001 From: SrikanthNaidu Date: Wed, 19 Dec 2018 19:06:39 +0530 Subject: heartbeat service Logging complaince All components deployed should conform to ONAP logging guidelines Issue-ID: DCAEGEN2-628 Change-Id: I2febe2456033f3aa2961fcb2f656b64b1515cd03 Signed-off-by: SrikanthNaidu --- miss_htbt_service.egg-info/PKG-INFO | 2 +- miss_htbt_service/check_health.py | 4 +- miss_htbt_service/db_monitoring.py | 208 ++++++++++++-------------- miss_htbt_service/htbtworker.py | 5 +- miss_htbt_service/misshtbtd.py | 2 + miss_htbt_service/mod/trapd_get_cbs_config.py | 10 +- miss_htbt_service/mod/trapd_vnf_table.py | 117 ++++++++++++++- tests/HB_Array.json | 82 ++++++++++ tests/test_binding.py | 61 +------- tests/test_trapd_vnf_table.py | 106 ++++++------- 10 files changed, 358 insertions(+), 239 deletions(-) mode change 100644 => 100755 miss_htbt_service/misshtbtd.py create mode 100644 tests/HB_Array.json diff --git a/miss_htbt_service.egg-info/PKG-INFO b/miss_htbt_service.egg-info/PKG-INFO index 0578aa3..f8e84a5 100644 --- a/miss_htbt_service.egg-info/PKG-INFO +++ b/miss_htbt_service.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: miss-htbt-service -Version: 2.0.0 +Version: 2.1.0 Summary: Missing heartbeat microservice to communicate with policy-engine Home-page: https://gerrit.onap.org/r/#/admin/projects/dcaegen2/platform/heartbeat Author: Srikanth Naidu diff --git a/miss_htbt_service/check_health.py b/miss_htbt_service/check_health.py index fb99584..5732749 100644 --- a/miss_htbt_service/check_health.py +++ b/miss_htbt_service/check_health.py @@ -62,6 +62,6 @@ class GetHandler(BaseHTTPRequestHandler): if __name__ == '__main__': from http.server import HTTPServer #from BaseHTTPServer import HTTPServer - server = HTTPServer(("", 10001), GetHandler) - print('Starting server at http://localhost:10001') + server = HTTPServer(("", 10002), GetHandler) + print('Starting server at http://localhost:10002') server.serve_forever() diff --git a/miss_htbt_service/db_monitoring.py b/miss_htbt_service/db_monitoring.py index 6113be2..26eba98 100644 --- a/miss_htbt_service/db_monitoring.py +++ b/miss_htbt_service/db_monitoring.py @@ -34,6 +34,100 @@ import get_logger _logger = get_logger.get_logger(__name__) +def sendControlLoopEvent(CLType, pol_url, policy_version, policy_name, policy_scope, target_type, srcName, epoc_time, closed_control_loop_name, version, target): + msg="DBM:Time to raise Control Loop Event for Control loop typ /target type - ",CLType, target_type + _logger.info(msg) + if(CLType == "ONSET"): + _logger.info("DBM:Heartbeat not received, raising alarm event") + if(target_type == "VNF"): + json_object = json.dumps({ + "closedLoopEventClient": "DCAE_Heartbeat_MS", + "policyVersion": policy_version, + "policyName": policy_name, + "policyScope": policy_scope, + "target_type": target_type, + "AAI": { "generic-vnf.vnf-name": srcName} , + "closedLoopAlarmStart": epoc_time, + "closedLoopEventStatus": "ONSET", + "closedLoopControlName": closed_control_loop_name, + "version": version, + "target": target, + "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc", + "from": "DCAE" + }); + elif(target_type == "VM"): + json_object = json.dumps({ + "closedLoopEventClient": "DCAE_Heartbeat_MS", + "policyVersion": policy_version, + "policyName": policy_name, + "policyScope": policy_scope, + "target_type": target_type, + "AAI": { "vserver.vserver-name": srcName} , + "closedLoopAlarmStart": epoc_time, + "closedLoopEventStatus": "ONSET", + "closedLoopControlName": closed_control_loop_name, + "version": version, + "target": target, + "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc", + "from": "DCAE" + }); + else: + return True + elif(CLType == "ABATED"): + _logger.info("DBM:Heartbeat received, clearing alarm event") + #last_date_time = datetime.datetime.now() + if(target_type == "VNF"): + json_object = json.dumps({ + "closedLoopEventClient": "DCAE_Heartbeat_MS", + "policyVersion": policy_version, + "policyName": policy_name, + "policyScope": policy_scope, + "target_type": target_type, + "AAI": { "generic-vnf.vnf-name": srcName} , + "closedLoopAlarmStart": epoc_time, + "closedLoopEventStatus": "ABATED", + "closedLoopControlName": closed_control_loop_name, + "version": version, + "target": target, + "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc", + "from": "DCAE" + }); + elif(target_type == "VM"): + json_object = json.dumps({ + "closedLoopEventClient": "DCAE_Heartbeat_MS", + "policyVersion": policy_version, + "policyName": policy_name, + "policyScope": policy_scope, + "target_type": target_type, + "AAI": { "vserver.vserver-name": srcName} , + "closedLoopAlarmStart": epoc_time, + "closedLoopEventStatus": "ABATED", + "closedLoopControlName": closed_control_loop_name, + "version": version, + "target": target, + "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc", + "from": "DCAE" + }); + else: + return True + else: + return True + payload = json_object + msg="DBM: CL Json object is", json_object + _logger.info(msg) + #psend_url = pol_url+'DefaultGroup/1?timeout=15000' + psend_url = pol_url + msg="DBM:",psend_url + _logger.info(msg) + #Send response for policy on output topic + r = requests.post(psend_url, data=payload) + msg="DBM:",r.status_code, r.reason + _logger.info(msg) + ret = r.status_code + msg="DBM:Status code for sending the control loop event is",ret + _logger.info(msg) + return True + def db_monitoring(current_pid,json_file,user_name,password,ip_address,port_num,db_name): while(True): time.sleep(20) @@ -89,119 +183,14 @@ def db_monitoring(current_pid,json_file,user_name,password,ip_address,port_num,d epoc_time_sec = row[0][0] srcName = row[0][1] cl_flag = row[0][2] - vnfName = event_name if((epoc_time-epoc_time_sec)>comparision_time and cl_flag ==0): - msg="DBM:Time to raise Control Loop Event for target type - ", target_type - _logger.info(msg) - if(target_type == "VNF"): - json_object = json.dumps({ - "closedLoopEventClient": "DCAE_Heartbeat_MS", - "policyVersion": policy_version, - "policyName": policy_name, - "policyScope": policy_scope, - "target_type": target_type, - "AAI": { "generic-vnf.vnf-name": srcName} , - "closedLoopAlarmStart": epoc_time, - "closedLoopEventStatus": "ONSET", - "closedLoopControlName": closed_control_loop_name, - "version": version, - "target": target, - "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc", - "from": "DCAE" - }); - elif(target_type == "VM"): - json_object = json.dumps({ - "closedLoopEventClient": "DCAE_Heartbeat_MS", - "policyVersion": policy_version, - "policyName": policy_name, - "policyScope": policy_scope, - "target_type": target_type, - "AAI": { "vserver.vserver-name": srcName} , - "closedLoopAlarmStart": epoc_time, - "closedLoopEventStatus": "ONSET", - "closedLoopControlName": closed_control_loop_name, - "version": version, - "target": target, - "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc", - "from": "DCAE" - }); - else: - continue - payload = json_object - msg="DBM: CL Json object is", json_object - _logger.info(msg) - #psend_url = pol_url+'DefaultGroup/1?timeout=15000' - psend_url = pol_url - msg="DBM:",psend_url - _logger.info(msg) - msg="DBM:DB monitoring raising alarm event "+psend_url - _logger.info(msg) - #Send response for policy on output topic - r = requests.post(psend_url, data=payload) - msg="DBM:",r.status_code, r.reason - _logger.info(msg) - ret = r.status_code - msg="DBM:Status code after raising the control loop event is",ret - _logger.info(msg) + sendControlLoopEvent("ONSET", pol_url, policy_version, policy_name, policy_scope, target_type, srcName, epoc_time, closed_control_loop_name, version, target) cl_flag = 1 update_query = "UPDATE vnf_table_2 SET CL_FLAG=%d where EVENT_NAME ='%s' and source_name_key=%d" %(cl_flag,event_name,(source_name_key+1)) cur.execute(update_query) connection_db.commit() elif((epoc_time - epoc_time_sec) < comparision_time and cl_flag ==1): - msg="DBM:Time to clear Control Loop Event for target type - ", target_type - _logger.info(msg) - epoc_time = int(round(time.time())) - #last_date_time = datetime.datetime.now() - if(target_type == "VNF"): - json_object = json.dumps({ - "closedLoopEventClient": "DCAE_Heartbeat_MS", - "policyVersion": policy_version, - "policyName": policy_name, - "policyScope": policy_scope, - "target_type": target_type, - "AAI": { "generic-vnf.vnf-name": srcName} , - "closedLoopAlarmStart": epoc_time, - "closedLoopEventStatus": "ABATED", - "closedLoopControlName": closed_control_loop_name, - "version": version, - "target": target, - "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc", - "from": "DCAE" - }); - elif(target_type == "VM"): - json_object = json.dumps({ - "closedLoopEventClient": "DCAE_Heartbeat_MS", - "policyVersion": policy_version, - "policyName": policy_name, - "policyScope": policy_scope, - "target_type": target_type, - "AAI": { "vserver.vserver-name": srcName} , - "closedLoopAlarmStart": epoc_time, - "closedLoopEventStatus": "ABATED", - "closedLoopControlName": closed_control_loop_name, - "version": version, - "target": target, - "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc", - "from": "DCAE" - }); - else: - continue - payload = json_object - msg="DBM: CL Json object is", json_object - _logger.info(msg) - #psend_url = pol_url+'DefaultGroup/1?timeout=15000' - psend_url = pol_url - msg="DBM:",psend_url - _logger.info(msg) - msg="DBM:Heartbeat Dead raising alarm event "+psend_url - _logger.info(msg) - #Send response for policy on output topic - r = requests.post(psend_url, data=payload) - msg="DBM:",r.status_code, r.reason - _logger.info(msg) - ret = r.status_code - msg="DBM:Status code after raising the control loop event is",ret - _logger.info(msg) + sendControlLoopEvent("ABATED", pol_url, policy_version, policy_name, policy_scope, target_type, srcName, epoc_time, closed_control_loop_name, version, target) cl_flag = 0 update_query = "UPDATE vnf_table_2 SET CL_FLAG=%d where EVENT_NAME ='%s' and source_name_key=%d" %(cl_flag,event_name,(source_name_key+1)) cur.execute(update_query) @@ -211,9 +200,8 @@ def db_monitoring(current_pid,json_file,user_name,password,ip_address,port_num,d msg="DBM:DB Monitoring is ignored for %s since validity flag is 0" %(event_name) _logger.info(msg) - for source_name_key in range(source_name_count): - delete_query_table2 = "DELETE FROM vnf_table_2 WHERE EVENT_NAME = '%s' and source_name_key=%d;" %(event_name,source_name_key) - cur.execute(delete_query_table2) + delete_query_table2 = "DELETE FROM vnf_table_2 WHERE EVENT_NAME = '%s';" %(event_name) + cur.execute(delete_query_table2) delete_query = "DELETE FROM vnf_table_1 WHERE EVENT_NAME = '%s';" %(event_name) cur.execute(delete_query) connection_db.commit() diff --git a/miss_htbt_service/htbtworker.py b/miss_htbt_service/htbtworker.py index 5b62943..6000e1b 100644 --- a/miss_htbt_service/htbtworker.py +++ b/miss_htbt_service/htbtworker.py @@ -44,7 +44,7 @@ def read_json_file(i): def process_msg(jsfile,user_name, password, ip_address, port_num, db_name): global mr_url i=0 - sleep_duration = 10 + sleep_duration = 20 while(True): time.sleep(sleep_duration) with open(jsfile, 'r') as outfile: @@ -61,6 +61,7 @@ def process_msg(jsfile,user_name, password, ip_address, port_num, db_name): if(os.getenv('pytest', "") == 'test'): eventnameList = ["Heartbeat_vDNS","Heartbeat_vFW","Heartbeat_xx"] + connection_db = 0 else: connection_db = postgres_db_open(user_name, password, ip_address, port_num, db_name) cur = connection_db.cursor() @@ -93,8 +94,6 @@ def process_msg(jsfile,user_name, password, ip_address, port_num, db_name): inputString = res.text #If mrstatus in message body indicates some information, not json msg. if ("mrstatus" in inputString): - if (sleep_duration < 60): - sleep_duration = sleep_duration + 10 continue jlist = inputString.split('\n'); # Process the DMaaP input message retreived diff --git a/miss_htbt_service/misshtbtd.py b/miss_htbt_service/misshtbtd.py old mode 100644 new mode 100755 index 2069865..55e812f --- a/miss_htbt_service/misshtbtd.py +++ b/miss_htbt_service/misshtbtd.py @@ -292,8 +292,10 @@ def create_update_db(update_db, jsfile, ip_address, port_num, user_name, passwor def create_process(job_list, jsfile, pid_current): if(len(job_list) == 0): p1 = multiprocessing.Process(target=hb_worker_process, args=(jsfile,)) + time.sleep(1) p2 = multiprocessing.Process(target=db_monitoring_process, args=(pid_current,jsfile,)) p1.start() + time.sleep(1) p2.start() job_list.append(p1) job_list.append(p2) diff --git a/miss_htbt_service/mod/trapd_get_cbs_config.py b/miss_htbt_service/mod/trapd_get_cbs_config.py index d2b615f..47ba223 100644 --- a/miss_htbt_service/mod/trapd_get_cbs_config.py +++ b/miss_htbt_service/mod/trapd_get_cbs_config.py @@ -58,9 +58,9 @@ def get_cbs_config(): # See if we are in a config binding service (CBS) /controller environment try: + msg = "Unable to fetch CBS config or it is erroneously empty - trying override/simulator config" tds.c_config = get_config() if tds.c_config == {}: - msg = "Unable to fetch CBS config or it is erroneously empty - trying override/simulator config" stdout_logger(msg) # if no CBS present, default to JSON config specified via CBS_HTBT_JSON env var @@ -69,15 +69,15 @@ def get_cbs_config(): stdout_logger(msg) try: + msg = "CBS_HTBT_JSON not defined - FATAL ERROR, exiting" _cbs_sim_json_file = os.getenv("CBS_HTBT_JSON", "None") except Exception as e: - msg = "CBS_HTBT_JSON not defined - FATAL ERROR, exiting" stdout_logger(msg) cleanup(1,None) return False + msg = "CBS_HTBT_JSON not defined - FATAL ERROR, exiting" if _cbs_sim_json_file == "None": - msg = "CBS_HTBT_JSON not defined - FATAL ERROR, exiting" stdout_logger(msg) cleanup(1,None) return False @@ -85,11 +85,11 @@ def get_cbs_config(): msg = ("ONAP controller override specified via CBS_HTBT_JSON: %s" % _cbs_sim_json_file) stdout_logger(msg) + msg = "Unable to load CBS_HTBT_JSON " + _cbs_sim_json_file + \ + " (invalid json?) - FATAL ERROR, exiting" try: tds.c_config = json.load(open(_cbs_sim_json_file)) except Exception as e: - msg = "Unable to load CBS_HTBT_JSON " + _cbs_sim_json_file + \ - " (invalid json?) - FATAL ERROR, exiting" stdout_logger(msg) cleanup_and_exit(0,None) diff --git a/miss_htbt_service/mod/trapd_vnf_table.py b/miss_htbt_service/mod/trapd_vnf_table.py index a76c886..9a40525 100644 --- a/miss_htbt_service/mod/trapd_vnf_table.py +++ b/miss_htbt_service/mod/trapd_vnf_table.py @@ -35,9 +35,16 @@ import logging import get_logger import yaml import os.path as path +import db_monitoring as dbmon +import json +from onap_dcae_cbs_docker_client.client import get_config +import unittest +import time +import subprocess prog_name = os.path.basename(__file__) hb_properties_file = path.abspath(path.join(__file__, "../../config/hbproperties.yaml")) +_logger = get_logger.get_logger(__name__) def hb_properties(): #Read the hbproperties.yaml for postgress and CBS related data @@ -54,7 +61,6 @@ def hb_properties(): s.close() return ip_address, port_num, user_name, password, db_name, cbs_polling_required, cbs_polling_interval -ip_address, port_num, user_name, password, db_name, cbs_polling_required, cbs_polling_interval = hb_properties() def verify_DB_creation_1(user_name,password,ip_address,port_num,db_name): connection_db = pm.postgres_db_open(user_name,password,ip_address,port_num,db_name) @@ -99,8 +105,115 @@ def verify_cbsPolling_required(): def verify_cbspolling(): try: - _cbspolling=cbs.currentpidMain(10) + _cbspolling=cbs.pollCBS(10) except Exception as e: return None return _cbspolling + +def verify_fetch_json_file(): + os.environ['pytest']='test' + os.environ['SERVICE_NAME']='mvp-dcaegen2-heartbeat-static' + #os.environ['CONSUL_HOST']='10.12.6.50' # Used this IP during testing + os.environ['CONSUL_HOST']='localhost' + os.environ['HOSTNAME']='mvp-dcaegen2-heartbeat-static' + try: + db.fetch_json_file() + result = True + except Exception as e: + result = False + print(result) + os.unsetenv('pytest') + os.unsetenv('SERVICE_NAME') + os.unsetenv('CONSUL_HOST') + os.unsetenv('HOSTNAME') + return result + +def verify_misshtbtdmain(): + os.environ['pytest']='test' + os.environ['SERVICE_NAME']='mvp-dcaegen2-heartbeat-static' + os.environ['CONSUL_HOST']='localhost' + os.environ['HOSTNAME']='mvp-dcaegen2-heartbeat-static' + + try: + db.main() + result = True + except Exception as e: + result = False + print(result) + os.unsetenv('pytest') + os.unsetenv('SERVICE_NAME') + os.unsetenv('CONSUL_HOST') + os.unsetenv('HOSTNAME') + return result + +def verify_dbmonitoring(): + os.environ['pytest']='test' + os.environ['SERVICE_NAME']='mvp-dcaegen2-heartbeat-static' + os.environ['CONSUL_HOST']='localhost' + os.environ['HOSTNAME']='mvp-dcaegen2-heartbeat-static' + try: + ip_address, port_num, user_name, password, db_name, cbs_polling_required, cbs_polling_interval = hb_properties() + jsfile = db.fetch_json_file() + hbc_pid, hbc_state, hbc_srcName, hbc_time = db.read_hb_common(user_name,password,ip_address,port_num,db_name) + dbmon.db_monitoring(hbc_pid,jsfile,user_name,password,ip_address,port_num,db_name) + result = True + except Exception as e: + print("Message process error - ",e) + result = False + print(result) + os.unsetenv('pytest') + os.unsetenv('SERVICE_NAME') + os.unsetenv('CONSUL_HOST') + os.unsetenv('HOSTNAME') + return result + +def verify_dbmon_startup(): + try: + p = subprocess.Popen(['./miss_htbt_service/db_monitoring.py'], stdout=subprocess.PIPE,shell=True) + time.sleep(1) + except Exception as e: + print( "Message process error - ",e) + return None + return True + +def verify_sendControlLoop_VNF_ONSET(): + try: +# _CL_return = sendControlLoopEvent(CLType, pol_url, policy_version, policy_name, policy_scope, target_type, srcName, epoc_time, closed_control_loop_name, version, target) + pol_url = "http://10.12.5.252:3904/events/unauthenticated.DCAE_CL_OUTPUT/" + _CL_return = dbmon.sendControlLoopEvent("ONSET", pol_url, "1.0", "vFireWall", "pscope", "VNF", "srcname1", 1541234567, "SampleCLName", "1.0", "genVnfName") + except Exception as e: +# msg = "Message process error - ",err +# _logger.error(msg) + return None + return _CL_return + +def verify_sendControlLoop_VM_ONSET(): + try: + pol_url = "http://10.12.5.252:3904/events/unauthenticated.DCAE_CL_OUTPUT/" + _CL_return = dbmon.sendControlLoopEvent("ONSET", pol_url, "1.0", "vFireWall", "pscope", "VM", "srcname1", 1541234567, "SampleCLName", "1.0", "genVnfName") + except Exception as e: +# msg = "Message process error - ",err +# _logger.error(msg) + return None + return _CL_return + +def verify_sendControlLoop_VNF_ABATED(): + try: + pol_url = "http://10.12.5.252:3904/events/unauthenticated.DCAE_CL_OUTPUT/" + _CL_return = dbmon.sendControlLoopEvent("ABATED", pol_url, "1.0", "vFireWall", "pscope", "VNF", "srcname1", 1541234567, "SampleCLName", "1.0", "genVnfName") + except Exception as e: +# msg = "Message process error - ",err +# _logger.error(msg) + return None + return _CL_return + +def verify_sendControlLoop_VM_ABATED(): + try: + pol_url = "http://10.12.5.252:3904/events/unauthenticated.DCAE_CL_OUTPUT/" + _CL_return = dbmon.sendControlLoopEvent("ABATED", pol_url, "1.0", "vFireWall", "pscope", "VM", "srcname1", 1541234567, "SampleCLName", "1.0", "genVnfName") + except Exception as e: +# msg = "Message process error - ",err +# _logger.error(msg) + return None + return _CL_return diff --git a/tests/HB_Array.json b/tests/HB_Array.json new file mode 100644 index 0000000..993caca --- /dev/null +++ b/tests/HB_Array.json @@ -0,0 +1,82 @@ +[{ "event": { "commonEventHeader": { "vesEventListenerVersion": "7.0.2", "domain": "heartbeat", "eventId": "mvfs10", "eventName": "Heartbeat_SSS", "lastEpochMicrosec": 1545191282174, "priority": "Normal", "reportingEntityName": "ibcx0001vm002oam001", "sequence": 1000, "sourceName": "SOURCE_NAME2", "startEpochMicrosec": 1545191282174, "version": "4.0.2", "reportingEntityId": "cc305d54-75b4-431b-adb2-eb6b9e541234", "sourceId": "VNFA_SRC1", "eventType": "platform", "nfcNamingCode": "VNFA", "nfNamingCode": "VNFA", "timeZoneOffset": "UTC-05:30" }, "heartbeatFields": { "heartbeatInterval": 20, "heartbeatFieldsVersion": "3.0" } } }, +{ + "event": { + "commonEventHeader": { + "vesEventListenerVersion": "7.0.2", + "domain": "heartbeat", + "eventId": "mvfs10", + "eventName": "Heartbeat_vFW", + "lastEpochMicrosec": 1545191282174, + "priority": "Normal", + "reportingEntityName": "ibcx0001vm002oam001", + "sequence": 1000, + "sourceName": "SOURCE_NAME3", + "startEpochMicrosec": 1545191282174, + "version": "4.0.2", + "reportingEntityId": "cc305d54-75b4-431b-adb2-eb6b9e541234", + "sourceId": "VNFB_SRC5", + "eventType": "platform", + "nfcNamingCode": "VNFB", + "nfNamingCode": "VNFB", + "timeZoneOffset": "UTC-05:30" + }, + "heartbeatFields": { + "heartbeatInterval": 20, + "heartbeatFieldsVersion": "3.0" + } + } +}, +{ + "event": { + "commonEventHeader": { + "vesEventListenerVersion": "7.0.2", + "domain": "heartbeat", + "eventId": "mvfs10", + "eventName": "Heartbeat_SSS", + "lastEpochMicrosec": 1545191282174, + "priority": "Normal", + "reportingEntityName": "ibcx0001vm002oam001", + "sequence": 1000, + "sourceName": "SOURCE_NAME4", + "startEpochMicrosec": 1545191282174, + "version": "4.0.2", + "reportingEntityId": "cc305d54-75b4-431b-adb2-eb6b9e541234", + "sourceId": "VNFA_SRC3", + "eventType": "platform", + "nfcNamingCode": "VNFA", + "nfNamingCode": "VNFA", + "timeZoneOffset": "UTC-05:30" + }, + "heartbeatFields": { + "heartbeatInterval": 20, + "heartbeatFieldsVersion": "3.0" + } + } +}, +{ + "event": { + "commonEventHeader": { + "vesEventListenerVersion": "7.0.2", + "domain": "heartbeat", + "eventId": "mvfs10", + "eventName": "Heartbeat_SSS", + "lastEpochMicrosec": 1545191282174, + "priority": "Normal", + "reportingEntityName": "ibcx0001vm002oam001", + "sequence": 1000, + "sourceName": "SOURCE_NAME5", + "startEpochMicrosec": 1545191282174, + "version": "4.0.2", + "reportingEntityId": "cc305d54-75b4-431b-adb2-eb6b9e541234", + "sourceId": "VNFA_SRC3", + "eventType": "platform", + "nfcNamingCode": "VNFA", + "nfNamingCode": "VNFA", + "timeZoneOffset": "UTC-05:30" + }, + "heartbeatFields": { + "heartbeatInterval": 20, + "heartbeatFieldsVersion": "3.0" + } + } +} diff --git a/tests/test_binding.py b/tests/test_binding.py index bfa13ba..e2844e4 100644 --- a/tests/test_binding.py +++ b/tests/test_binding.py @@ -21,12 +21,10 @@ import io import requests import httpretty import sys -#import miss_htbt_service from miss_htbt_service import htbtworker from miss_htbt_service import misshtbtd from miss_htbt_service import db_monitoring from miss_htbt_service import config_notif -#from miss_htbt_service.htbtworker import get_collector_uri,get_policy_uri from trapd_vnf_table import hb_properties import subprocess import pytest @@ -88,66 +86,13 @@ def test_resolve_all(): def test_full(): p = subprocess.Popen(['./miss_htbt_service/misshtbtd.py'], stdout=subprocess.PIPE,shell=True) #time.sleep(30) - #r = requests.get('http://127.0.0.1:10002') - #r = requests.get('http://localhost:10001') + #r = requests.get('http://localhost:10002') #print(r.status_code) #assert(r.status_code == 200) - #r = requests.post('http://127.0.0.1:10001',data={'number': '12524', 'health': 'good', 'action': 'show'}) + #r = requests.post('http://127.0.0.1:10002',data={'number': '12524', 'health': 'good', 'action': 'show'}) + #r = requests.post('http://localhost:10002',data={'number': '12524', 'health': 'good', 'action': 'show'}) #print(r.status_code) #assert(r.status_code == 200) -def test_fetch_json_file(): - os.environ['pytest']='test' - os.environ['SERVICE_NAME']='mvp-dcaegen2-heartbeat-static' - #os.environ['CONSUL_HOST']='10.12.6.50' # Used this IP during testing - os.environ['CONSUL_HOST']='localhost' - os.environ['HOSTNAME']='mvp-dcaegen2-heartbeat-static' - try: - misshtbtd.fetch_json_file() - result = True - except Exception as e: - result = False - print(result) - os.unsetenv('pytest') - os.unsetenv('SERVICE_NAME') - os.unsetenv('CONSUL_HOST') - os.unsetenv('HOSTNAME') - - assert(result == True) - -def test_misshtbtdmain(): - os.environ['pytest']='test' - os.environ['SERVICE_NAME']='mvp-dcaegen2-heartbeat-static' - os.environ['CONSUL_HOST']='localhost' - os.environ['HOSTNAME']='mvp-dcaegen2-heartbeat-static' - - try: - misshtbtd.main() - result = True - except Exception as e: - result = False - print(result) - os.unsetenv('pytest') - os.unsetenv('SERVICE_NAME') - os.unsetenv('CONSUL_HOST') - os.unsetenv('HOSTNAME') - assert(result == True) - -def test_dbmonitoring(): - ip_address, port_num, user_name, password, db_name, cbs_polling_required, cbs_polling_interval = hb_properties() - jsfile = misshtbtd.fetch_json_file() - hbc_pid, hbc_state, hbc_srcName, hbc_time = misshtbtd.read_hb_common(user_name,password,ip_address,port_num,db_name) - db_monitoring.db_monitoring(hbc_pid,jsfile,user_name,password,ip_address,port_num,db_name) - -def test_htbtworker(): - if os.environ['pytest'] == 'test': - print ('environ is set') - else: - print ('environ is not set') - ip_address, port_num, user_name, password, db_name, cbs_polling_required, cbs_polling_interval = hb_properties() - jsfile = "/home/ubuntu/HB_Nov5/etc/config.json" - hbc_pid, hbc_state, hbc_srcName, hbc_time = config_notif.read_hb_common(user_name,password,ip_address,port_num,db_name) - #htbtworker.process_msg(jsfile,user_name, password, ip_address, port_num, db_name) - def test_conifg_notif(): config_notif.config_notif_run() diff --git a/tests/test_trapd_vnf_table.py b/tests/test_trapd_vnf_table.py index b924cca..9e11ce9 100644 --- a/tests/test_trapd_vnf_table.py +++ b/tests/test_trapd_vnf_table.py @@ -18,7 +18,7 @@ # # ECOMP is a trademark and service mark of AT&T Intellectual Property. # -## Author Kiran Mandal (km386e) +## Author Prakask H (ph553f) """ test_trapd_vnf_table contains test cases related to DB Tables and cbs polling. """ @@ -29,8 +29,9 @@ import pytest import logging import misshtbtd as db import htbtworker as pm +import db_monitoring as dbmon import get_logger -from trapd_vnf_table import verify_DB_creation_1,verify_DB_creation_2,verify_DB_creation_hb_common,verify_cbsPolling_required,hb_properties,verify_cbspolling +from trapd_vnf_table import verify_DB_creation_1,verify_DB_creation_2,verify_DB_creation_hb_common,verify_cbsPolling_required,hb_properties,verify_cbspolling,verify_sendControlLoop_VNF_ONSET, verify_sendControlLoop_VM_ONSET, verify_sendControlLoop_VNF_ABATED, verify_sendControlLoop_VM_ABATED, verify_fetch_json_file, verify_misshtbtdmain, verify_dbmonitoring, verify_dbmon_startup _logger = get_logger.get_logger(__name__) @@ -53,66 +54,55 @@ class test_vnf_tables(unittest.TestCase): result =verify_DB_creation_hb_common(user_name,password,ip_address,port_num,db_name) self.assertEqual(result, True) - # def test_validate_hbcommon_processId(self): - # result =verify_DB_creation_hb_common(user_name,password,ip_address,port_num,db_name) - # self.assertEqual(result, True) - # connection_db = pm.postgres_db_open(user_name,password,ip_address,port_num,db_name) - # #cur = connection_db.cursor() - # query_value = "SELECT process_id,source_name,last_accessed_time,current_state FROM hb_common;" - # cur.execute(query_value) - # rows = cur.fetchall() - # msg = "Common: row ", rows - # _logger.info(msg) - # hbc_pid = rows[0][0] - # pm.commit_and_close_db(connection_db) - # cur.close() - # self.assertNotEqual(hbc_pid, None , msg="Process ID is not Present is hb_common") - - # def test_validate_hbcommon_sourceName(self): - # result =verify_DB_creation_hb_common(user_name,password,ip_address,port_num,db_name) - # self.assertEqual(result, True) - - # connection_db = pm.postgres_db_open(user_name,password,ip_address,port_num,db_name) - # cur = connection_db.cursor() - # query_value = "SELECT process_id,source_name,last_accessed_time,current_state FROM hb_common;" - # cur.execute(query_value) - # rows = cur.fetchall() - # msg = "Common: row ", rows - # _logger.info(msg) - # hbc_srcName = rows[0][1] - # pm.commit_and_close_db(connection_db) - # cur.close() - # self.assertNotEqual(hbc_srcName, None , msg="Process ID is not Present is hb_common") - - ## def test_validate_sourceidcount_table1(self): - # result_connection =verify_DB_creation_1(user_name,password,ip_address,port_num,db_name) - # self.assertEqual(result_connection, True) - # #result=verify_sourceidcount_vnftable1(user_name,password,ip_address,port_num,db_name) - # connection_db = pm.postgres_db_open(user_name,password,ip_address,port_num,db_name) - # cur = connection_db.cursor() - # try: - # query = "select source_id_count from vnf_table_1;" - # cur.execute(query) - # rows = cur.fetchall() - # q_count = "SELECT COUNT(*) FROM vnf_table_1;" - # cur.execute(q_count) - # r_count = cur.fetchall() - # r_c = r_count[0][0] - # for r in r_c: - # output = rows[r][0] - # for res in output: - # self.assertNotEqual(output, 0) - # except Exception as e: - # return None def test_validate_cbspolling_required(self): result = verify_cbsPolling_required() self.assertEqual(result, True) -# def test_cbspolling(self): -# result= verify_cbspolling() -# _logger.info(result) -# self.assertEqual(result, True) - + def test_cbspolling(self): + result= verify_cbspolling() + _logger.info(result) + self.assertEqual(result, True) + + def test_fetch_json_file(self): + result= verify_fetch_json_file() + _logger.info(result) + self.assertEqual(result, True) + + def test_misshtbtdmain(self): + result= verify_misshtbtdmain() + _logger.info(result) + self.assertEqual(result, True) + + def test_dbmon_startup(self): + result= verify_dbmon_startup() + _logger.info(result) + self.assertEqual(result, True) + + def test_dbmonitoring(self): + result= verify_dbmonitoring() + _logger.info(result) + self.assertEqual(result, True) + + def test_sendControlLoop_VNF_ONSET(self): + result= verify_sendControlLoop_VNF_ONSET() + _logger.info(result) + self.assertEqual(result, True) + + def test_sendControlLoop_VM_ONSET(self): + result= verify_sendControlLoop_VM_ONSET() + _logger.info(result) + self.assertEqual(result, True) + + def test_sendControlLoop_VNF_ABATED(self): + result= verify_sendControlLoop_VNF_ABATED() + _logger.info(result) + self.assertEqual(result, True) + + def test_sendControlLoop_VM_ABATED(self): + result= verify_sendControlLoop_VM_ABATED() + _logger.info(result) + self.assertEqual(result, True) + #if __name__ == '__main__': # unittest.main() -- cgit 1.2.3-korg