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
.vio
import VIOCollector
24 from osm_mon
.core
.config
import Config
25 from osm_mon
.tests
.unit
.collector
.vnf_collectors
.vmware
.mock_http
import mock_http_response
26 from unittest
import TestCase
, mock
32 VIM_ACCOUNT
= {"vrops_site": "https://vrops",
41 class CollectorTest(TestCase
):
43 @mock.patch
.object(VIOCollector
, 'get_vim_account',
44 spec_set
=True, autospec
=True)
45 @mock.patch('osm_mon.collector.vnf_collectors.vio.CommonDbClient')
46 def setUp(self
, mock_db
, mock_get_vim_account
):
48 self
.mock_db
= mock_db
49 mock_get_vim_account
.return_value
= VIM_ACCOUNT
50 self
.collector
= VIOCollector(Config(), "9de6df67-b820-48c3-bcae-ee4838c5c5f4")
51 with
open(os
.path
.join(os
.path
.dirname(__file__
), 'osm_mocks', 'VNFR.json'), 'r') as f
:
52 self
.vnfr
= json
.load(f
)
53 with
open(os
.path
.join(os
.path
.dirname(__file__
), 'osm_mocks', 'VNFD.json'), 'r') as f
:
54 self
.vnfd
= json
.load(f
)
59 def test_collect_cpu_and_memory(self
):
60 self
.vnfd
['vdu'][0]['monitoring-param'] = [
61 {"id": "ubuntu_vnfd-VM_cpu_util", "nfvi-metric": "cpu_utilization"},
62 {"id": "ubuntu_vnfd-VM_average_memory_utilization", "nfvi-metric": "average_memory_utilization"}
64 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
65 with requests_mock
.Mocker() as mock_requests
:
66 mock_http_response(mock_requests
,
67 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
68 response_file
='vrops_resources.json')
69 mock_http_response(mock_requests
,
70 url_pattern
='/suite-api/api/resources/stats.*',
71 response_file
='vrops_multi.json')
72 metrics
= self
.collector
.collect(self
.vnfr
)
73 self
.assertEqual(len(metrics
), 4, "Number of metrics returned")
74 self
.assertEqual(metrics
[0].name
, "cpu_utilization", "First metric name")
75 self
.assertEqual(metrics
[0].value
, 100.0, "CPU metric value")
76 self
.assertEqual(metrics
[1].name
, "average_memory_utilization", "Second metric name")
77 self
.assertEqual(metrics
[1].value
, 20.515941619873047, "Memory metric value")
78 self
.assertEqual(metrics
[2].name
, "cpu_utilization", "First metric name")
79 self
.assertEqual(metrics
[2].value
, 0.05400000140070915, "CPU metric value")
80 self
.assertEqual(metrics
[3].name
, "average_memory_utilization", "Second metric name")
81 self
.assertEqual(metrics
[3].value
, 15.23439884185791, "Memory metric value")
83 def test_collect_no_monitoring_param(self
):
84 self
.vnfd
['vdu'][0]['monitoring-param'] = []
85 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
86 with requests_mock
.Mocker() as mock_requests
:
87 mock_http_response(mock_requests
,
88 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
89 response_file
='vrops_resources.json')
90 mock_http_response(mock_requests
,
91 url_pattern
='/suite-api/api/resources/stats.*',
92 response_file
='vrops_multi.json')
93 metrics
= self
.collector
.collect(self
.vnfr
)
94 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
96 def test_collect_empty_monitoring_param(self
):
97 del self
.vnfd
['vdu'][0]['monitoring-param']
98 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
99 with requests_mock
.Mocker() as mock_requests
:
100 mock_http_response(mock_requests
,
101 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
102 response_file
='vrops_resources.json')
103 mock_http_response(mock_requests
,
104 url_pattern
='/suite-api/api/resources/stats.*',
105 response_file
='vrops_multi.json')
106 metrics
= self
.collector
.collect(self
.vnfr
)
107 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")
109 def test_collect_no_name(self
):
110 del self
.vnfr
['vdur'][0]['name']
111 del self
.vnfr
['vdur'][1]['name']
112 self
.mock_db
.return_value
.get_vnfd
.return_value
= self
.vnfd
113 with requests_mock
.Mocker() as mock_requests
:
114 mock_http_response(mock_requests
,
115 url_pattern
='/suite-api/api/resources\\?resourceKind=VirtualMachine',
116 response_file
='vrops_resources.json')
117 mock_http_response(mock_requests
,
118 url_pattern
='/suite-api/api/resources/stats.*',
119 response_file
='vrops_multi.json')
120 metrics
= self
.collector
.collect(self
.vnfr
)
121 self
.assertEqual(len(metrics
), 0, "Number of metrics returned")