30eafe099b561bd88759009ab1e08a3f0feb3c5a
[modeling/etsicatalog.git] / genericparser / packages / tests / test_service_descriptor.py
1 # Copyright (c) 2019, CMCC Technologies. Co., Ltd.
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 implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 import json
15 import logging
16
17 from django.test import TestCase
18 from mock import mock
19
20 from genericparser.packages.biz.service_descriptor import ServiceDescriptor
21 from genericparser.packages.const import PKG_STATUS
22 from genericparser.pub.database.models import ServicePackageModel, VnfPackageModel, PnfPackageModel
23 from genericparser.pub.exceptions import PackageNotFoundException
24 from genericparser.pub.utils import toscaparsers
25
26 logger = logging.getLogger(__name__)
27
28
29 class TestServiceDescription(TestCase):
30
31     def setUp(self):
32         self.user_defined_data = {
33             'key1': 'value1',
34             'key2': 'value2',
35             'key3': 'value3',
36         }
37         self.data = {
38             'userDefinedData': self.user_defined_data,
39         }
40         self.sd_data = {
41             "inputs": {
42                 "sdwanvpnresource_list": [
43                     {
44                         "sdwanvpn_topology": "",
45                         "required": True,
46                         "type": "string"
47                     }
48                 ]
49             },
50             "pnfs": [
51                 {
52                     "pnf_id": "m6000_s",
53                     "cps": [],
54                     "description": "",
55                     "properties": {
56                         "vendor": "zte",
57                         "request_reclassification": False,
58                         "pnf_type": "m6000s",
59                         "version": "1.0",
60                         "management_address": "111111",
61                         "id": "m6000_s",
62                         "nsh_aware": False
63                     }
64                 }
65             ],
66             "description": "",
67             "vnfs": [
68                 {
69                     "vnf_id": "sdwansiteresource",
70                     "description": "",
71                     "properties": {
72                         "sdwandevice_type": "",
73                         "sdwandevice_class": "PNF",
74                         "multi_stage_design": "false",
75                         "min_instances": "1",
76                         "sdwansite_controlPoint": "",
77                         "id": "cd557883-ac4b-462d-aa01-421b5fa606b1",
78                         "sdwansite_longitude": "",
79                         "sdwansite_latitude": "",
80                         "sdwansite_postcode": "",
81                         "sdwansite_type": "",
82                         "nf_naming": {
83                             "ecomp_generated_naming": True
84                         },
85                         "sdwansite_emails": "",
86                         "sdwansite_role": "",
87                         "vnfm_info": "",
88                         "sdwansite_address": "",
89                         "sdwansite_description": "",
90                         "availability_zone_max_count": "1",
91                         "sdwansite_name": ""
92                     }
93                 }
94             ],
95             "service": {
96                 "type": "org.openecomp.service.EnhanceService",
97                 "properties": {
98                     "descriptor_id": "49ee73f4-1e31-4054-b871-eb9b1c29999b",
99                     "designer": "",
100                     "invariant_id": "5de07996-7ff0-4ec1-b93c-e3a00bb3f207",
101                     "name": "Enhance_Service",
102                     "verison": ""
103                 },
104                 "metadata": {
105                     "category": "E2E Service",
106                     "serviceType": "",
107                     "description": "Enhance_Service",
108                     "instantiationType": "A-la-carte",
109                     "type": "Service",
110                     "environmentContext": "General_Revenue-Bearing",
111                     "serviceEcompNaming": True,
112                     "UUID": "49ee73f4-1e31-4054-b871-eb9b1c29999b",
113                     "ecompGeneratedNaming": True,
114                     "serviceRole": "",
115                     "invariantUUID": "5de07996-7ff0-4ec1-b93c-e3a00bb3f207",
116                     "namingPolicy": "",
117                     "name": "Enhance_Service"
118                 }
119             },
120             "metadata": {
121                 "category": "E2E Service",
122                 "serviceType": "",
123                 "description": "Enhance_Service",
124                 "instantiationType": "A-la-carte",
125                 "type": "Service",
126                 "environmentContext": "General_Revenue-Bearing",
127                 "serviceEcompNaming": True,
128                 "UUID": "49ee73f4-1e31-4054-b871-eb9b1c29999b",
129                 "ecompGeneratedNaming": True,
130                 "serviceRole": "",
131                 "invariantUUID": "5de07996-7ff0-4ec1-b93c-e3a00bb3f207",
132                 "namingPolicy": "",
133                 "name": "Enhance_Service"
134             }
135         }
136         ServicePackageModel.objects.filter().delete()
137
138     def tearDown(self):
139         pass
140
141     def test_create(self):
142         result_data = ServiceDescriptor().create(self.data)
143         self.assertIsNotNone(result_data['id'])
144         service_package = ServicePackageModel.objects.filter(servicePackageId=result_data['id'])[0]
145         self.assertIsNotNone(service_package)
146         self.assertEqual(PKG_STATUS.DISABLED, service_package.operationalState)
147         self.assertEqual(PKG_STATUS.CREATED, service_package.onboardingState)
148         self.assertEqual(PKG_STATUS.NOT_IN_USE, service_package.usageState)
149
150     def test_create_with_csarid(self):
151         csar_id = '0b667470-e6b3-4ee8-8f08-186317a04dc2'
152         result_data = ServiceDescriptor().create(self.data, csar_id)
153         self.assertEqual(csar_id, result_data['id'])
154         service_package = ServicePackageModel.objects.filter(servicePackageId=csar_id)[0]
155         self.assertIsNotNone(service_package)
156         self.assertEqual(PKG_STATUS.DISABLED, service_package.operationalState)
157         self.assertEqual(PKG_STATUS.CREATED, service_package.onboardingState)
158         self.assertEqual(PKG_STATUS.NOT_IN_USE, service_package.usageState)
159
160     @mock.patch.object(toscaparsers, 'parse_sd')
161     def test_parse_serviced_and_save(self, mock_parse_sd):
162         mock_parse_sd.return_value = json.JSONEncoder().encode(self.sd_data)
163         servcie_desc = ServiceDescriptor()
164         csar_id = '0b667470-e6b3-4ee8-8f08-186317a04dc2'
165         servcie_desc.create(self.data, csar_id)
166         VnfPackageModel(vnfPackageId="1", vnfdId="cd557883-ac4b-462d-aa01-421b5fa606b1").save()
167         PnfPackageModel(pnfPackageId="1", pnfdId="m6000_s").save()
168         local_file_name = "/test.csar"
169         servcie_desc.parse_serviced_and_save(csar_id, local_file_name)
170
171         service_package = ServicePackageModel.objects.filter(servicePackageId=csar_id)[0]
172         self.assertIsNotNone(service_package)
173
174     def test_delete_single(self):
175         servcie_desc = ServiceDescriptor()
176         csar_id = '0b667470-e6b3-4ee8-8f08-186317a04dc2'
177         servcie_desc.create(self.data, csar_id)
178
179         servcie_desc.delete_single(csar_id)
180         self.assertTrue(len(ServicePackageModel.objects.filter(servicePackageId=csar_id)) == 0)
181         self.assertFalse(ServicePackageModel.objects.filter(servicePackageId=csar_id).exists())
182
183     def test_delete_single_not_exists(self):
184         csar_id = "8000"
185         try:
186             ServiceDescriptor().delete_single(csar_id)
187         except Exception as e:
188             self.assertTrue(isinstance(e, PackageNotFoundException))
189             self.assertEqual("Service package[8000] not Found.", e.message)