/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 *******************************************************************************/ package org.ebayopensource.turmeric.tools.codegen; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Properties; import javax.xml.namespace.NamespaceContext; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.apache.commons.io.FileUtils; import org.ebayopensource.turmeric.tools.codegen.AbstractServiceGeneratorTestCase; import org.ebayopensource.turmeric.tools.errorlibrary.CodeGenAssert; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; public class ServiceUIDQETest extends AbstractServiceGeneratorTestCase{ //NamespaceContextImpl nsc; File destDir = null; File prDir = null; File binDir = null; HashMap<String,String> propertiesFileMap; @Before public void initialize() throws Exception{ testingdir.ensureEmpty(); destDir = getTestDestDir(); binDir = testingdir.getFile("bin"); prDir = getTestDestDir(); File src= new File(destDir.getAbsolutePath()+"/src"); if(!src.exists()) src.mkdir(); propertiesFileMap = new HashMap<String,String>(); propertiesFileMap.put("service_interface_class_name", "com.ebayopensource.test.soaframework.tools.codegen.SimpleServiceInterface"); propertiesFileMap.put("service_layer","COMMON"); propertiesFileMap.put("original_wsdl_uri","Vanilla-Codegen\\ServiceInputFiles\\AccountService.wsdl"); propertiesFileMap.put("service_version","1.0.0"); propertiesFileMap.put("admin_name","newadminname"); propertiesFileMap.put("sipp_version","1.1"); propertiesFileMap.put("service_namespace_part","Billing"); propertiesFileMap.put("domainName","ebayopen"); } // create a unit test with admin name @Test //@Ignore("result to be verified") public void generateUnitTestWithAdminname() throws Exception{ File wsdl = getCodegenQEDataFileInput("AdcommerceConfigGroupMarketV1.wsdl"); String testArgs1[] = new String[] { "-servicename","ConfigGroupMarketV1", "-wsdl", wsdl.getAbsolutePath(), "-genType", "UnitTest", "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), "-adminname","ConfigGroupMarketV1" }; performDirectCodeGen(testArgs1, binDir); File testClassFile = new File(destDir,"gen-test"); CodeGenAssert.assertJavaSourceExists(testClassFile,"org.ebayopensource.turmeric.common.v1.services.test.ConfigGroupMarketV1Test"); } // generate skeleton, test class and dispatcher class @Test public void generateSkeletonAndDispatcherWithAdminname() throws Exception{ File wsdl = getCodegenQEDataFileInput("AccountService.wsdl"); String testArgs[] = new String[] { "-servicename","NewService", "-wsdl", wsdl.getAbsolutePath(), "-genType", "ServiceFromWSDLIntf", //"-src", "AntTests/out", "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), "-adminname","newadminname" }; String testArgs1[] = new String[] { "-servicename","NewService", "-interface", "com/ebayopensource/test/soaframework/tools/codegen/SimpleServiceInterface.java", "-genType", "ServiceFromWSDLImpl", "-src", destDir.getAbsolutePath()+"/gen-src", "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), "-adminname","newadminname", "-gt" }; String testArgs2[] = new String[] { "-servicename","NewService", "-sicn","com/ebayopensource/test/soaframework/tools/codegen/gen/NewadminnameImplSkeleton", "-wsdl",wsdl.getAbsolutePath(), "-genType", "Dispatcher", "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), "-adminname","newadminname" }; createPropsFile(destDir.getAbsolutePath()); performDirectCodeGen(testArgs, binDir); performDirectCodeGen(testArgs1, binDir); performDirectCodeGen(testArgs2, binDir); String implClass = destDir.getAbsolutePath()+"/gen-src/com/ebayopensource/test/soaframework/tools/codegen/impl/NewadminnameImplSkeleton.java"; File implementationClass = new File(implClass); assertTrue(implementationClass.exists()); String dispatcherClass = destDir.getAbsolutePath()+"/gen-src/com/ebayopensource/test/soaframework/tools/codegen/impl/gen/NewadminnameRequestDispatcher.java"; File dispatcClass = new File(dispatcherClass); assertTrue(dispatcClass.exists()); } // testing for namespace updated in metadata as wsdl is updated- v3 call @Test public void changingWSDLNamespaceShouldUpdateMetadataOnRegeneration() throws Exception{ File wsdl = getCodegenQEDataFileInput("AdvertisingNewService3V1.wsdl"); String testArgs[] = new String[] { "-servicename","NewService", "-genType", "ServiceFromWSDLIntf", "-wsdl",wsdl.getAbsolutePath(), //"-src", "AntTests/out", "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; String testArgs2[] = new String[] { "-servicename", "NewService", "-wsdl", wsdl.getAbsolutePath(), "-genType", "ServiceMetadataProps", //"-src", "AntTests/out", "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr", prDir.getAbsolutePath(), }; createPropsFile(destDir.getAbsolutePath()); performDirectCodeGen(testArgs2, binDir); performDirectCodeGen(testArgs, binDir); String str = destDir.getAbsolutePath()+"/gen-meta-src/META-INF/soa/common/config/newadminname/service_metadata.properties"; File metadata = new File(str); assertTrue(metadata.exists()); FileInputStream in = new FileInputStream(metadata); Properties pro = new Properties(); pro.load(in); in.close();; assertEquals("http://www.ebayopensource.org/turmeric/advertising/v1/services",pro.getProperty("service_namespace")); wsdl = getCodegenQEDataFileInput("BillingNewService3V1.wsdl"); String testArgs3[] = new String[] { "-servicename","NewService", "-genType", "ClientNoConfig", "-wsdl",wsdl.getAbsolutePath(), //"-src", "AntTests/out", "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath() }; performDirectCodeGen(testArgs3, binDir); metadata = new File(str); in = new FileInputStream(metadata); pro.load(in); assertEquals("http://www.ebayopensource.org/turmeric/billing/v1/services",pro.getProperty("service_namespace")); assertEquals("NewService3New",pro.getProperty("service_name")); in.close(); } // testing for namespace updated in metadata as wsdl is updated- plugin call @Test public void changingWSDLNamespaceShouldUpdateMetadataOnRegenerationV3() throws Exception{ File wsdl = getCodegenQEDataFileInput("AdvertisingNewService3V1.wsdl"); String testArgs[] = new String[] { "-servicename","NewService", "-genType", "ServiceFromWSDLIntf", "-gip","org.ebayopensource.src", "-wsdl",wsdl.getAbsolutePath(), //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; String testArgs2[] = new String[] { "-servicename", "NewService", "-wsdl", wsdl.getAbsolutePath(), "-genType", "ServiceMetadataProps", "-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; createPropsFile(destDir.getAbsolutePath()); performDirectCodeGen(testArgs2, binDir); performDirectCodeGen(testArgs, binDir); String str = destDir.getAbsolutePath() +"/gen-meta-src/META-INF/soa/common/config/newadminname/service_metadata.properties"; File metadata = new File(str); assertTrue(metadata.exists()); FileInputStream in = new FileInputStream(metadata); Properties pro = new Properties(); pro.load(in); in.close(); assertEquals("http://www.ebayopensource.org/turmeric/advertising/v1/services",pro.getProperty("service_namespace")); wsdl = getCodegenQEDataFileInput("BillingNewService3V1.wsdl"); String testArgs3[] = new String[] { "-servicename","NewService", "-genType", "ServiceFromWSDLIntf", "-gip","org.ebayopensource.src", "-wsdl",wsdl.getAbsolutePath(), "-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), "-namespace","http://namespace" }; performDirectCodeGen(testArgs3, binDir); metadata = new File(str); in = new FileInputStream(metadata); pro.load(in); assertEquals("http://www.ebayopensource.org/turmeric/billing/v1/services",pro.getProperty("service_namespace")); assertEquals("NewService3New",pro.getProperty("service_name")); in.close(); } //testing for ServiceOpProps @Test public void testingServiceOperationOpsWithAdminname() throws Exception{ File wsdl = getCodegenQEDataFileInput("AccountService.wsdl"); String testArgs[] = new String[] { "-servicename","NewService", "-genType", "ServiceOpProps", "-wsdl",wsdl.getAbsolutePath(), //"-src", binDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; createPropsFile(destDir.getAbsolutePath()); performDirectCodeGen(testArgs, binDir); String serviceOps = destDir.getAbsolutePath()+"/gen-meta-src/META-INF/soa/services/config/newadminname/service_operations.properties"; File serviceOpsProps = new File(serviceOps); assertTrue(!serviceOpsProps.exists()); } @Test public void testForsmp_version1_1() throws Exception{ File wsdl = getCodegenQEDataFileInput("AccountService.wsdl"); String testArgs[] = new String[] { "-servicename","NewService", "-wsdl", wsdl.getAbsolutePath(), "-genType", "ServiceMetadataProps", //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; createPropsFile(destDir.getAbsolutePath()); performDirectCodeGen(testArgs, binDir); String str = destDir.getAbsolutePath()+"/gen-meta-src/META-INF/soa/common/config/newadminname/service_metadata.properties"; File metadata = new File(str); assertTrue(metadata.exists()); FileInputStream in = new FileInputStream(metadata); Properties pro = new Properties(); pro.load(in); in.close(); assertEquals("1.1",pro.getProperty("smp_version")); } @Test public void testForsmp_version1_0() throws Exception{ File wsdl = getCodegenQEDataFileInput("AccountService.wsdl"); String testArgs[] = new String[] { "-servicename","NewService", "-wsdl", wsdl.getAbsolutePath(), "-genType", "ServiceMetadataProps", //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; propertiesFileMap.put("sipp_version","1.0"); createPropsFile(destDir.getAbsolutePath()); performDirectCodeGen(testArgs, binDir); String str = destDir.getAbsolutePath()+"/gen-meta-src/META-INF/soa/common/config/newadminname/service_metadata.properties"; File metadata = new File(str); assertTrue(metadata.exists()); FileInputStream in = new FileInputStream(metadata); Properties pro = new Properties(); pro.load(in); in.close(); assertEquals("1.0",pro.getProperty("smp_version")); } @Test public void testForsmp_version_noValue() throws Exception{ File wsdl = getCodegenQEDataFileInput("AccountService.wsdl"); String testArgs[] = new String[] { "-servicename","NewService", "-wsdl", wsdl.getAbsolutePath(), "-genType", "ServiceMetadataProps", //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; propertiesFileMap.put("sipp_version",""); createPropsFile(destDir.getAbsolutePath()); performDirectCodeGen(testArgs, binDir); String str = destDir.getAbsolutePath()+"/gen-meta-src/META-INF/soa/common/config/newadminname/service_metadata.properties"; File metadata = new File(str); assertTrue(metadata.exists()); FileInputStream in = new FileInputStream(metadata); Properties pro = new Properties(); pro.load(in); in.close(); assertEquals(null,pro.getProperty("smp_version")); } private void CreateInterfacePropsFile(HashMap<String,String> map,String path) throws Exception{ File file = new File(path+File.separator +"service_intf_project.properties"); File destDir = new File(path); if(!destDir.exists()) destDir.mkdirs(); if(!file.exists()) file.createNewFile(); Properties pro = new Properties(); FileInputStream in = new FileInputStream(file); pro.load(in); pro.setProperty("service_interface_class_name",map.get("service_interface_class_name")); pro.setProperty("service_layer",map.get("service_layer")); pro.setProperty("original_wsdl_uri",map.get("original_wsdl_uri")); pro.setProperty("service_version",map.get("service_version")); pro.setProperty("admin_name",map.get("admin_name")); pro.setProperty("sipp_version",map.get("sipp_version")); pro.setProperty("service_namespace_part",map.get("service_namespace_part")); pro.setProperty("domainName",map.get("domainName")); //pro.setProperty("envMapper",map.get("envMapper")); FileOutputStream out = new FileOutputStream(path +File.separator +"service_intf_project.properties"); pro.store(out,null); out.close(); in.close(); } private void createPropsFile(String destDir) throws Exception{ CreateInterfacePropsFile(propertiesFileMap,destDir); } private static void CreateConsumerPropsFile(String destDir) throws Exception{ File dest = new File(destDir); File file = new File(destDir +File.separator +"service_consumer_project.properties"); if(!dest.exists()) dest.mkdirs(); if(!file.exists()) file.createNewFile(); Properties pro = new Properties(); FileInputStream in = new FileInputStream(file); pro.load(in); pro.setProperty("client_name","clientname"); pro.setProperty("scpp_version","1.1"); FileOutputStream out= new FileOutputStream(destDir +File.separator+"service_consumer_project.properties"); pro.store(out,null); out.close(); in.close(); } //testing for service name updated in metadata as wsdl is updated @Test public void testIntfPropsValuesUsedWhenBuilding() throws Exception{ File wsdl = getCodegenQEDataFileInput("AdvertisingNewService3V1.wsdl"); String testArgs[] = new String[] { "-servicename","NewService", "-genType", "ServiceFromWSDLIntf", "-wsdl",wsdl.getAbsolutePath(), //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr", prDir.getAbsolutePath(), }; String testArgs2[] = new String[] { "-servicename", "NewService", "-wsdl",wsdl.getAbsolutePath(), "-genType", "ServiceMetadataProps", //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; createPropsFile(destDir.getAbsolutePath()); performDirectCodeGen(testArgs2, binDir); performDirectCodeGen(testArgs, binDir); propertiesFileMap.put("service_version","9.9.9"); propertiesFileMap.put("service_layer","somelayer"); CreateInterfacePropsFile(propertiesFileMap,destDir.getAbsolutePath()); wsdl = getCodegenQEDataFileInput("BillingNewService3V1.wsdl"); String testArgs3[] = new String[] { "-servicename","NewService", "-genType", "ClientNoConfig", "-wsdl",wsdl.getAbsolutePath(), //"-src", "AntTests/out", "-dest",destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin",binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath() }; performDirectCodeGen(testArgs3, binDir); String str = destDir.getAbsolutePath()+"/gen-meta-src/META-INF/soa/common/config/newadminname/service_metadata.properties"; File metadata = new File(str); assertTrue(metadata.exists()); FileInputStream in = new FileInputStream(metadata); Properties pro = new Properties(); pro.load(in); in.close(); assertEquals("9.9.9",pro.getProperty("service_version")); assertEquals("somelayer",pro.getProperty("service_layer")); } @Test public void Bug9780() throws Exception{ File src = new File(destDir.getAbsolutePath()+"/src"); if(!src.exists()) src.mkdirs(); File wsdl = getCodegenQEDataFileInput("AccountService.wsdl"); String testArgs[] = new String[] { "-servicename","NewService", "-genType", "ServiceFromWSDLImpl", "-gip","org.ebayopensource.src", "-wsdl",wsdl.getAbsolutePath(), "-src", destDir.getAbsolutePath()+"/src", "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin",binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), "-namespace","http://namespace", "-adminname","newadminname" }; wsdl = getCodegenQEDataFileInput("AdvertisingNewService3V1.wsdl"); String testArgs2[] = new String[] { "-servicename", "NewService", "-wsdl",wsdl.getAbsolutePath(), "-genType", "ServiceMetadataProps", //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; createPropsFile(destDir.getAbsolutePath()); try{ performDirectCodeGen(testArgs2, binDir); performDirectCodeGen(testArgs, binDir); } catch(Exception e){ assertTrue(false); } } @After public void deinitialize(){ propertiesFileMap=null; } }