diff options
11 files changed, 360 insertions, 293 deletions
diff --git a/windriver/titanium_cloud/vesagent/__init__.py b/windriver/titanium_cloud/vesagent/__init__.py index e4fe7a00..5f8b0d18 100644 --- a/windriver/titanium_cloud/vesagent/__init__.py +++ b/windriver/titanium_cloud/vesagent/__init__.py @@ -13,4 +13,3 @@ # 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. - diff --git a/windriver/titanium_cloud/vesagent/event_domain/__init__.py b/windriver/titanium_cloud/vesagent/event_domain/__init__.py index e4fe7a00..5f8b0d18 100644 --- a/windriver/titanium_cloud/vesagent/event_domain/__init__.py +++ b/windriver/titanium_cloud/vesagent/event_domain/__init__.py @@ -13,4 +13,3 @@ # 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. - diff --git a/windriver/titanium_cloud/vesagent/event_domain/fault_vm.py b/windriver/titanium_cloud/vesagent/event_domain/fault_vm.py index c3f878e3..3c93c321 100644 --- a/windriver/titanium_cloud/vesagent/event_domain/fault_vm.py +++ b/windriver/titanium_cloud/vesagent/event_domain/fault_vm.py @@ -17,15 +17,18 @@ import logging import json import uuid -import time from django.conf import settings from titanium_cloud.vesagent.vespublish import publishAnyEventToVES from common.utils import restcall -from common.msapi.helper import Helper as helper +# from common.msapi.helper import Helper as helper import datetime import time + +logger = logging.getLogger(__name__) + + def get_epoch_now_usecond(): ''' get epoch timestamp of this moment in usecond @@ -35,18 +38,16 @@ def get_epoch_now_usecond(): epoch_time_sec = time.mktime(now_time.timetuple()) return int(epoch_time_sec * 1e6 + now_time.microsecond) -logger = logging.getLogger(__name__) - -### build backlog with domain:"fault", type:"vm" def buildBacklog_fault_vm(vimid, backlog_input): + # build backlog with domain:"fault", type:"vm" logger.info("vimid: %s" % vimid) logger.debug("with input: %s" % backlog_input) try: - #must resolve the tenant id and server id while building the backlog + # must resolve the tenant id and server id while building the backlog tenant_id = backlog_input.get("tenantid", None) server_id = backlog_input.get("sourceid", None) server_name = backlog_input.get("source", None) @@ -59,10 +60,11 @@ def buildBacklog_fault_vm(vimid, backlog_input): # resolve tenant_name to tenant_id auth_api_url_format = "/{f_vim_id}/identity/v2.0/tokens" auth_api_url = auth_api_url_format.format(f_vim_id=vimid) - auth_api_data = { "auth":{"tenantName": tenant_name} } + auth_api_data = {"auth": {"tenantName": tenant_name}} base_url = settings.MULTICLOUD_PREFIX extra_headers = '' - ret = restcall._call_req(base_url, "", "", 0, auth_api_url, "POST", extra_headers, json.dumps(auth_api_data)) + ret = restcall._call_req(base_url, "", "", 0, auth_api_url, + "POST", extra_headers, json.dumps(auth_api_data)) if ret[0] > 0 or ret[1] is None: logger.critical("call url %s failed with status %s" % (auth_api_url, ret[0])) return None @@ -96,7 +98,7 @@ def buildBacklog_fault_vm(vimid, backlog_input): % (server_name, tenant_id)) return None - #m.c. proxied OpenStack API + # m.c. proxied OpenStack API if server_id is None and server_name is None: # monitor all VMs of the specified VIMs since no server_id can be resolved api_url_fmt = "/{f_vim_id}/compute/v2.1/{f_tenant_id}/servers/detail" @@ -105,11 +107,12 @@ def buildBacklog_fault_vm(vimid, backlog_input): else: api_url_fmt = "/{f_vim_id}/compute/v2.1/{f_tenant_id}/servers/{f_server_id}" api_url = api_url_fmt.format( - f_vim_id=vimid, f_tenant_id=tenant_id, f_server_id=server_id) + f_vim_id=vimid, f_tenant_id=tenant_id, f_server_id=server_id) backlog = { - "backlog_uuid":str(uuid.uuid3(uuid.NAMESPACE_URL, - str("%s-%s-%s"%(vimid, tenant_id,server_id)))), + "backlog_uuid": + str(uuid.uuid3(uuid.NAMESPACE_URL, + str("%s-%s-%s" % (vimid, tenant_id, server_id)))), "tenant_id": tenant_id, "server_id": server_id, "api_method": "GET", @@ -125,8 +128,7 @@ def buildBacklog_fault_vm(vimid, backlog_input): return backlog -### process backlog with domain:"fault", type:"vm" - +# process backlog with domain:"fault", type:"vm" def processBacklog_fault_vm(vesAgentConfig, vesAgentState, oneBacklog): @@ -140,13 +142,15 @@ def processBacklog_fault_vm(vesAgentConfig, vesAgentState, oneBacklog): # get token auth_api_url_format = "/{f_vim_id}/identity/v2.0/tokens" auth_api_url = auth_api_url_format.format(f_vim_id=vimid) - auth_api_data = { "auth":{"tenantName": tenant_name} } + auth_api_data = {"auth": {"tenantName": tenant_name}} base_url = settings.MULTICLOUD_PREFIX extra_headers = '' logger.debug("authenticate with url:%s" % auth_api_url) - ret = restcall._call_req(base_url, "", "", 0, auth_api_url, "POST", extra_headers, json.dumps(auth_api_data)) + ret = restcall._call_req(base_url, "", "", 0, auth_api_url, + "POST", extra_headers, json.dumps(auth_api_data)) if ret[0] > 0 or ret[1] is None: - logger.critical("call url %s failed with status %s" % (auth_api_url, ret[0])) + logger.critical("call url %s failed with status %s" % + (auth_api_url, ret[0])) token_resp = json.JSONDecoder().decode(ret[1]) logger.debug("authenticate resp: %s" % token_resp) @@ -158,8 +162,9 @@ def processBacklog_fault_vm(vesAgentConfig, vesAgentState, oneBacklog): base_url = settings.MULTICLOUD_PREFIX data = '' extra_headers = {'X-Auth-Token': token} - #which one is correct? extra_headers = {'HTTP_X_AUTH_TOKEN': token} - logger.debug("authenticate with url:%s, header:%s" % (auth_api_url,extra_headers)) + # which one is correct? extra_headers = {'HTTP_X_AUTH_TOKEN': token} + logger.debug("authenticate with url:%s, header:%s" % + (auth_api_url, extra_headers)) ret = restcall._call_req(base_url, "", "", 0, api_link, method, extra_headers, data) if ret[0] > 0 or ret[1] is None: logger.critical("call url %s failed with status %s" % (api_link, ret[0])) @@ -171,10 +176,10 @@ def processBacklog_fault_vm(vesAgentConfig, vesAgentState, oneBacklog): backlog_uuid = oneBacklog.get("backlog_uuid", None) backlogState = vesAgentState.get("%s" % (backlog_uuid), None) - #iterate all VMs + # iterate all VMs all_events = [] - server_1 = server_resp.get("server",None) # in case querying single server - for s in server_resp.get("servers",[server_1] if server_1 else []): + server_1 = server_resp.get("server", None) # in case querying single server + for s in server_resp.get("servers", [server_1] if server_1 else []): server_id = s.get("id", None) server_name = s.get("name", None) if not server_id: @@ -195,7 +200,7 @@ def processBacklog_fault_vm(vesAgentConfig, vesAgentState, oneBacklog): publishAnyEventToVES(ves_subscription, all_events) # store the latest data into cache, never expire - except Exception as e: + except Exception as e: logger.error("exception:%s" % str(e)) return @@ -204,7 +209,6 @@ def processBacklog_fault_vm(vesAgentConfig, vesAgentState, oneBacklog): def data2event_fault_vm(vimid, oneBacklog, last_event, vm_data): - VES_EVENT_VERSION = 3.0 VES_EVENT_FAULT_VERSION = 2.0 VES_EVENT_FAULT_DOMAIN = "fault" @@ -221,7 +225,7 @@ def data2event_fault_vm(vimid, oneBacklog, last_event, vm_data): priority = "High" eventSeverity = "CRITICAL" alarmCondition = "Guest_Os_Failure" - vfStatus = "Active" + # vfStatus = "Active" specificProblem = "Fault_MultiCloud_VMFailure" eventType = '' reportingEntityId = vimid @@ -239,17 +243,16 @@ def data2event_fault_vm(vimid, oneBacklog, last_event, vm_data): # not assert alarm yet, so no need to clear it return None - eventName = "Fault_MultiCloud_VMFailureCleared" priority = "Normal" eventSeverity = "NORMAL" alarmCondition = "Vm_Restart" - vfStatus = "Active" + # vfStatus = "Active" specificProblem = "Fault_MultiCloud_VMFailure" eventType = '' reportingEntityId = vimid reportingEntityName = vimid - sequence = 1 #last_event['event']['commonEventHeader']['sequence'] + 1 + sequence = 1 # last_event['event']['commonEventHeader']['sequence'] + 1 startEpochMicrosec = last_event['event']['commonEventHeader']['startEpochMicrosec'] lastEpochMicrosec = get_epoch_now_usecond() diff --git a/windriver/titanium_cloud/vesagent/tasks.py b/windriver/titanium_cloud/vesagent/tasks.py index ac760ece..d4e67c95 100644 --- a/windriver/titanium_cloud/vesagent/tasks.py +++ b/windriver/titanium_cloud/vesagent/tasks.py @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -### VES agent workers +# VES agent workers from __future__ import absolute_import, unicode_literals from titanium_cloud.celery import app -import os +# import os import logging import json import time @@ -49,24 +49,24 @@ def processBacklogs(): backlog_count = 0 next_time_slot = 10 try: - #get the whole list of backlog + # get the whole list of backlog VesAgentBacklogsVimListStr = cache.get("VesAgentBacklogs.vimlist") if VesAgentBacklogsVimListStr is None: logger.warn("VesAgentBacklogs.vimlist cannot be found in cache") - return 0,next_time_slot + return 0, next_time_slot - logger.debug("VesAgentBacklogs.vimlist: %s" % (VesAgentBacklogsVimListStr)) + logger.debug("VesAgentBacklogs.vimlist: %s" % VesAgentBacklogsVimListStr) backlogsAllVims = json.loads(VesAgentBacklogsVimListStr) if backlogsAllVims is None: logger.warn("VesAgentBacklogs.vimlist is empty") - return 0,next_time_slot + return 0, next_time_slot for vimid in backlogsAllVims: - #iterate each backlogs - backlog_count_tmp,next_time_slot_tmp = processBacklogsOfOneVIM(vimid) + # iterate each backlogs + backlog_count_tmp, next_time_slot_tmp = processBacklogsOfOneVIM(vimid) logger.debug("vimid:%s, backlog_count,next_time_slot:%s,%s" - %( vimid,backlog_count_tmp,next_time_slot_tmp )) + % (vimid, backlog_count_tmp, next_time_slot_tmp)) backlog_count += backlog_count_tmp next_time_slot = next_time_slot_tmp if next_time_slot > next_time_slot_tmp else next_time_slot pass @@ -89,45 +89,45 @@ def processBacklogsOfOneVIM(vimid): next_time_slot = 10 try: - vesAgentConfigStr = cache.get("VesAgentBacklogs.config.%s" % (vimid)) + vesAgentConfigStr = cache.get("VesAgentBacklogs.config.%s" % vimid) if vesAgentConfigStr is None: - logger.warn("VesAgentBacklogs.config.%s cannot be found in cache" % (vimid)) - return 0,next_time_slot + logger.warn("VesAgentBacklogs.config.%s cannot be found in cache" % vimid) + return 0, next_time_slot logger.debug("VesAgentBacklogs.config.%s: %s" % (vimid, vesAgentConfigStr)) vesAgentConfig = json.loads(vesAgentConfigStr) if vesAgentConfig is None: - logger.warn("VesAgentBacklogs.config.%s corrupts" % (vimid)) - return 0,next_time_slot - + logger.warn("VesAgentBacklogs.config.%s corrupts" % vimid) + return 0, next_time_slot - vesAgentStateStr = cache.get("VesAgentBacklogs.state.%s" % (vimid)) + vesAgentStateStr = cache.get("VesAgentBacklogs.state.%s" % vimid) vesAgentState = json.loads(vesAgentStateStr) if vesAgentStateStr is not None else {} ves_info = vesAgentConfig.get("subscription", None) if ves_info is None: logger.warn("VesAgentBacklogs.config.%s: ves subscription corrupts:%s" % (vimid, vesAgentConfigStr)) - return 0,next_time_slot + return 0, next_time_slot poll_interval_default = vesAgentConfig.get("poll_interval_default", None) if poll_interval_default is None: logger.warn("VesAgentBacklogs.config.%s: poll_interval_default corrupts:%s" % (vimid, vesAgentConfigStr)) - return 0,next_time_slot + return 0, next_time_slot if poll_interval_default == 0: # invalid interval value logger.warn("VesAgentBacklogs.config.%s: poll_interval_default invalid:%s" % (vimid, vesAgentConfigStr)) - return 0,next_time_slot + return 0, next_time_slot backlogs_list = vesAgentConfig.get("backlogs", None) if backlogs_list is None: logger.warn("VesAgentBacklogs.config.%s: backlogs corrupts:%s" % (vimid, vesAgentConfigStr)) - return 0,next_time_slot + return 0, next_time_slot for backlog in backlogs_list: - backlog_count_tmp, next_time_slot_tmp = processOneBacklog( - vesAgentConfig, vesAgentState, poll_interval_default, backlog) + backlog_count_tmp, next_time_slot_tmp = \ + processOneBacklog( + vesAgentConfig, vesAgentState, poll_interval_default, backlog) logger.debug("processOneBacklog return with %s,%s" % (backlog_count_tmp, next_time_slot_tmp)) backlog_count += backlog_count_tmp next_time_slot = next_time_slot_tmp if next_time_slot > next_time_slot_tmp else next_time_slot @@ -146,7 +146,7 @@ def processBacklogsOfOneVIM(vimid): def processOneBacklog(vesAgentConfig, vesAgentState, poll_interval_default, oneBacklog): logger.info("Process one backlog") - #logger.debug("vesAgentConfig:%s, vesAgentState:%s, poll_interval_default:%s, oneBacklog: %s" + # logger.debug("vesAgentConfig:%s, vesAgentState:%s, poll_interval_default:%s, oneBacklog: %s" # % (vesAgentConfig, vesAgentState, poll_interval_default, oneBacklog)) backlog_count = 1 @@ -167,8 +167,10 @@ def processOneBacklog(vesAgentConfig, vesAgentState, poll_interval_default, oneB vesAgentState["%s" % (backlog_uuid)] = initialBacklogState backlogState = initialBacklogState - time_expiration = backlogState["timestamp"] \ - + oneBacklog.get("poll_interval", poll_interval_default) + time_expiration = \ + backlogState["timestamp"] + \ + oneBacklog.get("poll_interval", poll_interval_default) + # check if poll interval expires if timestamp_now < time_expiration: # not expired yet @@ -193,4 +195,3 @@ def processOneBacklog(vesAgentConfig, vesAgentState, poll_interval_default, oneB logger.info("return") return backlog_count, next_time_slot - diff --git a/windriver/titanium_cloud/vesagent/tests/__init__.py b/windriver/titanium_cloud/vesagent/tests/__init__.py index e4fe7a00..5f8b0d18 100644 --- a/windriver/titanium_cloud/vesagent/tests/__init__.py +++ b/windriver/titanium_cloud/vesagent/tests/__init__.py @@ -13,4 +13,3 @@ # 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. - diff --git a/windriver/titanium_cloud/vesagent/tests/tests_fault_vm.py b/windriver/titanium_cloud/vesagent/tests/tests_fault_vm.py index 7cbc2229..880c1d5d 100644 --- a/windriver/titanium_cloud/vesagent/tests/tests_fault_vm.py +++ b/windriver/titanium_cloud/vesagent/tests/tests_fault_vm.py @@ -21,46 +21,110 @@ from titanium_cloud.vesagent import vespublish from common.utils import restcall from titanium_cloud.vesagent.event_domain import fault_vm -MOCK_TOKEN_RESPONSE = {"access":{"token":{"issued_at":"2018-05-10T16:56:56.000000Z","expires":"2018-05-10T17:56:56.000000Z","id":"4a832860dd744306b3f66452933f939e","tenant":{"domain":{"id":"default","name":"Default"},"enabled":"true","id":"0e148b76ee8c42f78d37013bf6b7b1ae","name":"VIM"}},"serviceCatalog":[],"user":{"domain":{"id":"default","name":"Default"},"id":"ba76c94eb5e94bb7bec6980e5507aae2","name":"demo"}}} -MOCK_SERVERS_GET_RESPONSE = {"servers": [{"id": "c4b575fa-ed85-4642-ab4b-335cb5744721", "links": [{"href": "http://10.12.25.2:8774/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", "rel": "self"}, {"href": "http://10.12.25.2:8774/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", "rel": "bookmark"}], "name": "onap-aaf"}]} -MOCK_BACKLOG_INPUT = {"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", - "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", - "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", - "source": "onap-aaf", - "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", - "domain": "fault", "type": "vm", "tenant": "VIM"} - -MOCK_BACKLOG_INPUT_wo_tenant_id = {"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", - "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", - "source": "onap-aaf", - "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", - "domain": "fault", "type": "vm", "tenant": "VIM"} -MOCK_BACKLOG_INPUT_wo_tenant = {"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", - "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", - "source": "onap-aaf", - "domain": "fault", "type": "vm", } - -MOCK_BACKLOG_INPUT_wo_server_id = {"source": "onap-aaf", - "domain": "fault", "type": "vm", "tenant": "VIM"} +MOCK_TOKEN_RESPONSE = { + "access": + {"token": {"issued_at": "2018-05-10T16:56:56.000000Z", + "expires": "2018-05-10T17:56:56.000000Z", + "id": "4a832860dd744306b3f66452933f939e", + "tenant": {"domain": {"id": "default", "name": "Default"}, + "enabled": "true", "id": "0e148b76ee8c42f78d37013bf6b7b1ae", "name": "VIM"}}, + "serviceCatalog": [], "user": {"domain": {"id": "default", "name": "Default"}, + "id": "ba76c94eb5e94bb7bec6980e5507aae2", "name": "demo"}} +} + +MOCK_SERVERS_GET_RESPONSE = { + "servers": [ + {"id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "links": [{ + "href": "http://10.12.25.2:8774/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "rel": "self"}, + { + "href": "http://10.12.25.2:8774/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "rel": "bookmark"}], + "name": "onap-aaf"}] +} + +MOCK_BACKLOG_INPUT = { + "backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", + "source": "onap-aaf", + "api_link": + "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM" +} + +MOCK_BACKLOG_INPUT_wo_tenant_id = { + "backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "source": "onap-aaf", + "api_link": + "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM" +} + +MOCK_BACKLOG_INPUT_wo_tenant = { + "backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "source": "onap-aaf", + "domain": "fault", "type": "vm", } + +MOCK_BACKLOG_INPUT_wo_server_id = { + "source": "onap-aaf", + "domain": "fault", "type": "vm", "tenant": "VIM"} MOCK_BACKLOG_INPUT_wo_server = {"domain": "fault", "type": "vm", "tenant": "VIM"} -MOCK_SERVER_GET_RESPONSE = {"server": {"wrs-res:topology": "node:0, 4096MB, pgsize:2M, vcpus:0,1, pol:sha", "OS-EXT-STS:task_state": None, "addresses": {"oam_onap_BTHY": [{"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:6c:0d:6b", "version": 4, "addr": "10.0.13.1", "OS-EXT-IPS:type": "fixed"}, {"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:6c:0d:6b", "version": 4, "addr": "10.12.5.185", "OS-EXT-IPS:type": "floating"}]}, "links": [], "image": {"id": "6e219e86-cd94-4989-9119-def29aa10b12", "links": []}, "wrs-if:nics": [], "wrs-sg:server_group": "", "OS-EXT-STS:vm_state": "active", "OS-SRV-USG:launched_at": "2018-04-26T08:01:28.000000", "flavor": {}, "id": "c4b575fa-ed85-4642-ab4b-335cb5744721", "security_groups": [{"name": "onap_sg_BTHY"}], "user_id": "ba76c94eb5e94bb7bec6980e5507aae2", "OS-DCF:diskConfig": "MANUAL", "accessIPv4": "", "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, "OS-EXT-AZ:availability_zone": "nova", "metadata": {}, "status": "ACTIVE", "updated": "2018-04-26T08:01:28Z", "hostId": "17acc9f2ae4f618c314e4cdf0c206585b895bc72a9ec57e57b254133", "OS-SRV-USG:terminated_at": None, "wrs-res:pci_devices": "", "wrs-res:vcpus": [2, 2, 2], "key_name": "onap_key_BTHY", "name": "onap-aaf", "created": "2018-04-26T08:01:20Z", "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "os-extended-volumes:volumes_attached": [], "config_drive": ""}} +MOCK_SERVER_GET_RESPONSE = { + "server": {"wrs-res:topology": "node:0, 4096MB, pgsize:2M, vcpus:0,1, pol:sha", + "OS-EXT-STS:task_state": None, + "addresses": { + "oam_onap_BTHY": [{"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:6c:0d:6b", + "version": 4, "addr": "10.0.13.1", "OS-EXT-IPS:type": "fixed"}, + {"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:6c:0d:6b", "version": 4, + "addr": "10.12.5.185", "OS-EXT-IPS:type": "floating"}]}, + "links": [], "image": {"id": "6e219e86-cd94-4989-9119-def29aa10b12", "links": []}, + "wrs-if:nics": [], "wrs-sg:server_group": "", + "OS-EXT-STS:vm_state": "active", "OS-SRV-USG:launched_at": "2018-04-26T08:01:28.000000", + "flavor": {}, "id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "security_groups": [{"name": "onap_sg_BTHY"}], + "user_id": "ba76c94eb5e94bb7bec6980e5507aae2", + "OS-DCF:diskConfig": "MANUAL", "accessIPv4": "", + "accessIPv6": "", "progress": 0, "OS-EXT-STS:power_state": 1, + "OS-EXT-AZ:availability_zone": "nova", "metadata": {}, + "status": "ACTIVE", "updated": "2018-04-26T08:01:28Z", + "hostId": "17acc9f2ae4f618c314e4cdf0c206585b895bc72a9ec57e57b254133", + "OS-SRV-USG:terminated_at": None, "wrs-res:pci_devices": "", + "wrs-res:vcpus": [2, 2, 2], "key_name": "onap_key_BTHY", "name": "onap-aaf", + "created": "2018-04-26T08:01:20Z", "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", + "os-extended-volumes:volumes_attached": [], "config_drive": ""}} MOCK_SERVER_GET_RESPONSE_empty = {} -MOCK_vesAgentConfig = {"backlogs": [{"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", - "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", - "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", - "source": "onap-aaf", - "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", - "domain": "fault", "type": "vm", "tenant": "VIM"}], - "poll_interval_default": 10, "vimid": "windriver-hudson-dc_RegionOne", - "ves_subscription": {"username": "user", "password": "password", - "endpoint": "http://127.0.0.1:9005/sample"}} +MOCK_vesAgentConfig = { + "backlogs": [ + {"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", + "source": "onap-aaf", + "api_link": + "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM"} + ], + "poll_interval_default": 10, "vimid": "windriver-hudson-dc_RegionOne", + "ves_subscription": {"username": "user", "password": "password", + "endpoint": "http://127.0.0.1:9005/sample"}} MOCK_vesAgentState = {"ce2d7597-22e1-4239-890f-bc303bd67076": {"timestamp": 1525975400}} -MOCK_oneBacklog = {"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", "source": "onap-aaf", "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", "domain": "fault", "type": "vm", "tenant": "VIM"} +MOCK_oneBacklog = { + "backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", + "api_method": "GET", "source": "onap-aaf", + "api_link": + "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM"} + class FaultVMTest(unittest.TestCase): def setUp(self): @@ -72,98 +136,93 @@ class FaultVMTest(unittest.TestCase): def test_get_epoch_now_usecond(self): epoch = fault_vm.get_epoch_now_usecond() self.assertGreater(epoch, 1) - pass - @mock.patch.object(restcall, '_call_req') def test_buildBacklog_fault_vm(self, mock_call_req): - - mock_call_req.side_effect= [ + mock_call_req.side_effect = [ (0, json.dumps(MOCK_TOKEN_RESPONSE), "MOCKED response body"), (0, json.dumps(MOCK_SERVERS_GET_RESPONSE), "MOCKED response body") - ] - backlog = fault_vm.buildBacklog_fault_vm(vimid="windriver-hudson-dc_RegionOne", - backlog_input = MOCK_BACKLOG_INPUT) + ] + backlog = fault_vm.buildBacklog_fault_vm( + vimid="windriver-hudson-dc_RegionOne", + backlog_input=MOCK_BACKLOG_INPUT) + self.assertIsNotNone(backlog) - pass @mock.patch.object(restcall, '_call_req') def test_buildBacklog_fault_vm_wo_tenant_id(self, mock_call_req): - - mock_call_req.side_effect= [ + mock_call_req.side_effect = [ (0, json.dumps(MOCK_TOKEN_RESPONSE), "MOCKED response body"), (0, json.dumps(MOCK_SERVERS_GET_RESPONSE), "MOCKED response body") - ] - backlog = fault_vm.buildBacklog_fault_vm(vimid="windriver-hudson-dc_RegionOne", - backlog_input = MOCK_BACKLOG_INPUT_wo_tenant_id) + ] + backlog = fault_vm.buildBacklog_fault_vm( + vimid="windriver-hudson-dc_RegionOne", + backlog_input=MOCK_BACKLOG_INPUT_wo_tenant_id) self.assertIsNotNone(backlog) - pass - @mock.patch.object(restcall, '_call_req') def test_buildBacklog_fault_vm_wo_tenant(self, mock_call_req): - - mock_call_req.side_effect= [ + mock_call_req.side_effect = [ (1, json.dumps(MOCK_TOKEN_RESPONSE), "MOCKED response body: failed"), (0, json.dumps(MOCK_SERVERS_GET_RESPONSE), "MOCKED response body") - ] - backlog = fault_vm.buildBacklog_fault_vm(vimid="windriver-hudson-dc_RegionOne", - backlog_input = MOCK_BACKLOG_INPUT_wo_tenant) + ] + backlog = fault_vm.buildBacklog_fault_vm( + vimid="windriver-hudson-dc_RegionOne", + backlog_input=MOCK_BACKLOG_INPUT_wo_tenant) self.assertIsNone(backlog) - pass @mock.patch.object(restcall, '_call_req') def test_buildBacklog_fault_vm_wo_server_id(self, mock_call_req): - - mock_call_req.side_effect= [ + mock_call_req.side_effect = [ (0, json.dumps(MOCK_TOKEN_RESPONSE), "MOCKED response body"), (0, json.dumps(MOCK_SERVERS_GET_RESPONSE), "MOCKED response body") - ] - backlog = fault_vm.buildBacklog_fault_vm(vimid="windriver-hudson-dc_RegionOne", - backlog_input = MOCK_BACKLOG_INPUT_wo_server_id) + ] + backlog = fault_vm.buildBacklog_fault_vm( + vimid="windriver-hudson-dc_RegionOne", + backlog_input=MOCK_BACKLOG_INPUT_wo_server_id) self.assertIsNotNone(backlog) - pass @mock.patch.object(restcall, '_call_req') def test_buildBacklog_fault_vm_wo_server(self, mock_call_req): - - mock_call_req.side_effect= [ + mock_call_req.side_effect = [ (0, json.dumps(MOCK_TOKEN_RESPONSE), "MOCKED response body"), (0, json.dumps(MOCK_SERVERS_GET_RESPONSE), "MOCKED response body") - ] - backlog = fault_vm.buildBacklog_fault_vm(vimid="windriver-hudson-dc_RegionOne", - backlog_input = MOCK_BACKLOG_INPUT_wo_server) + ] + backlog = fault_vm.buildBacklog_fault_vm( + vimid="windriver-hudson-dc_RegionOne", + backlog_input=MOCK_BACKLOG_INPUT_wo_server) self.assertIsNotNone(backlog) - pass @mock.patch.object(vespublish, 'publishAnyEventToVES') @mock.patch.object(restcall, '_call_req') - def test_processBacklog_fault_vm(self, mock_call_req, mock_publishAnyEventToVES): - - mock_call_req.side_effect= [ + def test_processBacklog_fault_vm( + self, mock_call_req, mock_publishAnyEventToVES): + mock_call_req.side_effect = [ (0, json.dumps(MOCK_TOKEN_RESPONSE), "MOCKED response body"), (0, json.dumps(MOCK_SERVER_GET_RESPONSE), "MOCKED response body") - ] + ] mock_publishAnyEventToVES.return_value = "mocked return value" - result = fault_vm.processBacklog_fault_vm(vesAgentConfig=MOCK_vesAgentConfig, - vesAgentState=MOCK_vesAgentState, - oneBacklog=MOCK_oneBacklog) + result = fault_vm.processBacklog_fault_vm( + vesAgentConfig=MOCK_vesAgentConfig, + vesAgentState=MOCK_vesAgentState, + oneBacklog=MOCK_oneBacklog) self.assertIsNone(result) pass @mock.patch.object(vespublish, 'publishAnyEventToVES') @mock.patch.object(restcall, '_call_req') - def test_processBacklog_fault_vm_wo_server(self, mock_call_req, mock_publishAnyEventToVES): - - mock_call_req.side_effect= [ + def test_processBacklog_fault_vm_wo_server( + self, mock_call_req, mock_publishAnyEventToVES): + mock_call_req.side_effect = [ (0, json.dumps(MOCK_TOKEN_RESPONSE), "MOCKED response body"), (0, json.dumps(MOCK_SERVER_GET_RESPONSE_empty), "MOCKED response body") - ] + ] mock_publishAnyEventToVES.return_value = "mocked return value" - result = fault_vm.processBacklog_fault_vm(vesAgentConfig=MOCK_vesAgentConfig, - vesAgentState=MOCK_vesAgentState, - oneBacklog=MOCK_oneBacklog) + result = fault_vm.processBacklog_fault_vm( + vesAgentConfig=MOCK_vesAgentConfig, + vesAgentState=MOCK_vesAgentState, + oneBacklog=MOCK_oneBacklog) + self.assertIsNone(result) - pass diff --git a/windriver/titanium_cloud/vesagent/tests/tests_tasks.py b/windriver/titanium_cloud/vesagent/tests/tests_tasks.py index fef8e8ee..64b8d3df 100644 --- a/windriver/titanium_cloud/vesagent/tests/tests_tasks.py +++ b/windriver/titanium_cloud/vesagent/tests/tests_tasks.py @@ -17,7 +17,7 @@ import mock import unittest import json from django.test import Client -from rest_framework import status +# from rest_framework import status from django.core.cache import cache from common.msapi import extsys @@ -25,8 +25,6 @@ from common.msapi import extsys from titanium_cloud.vesagent import tasks from titanium_cloud.vesagent.event_domain import fault_vm - - MOCK_VIM_INFO = { "createTime": "2017-04-01 02:22:27", "domain": "Default", @@ -41,13 +39,15 @@ MOCK_VIM_INFO = { "vimId": "windriver-hudson-dc_RegionOne", 'cloud_owner': 'windriver-hudson-dc', 'cloud_region_id': 'RegionOne', - 'cloud_extra_info': '{"vesagent_config":{"backlogs":[{"source":"onap-aaf","domain":"fault","type":"vm","tenant":"VIM"}],"poll_interval_default":10,"ves_subscription":{"username":"user","password":"password","endpoint":"http://127.0.0.1:9005/sample"}}}', + 'cloud_extra_info': + '{"vesagent_config":{"backlogs":[{"source":"onap-aaf","domain":"fault","type":"vm","tenant":"VIM"}],"poll_interval_default":10,"ves_subscription":{"username":"user","password":"password","endpoint":"http://127.0.0.1:9005/sample"}}}', 'insecure': 'True', } COUNT_TIME_SLOT1 = (1, 1) COUNT_TIME_SLOT2 = (0, 1) + class VesTaskTest(unittest.TestCase): def setUp(self): self.client = Client() @@ -59,78 +59,85 @@ class VesTaskTest(unittest.TestCase): @mock.patch.object(extsys, 'get_vim_by_id') def test_tasks_scheduleBacklogs(self, mock_get_vim_by_id, mock_processBacklogs): mock_get_vim_by_id.return_value = MOCK_VIM_INFO - mock_processBacklogs.side_effect= [ - COUNT_TIME_SLOT1, - COUNT_TIME_SLOT2 - ] + mock_processBacklogs.side_effect = [ + COUNT_TIME_SLOT1, + COUNT_TIME_SLOT2 + ] result = tasks.scheduleBacklogs(vimid="windriver-hudson-dc_RegionOne") self.assertEquals(None, result) - pass @mock.patch.object(tasks, 'processBacklogsOfOneVIM') @mock.patch.object(cache, 'get') - def test_tasks_processBacklogs(self, mock_cache_get, mock_tasks_processBacklogsOfOneVIM): + def test_tasks_processBacklogs( + self, mock_cache_get, mock_tasks_processBacklogsOfOneVIM): mock_VesAgentBacklogs_vimlist = ["windriver-hudson-dc_RegionOne"] COUNT_TIME_SLOT_ONE_VIM = (1, 1) mock_tasks_processBacklogsOfOneVIM.return_value = COUNT_TIME_SLOT_ONE_VIM - mock_cache_get.side_effect= [ - json.dumps(mock_VesAgentBacklogs_vimlist), - ] + mock_cache_get.side_effect = [ + json.dumps(mock_VesAgentBacklogs_vimlist), + ] result = tasks.processBacklogs() self.assertEquals(COUNT_TIME_SLOT_ONE_VIM, result) - pass @mock.patch.object(tasks, 'processOneBacklog') @mock.patch.object(cache, 'set') @mock.patch.object(cache, 'get') - def test_tasks_processBacklogsOfOneVIM(self, mock_cache_get, mock_cache_set, mock_tasks_processOneBacklog): - mock_VesAgentBacklogs_vimlist = ["windriver-hudson-dc_RegionOne"] - mock_vesagent_config = {"backlogs": [{"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", - "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", - "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", - "source": "onap-aaf", - "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", - "domain": "fault", "type": "vm", "tenant": "VIM"}], - "poll_interval_default": 10, "vimid": "onaplab_RegionOne", - "subscription": {"username": "user", "password": "password", - "endpoint": "http://127.0.0.1:9005/sample"}} - mock_cache_get.side_effect= [ - json.dumps(mock_vesagent_config), - json.dumps({}) - ] + def test_tasks_processBacklogsOfOneVIM( + self, mock_cache_get, mock_cache_set, mock_tasks_processOneBacklog): + # mock_VesAgentBacklogs_vimlist = ["windriver-hudson-dc_RegionOne"] + mock_vesagent_config = { + "backlogs": + [{"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", + "source": "onap-aaf", + "api_link": + "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM"}], + "poll_interval_default": 10, "vimid": "onaplab_RegionOne", + "subscription": {"username": "user", "password": "password", + "endpoint": "http://127.0.0.1:9005/sample"}} + mock_cache_get.side_effect = [ + json.dumps(mock_vesagent_config), + json.dumps({}) + ] mock_tasks_processOneBacklog.return_value = (1, 11) mock_cache_set.return_value = "mocked cache set" result = tasks.processBacklogsOfOneVIM(vimid="windriver-hudson-dc_RegionOne") COUNT_TIME_SLOT = (1, 10) self.assertEquals(COUNT_TIME_SLOT, result) - pass @mock.patch.object(fault_vm, 'processBacklog_fault_vm') - def test_tasks_processOneBacklog(self, mock_fault_vm_processBacklog_fault_vm): + def test_tasks_processOneBacklog( + self, mock_fault_vm_processBacklog_fault_vm): mock_fault_vm_processBacklog_fault_vm.return_value = None - vesagent_config = {"backlogs": [{"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", - "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", - "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", - "source": "onap-aaf", - "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", - "domain": "fault", "type": "vm", "tenant": "VIM"}], - "poll_interval_default": 10, "vimid": "onaplab_RegionOne", - "subscription": {"username": "user", "password": "password", - "endpoint": "http://127.0.0.1:9005/sample"}} - - vesagent_onebacklog = {"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", - "poll_interval": 10, - "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", - "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", - "source": "onap-aaf", - "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", - "domain": "fault", "type": "vm", "tenant": "VIM"} - - result = tasks.processOneBacklog(vesAgentConfig = vesagent_config, - vesAgentState = {}, - poll_interval_default = 10, - oneBacklog = vesagent_onebacklog) + vesagent_config = { + "backlogs": + [{"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", + "source": "onap-aaf", + "api_link": + "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM"}], + "poll_interval_default": 10, "vimid": "onaplab_RegionOne", + "subscription": {"username": "user", "password": "password", + "endpoint": "http://127.0.0.1:9005/sample"}} + + vesagent_onebacklog = { + "backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "poll_interval": 10, + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", + "source": "onap-aaf", + "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM" + } + + result = tasks.processOneBacklog( + vesAgentConfig=vesagent_config, + vesAgentState={}, + poll_interval_default=10, + oneBacklog=vesagent_onebacklog) COUNT_TIME_SLOT = (1, 10) self.assertEquals(COUNT_TIME_SLOT, result) - pass - diff --git a/windriver/titanium_cloud/vesagent/tests/tests_vesagent_ctrl.py b/windriver/titanium_cloud/vesagent/tests/tests_vesagent_ctrl.py index 1fb8d51b..289e43d8 100644 --- a/windriver/titanium_cloud/vesagent/tests/tests_vesagent_ctrl.py +++ b/windriver/titanium_cloud/vesagent/tests/tests_vesagent_ctrl.py @@ -23,8 +23,7 @@ from django.core.cache import cache from common.msapi import extsys from titanium_cloud.vesagent import vesagent_ctrl from titanium_cloud.vesagent.event_domain import fault_vm - - +from titanium_cloud.vesagent.tasks import scheduleBacklogs MOCK_VIM_INFO = { "createTime": "2017-04-01 02:22:27", @@ -40,7 +39,8 @@ MOCK_VIM_INFO = { "vimId": "windriver-hudson-dc_RegionOne", 'cloud_owner': 'windriver-hudson-dc', 'cloud_region_id': 'RegionOne', - 'cloud_extra_info': '{"vesagent_config":{"backlogs":[{"source":"onap-aaf","domain":"fault","type":"vm","tenant":"VIM"}],"poll_interval_default":10,"ves_subscription":{"username":"user","password":"password","endpoint":"http://127.0.0.1:9005/sample"}}}', + 'cloud_extra_info': + '{"vesagent_config":{"backlogs":[{"source": "onap-aaf","domain": "fault","type": "vm","tenant": "VIM"}],"poll_interval_default":10,"ves_subscription":{"username": "user","password": "password","endpoint": "http://127.0.0.1:9005/sample"}}}', 'insecure': 'True', } @@ -57,7 +57,8 @@ class VesAgentCtrlTest(unittest.TestCase): @mock.patch.object(extsys, 'get_vim_by_id') def test_get(self, mock_get_vim_by_id, mock_get): mock_get_vim_by_id.return_value = MOCK_VIM_INFO - mock_get.return_value = '{"backlogs": [{"backlog_uuid": "2b8f6ff8-bc64-339b-a714-155909db937f", "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", "source": "onap-aaf", "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", "domain": "fault", "type": "vm", "tenant": "VIM"}], "poll_interval_default": 10, "vimid": "onaplab_RegionOne", "subscription": {"username": "user", "password": "password", "endpoint": "http://127.0.0.1:9005/sample"}}' + mock_get.return_value = \ + '{"backlogs": [{"backlog_uuid": "2b8f6ff8-bc64-339b-a714-155909db937f", "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", "source": "onap-aaf", "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", "domain": "fault", "type": "vm", "tenant": "VIM"}], "poll_interval_default": 10, "vimid": "onaplab_RegionOne", "subscription": {"username": "user", "password": "password", "endpoint": "http://127.0.0.1:9005/sample"}}' response = self.client.get("/api/multicloud-titaniumcloud/v0/windriver-hudson-dc_RegionOne/vesagent") self.assertEqual(status.HTTP_200_OK, response.status_code, response.content) @@ -68,14 +69,12 @@ class VesAgentCtrlTest(unittest.TestCase): mock_get_vim_by_id.return_value = MOCK_VIM_INFO mock_buildBacklogsOneVIM.return_value = "mocked vesagent_backlogs" mock_request = mock.Mock() - mock_request.META = {"testkey":"testvalue"} - mock_request.data = {"testdatakey":"testdatavalue"} + mock_request.META = {"testkey": "testvalue"} + mock_request.data = {"testdatakey": "testdatavalue"} response = self.view.post(request=mock_request, vimid="windriver-hudson-dc_RegionOne") self.assertEquals(status.HTTP_201_CREATED, response.status_code) - pass - @mock.patch.object(vesagent_ctrl.VesAgentCtrl, 'clearBacklogsOneVIM') @mock.patch.object(extsys, 'get_vim_by_id') def test_delete(self, mock_get_vim_by_id, mock_clearBacklogsOneVIM): @@ -87,22 +86,8 @@ class VesAgentCtrlTest(unittest.TestCase): response = self.view.delete(request=mock_request, vimid="windriver-hudson-dc_RegionOne") self.assertEquals(status.HTTP_200_OK, response.status_code) - pass - @mock.patch.object(cache, 'get') def test_getBacklogsOneVIM(self, mock_get): - mock_vesagent_config = {"backlogs": [{"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", "source": "onap-aaf", "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", "domain": "fault", "type": "vm", "tenant": "VIM"}], "poll_interval_default": 10, "vimid": "onaplab_RegionOne", "subscription": {"username": "user", "password": "password", "endpoint": "http://127.0.0.1:9005/sample"}} - mock_get.return_value = json.dumps(mock_vesagent_config) - - vesAgentConfig = self.view.getBacklogsOneVIM(vimid="windriver-hudson-dc_RegionOne") - self.assertEquals(vesAgentConfig, mock_vesagent_config) - - pass - - @mock.patch.object(cache, 'set') - @mock.patch.object(cache, 'get') - def test_clearBacklogsOneVIM(self, mock_get, mock_set): - mock_VesAgentBacklogs_vimlist = ["windriver-hudson-dc_RegionOne"] mock_vesagent_config = {"backlogs": [{"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", @@ -112,65 +97,83 @@ class VesAgentCtrlTest(unittest.TestCase): "poll_interval_default": 10, "vimid": "onaplab_RegionOne", "subscription": {"username": "user", "password": "password", "endpoint": "http://127.0.0.1:9005/sample"}} + mock_get.return_value = json.dumps(mock_vesagent_config) - mock_get.side_effect= [ - json.dumps(mock_VesAgentBacklogs_vimlist), - json.dumps(mock_vesagent_config) - ] + vesAgentConfig = self.view.getBacklogsOneVIM(vimid="windriver-hudson-dc_RegionOne") + self.assertEquals(vesAgentConfig, mock_vesagent_config) + @mock.patch.object(cache, 'set') + @mock.patch.object(cache, 'get') + def test_clearBacklogsOneVIM(self, mock_get, mock_set): + mock_VesAgentBacklogs_vimlist = ["windriver-hudson-dc_RegionOne"] + mock_vesagent_config = { + "backlogs": [ + {"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", + "source": "onap-aaf", + "api_link": + "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM"} + ], + "poll_interval_default": 10, "vimid": "onaplab_RegionOne", + "subscription": {"username": "user", "password": "password", + "endpoint": "http://127.0.0.1:9005/sample"}} + + mock_get.side_effect = [ + json.dumps(mock_VesAgentBacklogs_vimlist), + json.dumps(mock_vesagent_config) + ] mock_set.return_value = "mocked cache set" - result = self.view.clearBacklogsOneVIM(vimid="windriver-hudson-dc_RegionOne") + result = self.view.clearBacklogsOneVIM( + vimid="windriver-hudson-dc_RegionOne") self.assertEquals(0, result) - pass - - from titanium_cloud.vesagent.tasks import scheduleBacklogs - @mock.patch.object(scheduleBacklogs, 'delay') @mock.patch.object(cache, 'set') @mock.patch.object(cache, 'get') - def test_buildBacklogsOneVIM(self, mock_get, mock_set, mock_scheduleBacklogs_delay): + def test_buildBacklogsOneVIM( + self, mock_get, mock_set, mock_scheduleBacklogs_delay): mock_VesAgentBacklogs_vimlist = ["windriver-hudson-dc_RegionOne"] - mock_vesagent_config = {"backlogs": [{"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", - "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", - "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", - "source": "onap-aaf", - "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", - "domain": "fault", "type": "vm", "tenant": "VIM"}], - "poll_interval_default": 10, "vimid": "windriver-hudson-dc_RegionOne", - "ves_subscription": {"username": "user", "password": "password", - "endpoint": "http://127.0.0.1:9005/sample"}} - - mock_get.side_effect= [ - json.dumps(mock_VesAgentBacklogs_vimlist), - ] + mock_vesagent_config = { + "backlogs": [{"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", + "source": "onap-aaf", + "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM"}], + "poll_interval_default": 10, "vimid": "windriver-hudson-dc_RegionOne", + "ves_subscription": {"username": "user", "password": "password", + "endpoint": "http://127.0.0.1:9005/sample"}} + + mock_get.side_effect = [ + json.dumps(mock_VesAgentBacklogs_vimlist), + ] mock_set.return_value = "mocked cache set" mock_scheduleBacklogs_delay.return_value = "mocked delay" - VesAgentBacklogsConfig = self.view.buildBacklogsOneVIM(vimid="windriver-hudson-dc_RegionOne", - vesagent_config = mock_vesagent_config) + VesAgentBacklogsConfig = self.view.buildBacklogsOneVIM( + vimid="windriver-hudson-dc_RegionOne", + vesagent_config=mock_vesagent_config) self.assertIsNotNone(VesAgentBacklogsConfig) - pass - - @mock.patch.object(fault_vm, 'buildBacklog_fault_vm') def test_buildBacklog(self, mock_buildBacklog_fault_vm): - mock_backlog_input = {"backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", - "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", - "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", - "source": "onap-aaf", - "api_link": "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", - "domain": "fault", "type": "vm", "tenant": "VIM"} - + mock_backlog_input = { + "backlog_uuid": "ce2d7597-22e1-4239-890f-bc303bd67076", + "server_id": "c4b575fa-ed85-4642-ab4b-335cb5744721", + "tenant_id": "0e148b76ee8c42f78d37013bf6b7b1ae", "api_method": "GET", + "source": "onap-aaf", + "api_link": + "/onaplab_RegionOne/compute/v2.1/0e148b76ee8c42f78d37013bf6b7b1ae/servers/c4b575fa-ed85-4642-ab4b-335cb5744721", + "domain": "fault", "type": "vm", "tenant": "VIM"} mock_buildBacklog_fault_vm.return_value = "mocked buildBacklog_fault_vm" - VesAgentBacklogsConfig = self.view.buildBacklog(vimid="windriver-hudson-dc_RegionOne", - backlog_input = mock_backlog_input) + VesAgentBacklogsConfig = self.view.buildBacklog( + vimid="windriver-hudson-dc_RegionOne", + backlog_input=mock_backlog_input) self.assertIsNotNone(VesAgentBacklogsConfig) - - pass diff --git a/windriver/titanium_cloud/vesagent/tests/tests_vespublish.py b/windriver/titanium_cloud/vesagent/tests/tests_vespublish.py index 0178aaed..64ea7d00 100644 --- a/windriver/titanium_cloud/vesagent/tests/tests_vespublish.py +++ b/windriver/titanium_cloud/vesagent/tests/tests_vespublish.py @@ -15,17 +15,19 @@ import mock import unittest -import json +# import json import urllib2 from titanium_cloud.vesagent import vespublish MOCK_VESENDPOINT = { - "endpoint" : "MOCKED_VES_COLLECTOR_EP1", - "username" : "MOCKED_VES_COLLECTOR_USER1", - "password" : "MOCKED_VES_COLLECTOR_PASSWD1", + "endpoint": "MOCKED_VES_COLLECTOR_EP1", + "username": "MOCKED_VES_COLLECTOR_USER1", + "password": "MOCKED_VES_COLLECTOR_PASSWD1", } -MOCK_VESPUBLISH_EVENT1 = [{"name":"event1"}] + +MOCK_VESPUBLISH_EVENT1 = [{"name": "event1"}] + class VespublishTest(unittest.TestCase): def setUp(self): @@ -39,16 +41,14 @@ class VespublishTest(unittest.TestCase): def test_publishAnyEventToVES(self, mock_Request, mock_urlopen): mock_request = mock.Mock() - mock_Request.side_effect= [ + mock_Request.side_effect = [ mock_request - ] + ] mock_response = mock.Mock(["read"]) mock_response.read.return_value = "MOCKED_VESPUBLISH_RESPONSE_MESSAGE" - mock_urlopen.side_effect= [ + mock_urlopen.side_effect = [ mock_response - ] + ] vespublish.publishAnyEventToVES(MOCK_VESENDPOINT, MOCK_VESPUBLISH_EVENT1) - - pass diff --git a/windriver/titanium_cloud/vesagent/vesagent_ctrl.py b/windriver/titanium_cloud/vesagent/vesagent_ctrl.py index 8bfa3c38..86b4ef51 100644 --- a/windriver/titanium_cloud/vesagent/vesagent_ctrl.py +++ b/windriver/titanium_cloud/vesagent/vesagent_ctrl.py @@ -13,7 +13,7 @@ # limitations under the License. import logging -import traceback +# import traceback import json from rest_framework import status @@ -29,6 +29,7 @@ from django.core.cache import cache logger = logging.getLogger(__name__) + class VesAgentCtrl(APIView): ''' control plane of VesAgent @@ -152,7 +153,6 @@ class VesAgentCtrl(APIView): self._logger = logger self.proxy_prefix = settings.MULTICLOUD_PREFIX - def get(self, request, vimid=""): ''' get blob of vesagent-config @@ -169,8 +169,8 @@ class VesAgentCtrl(APIView): cloud_extra_info_str = viminfo.get('cloud_extra_info', '') cloud_extra_info = json.loads(cloud_extra_info_str) if cloud_extra_info_str != '' else None vesagent_config = cloud_extra_info.get("vesagent_config", None) if cloud_extra_info is not None else None - except Exception as e: - #ignore this error + except Exception: + # ignore this error self._logger.warn("cloud extra info is provided with data in bad format: %s" % cloud_extra_info_str) pass @@ -182,11 +182,10 @@ class VesAgentCtrl(APIView): status=status.HTTP_500_INTERNAL_SERVER_ERROR) self._logger.info("return with %s" % status.HTTP_200_OK) - return Response(data={"vesagent_config":vesagent_config, + return Response(data={"vesagent_config": vesagent_config, "vesagent_backlogs": vesagent_backlogs}, status=status.HTTP_200_OK) - def post(self, request, vimid=""): ''' update the blob of vesagent-config, rebuild the backlog for the vesagent workers, @@ -207,12 +206,13 @@ class VesAgentCtrl(APIView): :param vimid: :return: ''' + self._logger.info("vimid: %s" % vimid) self._logger.debug("with META: %s, with data: %s" % (request.META, request.data)) try: vesagent_config = None if request.data is None or request.data.get("vesagent_config", None) is None: - #Try to load the vesagent_config out of cloud_region["cloud_extra_info"] + # Try to load the vesagent_config out of cloud_region["cloud_extra_info"] viminfo = extsys.get_vim_by_id(vimid) cloud_extra_info_str = viminfo.get('cloud_extra_info', None) cloud_extra_info = json.loads(cloud_extra_info_str) if cloud_extra_info_str is not None else None @@ -222,7 +222,7 @@ class VesAgentCtrl(APIView): if vesagent_config is None: return Response(data={'vesagent_config is not provided'}, - status=status.HTTP_400_BAD_REQUEST) + status=status.HTTP_400_BAD_REQUEST) vesagent_backlogs = self.buildBacklogsOneVIM(vimid, vesagent_config) @@ -235,7 +235,7 @@ class VesAgentCtrl(APIView): status=status.HTTP_500_INTERNAL_SERVER_ERROR) self._logger.info("return with %s" % status.HTTP_201_CREATED) - return Response(data={"vesagent_config":vesagent_config, + return Response(data={"vesagent_config": vesagent_config, "vesagent_backlogs": vesagent_backlogs}, status=status.HTTP_201_CREATED) @@ -259,7 +259,6 @@ class VesAgentCtrl(APIView): self._logger.info("return with %s" % status.HTTP_200_OK) return Response(status=status.HTTP_200_OK) - def getBacklogsOneVIM(self, vimid): ''' remove the specified backlogs for a VIM @@ -337,7 +336,7 @@ class VesAgentCtrl(APIView): self._logger.debug("return") return 0 - def buildBacklogsOneVIM(self, vimid, vesagent_config = None): + def buildBacklogsOneVIM(self, vimid, vesagent_config=None): ''' build and cache backlog for specific cloud region,spawn vesagent workers if needed :param vimid: @@ -349,7 +348,7 @@ class VesAgentCtrl(APIView): VesAgentBacklogsConfig = None try: - if vesagent_config : + if vesagent_config: # now rebuild the backlog VesAgentBacklogsConfig = { "vimid": vimid, @@ -358,7 +357,6 @@ class VesAgentCtrl(APIView): "backlogs": [self.buildBacklog(vimid, b) for b in vesagent_config.get("backlogs", [])] } - # add/update the backlog into cache VesAgentBacklogsConfigStr = json.dumps(VesAgentBacklogsConfig) # cache forever @@ -375,14 +373,14 @@ class VesAgentCtrl(APIView): logger.debug("VesAgentBacklogs.vimlist is %s" % VesAgentBacklogsVimList) - #cache forever + # cache forever cache.set("VesAgentBacklogs.vimlist", json.dumps(VesAgentBacklogsVimList), None) # notify schduler scheduleBacklogs.delay(vimid) except Exception as e: self._logger.error("exception:%s" % str(e)) - VesAgentBacklogsConfig = {"error":"exception occurs during build backlogs"} + VesAgentBacklogsConfig = {"error": "exception occurs during build backlogs"} self._logger.debug("return") return VesAgentBacklogsConfig @@ -413,7 +411,6 @@ class APIv1VesAgentCtrl(VesAgentCtrl): # self._logger = logger self.proxy_prefix = settings.MULTICLOUD_API_V1_PREFIX - def get(self, request, cloud_owner="", cloud_region_id=""): ''' :param request: @@ -421,11 +418,10 @@ class APIv1VesAgentCtrl(VesAgentCtrl): :param cloud_region_id: :return: ''' - self._logger.info("cloud_owner,cloud_region_id: %s,%s" % (cloud_owner,cloud_region_id)) + self._logger.info("cloud_owner, cloud_region_id: %s,%s" % (cloud_owner, cloud_region_id)) vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id) - return super(APIv1VesAgentCtrl,self).get(request, vimid) - + return super(APIv1VesAgentCtrl, self).get(request, vimid) def post(self, request, cloud_owner="", cloud_region_id=""): ''' @@ -435,11 +431,10 @@ class APIv1VesAgentCtrl(VesAgentCtrl): :param cloud_region_id: :return: ''' - self._logger.info("cloud_owner,cloud_region_id: %s,%s" % (cloud_owner,cloud_region_id)) + self._logger.info("cloud_owner, cloud_region_id: %s,%s" % (cloud_owner, cloud_region_id)) vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id) - return super(APIv1VesAgentCtrl,self).post(request, vimid) - + return super(APIv1VesAgentCtrl, self).post(request, vimid) def delete(self, request, cloud_owner="", cloud_region_id=""): ''' @@ -449,8 +444,9 @@ class APIv1VesAgentCtrl(VesAgentCtrl): :param cloud_region_id: :return: ''' - self._logger.info("cloud_owner,cloud_region_id: %s,%s" % (cloud_owner,cloud_region_id)) + self._logger.info( + "cloud_owner, cloud_region_id: %s,%s" % + (cloud_owner, cloud_region_id)) vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id) - return super(APIv1VesAgentCtrl,self).delete(request, vimid) - + return super(APIv1VesAgentCtrl, self).delete(request, vimid) diff --git a/windriver/titanium_cloud/vesagent/vespublish.py b/windriver/titanium_cloud/vesagent/vespublish.py index b67a64ee..33b971b0 100644 --- a/windriver/titanium_cloud/vesagent/vespublish.py +++ b/windriver/titanium_cloud/vesagent/vespublish.py @@ -21,14 +21,15 @@ import urllib2 logger = logging.getLogger(__name__) + def publishAnyEventToVES(ves_subscription, events): if not events or len(events) == 0: return logger.info("Start to send single event to VES collector.") endpoint = ves_subscription.get("endpoint", None) - username = ves_subscription.get("username", None) - password = ves_subscription.get("password", None) + # username = ves_subscription.get("username", None) + # password = ves_subscription.get("password", None) if endpoint: try: @@ -44,9 +45,9 @@ def publishAnyEventToVES(ves_subscription, events): time.sleep(1) response = urllib2.urlopen(request) logger.info("VES response is: %s" % response.read()) - except urllib2.URLError, e: + except urllib2.URLError as e: logger.critical("Failed to publish to %s: %s" % (endpoint, e.reason)) except Exception as e: logger.error("exception:%s" % str(e)) else: - logger.info("Missing VES info.")
\ No newline at end of file + logger.info("Missing VES info.") |