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