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 (
27 from unittest
import TestCase
34 class vROPS_Helper_Resource_List_Test(TestCase
):
37 self
.vrops
= vROPS_Helper()
42 def test_get_vm_resource_list_from_vrops(self
):
43 with requests_mock
.Mocker() as mock_requests
:
47 url_pattern
="/suite-api/api/auth/token/acquire",
48 response_file
="vrops_token.json",
52 url_pattern
="/suite-api/api/resources\\?resourceKind=VirtualMachine",
53 response_file
="vrops_resources.json",
55 resource_list
= self
.vrops
.get_vm_resource_list_from_vrops()
59 "List of resources from canned vrops_resources.json",
62 def test_get_vm_resource_list_from_vrops_http_404(self
):
63 with requests_mock
.Mocker() as mock_requests
:
67 url_pattern
="/suite-api/api/auth/token/acquire",
68 response_file
="vrops_token.json",
72 url_pattern
="/suite-api/api/resources\\?resourceKind=VirtualMachine",
73 response_file
="404.txt",
76 resource_list
= self
.vrops
.get_vm_resource_list_from_vrops()
77 self
.assertEqual(len(resource_list
), 0, "Should return an empty list")
79 def test_get_vm_resource_list_from_vrops_bad_json(self
):
80 with requests_mock
.Mocker() as mock_requests
:
84 url_pattern
="/suite-api/api/auth/token/acquire",
85 response_file
="vrops_token.json",
89 url_pattern
="/suite-api/api/resources\\?resourceKind=VirtualMachine",
90 response_file
="malformed.json",
92 resource_list
= self
.vrops
.get_vm_resource_list_from_vrops()
93 self
.assertEqual(len(resource_list
), 0, "Should return an empty list")
96 class vROPS_Helper_Get_Metrics_Test(TestCase
):
99 self
.vrops
= vROPS_Helper()
101 os
.path
.join(os
.path
.dirname(__file__
), "osm_mocks", "VNFR.json"), "r"
103 self
.vnfr
= json
.load(f
)
108 def test_collect_one_metric_only(self
):
111 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
112 "vrops_id": "VROPS-UUID-1",
115 monitoring_params
= [
116 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
119 with requests_mock
.Mocker() as mock_requests
:
123 url_pattern
="/suite-api/api/auth/token/acquire",
124 response_file
="vrops_token.json",
128 url_pattern
="/suite-api/api/resources/stats.*",
129 response_file
="vrops_multi.json",
132 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
133 self
.assertEqual(len(metrics
), 1, "Number of metrics returned")
134 self
.assertEqual(metrics
[0].name
, "cpu_utilization", "First metric name")
135 self
.assertEqual(metrics
[0].value
, 100.0, "CPU metric value")
137 def test_collect_cpu_and_memory(self
):
140 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
141 "vrops_id": "VROPS-UUID-1",
144 monitoring_params
= [
145 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
147 "id": "ubuntu_vnf_average_memory_utilization",
148 "performance-metric": "average_memory_utilization",
152 with requests_mock
.Mocker() as mock_requests
:
156 url_pattern
="/suite-api/api/auth/token/acquire",
157 response_file
="vrops_token.json",
161 url_pattern
="/suite-api/api/resources/stats.*",
162 response_file
="vrops_multi.json",
165 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
167 self
.assertEqual(len(metrics
), 2, "Number of metrics returned")
168 self
.assertEqual(metrics
[0].name
, "cpu_utilization", "First metric name")
169 self
.assertEqual(metrics
[0].value
, 100.0, "CPU metric value")
171 metrics
[1].name
, "average_memory_utilization", "Second metric name"
173 self
.assertEqual(metrics
[1].value
, 20.515941619873047, "Memory metric value")
175 def test_collect_adjusted_metric(self
):
178 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
179 "vrops_id": "VROPS-UUID-1",
182 monitoring_params
= [
183 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "disk_read_bytes"}
186 with requests_mock
.Mocker() as mock_requests
:
190 url_pattern
="/suite-api/api/auth/token/acquire",
191 response_file
="vrops_token.json",
195 url_pattern
="/suite-api/api/resources/stats.*",
196 response_file
="vrops_multi.json",
199 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
201 self
.assertEqual(len(metrics
), 1, "Number of metrics returned")
202 self
.assertEqual(metrics
[0].name
, "disk_read_bytes", "First metric name")
203 self
.assertEqual(metrics
[0].value
, 10240.0, "Disk read bytes (not KB/s)")
205 def test_collect_not_provided_metric(self
):
208 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
209 "vrops_id": "VROPS-UUID-1",
212 monitoring_params
= [
214 "id": "cirros_vnf_packets_sent",
215 "performance-metric": "packets_in_dropped",
219 with requests_mock
.Mocker() as mock_requests
:
223 url_pattern
="/suite-api/api/auth/token/acquire",
224 response_file
="vrops_token.json",
228 url_pattern
="/suite-api/api/resources/stats.*",
229 response_file
="vrops_multi.json",
232 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
234 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
236 def test_collect_unkown_metric(self
):
239 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
240 "vrops_id": "VROPS-UUID-1",
243 monitoring_params
= [
244 {"id": "cirros_vnf-Unknown_Metric", "performance-metric": "unknown"},
247 with requests_mock
.Mocker() as mock_requests
:
251 url_pattern
="/suite-api/api/auth/token/acquire",
252 response_file
="vrops_token.json",
256 url_pattern
="/suite-api/api/resources/stats.*",
257 response_file
="vrops_multi.json",
260 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
262 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
264 def test_collect_vrops_no_data(self
):
267 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
268 "vrops_id": "VROPS-UUID-1",
271 monitoring_params
= [
272 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
275 with requests_mock
.Mocker() as mock_requests
:
279 url_pattern
="/suite-api/api/auth/token/acquire",
280 response_file
="vrops_token.json",
284 url_pattern
="/suite-api/api/resources/stats.*",
285 response_file
="OK.json",
288 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
290 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
292 def test_collect_vrops_unknown_vim_id(self
):
294 "VMWARE-OID-VM-1": {"name": "vmware-scaling-1-ubuntu_vnfd-VM-2"}
296 monitoring_params
= [
297 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
300 with requests_mock
.Mocker() as mock_requests
:
304 url_pattern
="/suite-api/api/auth/token/acquire",
305 response_file
="vrops_token.json",
309 url_pattern
="/suite-api/api/resources/stats.*",
310 response_file
="vrops_multi.json",
313 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
315 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
317 def test_collect_vrops_http_error(self
):
320 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
321 "vrops_id": "VROPS-UUID-1",
324 monitoring_params
= [
325 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
328 with requests_mock
.Mocker() as mock_requests
:
332 url_pattern
="/suite-api/api/auth/token/acquire",
333 response_file
="vrops_token.json",
337 url_pattern
="/suite-api/api/resources/stats.*",
338 response_file
="404.txt",
342 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
344 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
346 def test_collect_vrops_json_parse_error(self
):
349 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
350 "vrops_id": "VROPS-UUID-1",
353 monitoring_params
= [
354 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
357 with requests_mock
.Mocker() as mock_requests
:
361 url_pattern
="/suite-api/api/auth/token/acquire",
362 response_file
="vrops_token.json",
366 url_pattern
="/suite-api/api/resources/stats.*",
367 response_file
="404.txt",
370 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
372 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
374 def test_collect_multi_vdu(self
):
376 "VMWARE-UUID-VM-1": {
377 "name": "vmware-scaling-1-ubuntu_vnfd-VM-1",
378 "vrops_id": "VROPS-UUID-1",
380 "VMWARE-UUID-VM-2": {
381 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
382 "vrops_id": "VROPS-UUID-2",
384 "VMWARE-UUID-VM-3": {
385 "name": "vmware-scaling-1-ubuntu_vnfd-VM-2",
386 "vrops_id": "VROPS-UUID-3",
389 monitoring_params
= [
390 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
392 "id": "ubuntu_vnf_average_memory_utilization",
393 "performance-metric": "average_memory_utilization",
395 {"id": "ubuntu_vnf_disk_read_ops", "performance-metric": "disk_read_ops"},
396 {"id": "ubuntu_vnf_disk_write_ops", "performance-metric": "disk_write_ops"},
398 "id": "ubuntu_vnf_disk_read_bytes",
399 "performance-metric": "disk_read_bytes",
402 "id": "ubuntu_vnf_disk_write_bytes",
403 "performance-metric": "disk_write_bytes",
406 "id": "ubuntu_vnf_packets_out_dropped",
407 "performance-metric": "packets_out_dropped",
410 "id": "ubuntu_vnf_packets_received",
411 "performance-metric": "packets_received",
413 {"id": "ubuntu_vnf_packets_sent", "performance-metric": "packets_sent"},
416 with requests_mock
.Mocker() as mock_requests
:
420 url_pattern
="/suite-api/api/auth/token/acquire",
421 response_file
="vrops_token.json",
425 url_pattern
="/suite-api/api/resources/stats.*",
426 response_file
="vrops_multi.json",
428 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
432 len(monitoring_params
) * len(vdu_mappings
),
433 "Number of metrics returned",