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
.vmware
import VMwareCollector
24 from osm_mon
.core
.config
import Config
25 from osm_mon
.tests
.unit
.collector
.vnf_collectors
.vmware
.mock_vcd
import mock_vdc_response
26 from unittest
import TestCase
, mock
32 VIM_ACCOUNT
= {"vrops_site": "https://vrops",
41 @mock.patch
.object(VMwareCollector
, 'get_vm_resource_id',
42 spec_set
=True, autospec
=True)
43 @mock.patch
.object(VMwareCollector
, 'get_vm_moref_id',
44 spec_set
=True, autospec
=True)
45 class CollectorTest(TestCase
):
47 @mock.patch
.object(VMwareCollector
, 'get_vim_account',
48 spec_set
=True, autospec
=True)
49 @mock.patch('osm_mon.collector.vnf_collectors.vmware.CommonDbClient')
50 def setUp(self
, mock_db
, mock_get_vim_account
):
52 mock_get_vim_account
.return_value
= VIM_ACCOUNT
53 self
.collector
= VMwareCollector(Config(), "9de6df67-b820-48c3-bcae-ee4838c5c5f4")
54 self
.mock_db
= mock_db
55 with
open(os
.path
.join(os
.path
.dirname(__file__
), 'osm_mocks', 'VNFR.json'), 'r') as f
:
56 self
.vnfr
= json
.load(f
)
57 with
open(os
.path
.join(os
.path
.dirname(__file__
), 'osm_mocks', 'VNFD.json'), 'r') as f
:
58 self
.vnfd
= json
.load(f
)
63 def test_collect_cpu_and_memory(self
, mock_vm_moref_id
, mock_vm_resource_id
):
65 mock_vm_moref_id
.return_value
= "moref"
66 mock_vm_resource_id
.return_value
= "resource"
67 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
69 with requests_mock
.Mocker() as mock_requests
:
70 mock_vdc_response(mock_requests
,
71 url_pattern
='/suite-api/api/resources/stats.*',
72 response_file
='vrops_multi.json')
73 metrics
= self
.collector
.collect(self
.vnfr
)
74 self
.assertEqual(len(metrics
), 2, "Number of metrics returned")
75 self
.assertEqual(metrics
[0].name
, "cpu_utilization", "First metric name")
76 self
.assertEqual(metrics
[1].name
, "average_memory_utilization", "Second metric name")
77 self
.assertEqual(metrics
[0].value
, 100.0, "CPU metric value")
78 self
.assertEqual(metrics
[1].value
, 20.515941619873047, "Memory metric value")
80 def test_collect_one_metric_only(self
, mock_vm_moref_id
, mock_vm_resource_id
):
82 mock_vm_moref_id
.return_value
= "moref"
83 mock_vm_resource_id
.return_value
= "resource"
85 self
.vnfd
['vdu'][0]['monitoring-param'] = [
86 {'id': 'cirros_vnfd-VM_cpu_util', 'nfvi-metric': 'cpu_utilization'},
88 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
90 with requests_mock
.Mocker() as mock_requests
:
91 mock_vdc_response(mock_requests
,
92 url_pattern
='/suite-api/api/resources/stats.*',
93 response_file
='vrops_multi.json')
94 metrics
= self
.collector
.collect(self
.vnfr
)
95 self
.assertEqual(len(metrics
), 1, "Number of metrics returned")
96 self
.assertEqual(metrics
[0].name
, "cpu_utilization", "First metric name")
97 self
.assertEqual(metrics
[0].value
, 100.0, "CPU metric value")
99 def test_collect_adjusted_metric(self
, mock_vm_moref_id
, mock_vm_resource_id
):
101 mock_vm_moref_id
.return_value
= "moref"
102 mock_vm_resource_id
.return_value
= "resource"
104 self
.vnfd
['vdu'][0]['monitoring-param'] = [
105 {'id': 'cirros_vnfd-VM_cpu_util', 'nfvi-metric': 'disk_read_bytes'},
107 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
109 with requests_mock
.Mocker() as mock_requests
:
110 mock_vdc_response(mock_requests
,
111 url_pattern
='/suite-api/api/resources/stats.*',
112 response_file
='vrops_multi.json')
113 metrics
= self
.collector
.collect(self
.vnfr
)
114 self
.assertEqual(len(metrics
), 1, "Number of metrics returned")
115 self
.assertEqual(metrics
[0].name
, "disk_read_bytes", "First metric name")
116 self
.assertEqual(metrics
[0].value
, 10240.0, "Disk read bytes (not KB/s)")
118 def test_collect_not_provided_metric(self
, mock_vm_moref_id
, mock_vm_resource_id
):
120 mock_vm_moref_id
.return_value
= "moref"
121 mock_vm_resource_id
.return_value
= "resource"
123 self
.vnfd
['vdu'][0]['monitoring-param'] = [
124 {'id': 'cirros_vnfd-VM_packets_sent', 'nfvi-metric': 'packets_sent'},
126 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
128 with requests_mock
.Mocker() as mock_requests
:
129 mock_vdc_response(mock_requests
,
130 url_pattern
='/suite-api/api/resources/stats.*',
131 response_file
='OK.json')
132 metrics
= self
.collector
.collect(self
.vnfr
)
133 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
135 def test_collect_unkown_metric(self
, mock_vm_moref_id
, mock_vm_resource_id
):
137 mock_vm_moref_id
.return_value
= "moref"
138 mock_vm_resource_id
.return_value
= "resource"
140 self
.vnfd
['vdu'][0]['monitoring-param'] = [
141 {'id': 'cirros_vnfd-Unknown_Metric', 'nfvi-metric': 'unknown'},
143 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
145 with requests_mock
.Mocker() as mock_requests
:
146 mock_vdc_response(mock_requests
,
147 url_pattern
='/suite-api/api/resources/stats.*',
148 response_file
='vrops_multi.json')
149 metrics
= self
.collector
.collect(self
.vnfr
)
150 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
152 def test_collect_vrops_error(self
, mock_vm_moref_id
, mock_vm_resource_id
):
154 mock_vm_moref_id
.return_value
= "moref"
155 mock_vm_resource_id
.return_value
= "resource"
156 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
158 with requests_mock
.Mocker():
159 metrics
= self
.collector
.collect(self
.vnfr
)
160 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")