956a19fb347137c78ce47f77a4c507d8d7ade86b
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
,
44 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
45 response_file
='vrops_resources.json')
46 resource_list
= self
.vrops
.get_vm_resource_list_from_vrops()
47 self
.assertEqual(len(resource_list
), 3, "List of resources from canned vrops_resources.json")
49 def test_get_vm_resource_list_from_vrops_http_404(self
):
50 with requests_mock
.Mocker() as mock_requests
:
51 mock_http_response(mock_requests
,
52 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
53 response_file
='404.txt', status_code
=404)
54 resource_list
= self
.vrops
.get_vm_resource_list_from_vrops()
55 self
.assertEqual(len(resource_list
), 0, "Should return an empty list")
57 def test_get_vm_resource_list_from_vrops_bad_json(self
):
58 with requests_mock
.Mocker() as mock_requests
:
59 mock_http_response(mock_requests
,
60 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
61 response_file
='malformed.json')
62 resource_list
= self
.vrops
.get_vm_resource_list_from_vrops()
63 self
.assertEqual(len(resource_list
), 0, "Should return an empty list")
66 class vROPS_Helper_Get_Metrics_Test(TestCase
):
70 self
.vrops
= vROPS_Helper()
71 with
open(os
.path
.join(os
.path
.dirname(__file__
), 'osm_mocks', 'VNFR.json'), 'r') as f
:
72 self
.vnfr
= json
.load(f
)
77 def test_collect_one_metric_only(self
):
78 vdu_mappings
= {'VMWARE-OID-VM-1':
79 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
80 'vrops_id': 'VROPS-UUID-1'}}
82 {"id": "ubuntu_vnfd-VM_cpu_util", "nfvi-metric": "cpu_utilization"},
85 with requests_mock
.Mocker() as mock_requests
:
86 mock_http_response(mock_requests
,
87 url_pattern
='/suite-api/api/resources/stats.*',
88 response_file
='vrops_multi.json')
90 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
91 self
.assertEqual(len(metrics
), 1, "Number of metrics returned")
92 self
.assertEqual(metrics
[0].name
, "cpu_utilization", "First metric name")
93 self
.assertEqual(metrics
[0].value
, 100.0, "CPU metric value")
95 def test_collect_cpu_and_memory(self
):
96 vdu_mappings
= {'VMWARE-OID-VM-1':
97 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
98 'vrops_id': 'VROPS-UUID-1'}}
100 {"id": "ubuntu_vnfd-VM_cpu_util", "nfvi-metric": "cpu_utilization"},
101 {"id": "ubuntu_vnfd-VM_average_memory_utilization", "nfvi-metric": "average_memory_utilization"}
104 with requests_mock
.Mocker() as mock_requests
:
105 mock_http_response(mock_requests
,
106 url_pattern
='/suite-api/api/resources/stats.*',
107 response_file
='vrops_multi.json')
109 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
111 self
.assertEqual(len(metrics
), 2, "Number of metrics returned")
112 self
.assertEqual(metrics
[0].name
, "cpu_utilization", "First metric name")
113 self
.assertEqual(metrics
[0].value
, 100.0, "CPU metric value")
114 self
.assertEqual(metrics
[1].name
, "average_memory_utilization", "Second metric name")
115 self
.assertEqual(metrics
[1].value
, 20.515941619873047, "Memory metric value")
117 def test_collect_adjusted_metric(self
):
118 vdu_mappings
= {'VMWARE-OID-VM-1':
119 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
120 'vrops_id': 'VROPS-UUID-1'}}
121 monitoring_params
= [
122 {'id': 'ubuntu_vnfd-VM_cpu_util', 'nfvi-metric': 'disk_read_bytes'}
125 with requests_mock
.Mocker() as mock_requests
:
126 mock_http_response(mock_requests
,
127 url_pattern
='/suite-api/api/resources/stats.*',
128 response_file
='vrops_multi.json')
130 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
132 self
.assertEqual(len(metrics
), 1, "Number of metrics returned")
133 self
.assertEqual(metrics
[0].name
, "disk_read_bytes", "First metric name")
134 self
.assertEqual(metrics
[0].value
, 10240.0, "Disk read bytes (not KB/s)")
136 def test_collect_not_provided_metric(self
):
137 vdu_mappings
= {'VMWARE-OID-VM-1':
138 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
139 'vrops_id': 'VROPS-UUID-1'}}
140 monitoring_params
= [
141 {'id': 'cirros_vnfd-VM_packets_sent', 'nfvi-metric': 'packets_in_dropped'},
144 with requests_mock
.Mocker() as mock_requests
:
145 mock_http_response(mock_requests
,
146 url_pattern
='/suite-api/api/resources/stats.*',
147 response_file
='vrops_multi.json')
149 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
151 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
153 def test_collect_unkown_metric(self
):
154 vdu_mappings
= {'VMWARE-OID-VM-1':
155 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
156 'vrops_id': 'VROPS-UUID-1'}}
157 monitoring_params
= [
158 {'id': 'cirros_vnfd-Unknown_Metric', 'nfvi-metric': 'unknown'},
161 with requests_mock
.Mocker() as mock_requests
:
162 mock_http_response(mock_requests
,
163 url_pattern
='/suite-api/api/resources/stats.*',
164 response_file
='vrops_multi.json')
166 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
168 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
170 def test_collect_vrops_no_data(self
):
171 vdu_mappings
= {'VMWARE-OID-VM-1':
172 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
173 'vrops_id': 'VROPS-UUID-1'}}
174 monitoring_params
= [
175 {"id": "ubuntu_vnfd-VM_cpu_util", "nfvi-metric": "cpu_utilization"},
178 with requests_mock
.Mocker() as mock_requests
:
179 mock_http_response(mock_requests
,
180 url_pattern
='/suite-api/api/resources/stats.*',
181 response_file
='OK.json')
183 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
185 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
187 def test_collect_vrops_unknown_vim_id(self
):
188 vdu_mappings
= {'VMWARE-OID-VM-1':
189 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2'}}
190 monitoring_params
= [
191 {"id": "ubuntu_vnfd-VM_cpu_util", "nfvi-metric": "cpu_utilization"},
194 with requests_mock
.Mocker() as mock_requests
:
195 mock_http_response(mock_requests
,
196 url_pattern
='/suite-api/api/resources/stats.*',
197 response_file
='vrops_multi.json')
199 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
201 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
203 def test_collect_vrops_http_error(self
):
204 vdu_mappings
= {'VMWARE-OID-VM-1':
205 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
206 'vrops_id': 'VROPS-UUID-1'}}
207 monitoring_params
= [
208 {"id": "ubuntu_vnfd-VM_cpu_util", "nfvi-metric": "cpu_utilization"},
211 with requests_mock
.Mocker() as mock_requests
:
212 mock_http_response(mock_requests
,
213 url_pattern
='/suite-api/api/resources/stats.*',
214 response_file
='404.txt', status_code
=404)
216 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
218 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
220 def test_collect_vrops_json_parse_error(self
):
221 vdu_mappings
= {'VMWARE-OID-VM-1':
222 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2',
223 'vrops_id': 'VROPS-UUID-1'}}
224 monitoring_params
= [
225 {"id": "ubuntu_vnfd-VM_cpu_util", "nfvi-metric": "cpu_utilization"},
228 with requests_mock
.Mocker() as mock_requests
:
229 mock_http_response(mock_requests
,
230 url_pattern
='/suite-api/api/resources/stats.*',
231 response_file
='404.txt')
233 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
235 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
237 def test_collect_multi_vdu(self
):
238 vdu_mappings
= {'VMWARE-UUID-VM-1':
239 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-1', 'vrops_id': 'VROPS-UUID-1'},
241 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2', 'vrops_id': 'VROPS-UUID-2'},
243 {'name': 'vmware-scaling-1-ubuntu_vnfd-VM-2', 'vrops_id': 'VROPS-UUID-3'}
245 monitoring_params
= [
246 {'id': 'ubuntu_vnfd-VM_cpu_util', 'nfvi-metric': 'cpu_utilization'},
247 {'id': 'ubuntu_vnfd-VM_average_memory_utilization', 'nfvi-metric': 'average_memory_utilization'},
248 {'id': 'ubuntu_vnfd-VM_disk_read_ops', 'nfvi-metric': 'disk_read_ops'},
249 {'id': 'ubuntu_vnfd-VM_disk_write_ops', 'nfvi-metric': 'disk_write_ops'},
250 {'id': 'ubuntu_vnfd-VM_disk_read_bytes', 'nfvi-metric': 'disk_read_bytes'},
251 {'id': 'ubuntu_vnfd-VM_disk_write_bytes', 'nfvi-metric': 'disk_write_bytes'},
252 {'id': 'ubuntu_vnfd-VM_packets_out_dropped', 'nfvi-metric': 'packets_out_dropped'},
253 {'id': 'ubuntu_vnfd-VM_packets_received', 'nfvi-metric': 'packets_received'},
254 {'id': 'ubuntu_vnfd-VM_packets_sent', 'nfvi-metric': 'packets_sent'}
257 with requests_mock
.Mocker() as mock_requests
:
258 mock_http_response(mock_requests
,
259 url_pattern
='/suite-api/api/resources/stats.*',
260 response_file
='vrops_multi.json')
261 metrics
= self
.vrops
.get_metrics(vdu_mappings
, monitoring_params
, self
.vnfr
)
263 self
.assertEqual(len(metrics
), len(monitoring_params
) * len(vdu_mappings
), "Number of metrics returned")