package org.ebayopensource.turmeric.tools.codegen;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
public class BetterToolingQE2Test extends AbstractServiceGeneratorTestCase {
org.ebayopensource.turmeric.tools.codegen.ServiceGenerator sgen;
NamespaceContextImpl nsc;
String testArgs[] = null;
String testArgs1[] = null;
String consumerPath;
File consumerFile;
URL url;
URL[] urls;
ClassLoader loader;
Class cls = null;
File file;
File binDir = null;
File destDir = null;
Properties intfProper = new Properties();
@Before
public void initialize() throws Exception {
sgen = new org.ebayopensource.turmeric.tools.codegen.ServiceGenerator();
nsc = new NamespaceContextImpl();
destDir = getTestDestDir();
binDir = testingdir.getFile("bin");
intfProper
.put("service_interface_class_name",
"com.ebayopensource.test.soaframework.tools.codegen.SimpleServiceInterface");
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");
}
@Test
public void testEnvmapperConsumer() throws Exception {
File wsdl = getCodegenQEDataFileInput("AccountService.wsdl");
testArgs = new String[] {
"-servicename",
"NewService",
"-genType",
"Consumer",
"-wsdl",
wsdl.getAbsolutePath(),
"-jdest",
destDir.getAbsolutePath() + "/src",
"-dest",
destDir.getAbsolutePath(),
"-scv",
"1.2.3",
"-slayer",
"COMMON",
"-pr",
destDir.getAbsolutePath(),
"-bin",
binDir.getAbsolutePath(),
"-envmapper",
"org.ebayopensource.turmeric.tools.codegen.EnvironmentMapperImpl",
"-adminname", "xyz1",
};
createConsumerPropsFile();
performDirectCodeGen(testArgs, binDir);
consumerPath = destDir.getAbsolutePath()
+ "/src/org/ebayopensource/turmeric/common/v1/services/gen/BaseXyz1Consumer.java";
consumerFile = new File(consumerPath);
assertTrue(consumerFile.exists());
try {
cls = getClass(binDir,
"org.ebayopensource.turmeric.common.v1.services.gen.BaseXyz1Consumer");
cls.getDeclaredField("s_envMapper");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
} catch (NoSuchFieldException e) {
}
}
@Test
public void testEnvmapperForClientGenType() throws Exception {
File wsdl = getCodegenQEDataFileInput("AccountService.wsdl");
testArgs = new String[] {
"-servicename",
"NewService",
"-genType",
"Client",
"-wsdl",
wsdl.getAbsolutePath(),
"-dest",
destDir.getAbsolutePath(),
"-jdest",
destDir.getAbsolutePath() + "/src",
"-scv",
"1.2.3",
"-slayer",
"COMMON",
"-pr",
destDir.getAbsolutePath(),
"-bin",
binDir.getAbsolutePath(),
"-envmapper",
"org.ebayopensource.turmeric.tools.codegen.EnvironmentMapperImpl",
"-adminname", "xyz1", "-environment", "production", "-cn",
"MyClientName", "-gt"
};
createConsumerPropsFile();
performDirectCodeGen(testArgs, binDir);
consumerPath = destDir.getAbsolutePath()
+ "/src/org/ebayopensource/turmeric/common/v1/services/gen/BaseXyz1Consumer.java";
consumerFile = new File(consumerPath);
assertTrue(consumerFile.exists());
try {
cls = getClass(binDir,
"org.ebayopensource.turmeric.common.v1.services.gen.BaseXyz1Consumer");
cls.getDeclaredField("s_envMapper");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
} catch (NoSuchFieldException e) {
}
}
@Test
public void testEnvmapperForSharedConsumer() throws Exception {
File wsdl = getCodegenQEDataFileInput("AccountService.wsdl");
createInterfacePropsFile(intfProper, destDir.getAbsolutePath());
testArgs = new String[] { "-servicename", "AccountService", "-wsdl",
wsdl.getAbsolutePath(), "-genType", "ServiceMetadataProps",
"-src", destDir.getAbsolutePath(), "-dest",
destDir.getAbsolutePath(), "-scv", "1.2.3", "-slayer",
"COMMON", "-bin", binDir.getAbsolutePath(), "-pr",
destDir.getAbsolutePath(),
};
testArgs1 = new String[] {
"-servicename",
"AccountService",
"-genType",
"ServiceFromWSDLIntf",
"-wsdl",
wsdl.getAbsolutePath(),
"-dest",
destDir.getAbsolutePath(),
"-jdest",
destDir.getAbsolutePath() + "/gen-src/client",
"-scv",
"1.2.3",
"-slayer",
"COMMON",
"-pr",
destDir.getAbsolutePath(),
"-bin",
binDir.getAbsolutePath(),
"-envmapper",
"org.ebayopensource.turmeric.tools.codegen.EnvironmentMapperImpl",
"-adminname", "xyz", "-environment", "prod"
};
performDirectCodeGen(testArgs, binDir);
performDirectCodeGen(testArgs1, binDir);
consumerPath = destDir.getAbsolutePath()
+ "/gen-src/client/com/ebayopensource/test/soaframework/tools/codegen/newadminname/gen/SharedNewadminnameConsumer.java";
consumerFile = new File(consumerPath);
assertTrue(consumerFile.exists());
try {
cls = getClass(binDir,
"org.ebayopensource.turmeric.common.v1.services.gen.BaseXyz1Consumer");
cls.getDeclaredField("s_envMapper");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
} catch (NoSuchFieldException e) {
}
}
@Test
public void testEnvmapperNotInConsumer() throws Exception {
File wsdl = getCodegenQEDataFileInput("AccountService.wsdl");
testArgs = new String[] { "-servicename", "NewService", "-genType",
"Consumer", "-wsdl", wsdl.getAbsolutePath(), "-dest",
destDir.getAbsolutePath(), "-jdest",
destDir.getAbsolutePath() + "/src", "-scv", "1.2.3", "-slayer",
"COMMON", "-pr", destDir.getAbsolutePath(), "-bin",
binDir.getAbsolutePath(), "-adminname", "xyz1", "-environment",
"prod"
};
createConsumerPropsFile();
performDirectCodeGen(testArgs, binDir);
consumerPath = destDir.getAbsolutePath()
+ "/src/org/ebayopensource/turmeric/common/v1/services/gen/BaseXyz1Consumer.java";
consumerFile = new File(consumerPath);
assertTrue(consumerFile.exists());
try {
cls = getClass(binDir,
"com.ebayopensource.turmeric.common.v1.services.gen.BaseXyz1Consumer");
cls.getDeclaredField("s_envMapper");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
} catch (NoSuchFieldException e) {
}
}
private void createConsumerPropsFile() throws Exception {
File dir = new File(destDir.getAbsolutePath());
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(destDir.getAbsolutePath()
+ "/service_consumer_project.properties");
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.0");
pro.setProperty("not_generate_base_consumer", "xyz");
pro.setProperty("envMapper",
"org.ebayopensource.turmeric.tools.codegen.EnvironmentMapperImpl");
FileOutputStream out = new FileOutputStream(destDir.getAbsolutePath()
+ "/service_consumer_project.properties");
pro.store(out, null);
in.close();
}
private Class<Object> getClass(File file, String className)
throws ClassNotFoundException, MalformedURLException {
url = file.toURI().toURL();
urls = new URL[] { url };
loader = new URLClassLoader(urls);
cls = loader.loadClass(className);
return cls;
}
public List<String> getNodeDetails(NamespaceContext nsc, String exprString,
String filePath) throws XPathExpressionException {
List<String> list = new ArrayList<String>();
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);
String svcName = null;
NamedNodeMap attMap = result.getAttributes();
Node att = attMap.getNamedItem("group");
if (att != null)
svcName = att.getNodeValue();
if (result != null) {
list.add(result.getNodeName());
list.add(result.getTextContent());
list.add(svcName);
}
factory = null;
xpath = null;
expression = null;
result = null;
attMap = null;
att = null;
return list;
}
@After
public void deinitialize() {
sgen = null;
nsc = null;
testArgs = null;
testArgs1 = null;
consumerPath = null;
consumerFile = null;
url = null;
urls = null;
loader = null;
cls = null;
file = null;
}
}