1 |
|
# Copyright 2021 Selvi Jayaraman (Tata Elxsi) |
2 |
|
# |
3 |
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
4 |
|
# you may not use this file except in compliance with the License. |
5 |
|
# You may obtain a copy of the License at |
6 |
|
# |
7 |
|
# http://www.apache.org/licenses/LICENSE-2.0 |
8 |
|
# |
9 |
|
# Unless required by applicable law or agreed to in writing, software |
10 |
|
# distributed under the License is distributed on an "AS IS" BASIS, |
11 |
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
12 |
|
# implied. |
13 |
|
# See the License for the specific language governing permissions and |
14 |
|
# limitations under the License. |
15 |
|
|
16 |
1 |
__author__ = "Selvi Jayaraman <selvi.j@tataelxsi.co.in>" |
17 |
|
|
18 |
1 |
import unittest |
19 |
1 |
from uuid import uuid4 |
20 |
1 |
from unittest.mock import Mock, patch, mock_open |
21 |
1 |
from osm_common.dbmemory import DbMemory |
22 |
1 |
from osm_common.fsbase import FsBase |
23 |
1 |
from osm_common.msgbase import MsgBase |
24 |
1 |
from osm_nbi.vnf_instance_topics import VnfInstances, VnfLcmOpTopic |
25 |
1 |
from osm_nbi.instance_topics import NsrTopic |
26 |
1 |
from osm_nbi.tests.test_db_descriptors import ( |
27 |
|
db_vim_accounts_text, |
28 |
|
db_vnfm_vnfd_text, |
29 |
|
db_nsds_text, |
30 |
|
db_nsrs_text, |
31 |
|
db_vnfrs_text, |
32 |
|
db_nslcmops_text, |
33 |
|
) |
34 |
1 |
import yaml |
35 |
|
|
36 |
|
|
37 |
1 |
class TestVnfInstances(unittest.TestCase): |
38 |
1 |
def setUp(self): |
39 |
1 |
self.db = DbMemory() |
40 |
1 |
self.fs = Mock(FsBase()) |
41 |
1 |
self.msg = Mock(MsgBase()) |
42 |
1 |
self.vnfinstances = VnfInstances(self.db, self.fs, self.msg, None) |
43 |
1 |
self.nsrtopic = NsrTopic(self.db, self.fs, self.msg, None) |
44 |
1 |
self.db.create_list("vim_accounts", yaml.safe_load(db_vim_accounts_text)) |
45 |
1 |
self.db.create_list("vnfds", yaml.safe_load(db_vnfm_vnfd_text)) |
46 |
1 |
self.vnfd = self.db.get_list("vnfds")[0] |
47 |
1 |
self.vnfd_id = self.vnfd["id"] |
48 |
1 |
self.vnfd_project = self.vnfd["_admin"]["projects_read"][0] |
49 |
|
|
50 |
1 |
self.vim = self.db.get_list("vim_accounts")[0] |
51 |
1 |
self.vim_id = self.vim["_id"] |
52 |
|
|
53 |
1 |
@patch("osm_nbi.descriptor_topics.shutil") |
54 |
1 |
@patch("osm_nbi.descriptor_topics.os.rename") |
55 |
1 |
def test_create_identifier(self, mock_rename, mock_shutil): |
56 |
1 |
session = { |
57 |
|
"force": True, |
58 |
|
"admin": False, |
59 |
|
"public": False, |
60 |
|
"project_id": [self.vnfd_project], |
61 |
|
"method": "write", |
62 |
|
} |
63 |
1 |
indata = { |
64 |
|
"vnfdId": self.vnfd_id, |
65 |
|
"vnfInstanceName": "vnf_instance_name", |
66 |
|
"vnfInstanceDescription": "vnf instance description", |
67 |
|
"vimAccountId": self.vim_id, |
68 |
|
"additionalParams": { |
69 |
|
"virtual-link-desc": [{"id": "mgmt-net", "mgmt-network": True}], |
70 |
|
"constituent-cpd-id": "vnf-cp0-ext", |
71 |
|
"virtual-link-profile-id": "mgmt-net", |
72 |
|
}, |
73 |
|
} |
74 |
1 |
rollback = [] |
75 |
1 |
self.fs.path = "" |
76 |
1 |
self.fs.get_params.return_value = {} |
77 |
1 |
self.fs.file_exists.return_value = False |
78 |
1 |
self.fs.file_open.side_effect = lambda path, mode: open( |
79 |
|
"/tmp/" + str(uuid4()), "a+b" |
80 |
|
) |
81 |
|
|
82 |
1 |
vnfr_id, _ = self.vnfinstances.new( |
83 |
|
rollback, session, indata, {}, headers={"Content-Type": []} |
84 |
|
) |
85 |
1 |
vnfr = self.db.get_one("vnfrs") |
86 |
1 |
self.assertEqual( |
87 |
|
vnfr_id, vnfr["id"], "Mismatch between return id and database id" |
88 |
|
) |
89 |
1 |
self.assertTrue( |
90 |
|
"nsState" not in vnfr["_admin"], |
91 |
|
"Database VNF record must not contain 'nsState'", |
92 |
|
) |
93 |
1 |
self.assertEqual( |
94 |
|
self.vnfd_id, |
95 |
|
vnfr["vnfd-ref"], |
96 |
|
"vnfr record is not properly created for the given vnfd", |
97 |
|
) |
98 |
|
|
99 |
1 |
def test_show_vnfinstance(self): |
100 |
1 |
session = { |
101 |
|
"force": False, |
102 |
|
"admin": False, |
103 |
|
"public": False, |
104 |
|
"project_id": [self.vnfd_project], |
105 |
|
"method": "write", |
106 |
|
} |
107 |
1 |
filter_q = {} |
108 |
1 |
self.db.create_list("vnfrs", yaml.safe_load(db_vnfrs_text)) |
109 |
1 |
actual_vnfr = self.db.get_list("vnfrs")[0] |
110 |
1 |
id = actual_vnfr["_id"] |
111 |
1 |
expected_vnfr = self.vnfinstances.show(session, id, filter_q) |
112 |
1 |
self.assertEqual( |
113 |
|
actual_vnfr["_id"], |
114 |
|
expected_vnfr["_id"], |
115 |
|
"Mismatch between return vnfr Id and database vnfr Id", |
116 |
|
) |
117 |
|
|
118 |
1 |
def test_delete_vnfinstance(self): |
119 |
1 |
session = { |
120 |
|
"force": False, |
121 |
|
"admin": False, |
122 |
|
"public": False, |
123 |
|
"project_id": [self.vnfd_project], |
124 |
|
"method": "delete", |
125 |
|
} |
126 |
1 |
self.db.create_list("vnfrs", yaml.safe_load(db_vnfrs_text)) |
127 |
1 |
self.db.create_list("nsrs", yaml.safe_load(db_nsrs_text)) |
128 |
1 |
self.db.create_list("nsds", yaml.safe_load(db_nsds_text)) |
129 |
|
|
130 |
1 |
self.vnfr = self.db.get_list("vnfrs")[0] |
131 |
1 |
self.vnfr_id = self.vnfr["_id"] |
132 |
1 |
self.db.set_one = self.db.set_one |
133 |
1 |
self.db.set_one = Mock() |
134 |
|
|
135 |
1 |
self.vnfinstances.delete(session, self.vnfr_id) |
136 |
1 |
msg_args = self.msg.write.call_args[0] |
137 |
1 |
self.assertEqual(msg_args[1], "deleted", "Wrong message action") |
138 |
|
|
139 |
|
|
140 |
1 |
class TestVnfLcmOpTopic(unittest.TestCase): |
141 |
1 |
def setUp(self): |
142 |
1 |
self.db = DbMemory() |
143 |
1 |
self.fs = Mock(FsBase()) |
144 |
1 |
self.fs.get_params.return_value = {"./fake/folder"} |
145 |
1 |
self.fs.file_open = mock_open() |
146 |
1 |
self.msg = Mock(MsgBase()) |
147 |
|
|
148 |
1 |
self.vnflcmop_topic = VnfLcmOpTopic(self.db, self.fs, self.msg, None) |
149 |
1 |
self.vnflcmop_topic.check_quota = Mock(return_value=None) # skip quota |
150 |
|
|
151 |
1 |
self.db.create_list("vim_accounts", yaml.safe_load(db_vim_accounts_text)) |
152 |
1 |
self.db.create_list("nsds", yaml.safe_load(db_nsds_text)) |
153 |
1 |
self.db.create_list("vnfds", yaml.safe_load(db_vnfm_vnfd_text)) |
154 |
1 |
self.db.create_list("vnfrs", yaml.safe_load(db_vnfrs_text)) |
155 |
1 |
self.db.create_list("nsrs", yaml.safe_load(db_nsrs_text)) |
156 |
|
|
157 |
1 |
self.vnfd = self.db.get_list("vnfds")[0] |
158 |
1 |
self.vnfd_id = self.vnfd["_id"] |
159 |
1 |
self.vnfr = self.db.get_list("vnfrs")[0] |
160 |
1 |
self.vnfr_id = self.vnfr["_id"] |
161 |
|
|
162 |
1 |
self.vnfd_project = self.vnfd["_admin"]["projects_read"][0] |
163 |
|
|
164 |
1 |
self.vim = self.db.get_list("vim_accounts")[0] |
165 |
1 |
self.vim_id = self.vim["_id"] |
166 |
|
|
167 |
1 |
def test_create_vnf_instantiate(self): |
168 |
1 |
session = { |
169 |
|
"force": False, |
170 |
|
"admin": False, |
171 |
|
"public": False, |
172 |
|
"project_id": [self.vnfd_project], |
173 |
|
"method": "write", |
174 |
|
} |
175 |
1 |
indata = { |
176 |
|
"vnfInstanceId": self.vnfr_id, |
177 |
|
"lcmOperationType": "instantiate", |
178 |
|
"vnfName": "vnf_instance_name", |
179 |
|
"vnfDescription": "vnf instance description", |
180 |
|
"vnfId": self.vnfd_id, |
181 |
|
"vimAccountId": self.vim_id, |
182 |
|
} |
183 |
1 |
rollback = [] |
184 |
1 |
headers = {} |
185 |
1 |
vnflcmop_id, _ = self.vnflcmop_topic.new( |
186 |
|
rollback, session, indata, kwargs=None, headers=headers |
187 |
|
) |
188 |
1 |
vnflcmop_info = self.db.get_one("nslcmops") |
189 |
1 |
self.assertEqual( |
190 |
|
vnflcmop_id, |
191 |
|
vnflcmop_info["_id"], |
192 |
|
"Mismatch between return id and database '_id'", |
193 |
|
) |
194 |
1 |
self.assertTrue( |
195 |
|
vnflcmop_info["lcmOperationType"] == "instantiate", |
196 |
|
"Database record must contain 'lcmOperationType=instantiate'", |
197 |
|
) |
198 |
|
|
199 |
1 |
def test_show_vnflmcop(self): |
200 |
1 |
session = { |
201 |
|
"force": False, |
202 |
|
"admin": False, |
203 |
|
"public": False, |
204 |
|
"project_id": [self.vnfd_project], |
205 |
|
"method": "write", |
206 |
|
} |
207 |
1 |
self.db.create_list("nslcmops", yaml.safe_load(db_nslcmops_text)) |
208 |
1 |
filter_q = {} |
209 |
1 |
actual_lcmop = self.db.get_list("nslcmops")[0] |
210 |
1 |
id = actual_lcmop["_id"] |
211 |
1 |
vnfr = self.db.get_list("vnfrs")[0] |
212 |
1 |
vnfr_id = vnfr["_id"] |
213 |
1 |
vnflcmop = self.vnflcmop_topic.show(session, id, filter_q) |
214 |
1 |
_id = vnflcmop["vnfInstanceId"] |
215 |
1 |
self.assertEqual( |
216 |
|
_id, |
217 |
|
vnfr_id, |
218 |
|
"Mismatch between vnflcmop's vnfInstanceId and database vnfr's id", |
219 |
|
) |