19d1496d8e4cea829d0464310eafb381f3b5e9d0
[osm/MON.git] / osm_mon / tests / unit / collector / vnf_collectors / vmware / test_vcd_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.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
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 @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):
46
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):
51 super().setUp()
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)
59
60 def tearDown(self):
61 super().tearDown()
62
63 def test_collect_cpu_and_memory(self, mock_vm_moref_id, mock_vm_resource_id):
64
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
68
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")
79
80 def test_collect_one_metric_only(self, mock_vm_moref_id, mock_vm_resource_id):
81
82 mock_vm_moref_id.return_value = "moref"
83 mock_vm_resource_id.return_value = "resource"
84
85 self.vnfd['vdu'][0]['monitoring-param'] = [
86 {'id': 'cirros_vnfd-VM_cpu_util', 'nfvi-metric': 'cpu_utilization'},
87 ]
88 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
89
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")
98
99 def test_collect_adjusted_metric(self, mock_vm_moref_id, mock_vm_resource_id):
100
101 mock_vm_moref_id.return_value = "moref"
102 mock_vm_resource_id.return_value = "resource"
103
104 self.vnfd['vdu'][0]['monitoring-param'] = [
105 {'id': 'cirros_vnfd-VM_cpu_util', 'nfvi-metric': 'disk_read_bytes'},
106 ]
107 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
108
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)")
117
118 def test_collect_not_provided_metric(self, mock_vm_moref_id, mock_vm_resource_id):
119
120 mock_vm_moref_id.return_value = "moref"
121 mock_vm_resource_id.return_value = "resource"
122
123 self.vnfd['vdu'][0]['monitoring-param'] = [
124 {'id': 'cirros_vnfd-VM_packets_sent', 'nfvi-metric': 'packets_sent'},
125 ]
126 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
127
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")
134
135 def test_collect_unkown_metric(self, mock_vm_moref_id, mock_vm_resource_id):
136
137 mock_vm_moref_id.return_value = "moref"
138 mock_vm_resource_id.return_value = "resource"
139
140 self.vnfd['vdu'][0]['monitoring-param'] = [
141 {'id': 'cirros_vnfd-Unknown_Metric', 'nfvi-metric': 'unknown'},
142 ]
143 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
144
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")
151
152 def test_collect_vrops_error(self, mock_vm_moref_id, mock_vm_resource_id):
153
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
157
158 with requests_mock.Mocker():
159 metrics = self.collector.collect(self.vnfr)
160 self.assertEqual(len(metrics), 0, "Number of metrics returned")