365dbaab00b3759fcbf7c73f6502d87560f10eb7
[vfc/nfvo/catalog.git] /
1 /**
2  * Copyright 2016 ZTE Corporation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.openo.commontosca.catalog.wrapper;
17
18 import static org.junit.Assert.assertEquals;
19
20 import com.google.gson.Gson;
21 import com.google.gson.JsonElement;
22 import com.google.gson.JsonObject;
23 import com.google.gson.JsonPrimitive;
24
25 import org.junit.After;
26 import org.junit.AfterClass;
27 import org.junit.Assert;
28 import org.junit.Before;
29 import org.junit.BeforeClass;
30 import org.junit.Test;
31 import org.openo.commontosca.catalog.CatalogAppConfiguration;
32 import org.openo.commontosca.catalog.common.Config;
33 import org.openo.commontosca.catalog.common.HttpServerAddrConfig;
34 import org.openo.commontosca.catalog.common.HttpServerPathConfig;
35 import org.openo.commontosca.catalog.common.MsbAddrConfig;
36 import org.openo.commontosca.catalog.common.ToolUtil;
37 import org.openo.commontosca.catalog.db.dao.DaoManager;
38 import org.openo.commontosca.catalog.db.entity.NodeTemplateData;
39 import org.openo.commontosca.catalog.db.entity.PackageData;
40 import org.openo.commontosca.catalog.db.entity.ServiceTemplateData;
41 import org.openo.commontosca.catalog.db.entity.ServiceTemplateMappingData;
42 import org.openo.commontosca.catalog.db.entity.TemplateData;
43 import org.openo.commontosca.catalog.db.exception.CatalogResourceException;
44 import org.openo.commontosca.catalog.db.resource.PackageManager;
45 import org.openo.commontosca.catalog.db.resource.TemplateManager;
46 import org.openo.commontosca.catalog.db.util.H2DbServer;
47 import org.openo.commontosca.catalog.db.util.HibernateSession;
48 import org.openo.commontosca.catalog.model.entity.InputParameter;
49 import org.openo.commontosca.catalog.model.entity.NodeTemplate;
50 import org.openo.commontosca.catalog.model.entity.OutputParameter;
51 import org.openo.commontosca.catalog.model.entity.Parameters;
52 import org.openo.commontosca.catalog.model.entity.QueryRawDataCondition;
53 import org.openo.commontosca.catalog.model.entity.RelationShip;
54 import org.openo.commontosca.catalog.model.entity.ServiceTemplate;
55 import org.openo.commontosca.catalog.model.entity.ServiceTemplateOperation;
56 import org.openo.commontosca.catalog.model.entity.ServiceTemplateRawData;
57 import org.openo.commontosca.catalog.model.wrapper.ServiceTemplateWrapper;
58
59 import java.util.ArrayList;
60 import java.util.Arrays;
61 import java.util.HashMap;
62 import java.util.Iterator;
63 import java.util.List;
64 import java.util.Map;
65 import java.util.Map.Entry;
66
67
68 public class ServiceTemplateWrapperTest {
69   private static ServiceTemplateWrapper serviceTemplateWrapper;
70   private static TemplateManager templateManager;
71   private static PackageManager packageManager;
72   
73   static {
74     CatalogAppConfiguration configuration = new CatalogAppConfiguration();
75     Config.setConfigration(configuration);
76     Config.getConfigration().setMsbServerAddr("http://127.0.0.1:80");
77     
78     HttpServerAddrConfig.setHttpServerAddress("http://127.0.0.1:8201");
79     HttpServerPathConfig.setHttpServerPath("../tomcat/webapps/ROOT/");
80   }
81   
82   /**
83    * startup db session before class.
84    */
85   @BeforeClass
86   public static void setUpBeforeClass() {
87     H2DbServer.startUp();
88     DaoManager.getInstance().setSessionFactory(HibernateSession.init());
89     serviceTemplateWrapper = ServiceTemplateWrapper.getInstance();
90     templateManager = TemplateManager.getInstance();
91     packageManager = PackageManager.getInstance();
92     CatalogAppConfiguration configuration = new CatalogAppConfiguration();
93     Config.setConfigration(configuration);
94     System.out.println("Set up before class");
95   }
96   
97   /**
98    * clean database.
99    */
100   @Before
101   public void setUp() throws Exception {
102     /*Response packageListResult = packageWrapper.queryPackageListByCond(null,
103         null, null, null, null);
104     @SuppressWarnings("unchecked")
105     ArrayList<PackageMeta> packageList = (ArrayList<PackageMeta>) packageListResult.getEntity();
106     for (PackageMeta packageMeta:packageList) {
107       String csarId = packageMeta.getCsarId();
108       packageWrapper.delPackage(csarId);
109     }*/
110     ArrayList<ServiceTemplateData> servicetemplates = templateManager.queryServiceTemplate(
111         null, null, null);
112     if (null != servicetemplates && servicetemplates.size() > 0) {
113       for (int i = 0; i < servicetemplates.size(); i++) {
114         String serviceTemplateId = servicetemplates.get(i).getServiceTemplateId();
115         templateManager.deleteServiceTemplateById(serviceTemplateId);
116       }
117     }
118     //uploadPackage();
119     TemplateData templateData = new TemplateData();
120     templateData = setTemplateData();
121     templateManager.addServiceTemplate(templateData);
122     
123     ServiceTemplateMappingData templateMappingData = new ServiceTemplateMappingData();
124     templateMappingData = setTemplateMappingData();
125     templateManager.addServiceTemplateMapping(templateMappingData);
126     
127     ArrayList<PackageData> packageList = packageManager.queryPackage(null, null, null, null, null);
128     if (packageList != null && packageList.size() > 0) {
129       for (int i = 0; i < packageList.size(); i++) {
130         String packageOid = packageList.get(i).getCsarId();
131         packageManager.deletePackage(packageOid);
132       }
133     }
134     PackageData packageData = new PackageData();
135     packageData = getPackageData();
136     packageManager.addPackage(packageData);
137     
138     //ArrayList<ServiceTemplateData> serviceTemplates = templateManager
139     //.queryServiceTemplate(null, null, null);
140     //ArrayList<NodeTemplateData> nodeTemplateDatas = templateManager
141     //.queryNodeTemplateBySeriviceTemplateId("serviceTemplateId");
142     System.out.println("Set up before");
143   }
144   
145   
146
147   @Test
148   public void testGetServiceTemplates() throws CatalogResourceException {
149     ServiceTemplate[] expectResult = getExpectServiceTemplates();
150     ServiceTemplate[] result1 = serviceTemplateWrapper.getServiceTemplates(null, false);
151     assertEquals(expectResult, result1);
152     
153     ServiceTemplate[] result2 = serviceTemplateWrapper.getServiceTemplates("InUse", false);
154     assertEquals(expectResult, result2);
155   }
156   
157   @Test
158   public void testGetNestingServiceTemplate() throws CatalogResourceException {
159     ServiceTemplate[] expectResult = getExpectServiceTemplates();
160     String[] nodeTypeIds = new String[]{"tosca.nodes.nfv.VL"};
161     ServiceTemplate[] result = serviceTemplateWrapper.getNestingServiceTemplate(nodeTypeIds);
162     assertEquals(expectResult, result);
163   }
164   
165   @Test
166   public void testGetNodeTemplatesByType() throws CatalogResourceException {
167     NodeTemplate[] expectResult = getExpectNodeTemplates();
168     NodeTemplate[] result1 = serviceTemplateWrapper.getNodeTemplates("serviceTemplateId", null);
169     assertEquals(1, result1.length);
170     result1[0].setId("nodeTemplateId");
171     assertEquals(expectResult, result1);
172     
173     String[] types = {"tosca.nodes.nfv.VL"};
174     NodeTemplate[] result2 = serviceTemplateWrapper.getNodeTemplates("serviceTemplateId", types);
175     assertEquals(1, result2.length);
176     result2[0].setId("nodeTemplateId");
177     assertEquals(expectResult, result2);
178   }
179   
180   @Test
181   public void testGetNodeTemplateById() throws CatalogResourceException {
182     NodeTemplate[] nodeTemplates = serviceTemplateWrapper.getNodeTemplates(
183         "serviceTemplateId", null);
184     NodeTemplate result = new NodeTemplate();
185     if (null != nodeTemplates && nodeTemplates.length > 0) {
186       String nodeTemplateId = nodeTemplates[0].getId();
187       result = serviceTemplateWrapper.getNodeTemplateById(
188           "serviceTemplateId", nodeTemplateId);
189       result.setId("nodeTemplateId");
190     }
191     NodeTemplate expectResult = getExpectNodeTemplate();
192     assertEquals(expectResult, result);
193   }
194   
195   @Test
196   public void testGetServiceTemplateOperations() throws CatalogResourceException {
197     ServiceTemplateOperation[] expectResult = getServiceTemplateOperation();
198     ServiceTemplateOperation[] result = serviceTemplateWrapper
199         .getTemplateOperations("serviceTemplateId");
200     assertEquals(expectResult, result);
201   }
202   
203   @Test
204   public void testGetServiceTemplateById() throws CatalogResourceException {
205     ServiceTemplate expectResult = getExpectServiceTemplate();
206     ServiceTemplate result = serviceTemplateWrapper.getServiceTemplateById("serviceTemplateId");
207     assertEquals(expectResult, result);
208   }
209   
210   @Test
211   public void testGetServiceTemplateParameters() throws CatalogResourceException {
212     Parameters expectResult = getParameters();
213     Parameters result = serviceTemplateWrapper.getServiceTemplateParameters("serviceTemplateId");
214     assertEquals(expectResult, result);
215   }
216   
217   @Test
218   public void testGetParametersByOperationName() throws CatalogResourceException {
219     InputParameter[] expectResult = getServiceTemplateInputs();
220     InputParameter[] result = serviceTemplateWrapper.getParametersByOperationName(
221         "serviceTemplateId", "init");
222     assertEquals(expectResult, result);
223   }
224
225   @Test
226   public void testGetServiceTemplateRawData() throws Exception {
227     ServiceTemplateRawData expectResult = new ServiceTemplateRawData();
228     expectResult.setRawData("rawData");
229     QueryRawDataCondition queryCondition = new QueryRawDataCondition();
230     queryCondition.setCsarId("123456");
231     ServiceTemplateRawData result = serviceTemplateWrapper
232         .getServiceTemplateRawData(queryCondition);
233     assertEquals(expectResult, result);
234   }
235   
236   /**
237    * delete data after test.
238    */
239   @After
240   public void tearDown() throws Exception {
241     packageManager.deletePackage("123456");
242     templateManager.deleteServiceTemplateById("serviceTemplateId");
243     templateManager.deleteServiceTemplateMapping(null, "serviceTemplateId");
244     System.out.println("Tear down");
245   }
246   
247   /**
248    * destory db session after class.
249    */
250   @AfterClass
251   public static void tearDownAfterClass() {
252     try {
253       HibernateSession.destory();
254       DaoManager.getInstance().setDaoNull();
255       H2DbServer.shutDown();
256     } catch (Exception e1) {
257       Assert.fail("Exception" + e1.getMessage());
258     }
259   }
260
261   /*private void uploadPackage() {
262     InputStream ins = null;
263     
264     FormDataContentDisposition fileDetail =
265         FormDataContentDisposition.name("fileName").fileName("NanocellGW.csar").build();
266
267     try {
268       resourcePath = HibernateSession.class.getResource("/").toURI().getPath();
269     } catch (URISyntaxException e1) {
270       e1.printStackTrace();
271     }
272     final String filename = "NanocellGW.csar";
273     File packageFile = new File(resourcePath + filename);
274     try {
275       ins = new FileInputStream(packageFile);
276     } catch (FileNotFoundException e2) {
277       e2.printStackTrace();
278     }
279     if (ins != null) {
280       try {
281         PackageWrapper.getInstance().uploadPackage(ins, fileDetail, null);
282       } catch (Exception e3) {
283         e3.printStackTrace();
284       }
285     }
286   }*/
287   
288   private TemplateData setTemplateData() {
289     ServiceTemplateData serviceTemplate = new ServiceTemplateData();
290     ArrayList<NodeTemplateData> nodeTemplates = new ArrayList<NodeTemplateData>();
291     NodeTemplateData nodeTemplate = new NodeTemplateData();
292     serviceTemplate = setServiceTemplate();
293     nodeTemplate = setNodeTemplate();
294     nodeTemplates.add(nodeTemplate);
295     TemplateData templateData = new TemplateData();
296     templateData.setServiceTemplate(serviceTemplate);
297     templateData.setNodeTemplates(nodeTemplates);
298     return templateData;
299   }
300
301   private NodeTemplateData setNodeTemplate() {
302     NodeTemplateData nodeTemplate = new NodeTemplateData();
303     nodeTemplate.setName("nodeName");
304     nodeTemplate.setNodeTemplateId("nodeTemplateId");
305     String properties = "{\"cidr\":\"\",\"gateWay\":\"\",\"dhcp\":\"\"}";
306     nodeTemplate.setProperties(properties);
307     String relationShips = "[{\"sourceNodeName\":\"endpoint.vlan2\","
308         + "\"targetNodeName\":\"VLAN\","
309         + "\"sourceNodeId\":\"tosca_nodes_nfv_CP_4\","
310         + "\"targetNodeId\":\"tosca_nodes_nfv_VL_1\","
311         + "\"type\":\"tosca.relationships.nfv.VirtualLinksTo\"}]";
312     nodeTemplate.setRelationShips(relationShips);
313     nodeTemplate.setServiceTemplateId("serviceTemplateId");
314     nodeTemplate.setType("tosca.nodes.nfv.VL");
315     return nodeTemplate;
316   }
317
318   private ServiceTemplateData setServiceTemplate() {
319     ServiceTemplateData serviceTemplate = new ServiceTemplateData();
320     serviceTemplate.setCsarId("123456");
321     serviceTemplate.setDownloadUri(MsbAddrConfig.getMsbAddress() 
322         + "/files/catalog/NSAR/ZTE/NanocellGW/v1.0/Definitions/segw.yml");
323     String inputs = "{\"inputs\":[{\"name\": \"SubscribersPerNfc\","
324         + "\"type\": \"STRING\",\"description\": \"\",\"required\": false}],"
325         + "\"outputs\":[]}";
326     serviceTemplate.setInputs(inputs);
327     String operations = "[{\"name\":\"init\",\"description\":\"\","
328         + "\"packageName\":\"NanocellGW\",\"processId\":\"\","
329         + "\"inputs\":[{\"name\": \"SubscribersPerNfc\","
330         + "\"type\": \"STRING\",\"description\": \"\","
331         + "\"required\": false}]}]";
332     serviceTemplate.setOperations(operations);
333     serviceTemplate.setRowData("rawData");
334     serviceTemplate.setServiceTemplateId("serviceTemplateId");
335     serviceTemplate.setTemplateName("templateName");
336     serviceTemplate.setType("NS");
337     serviceTemplate.setVendor("ZTE");
338     serviceTemplate.setVersion("0.0.1");
339     return serviceTemplate;
340   }
341   
342   private ServiceTemplateMappingData setTemplateMappingData() {
343     ServiceTemplateMappingData mappingData = new ServiceTemplateMappingData();
344     mappingData.setCapabilities("");
345     mappingData.setMappingId("mappingId");
346     mappingData.setNodeType("tosca.nodes.nfv.VL");
347     mappingData.setRequirements("");
348     mappingData.setServiceTemplateId("serviceTemplateId");
349     return mappingData;
350   }
351   
352   private ServiceTemplate[] getExpectServiceTemplates() {
353     ServiceTemplate serviceTemplate = new ServiceTemplate();
354     serviceTemplate = getExpectServiceTemplate();
355     ServiceTemplate[] serviceTemplates = new ServiceTemplate[1];
356     serviceTemplates[0] = serviceTemplate;
357     return serviceTemplates;
358   }
359   
360   private ServiceTemplate getExpectServiceTemplate() {
361     ServiceTemplate serviceTemplate = new ServiceTemplate();
362     serviceTemplate.setCsarid("123456");
363     serviceTemplate.setDownloadUri(MsbAddrConfig.getMsbAddress() 
364         + "/files/catalog/NSAR/ZTE/NanocellGW/v1.0/Definitions/segw.yml");
365     InputParameter[] inputs = getServiceTemplateInputs();
366     serviceTemplate.setInputs(inputs);
367     ServiceTemplateOperation[] operations = getServiceTemplateOperation();
368     serviceTemplate.setOperations(operations);
369     OutputParameter[] outputs = getOutputs();
370     serviceTemplate.setOutputs(outputs);
371     serviceTemplate.setServiceTemplateId("serviceTemplateId");
372     serviceTemplate.setTemplateName("templateName");
373     serviceTemplate.setType("NS");
374     serviceTemplate.setVendor("ZTE");
375     serviceTemplate.setVersion("0.0.1");
376     return serviceTemplate;
377   }
378
379   private OutputParameter[] getOutputs() {
380     String outputsStr = "[]";
381     OutputParameter[] outputs = ToolUtil.fromJson(outputsStr, OutputParameter[].class);
382     return outputs;
383   }
384
385   private ServiceTemplateOperation[] getServiceTemplateOperation() {
386     String operationsStr = "[{\"name\":\"init\",\"description\":\"\","
387         + "\"packageName\":\"NanocellGW\",\"processId\":\"\","
388         + "\"inputs\":[{\"name\": \"SubscribersPerNfc\","
389         + "\"type\": \"STRING\",\"description\": \"\","
390         + "\"required\": false}]}]";
391     ServiceTemplateOperation[] operations = ToolUtil.fromJson(operationsStr,
392         ServiceTemplateOperation[].class);
393     return operations;
394   }
395
396   private InputParameter[] getServiceTemplateInputs() {
397     String inputsStr = "[{\"name\": \"SubscribersPerNfc\","
398         + "\"type\": \"STRING\",\"description\": \"\",\"required\": false}]";
399     InputParameter[] inputs = ToolUtil.fromJson(inputsStr, InputParameter[].class);
400     return inputs;
401   }
402   
403   private Parameters getParameters() {
404     String parametersStr = "{\"inputs\":[{\"name\": \"SubscribersPerNfc\","
405         + "\"type\": \"STRING\",\"description\": \"\",\"required\": false}],"
406         + "\"outputs\":[]}";
407     Parameters parameters = ToolUtil.fromJson(parametersStr, Parameters.class);
408     return parameters;
409   }
410   
411   private NodeTemplate[] getExpectNodeTemplates() {
412     NodeTemplate nodeTemplate = new NodeTemplate();
413     nodeTemplate = getExpectNodeTemplate();
414     NodeTemplate[] nodeTemplates = new NodeTemplate[1];
415     nodeTemplates[0] = nodeTemplate;
416     return nodeTemplates;
417   }
418   
419   private NodeTemplate getExpectNodeTemplate() {
420     NodeTemplate nodeTemplate = new NodeTemplate();
421     nodeTemplate.setId("nodeTemplateId");
422     nodeTemplate.setName("nodeName");
423     String propertiesStr = "{\"cidr\":\"\",\"gateWay\":\"\",\"dhcp\":\"\"}";
424     Map<String, Object> properties = convert2Property(propertiesStr);
425     nodeTemplate.setProperties(properties);
426     String relationShipsStr = "[{\"sourceNodeName\":\"endpoint.vlan2\","
427         + "\"targetNodeName\":\"VLAN\","
428         + "\"sourceNodeId\":\"tosca_nodes_nfv_CP_4\","
429         + "\"targetNodeId\":\"tosca_nodes_nfv_VL_1\","
430         + "\"type\":\"tosca.relationships.nfv.VirtualLinksTo\"}]";
431     List<RelationShip> relationShips = convert2RelationShipList(relationShipsStr);
432     nodeTemplate.setRelationShips(relationShips);
433     nodeTemplate.setType("tosca.nodes.nfv.VL");
434     return nodeTemplate;
435   }
436   
437   private Map<String, Object> convert2Property(String properties) {
438     JsonObject jsonObject = new Gson().fromJson(properties, JsonObject.class);
439     return parseMapValue(jsonObject);
440   }
441
442   private Map<String, Object> parseMapValue(JsonObject jsonObject) {
443     Map<String, Object> map = new HashMap<>();
444
445     Iterator<Entry<String, JsonElement>> iterator = jsonObject.entrySet().iterator();
446     while (iterator.hasNext()) {
447       Entry<String, JsonElement> next = iterator.next();
448       if (next.getValue() instanceof JsonPrimitive) {
449         map.put(next.getKey(), next.getValue().getAsString());
450         continue;
451       }
452
453       if (next.getValue() instanceof JsonObject) {
454         map.put(next.getKey(), parseMapValue((JsonObject) next.getValue()));
455         continue;
456       }
457     }
458     return map;
459   }
460   
461   private List<RelationShip> convert2RelationShipList(String srelationShips) {
462     RelationShip[] relationShips = ToolUtil.fromJson(srelationShips, RelationShip[].class);
463     return Arrays.asList(relationShips);
464   }
465   
466   private PackageData getPackageData() {
467     PackageData packageData = new PackageData();
468     packageData.setCsarId("123456");
469     packageData.setCreateTime("2016-06-29 03:33:15");
470     packageData.setDeletionPending("false");
471     packageData.setDownloadUri("/NSAR/ZTE/NanocellGW/v1.0/");
472     packageData.setFormat("yml");
473     packageData.setModifyTime("2016-06-29 03:33:15");
474     packageData.setName("NanocellGW");
475     packageData.setOnBoardState("non-onBoarded");
476     packageData.setOperationalState("Disabled");
477     packageData.setProvider("ZTE");
478     packageData.setSize("0.93M");
479     packageData.setType("NSAR");
480     packageData.setUsageState("InUse");
481     packageData.setVersion("V1.0");
482     packageData.setProcessState("normal");
483     return packageData;
484   }
485 }