/*******************************************************************************
* 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.eclipse.functional.test.ft.wsdlsvc;
import static org.junit.Assume.assumeNoException;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.wsdl.Definition;
import junit.framework.Assert;
import org.apache.commons.lang.StringUtils;
import org.ebayopensource.turmeric.eclipse.core.model.services.ServiceFromWsdlParamModel;
import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants;
import org.ebayopensource.turmeric.eclipse.functional.test.AbstractTestCase;
import org.ebayopensource.turmeric.eclipse.functional.test.SoaTestConstants;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOARepositorySystem;
import org.ebayopensource.turmeric.eclipse.resources.ui.model.ConsumerFromJavaParamModel;
import org.ebayopensource.turmeric.eclipse.resources.util.SOAServiceUtil;
import org.ebayopensource.turmeric.eclipse.services.buildsystem.ServiceCreator;
import org.ebayopensource.turmeric.eclipse.test.util.FunctionalTestHelper;
import org.ebayopensource.turmeric.eclipse.test.util.ProjectArtifactValidator;
import org.ebayopensource.turmeric.eclipse.test.util.SimpleTestUtil;
import org.ebayopensource.turmeric.eclipse.test.util.ZipExtractor;
import org.ebayopensource.turmeric.eclipse.test.utils.ProjectUtil;
import org.ebayopensource.turmeric.eclipse.test.utils.ServicesUtil;
import org.ebayopensource.turmeric.eclipse.test.utils.WsdlUtilTest;
import org.ebayopensource.turmeric.eclipse.utils.plugin.ProgressUtil;
import org.ebayopensource.turmeric.eclipse.utils.plugin.WorkspaceUtil;
import org.ebayopensource.turmeric.eclipse.utils.wsdl.WSDLUtil;
import org.ebayopensource.turmeric.repositorysystem.imp.impl.TurmericOrganizationProvider;
import org.ebayopensource.turmeric.repositorysystem.imp.impl.TurmericRepositorySystem;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.IProgressMonitor;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
/**
* @author shrao
*
*/
public class ConsumerFromIntfTest extends AbstractTestCase {
public static String PARENT_DIR = org.eclipse.core.runtime.Platform
.getLocation().toOSString();
static String WSDL_FILE = ServiceSetupCleanupValidate
.getWsdlFilePath("CalcService.wsdl");
static String publicServiceName = null;
static String adminName = null;
final String namespacePart = "blogs";
static String dataDirectory = WsdlUtilTest.getPluginOSPath(
SoaTestConstants.PLUGIN_ID,"data");
@BeforeClass
public static void setUp(){
ZipExtractor zip = new ZipExtractor();
zip.extract(dataDirectory+"/ConsumerFromIntfTest.zip",dataDirectory +"/extractedData");
}
/**
* @throws java.lang.Exception
*/
@Override
@Before
public void setUpBeforeClass() throws Exception {
// Thread.sleep(600000);
SimpleTestUtil.setAutoBuilding(false);
// Thread.sleep(60000);
ISOARepositorySystem repositorySystem = new TurmericRepositorySystem();
GlobalRepositorySystem.instanceOf().setActiveRepositorySystem(
repositorySystem);
publicServiceName = ServiceSetupCleanupValidate
.getServiceName(WSDL_FILE);
adminName = ServicesUtil.getAdminName(publicServiceName);
System.out.println(" --- WSDL FILE : " + WSDL_FILE);
System.out.println(" --- Service Admin Name : " + adminName);
ProjectUtil.cleanUpWS();
// EBoxServiceSetupCleanupValidate.cleanupWSConsumer(eBoxServiceName);
ServiceSetupCleanupValidate.cleanup(adminName);
FunctionalTestHelper.ensureM2EcipseBeingInited();
}
/*@Override
public void setUp() throws Exception {
super.setUp();
// Thread.sleep(600000);
SimpleTestUtil.setAutoBuilding(false);
// Thread.sleep(60000);
ISOARepositorySystem repositorySystem = new TurmericRepositorySystem();
GlobalRepositorySystem.instanceOf().setActiveRepositorySystem(
repositorySystem);
eBoxServiceName = EBoxServiceSetupCleanupValidate
.getServiceName(WSDL_FILE);
eBoxServiceName = ServicesUtil.getAdminName(eBoxServiceName);
System.out.println(" --- WSDL FILE : " + WSDL_FILE);
System.out.println(" --- eBox Service name : " + eBoxServiceName);
ProjectUtil.cleanUpWS();
// EBoxServiceSetupCleanupValidate.cleanupWSConsumer(eBoxServiceName);
EBoxServiceSetupCleanupValidate.cleanup(eBoxServiceName);
EBoxFunctionalTestHelper.ensureM2EcipseBeingInited();
}*/
@Test
@Ignore("failing")
public void testConsumeCalculatorSvc() throws Exception {
// Turn on the auto-build for the builders to kick-in
SimpleTestUtil.setAutoBuilding(true);
try {
Boolean b = createServiceFromWsdl(new File(
WSDL_FILE).toURI().toURL(),namespacePart);
Assert.assertTrue(adminName + " creation failed", b);
StringBuffer failMessages = ProjectArtifactValidator.getErroredFileMessage();
ProjectArtifactValidator.getErroredFileMessage().setLength(0);
// validate artifacts
boolean intfMatch = ServiceSetupCleanupValidate
.validateIntfArtifacts(
WorkspaceUtil.getProject(adminName),
adminName);
Assert.assertTrue(" --- Service artifacts validation failed for "+ failMessages,
intfMatch);
String consumerId = "CalcConsumer_Id";
List<String> environment = new ArrayList<String>();
environment.add("production");
ConsumerFromJavaParamModel model = new ConsumerFromJavaParamModel();
model.setBaseConsumerSrcDir("src");
model.setClientName(adminName + "Consumer");
ArrayList<String> list = new ArrayList<String>();
list.add(adminName);
model.setServiceNames(list);
model.setParentDirectory(PARENT_DIR);
model.setConsumerId(consumerId);
model.setEnvironments(environment);
SimpleTestUtil.setAutoBuilding(false);
ServiceCreator.createConsumerFromJava(model,
ProgressUtil.getDefaultMonitor(null));
SimpleTestUtil.setAutoBuilding(true);
// Add validation for the expected artifacts and contents..
boolean consumerMatch = ServiceSetupCleanupValidate
.validateConsumerArtifacts(
WorkspaceUtil.getProject(adminName
+ "Consumer"), adminName + "Consumer");
System.out.println(failMessages.toString());
Assert.assertTrue(" --- Service artifacts validation failed for " + failMessages.toString(),
consumerMatch);
ProjectArtifactValidator.getErroredFileMessage().setLength(0);
// we know that the CC.xml or GCC.xml is the last artifact to be
// created
// The project exists as
IProject consProject = WorkspaceUtil.getProject(model
.getClientName());
consProject.build(IncrementalProjectBuilder.FULL_BUILD,
ProgressUtil.getDefaultMonitor(null));
// if project build goes through, its a successful test
} catch (NoClassDefFoundError ex) {
assumeNoException(ex);
}
catch (Exception ex) {
System.out.println("--- Exception in consumeCalculatorSvc() - "
+ ex.getMessage());
System.out
.println("--- Exception in consumeCalculatorSvc() toString - "
+ ex.toString());
System.out
.println("--- Exception in consumeCalculatorSvc() getCause - "
+ ex.getCause().getMessage());
Assert.fail("Exception in consumeCalculatorSvc() - "
+ ex.getLocalizedMessage());
}
}
public static boolean createServiceFromWsdl(URL wsdlUrl, String nsPart) throws Exception {
try {
final ServiceFromWsdlParamModel model = new ServiceFromWsdlParamModel();
// final String nsPart = functionalDomain.toLowerCase();
Definition wsdl = WSDLUtil.readWSDL(wsdlUrl.getFile());
final String publicService = WSDLUtil
.getServiceNameFromWSDL(wsdl);
final String serviceVersion = "1.0.0";
final String targetNS = WSDLUtil.getTargetNamespace(wsdl);
if (StringUtils.isBlank(nsPart)) {
nsPart = TurmericOrganizationProvider.INSTANCE.getNamespacePartFromTargetNamespace(targetNS);
}
String serviceName = SOAServiceUtil.computeAdminName(
publicService, nsPart, serviceVersion);
model.setWSDLSourceType(SOAProjectConstants.InterfaceWsdlSourceType.EXISTIING);
model.setOriginalWsdlUrl(wsdlUrl);
model.setWorkspaceRootDirectory(PARENT_DIR);
model.setServiceVersion(serviceVersion);
model.setServiceName(serviceName);
model.setPublicServiceName(publicService);
if (StringUtils.isNotBlank(nsPart)) {
model.setServiceDomain(StringUtils.capitalize(nsPart));
model.setNamespacePart(nsPart);
}
model.setTargetNamespace(targetNS);
model.setBaseConsumerSrcDir(SOAProjectConstants.DEFAULT_BASE_CONSUMER_SOURCE_DIRECTORY);
model.setTypeFolding(true);
model.setServiceInterface(ServicesUtil.getInterfacePackage(
publicService, targetNS));
System.out.println("model.....Intf" + model.getServiceInterface());
String implClass = SOAServiceUtil.generateServiceImplClassName(
publicService, serviceName, targetNS);
model.setServiceImpl(implClass);
System.out.println("model.....Impl" + model.getServiceImpl());
model.setImplName(serviceName + "Impl");
model.setServiceLayer(SOAProjectConstants.ServiceLayer.COMMON
.toString());
model.setTypeNamespace(targetNS);
Map<String, String> namespaceToPacakgeMappings = ServicesUtil
.getNamespaceToPackage(wsdlUrl.getFile());
model.setNamespaceToPacakgeMappings(namespaceToPacakgeMappings);
SimpleTestUtil.setAutoBuilding(false);
IProgressMonitor monitor = ProgressUtil.getDefaultMonitor(null);
ServiceCreator.createServiceFromExistingWSDL(model, monitor);
SimpleTestUtil.setAutoBuilding(true);
WorkspaceUtil.getProject(model.getServiceName()).build(
IncrementalProjectBuilder.FULL_BUILD, monitor);
WorkspaceUtil.getProject(model.getImplName()).build(
IncrementalProjectBuilder.FULL_BUILD, monitor);
return true;
} catch (Exception e) {
return false;
}
}
@AfterClass
public static void deInit(){
ensureClean(dataDirectory +"/extractedData");
}
}