package org.ebayopensource.turmeric.tools.codegen; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import java.util.ArrayList; 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 junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class BugsForSOA25QETest extends AbstractServiceGeneratorTestCase{ File destDir = null; File prDir = null; File binDir = null; NamespaceContextImpl nsc; Properties intfProper = new Properties(); List<String> list = null; @Before public void init() throws IOException{ testingdir.ensureEmpty(); destDir = getTestDestDir(); binDir = testingdir.getFile("bin"); prDir = getTestDestDir(); nsc = new NamespaceContextImpl(); list = new ArrayList<String>(); intfProper.put("service_interface_class_name", "org.ebayopensource.turmeric.runtime.types"); intfProper.put("service_layer","COMMON"); intfProper.put("original_wsdl_uri","Vanilla-Codegen\\ServiceInputFiles\\AccountService.wsdl"); intfProper.put("service_version","1.0.0"); intfProper.put("admin_name","NewAdminName"); intfProper.put("sipp_version","1.1"); intfProper.put("service_namespace_part","Billing"); intfProper.put("domainName","ebay"); intfProper.put("enabledNamespaceFolding","true"); } //@Test //@Ignore("change xml input") /*FIXME * change the data */ public void correctTypeMappingsWithXMLInput() throws Exception{ File xml = getCodegenQEDataFileInput("OSSvc.xml"); String testArgs[] = new String[] { "-xml",xml.getAbsolutePath(), "-gt" }; performDirectCodeGen(testArgs, binDir); String path = "gen-meta-src//META-INF//soa//common//config//OSSvc//TypeMappings.xml"; File typemap = new File(path); assertTrue(typemap.exists()); Node result = getNodeDetails(nsc,"//ns2:package-map",path); if(result != null){ NodeList childNode = result.getChildNodes(); NamedNodeMap map; Node attnode1; Node attnode2; Node node =childNode.item(1); if(node != null){ map = node.getAttributes(); attnode1 = map.getNamedItem("xml-namespace"); list.add(attnode1.getNodeValue()); attnode2 = map.getNamedItem("name"); list.add(attnode2.getNodeValue()); } node =childNode.item(3); if(node != null) { map = node.getAttributes(); attnode1 = map.getNamedItem("xml-namespace"); list.add(attnode1.getNodeValue()); attnode2 = map.getNamedItem("name"); list.add(attnode2.getNodeValue()); } } assertEquals(list.get(0),"urn:ebay:apis:eBLBaseComponents"); assertEquals(list.get(1),"com.ebay.apis.eblbasecomponents"); assertEquals(list.get(2),"http://www.ebay.com/marketplace/services"); assertEquals(list.get(3),"com.ebay.marketplace.services"); } @Test //@Ignore("assert needs to be fixed") /*TODO * Fix the assert */ public void mnsWsdlTypeMappings() throws Exception{ File wsdl = getCodegenQEDataFileInput("AccountService.wsdl"); String testArgs[] = new String[] { "-servicename","AccountService", "-genType", "ServiceFromWSDLIntf", "-wsdl",wsdl.getAbsolutePath(), "-namespace","http://www.ebayopensource.org/turmeric/services", //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), "-noObjectFactoryGeneration","false", "-ns2pkg","http://www.ebayopensource.com/turmeric/services=com.ebay.someplace.services,http://www.ebayopensource.org/turmeric/common/v1/types=com.ebay.bigtime.gott.types" }; performDirectCodeGen(testArgs, binDir); String path = destDir.getAbsolutePath()+"//gen-meta-src//META-INF//soa//common//config//AccountService//TypeMappings.xml"; File typemap = new File(path); assertTrue(typemap.exists()); Node result = getNodeDetails(nsc,"//ns2:package-map",path); if(result != null){ NodeList childNode = result.getChildNodes(); NamedNodeMap map; Node attnode1; Node attnode2; Node node =childNode.item(1); if(node != null){ map = node.getAttributes(); attnode1 = map.getNamedItem("xml-namespace"); list.add(attnode1.getNodeValue()); attnode2 = map.getNamedItem("name"); list.add(attnode2.getNodeValue()); } node =childNode.item(3); if(node != null) { map = node.getAttributes(); attnode1 = map.getNamedItem("xml-namespace"); list.add(attnode1.getNodeValue()); attnode2 = map.getNamedItem("name"); list.add(attnode2.getNodeValue()); } } assertEquals(list.get(0),"http://www.ebayopensource.com/turmeric/services"); assertEquals(list.get(1),"org.ebayopensource.turmeric.services"); //assertEquals(list.get(2),"http://www.ebayopensource.org/turmeric/common/v1/types"); //assertEquals(list.get(3),"com.ebay.bigtime.gott.types"); } @Test public void singlensWsdlTypeMappings() throws Exception{ mavenTestingRules.setFailOnViolation(false); File wsdl = getCodegenQEDataFileInput("AdcommerceConfigGroupMarketV1.wsdl"); String testArgs[] = new String[] { "-servicename","ConfigGroupMarket", "-genType", "ServiceFromWSDLIntf", "-wsdl",wsdl.getAbsolutePath(), "-namespace","http://www.ebayopensource.com/turmeric/services", //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; performDirectCodeGen(testArgs, binDir); String path = destDir.getAbsolutePath()+"//gen-meta-src//META-INF//soa//common//config//ConfigGroupMarket//TypeMappings.xml"; File typemap = new File(path); assertTrue(typemap.exists()); Node result = getNodeDetails(nsc,"//ns2:package-map",path); if(result != null){ NodeList childNode = result.getChildNodes(); NamedNodeMap map; Node attnode1; Node attnode2; Node node =childNode.item(1); if(node != null){ map = node.getAttributes(); attnode1 = map.getNamedItem("xml-namespace"); list.add(attnode1.getNodeValue()); attnode2 = map.getNamedItem("name"); list.add(attnode2.getNodeValue()); } node =childNode.item(3); if(node != null) { map = node.getAttributes(); attnode1 = map.getNamedItem("xml-namespace"); list.add(attnode1.getNodeValue()); attnode2 = map.getNamedItem("name"); list.add(attnode2.getNodeValue()); } } mavenTestingRules.setFailOnViolation(true); assertEquals(list.get(0),"http://www.ebayopensource.com/turmeric/services"); assertEquals(list.get(1),"com.ebayopensource.turmeric.services"); } @Test public void typeDefIssue() throws Exception{ File wsdl = getCodegenQEDataFileInput("AdcommerceConfigGroupMarketV1_Anonymous.wsdl"); String testArgs[] = new String[] { "-servicename","ConfigGroupMarket", "-genType", "ServiceFromWSDLIntf", "-wsdl",wsdl.getAbsolutePath(), "-namespace","http://www.ebayopensource.com/turmeric/services", //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; performDirectCodeGen(testArgs, binDir); String genPath = destDir.getAbsolutePath() + "/gen-src/com/ebayopensource/turmeric/services/gen/ConfigGroupMarketTypeDefsBuilder.java"; String goldPath = getCodegenQEDataFileInput("ConfigGroupMarketV1TypeDefsBuilder.java").getAbsolutePath(); assertFileExists(genPath); compareTwoFiles(genPath, goldPath); } public Node getNodeDetails(NamespaceContext nsc,String exprString,String filePath) throws XPathExpressionException{ XPathFactory factory = XPathFactory.newInstance(); // 2. Use the XPathFactory to create a new XPath object XPath xpath = factory.newXPath(); xpath.setNamespaceContext(nsc); // 3. Compile an XPath string into an XPathExpression XPathExpression expression = xpath.compile(exprString); // 4. Evaluate the XPath expression on an input document Node result = (Node)expression.evaluate(new org.xml.sax.InputSource(filePath),XPathConstants.NODE ); return result; } @Test public void mnsIssue() throws Exception{ File wsdl = getCodegenQEDataFileInput("RIMApplicationProcessService.wsdl"); String testArgs[] = new String[] { "-servicename","RIMApplicationProcessService", "-genType", "WsdlConversionToMns", "-wsdl",wsdl.getAbsolutePath(), "-namespace","http://www.ebay.com/marketplace/mobile/v1/services", //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; performDirectCodeGen(testArgs, binDir); String path = destDir.getAbsolutePath()+"/gen-meta-src/META-INF/soa/services/wsdl/RIMApplicationProcessService_mns.wsdl"; nsc.setNs2("http://www.w3.org/2001/XMLSchema"); Node node = getNodeDetails(nsc,"//ns2:import",path); String prefix = node.getPrefix(); assertNull(prefix); } @Test public void mnsIssue2() throws Exception{ File wsdl = getCodegenQEDataFileInput("Testing.wsdl"); String testArgs[] = new String[] { "-servicename","TestService", "-genType", "WsdlConversionToMns", "-wsdl",wsdl.getAbsolutePath(), //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; performDirectCodeGen(testArgs, binDir); String path = destDir.getAbsolutePath()+"/gen-meta-src/META-INF/soa/services/wsdl/TestService_mns.wsdl"; nsc.setNs2("http://www.w3.org/2001/XMLSchema"); Node node = getNodeDetails(nsc,"//ns2:import",path); String prefix = node.getPrefix(); assertEquals(prefix,"xsd"); } @Test public void mnsIssue21() throws Exception{ File wsdl = getCodegenQEDataFileInput("SOAQEConsumerIdTest1V1.wsdl"); String testArgs[] = new String[] { "-servicename","SOAQEConsumerIdTest1", "-genType", "WsdlConversionToMns", "-wsdl",wsdl.getAbsolutePath(), //"-src", destDir.getAbsolutePath(), "-dest", destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer","COMMON", "-bin", binDir.getAbsolutePath(), "-pr",prDir.getAbsolutePath(), }; performDirectCodeGen(testArgs, binDir); String path = destDir.getAbsolutePath()+"/gen-meta-src/META-INF/soa/services/wsdl/SOAQEConsumerIdTest1_mns.wsdl"; nsc.setNs2("http://www.w3.org/2001/XMLSchema"); Node node = getNodeDetails(nsc,"//ns2:import",path); String prefix = node.getPrefix(); assertEquals(prefix,"xs"); } }