Coverage for osm_mon/tests/unit/collector/vnf_collectors/vmware/test_vio_collector.py: 100%
68 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-06 19:04 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-05-06 19:04 +0000
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# #
23from osm_mon.collector.vnf_collectors.vio import VIOCollector
24from osm_mon.core.config import Config
25from osm_mon.tests.unit.collector.vnf_collectors.vmware.mock_http import (
26 mock_http_response,
27)
28from unittest import TestCase, mock
30import json
31import os
32import requests_mock
34VIM_ACCOUNT = {
35 "vrops_site": "https://vrops",
36 "vrops_user": "",
37 "vrops_password": "",
38 "vim_url": "",
39 "admin_username": "",
40 "admin_password": "",
41 "vim_uuid": "",
42}
45class CollectorTest(TestCase):
46 @mock.patch.object(VIOCollector, "get_vim_account", spec_set=True, autospec=True)
47 @mock.patch("osm_mon.collector.vnf_collectors.vio.CommonDbClient")
48 def setUp(self, mock_db, mock_get_vim_account):
49 super().setUp()
50 self.mock_db = mock_db
51 mock_vim_session = mock.Mock()
52 mock_get_vim_account.return_value = VIM_ACCOUNT
53 self.collector = VIOCollector(
54 Config(), "9de6df67-b820-48c3-bcae-ee4838c5c5f4", mock_vim_session
55 )
56 with open(
57 os.path.join(os.path.dirname(__file__), "osm_mocks", "VNFR.json"), "r"
58 ) as f:
59 self.vnfr = json.load(f)
60 with open(
61 os.path.join(os.path.dirname(__file__), "osm_mocks", "VNFD.json"), "r"
62 ) as f:
63 self.vnfd = json.load(f)
65 def tearDown(self):
66 super().tearDown()
68 def test_collect_cpu_and_memory(self):
69 self.vnfd["vdu"][0]["monitoring-parameter"] = [
70 {"id": "ubuntu_vnf_cpu_util", "performance-metric": "cpu_utilization"},
71 {
72 "id": "ubuntu_vnf_average_memory_utilization",
73 "performance-metric": "average_memory_utilization",
74 },
75 ]
76 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
77 with requests_mock.Mocker() as mock_requests:
78 mock_http_response(
79 mock_requests,
80 method="POST",
81 url_pattern="/suite-api/api/auth/token/acquire",
82 response_file="vrops_token.json",
83 )
84 mock_http_response(
85 mock_requests,
86 url_pattern="/suite-api/api/resources\\?resourceKind=VirtualMachine",
87 response_file="vrops_resources.json",
88 )
89 mock_http_response(
90 mock_requests,
91 url_pattern="/suite-api/api/resources/stats.*",
92 response_file="vrops_multi.json",
93 )
94 metrics = self.collector.collect(self.vnfr)
95 self.assertEqual(len(metrics), 4, "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 self.assertEqual(
99 metrics[1].name, "average_memory_utilization", "Second metric name"
100 )
101 self.assertEqual(
102 metrics[1].value, 20.515941619873047, "Memory metric value"
103 )
104 self.assertEqual(metrics[2].name, "cpu_utilization", "First metric name")
105 self.assertEqual(metrics[2].value, 0.05400000140070915, "CPU metric value")
106 self.assertEqual(
107 metrics[3].name, "average_memory_utilization", "Second metric name"
108 )
109 self.assertEqual(metrics[3].value, 15.23439884185791, "Memory metric value")
111 def test_collect_no_monitoring_param(self):
112 self.vnfd["vdu"][0]["monitoring-parameter"] = []
113 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
114 with requests_mock.Mocker() as mock_requests:
115 mock_http_response(
116 mock_requests,
117 method="POST",
118 url_pattern="/suite-api/api/auth/token/acquire",
119 response_file="vrops_token.json",
120 )
121 mock_http_response(
122 mock_requests,
123 url_pattern="/suite-api/api/resources\\?resourceKind=VirtualMachine",
124 response_file="vrops_resources.json",
125 )
126 mock_http_response(
127 mock_requests,
128 url_pattern="/suite-api/api/resources/stats.*",
129 response_file="vrops_multi.json",
130 )
131 metrics = self.collector.collect(self.vnfr)
132 self.assertEqual(len(metrics), 0, "Number of metrics returned")
134 def test_collect_empty_monitoring_param(self):
135 del self.vnfd["vdu"][0]["monitoring-parameter"]
136 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
137 with requests_mock.Mocker() as mock_requests:
138 mock_http_response(
139 mock_requests,
140 method="POST",
141 url_pattern="/suite-api/api/auth/token/acquire",
142 response_file="vrops_token.json",
143 )
144 mock_http_response(
145 mock_requests,
146 url_pattern="/suite-api/api/resources\\?resourceKind=VirtualMachine",
147 response_file="vrops_resources.json",
148 )
149 mock_http_response(
150 mock_requests,
151 url_pattern="/suite-api/api/resources/stats.*",
152 response_file="vrops_multi.json",
153 )
154 metrics = self.collector.collect(self.vnfr)
155 self.assertEqual(len(metrics), 0, "Number of metrics returned")
157 def test_collect_no_name(self):
158 del self.vnfr["vdur"][0]["name"]
159 del self.vnfr["vdur"][1]["name"]
160 self.mock_db.return_value.get_vnfd.return_value = self.vnfd
161 with requests_mock.Mocker() as mock_requests:
162 mock_http_response(
163 mock_requests,
164 method="POST",
165 url_pattern="/suite-api/api/auth/token/acquire",
166 response_file="vrops_token.json",
167 )
168 mock_http_response(
169 mock_requests,
170 url_pattern="/suite-api/api/resources\\?resourceKind=VirtualMachine",
171 response_file="vrops_resources.json",
172 )
173 mock_http_response(
174 mock_requests,
175 url_pattern="/suite-api/api/resources/stats.*",
176 response_file="vrops_multi.json",
177 )
178 metrics = self.collector.collect(self.vnfr)
179 self.assertEqual(len(metrics), 0, "Number of metrics returned")