3589d7dc81ada576e1f57af24dfaf338dfefbaf0
1 # -*- coding: utf-8 -*-
3 # Copyright 2016-2019 VMware Inc.
4 # This file is part of ETSI OSM
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
11 # http://www.apache.org/licenses/LICENSE-2.0
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
19 # For those usages not covered by the Apache License, Version 2.0 please
20 # contact: osslegalrouting@vmware.com
23 from osm_mon
.collector
.vnf_collectors
.vrops
.vrops_helper
import vROPS_Helper
24 from osm_mon
.tests
.unit
.collector
.vnf_collectors
.vmware
.mock_http
import mock_http_response
25 from unittest
import TestCase
32 class vROPS_Helper_Resource_List_Test(TestCase
):
36 self
.vrops
= vROPS_Helper()
41 def test_get_vm_resource_list_from_vrops(self
):
42 with requests_mock
.Mocker() as mock_requests
:
43 mock_http_response(mock_requests
, method
='POST',
44 url_pattern
='/suite-api/api/auth/token/acquire',
45 response_file
='vrops_token.json')
46 mock_http_response(mock_requests
,
47 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
48 response_file
='vrops_resources.json')
49 resource_list
= self
.vrops
.get_vm_resource_list_from_vrops()
50 self
.assertEqual(len(resource_list
), 3, "List of resources from canned vrops_resources.json")
52 def test_get_vm_resource_list_from_vrops_http_404(self
):
53 with requests_mock
.Mocker() as mock_requests
:
54 mock_http_response(mock_requests
, method
='POST',
55 url_pattern
='/suite-api/api/auth/token/acquire',
56 response_file
='vrops_token.json')
57 mock_http_response(mock_requests
,
58 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
59 response_file
='404.txt', status_code
=404)
60 resource_list
= self
.vrops
.get_vm_resource_list_from_vrops()
61 self
.assertEqual(len(resource_list
), 0, "Should return an empty list")
63 def test_get_vm_resource_list_from_vrops_bad_json(self
):
64 with requests_mock
.Mocker() as mock_requests
:
65 mock_http_response(mock_requests
, method
='POST',
66 url_pattern
='/suite-api/api/auth/token/acquire',
67 response_file
='vrops_token.json')
68 mock_http_response(mock_requests
,
69 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
70 response_file
='malformed.json')
71 resource_list
= self
.vrops
.get_vm_resource_list_from_vrops()
72 self
.assertEqual(len(resource_list
), 0, "Should return an empty list")
75 class vROPS_Helper_Get_Metrics_Test(TestCase
):
79 self
.vrops
= vROPS_Helper()
80 with
open(os
.path
.join(os
.path
.dirname(__file__
), 'osm_mocks', 'VNFR.json'), 'r') as f
:
81 self
.vnfr
= json
.load(f
)
86 def test_collect_one_metric_only(self
):
87 vdu_mappings
= {'VMWARE-OID-VM-1':
88 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
89 'vrops_id': 'VROPS-UUID-1'}}
91 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
94 with requests_mock
.Mocker() as mock_requests
:
95 mock_http_response(mock_requests
, method
='POST',
96 url_pattern
='/suite-api/api/auth/token/acquire',
97 response_file
='vrops_token.json')
98 mock_http_response(mock_requests
,
99 url_pattern
='/suite-api/api/resources/stats.*',
100 response_file
='vrops_multi.json')
102 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
103 self
.assertEqual(len(metrics
), 1, "Number of metrics returned")
104 self
.assertEqual(metrics
[0].name
, "cpu_utilization", "First metric name")
105 self
.assertEqual(metrics
[0].value
, 100.0, "CPU metric value")
107 def test_collect_cpu_and_memory(self
):
108 vdu_mappings
= {'VMWARE-OID-VM-1':
109 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
110 'vrops_id': 'VROPS-UUID-1'}}
111 monitoring_params
= [
112 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
113 {"id": "ubuntu_vnf_average_memory_utilization", "performance-metric": "average_memory_utilization"}
116 with requests_mock
.Mocker() as mock_requests
:
117 mock_http_response(mock_requests
, method
='POST',
118 url_pattern
='/suite-api/api/auth/token/acquire',
119 response_file
='vrops_token.json')
120 mock_http_response(mock_requests
,
121 url_pattern
='/suite-api/api/resources/stats.*',
122 response_file
='vrops_multi.json')
124 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
126 self
.assertEqual(len(metrics
), 2, "Number of metrics returned")
127 self
.assertEqual(metrics
[0].name
, "cpu_utilization", "First metric name")
128 self
.assertEqual(metrics
[0].value
, 100.0, "CPU metric value")
129 self
.assertEqual(metrics
[1].name
, "average_memory_utilization", "Second metric name")
130 self
.assertEqual(metrics
[1].value
, 20.515941619873047, "Memory metric value")
132 def test_collect_adjusted_metric(self
):
133 vdu_mappings
= {'VMWARE-OID-VM-1':
134 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
135 'vrops_id': 'VROPS-UUID-1'}}
136 monitoring_params
= [
137 {'id': 'ubuntu_vnf_cpu_util', 'performance-metric': 'disk_read_bytes'}
140 with requests_mock
.Mocker() as mock_requests
:
141 mock_http_response(mock_requests
, method
='POST',
142 url_pattern
='/suite-api/api/auth/token/acquire',
143 response_file
='vrops_token.json')
144 mock_http_response(mock_requests
,
145 url_pattern
='/suite-api/api/resources/stats.*',
146 response_file
='vrops_multi.json')
148 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
150 self
.assertEqual(len(metrics
), 1, "Number of metrics returned")
151 self
.assertEqual(metrics
[0].name
, "disk_read_bytes", "First metric name")
152 self
.assertEqual(metrics
[0].value
, 10240.0, "Disk read bytes (not KB/s)")
154 def test_collect_not_provided_metric(self
):
155 vdu_mappings
= {'VMWARE-OID-VM-1':
156 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
157 'vrops_id': 'VROPS-UUID-1'}}
158 monitoring_params
= [
159 {'id': 'cirros_vnf_packets_sent', 'performance-metric': 'packets_in_dropped'},
162 with requests_mock
.Mocker() as mock_requests
:
163 mock_http_response(mock_requests
, method
='POST',
164 url_pattern
='/suite-api/api/auth/token/acquire',
165 response_file
='vrops_token.json')
166 mock_http_response(mock_requests
,
167 url_pattern
='/suite-api/api/resources/stats.*',
168 response_file
='vrops_multi.json')
170 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
172 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
174 def test_collect_unkown_metric(self
):
175 vdu_mappings
= {'VMWARE-OID-VM-1':
176 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
177 'vrops_id': 'VROPS-UUID-1'}}
178 monitoring_params
= [
179 {'id': 'cirros_vnf-Unknown_Metric', 'performance-metric': 'unknown'},
182 with requests_mock
.Mocker() as mock_requests
:
183 mock_http_response(mock_requests
, method
='POST',
184 url_pattern
='/suite-api/api/auth/token/acquire',
185 response_file
='vrops_token.json')
186 mock_http_response(mock_requests
,
187 url_pattern
='/suite-api/api/resources/stats.*',
188 response_file
='vrops_multi.json')
190 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
192 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
194 def test_collect_vrops_no_data(self
):
195 vdu_mappings
= {'VMWARE-OID-VM-1':
196 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
197 'vrops_id': 'VROPS-UUID-1'}}
198 monitoring_params
= [
199 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
202 with requests_mock
.Mocker() as mock_requests
:
203 mock_http_response(mock_requests
, method
='POST',
204 url_pattern
='/suite-api/api/auth/token/acquire',
205 response_file
='vrops_token.json')
206 mock_http_response(mock_requests
,
207 url_pattern
='/suite-api/api/resources/stats.*',
208 response_file
='OK.json')
210 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
212 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
214 def test_collect_vrops_unknown_vim_id(self
):
215 vdu_mappings
= {'VMWARE-OID-VM-1':
216 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2'}}
217 monitoring_params
= [
218 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
221 with requests_mock
.Mocker() as mock_requests
:
222 mock_http_response(mock_requests
, method
='POST',
223 url_pattern
='/suite-api/api/auth/token/acquire',
224 response_file
='vrops_token.json')
225 mock_http_response(mock_requests
,
226 url_pattern
='/suite-api/api/resources/stats.*',
227 response_file
='vrops_multi.json')
229 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
231 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
233 def test_collect_vrops_http_error(self
):
234 vdu_mappings
= {'VMWARE-OID-VM-1':
235 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
236 'vrops_id': 'VROPS-UUID-1'}}
237 monitoring_params
= [
238 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
241 with requests_mock
.Mocker() as mock_requests
:
242 mock_http_response(mock_requests
, method
='POST',
243 url_pattern
='/suite-api/api/auth/token/acquire',
244 response_file
='vrops_token.json')
245 mock_http_response(mock_requests
,
246 url_pattern
='/suite-api/api/resources/stats.*',
247 response_file
='404.txt', status_code
=404)
249 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
251 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
253 def test_collect_vrops_json_parse_error(self
):
254 vdu_mappings
= {'VMWARE-OID-VM-1':
255 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
256 'vrops_id': 'VROPS-UUID-1'}}
257 monitoring_params
= [
258 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
261 with requests_mock
.Mocker() as mock_requests
:
262 mock_http_response(mock_requests
, method
='POST',
263 url_pattern
='/suite-api/api/auth/token/acquire',
264 response_file
='vrops_token.json')
265 mock_http_response(mock_requests
,
266 url_pattern
='/suite-api/api/resources/stats.*',
267 response_file
='404.txt')
269 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
271 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
273 def test_collect_multi_vdu(self
):
274 vdu_mappings
= {'VMWARE-UUID-VM-1':
275 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-1', 'vrops_id': 'VROPS-UUID-1'},
277 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2', 'vrops_id': 'VROPS-UUID-2'},
279 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2', 'vrops_id': 'VROPS-UUID-3'}
281 monitoring_params
= [
282 {'id': 'ubuntu_vnf_cpu_util', 'performance-metric': 'cpu_utilization'},
283 {'id': 'ubuntu_vnf_average_memory_utilization', 'performance-metric': 'average_memory_utilization'},
284 {'id': 'ubuntu_vnf_disk_read_ops', 'performance-metric': 'disk_read_ops'},
285 {'id': 'ubuntu_vnf_disk_write_ops', 'performance-metric': 'disk_write_ops'},
286 {'id': 'ubuntu_vnf_disk_read_bytes', 'performance-metric': 'disk_read_bytes'},
287 {'id': 'ubuntu_vnf_disk_write_bytes', 'performance-metric': 'disk_write_bytes'},
288 {'id': 'ubuntu_vnf_packets_out_dropped', 'performance-metric': 'packets_out_dropped'},
289 {'id': 'ubuntu_vnf_packets_received', 'performance-metric': 'packets_received'},
290 {'id': 'ubuntu_vnf_packets_sent', 'performance-metric': 'packets_sent'}
293 with requests_mock
.Mocker() as mock_requests
:
294 mock_http_response(mock_requests
, method
='POST',
295 url_pattern
='/suite-api/api/auth/token/acquire',
296 response_file
='vrops_token.json')
297 mock_http_response(mock_requests
,
298 url_pattern
='/suite-api/api/resources/stats.*',
299 response_file
='vrops_multi.json')
300 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
302 self
.assertEqual(len(metrics
), len(monitoring_params
) * len(vdu_mappings
), "Number of metrics returned")