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

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 

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 

29 

30import json 

31import os 

32import requests_mock 

33 

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} 

43 

44 

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) 

64 

65 def tearDown(self): 

66 super().tearDown() 

67 

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") 

110 

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") 

133 

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") 

156 

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")