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