81e6024097c4bad8535be4862993a3bcf786442b
[osm/MON.git] / osm_mon / tests / unit / collector / vnf_collectors / vmware / test_vio_collector.py
1 # -*- coding: utf-8 -*-
2 # #
3 # Copyright 2016-2019 VMware Inc.
4 # This file is part of ETSI OSM
5 # All Rights Reserved.
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License"); you may
8 # not use this file except in compliance with the License. You may obtain
9 # a copy of the License at
10 #
11 # http://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16 # License for the specific language governing permissions and limitations
17 # under the License.
18 #
19 # For those usages not covered by the Apache License, Version 2.0 please
20 # contact: osslegalrouting@vmware.com
21 # #
22
23 from osm_mon.collector.vnf_collectors.vio import VIOCollector
24 from osm_mon.core.config import Config
25 from osm_mon.tests.unit.collector.vnf_collectors.vmware.mock_http import mock_http_response
26 from unittest import TestCase, mock
27
28 import json
29 import os
30 import requests_mock
31
32 VIM_ACCOUNT = {"vrops_site": "https://vrops",
33 "vrops_user": "",
34 "vrops_password": "",
35 "vim_url": "",
36 "admin_username": "",
37 "admin_password": "",
38 "vim_uuid": ""}
39
40
41 class CollectorTest(TestCase):
42
43 @mock.patch.object(VIOCollector, 'get_vim_account',
44 spec_set=True, autospec=True)
45 @mock.patch('osm_mon.collector.vnf_collectors.vio.CommonDbClient')
46 def setUp(self, mock_db, mock_get_vim_account):
47 super().setUp()
48 self.mock_db = mock_db
49 mock_get_vim_account.return_value = VIM_ACCOUNT
50 self.collector = VIOCollector(Config(), "9de6df67-b820-48c3-bcae-ee4838c5c5f4")
51 with open(os.path.join(os.path.dirname(__file__), 'osm_mocks', 'VNFR.json'), 'r') as f:
52 self.vnfr = json.load(f)
53 with open(os.path.join(os.path.dirname(__file__), 'osm_mocks', 'VNFD.json'), 'r') as f:
54 self.vnfd = json.load(f)
55
56 def tearDown(self):
57 super().tearDown()
58
59 def test_collect_cpu_and_memory(self):
60 self.vnfd['vdu'][0]['monitoring-param'] = [
61 {"id": "ubuntu_vnfd-VM_cpu_util", "nfvi-metric": "cpu_utilization"},
62 {"id": "ubuntu_vnfd-VM_average_memory_utilization", "nfvi-metric": "average_memory_utilization"}
63 ]
64 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
65 with requests_mock.Mocker() as mock_requests:
66 mock_http_response(mock_requests, method='POST',
67 url_pattern='/suite-api/api/auth/token/acquire',
68 response_file='vrops_token.json')
69 mock_http_response(mock_requests,
70 url_pattern='/suite-api/api/resources\\?resourceKind=VirtualMachine',
71 response_file='vrops_resources.json')
72 mock_http_response(mock_requests,
73 url_pattern='/suite-api/api/resources/stats.*',
74 response_file='vrops_multi.json')
75 metrics = self.collector.collect(self.vnfr)
76 self.assertEqual(len(metrics), 4, "Number of metrics returned")
77 self.assertEqual(metrics[0].name, "cpu_utilization", "First metric name")
78 self.assertEqual(metrics[0].value, 100.0, "CPU metric value")
79 self.assertEqual(metrics[1].name, "average_memory_utilization", "Second metric name")
80 self.assertEqual(metrics[1].value, 20.515941619873047, "Memory metric value")
81 self.assertEqual(metrics[2].name, "cpu_utilization", "First metric name")
82 self.assertEqual(metrics[2].value, 0.05400000140070915, "CPU metric value")
83 self.assertEqual(metrics[3].name, "average_memory_utilization", "Second metric name")
84 self.assertEqual(metrics[3].value, 15.23439884185791, "Memory metric value")
85
86 def test_collect_no_monitoring_param(self):
87 self.vnfd['vdu'][0]['monitoring-param'] = []
88 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
89 with requests_mock.Mocker() as mock_requests:
90 mock_http_response(mock_requests, method='POST',
91 url_pattern='/suite-api/api/auth/token/acquire',
92 response_file='vrops_token.json')
93 mock_http_response(mock_requests,
94 url_pattern='/suite-api/api/resources\\?resourceKind=VirtualMachine',
95 response_file='vrops_resources.json')
96 mock_http_response(mock_requests,
97 url_pattern='/suite-api/api/resources/stats.*',
98 response_file='vrops_multi.json')
99 metrics = self.collector.collect(self.vnfr)
100 self.assertEqual(len(metrics), 0, "Number of metrics returned")
101
102 def test_collect_empty_monitoring_param(self):
103 del self.vnfd['vdu'][0]['monitoring-param']
104 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
105 with requests_mock.Mocker() as mock_requests:
106 mock_http_response(mock_requests, method='POST',
107 url_pattern='/suite-api/api/auth/token/acquire',
108 response_file='vrops_token.json')
109 mock_http_response(mock_requests,
110 url_pattern='/suite-api/api/resources\\?resourceKind=VirtualMachine',
111 response_file='vrops_resources.json')
112 mock_http_response(mock_requests,
113 url_pattern='/suite-api/api/resources/stats.*',
114 response_file='vrops_multi.json')
115 metrics = self.collector.collect(self.vnfr)
116 self.assertEqual(len(metrics), 0, "Number of metrics returned")
117
118 def test_collect_no_name(self):
119 del self.vnfr['vdur'][0]['name']
120 del self.vnfr['vdur'][1]['name']
121 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
122 with requests_mock.Mocker() as mock_requests:
123 mock_http_response(mock_requests, method='POST',
124 url_pattern='/suite-api/api/auth/token/acquire',
125 response_file='vrops_token.json')
126 mock_http_response(mock_requests,
127 url_pattern='/suite-api/api/resources\\?resourceKind=VirtualMachine',
128 response_file='vrops_resources.json')
129 mock_http_response(mock_requests,
130 url_pattern='/suite-api/api/resources/stats.*',
131 response_file='vrops_multi.json')
132 metrics = self.collector.collect(self.vnfr)
133 self.assertEqual(len(metrics), 0, "Number of metrics returned")