/*******************************************************************************
* Copyright (c) 2010 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.ws.ui.bot.test.sample;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.MessageFormat;
import java.util.logging.Level;
import javax.xml.namespace.QName;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.jboss.reddeer.common.wait.WaitUntil;
import org.jboss.reddeer.eclipse.condition.ConsoleHasText;
import org.jboss.reddeer.junit.runner.RedDeerSuite;
import org.jboss.reddeer.workbench.impl.editor.TextEditor;
import org.jboss.tools.ws.reddeer.ui.wizards.ws.ui.SampleWebServiceWizard;
import org.jboss.tools.ws.reddeer.ui.wizards.ws.ui.SimpleWebServiceWizard;
import org.jboss.tools.ws.ui.bot.test.soap.SOAPTestBase;
import org.jboss.tools.ws.ui.bot.test.utils.Asserts;
import org.jboss.tools.ws.ui.bot.test.utils.ResourceHelper;
import org.jboss.tools.ws.ui.bot.test.utils.ServersViewHelper;
import org.jboss.tools.ws.ui.bot.test.wsclient.WSClient;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Tests for Sample/Simple Web Service wizard
*
* @author jjankovi
* @author Jan Richter
*
*/
@RunWith(RedDeerSuite.class)
public class SampleSoapServicesTest extends SOAPTestBase {
private static final String SOAP_REQUEST = getSoapRequest(
"<ns1:sayHello xmlns:ns1=\"http://{0}/\"><arg0>{1}</arg0></ns1:sayHello>");
private static final String SERVER_URL = "localhost:8080";
@Override
protected String getWsProjectName() {
return "SampleSOAPWS";
}
@Test
public void testSampleSoapWS() {
createSampleService(getWsProjectName(), "HelloServiceSample", "sample", "SampleService");
checkSoapService(getWsProjectName(), "HelloServiceSample", "sample", "SampleService", "You");
}
@Test
public void testSimpleSoapWS() {
createSimpleService(getWsProjectName(), "HelloServiceSimple", "sample", "SimpleService");
checkSoapService(getWsProjectName(), "HelloServiceSimple", "sample", "SimpleService", "You");
}
private IProject getProject(String project) {
return ResourcesPlugin.getWorkspace().getRoot().getProject(project);
}
private IFile getDeploymentDescriptor(String project) {
return getProject(project).getFile("WebContent/WEB-INF/web.xml");
}
private void createSampleService(String project, String name, String pkg, String cls) {
SampleWebServiceWizard w = new SampleWebServiceWizard();
w.open();
w.setProjectName(project);
w.setServiceName(name);
w.setPackageName(pkg);
w.setClassName(cls);
w.finish();
}
private void createSimpleService(String project, String name, String pkg, String cls) {
SimpleWebServiceWizard w = new SimpleWebServiceWizard();
w.open();
w.setProjectName(project);
w.setServiceName(name);
w.setPackageName(pkg);
w.setClassName(cls);
w.finish();
}
private void checkSoapService(String project, String svcName, String svcPkg, String svcClass, String msgContent) {
TextEditor editor = new TextEditor(svcClass + ".java");
editor.activate();
String code = editor.getText();
Asserts.assertContain(code, "package " + svcPkg + ";");
String dd = ResourceHelper.readFile(getDeploymentDescriptor(project));
Asserts.assertContain(dd, "<servlet-name>" + svcName + "</servlet-name>");
ServersViewHelper.removeProjectFromServer(project, getConfiguredServerName());
ServersViewHelper.runProjectOnServer(project);
ServersViewHelper.waitForDeployment(project, getConfiguredServerName());
try {
WSClient c = new WSClient(new URL("http://" + SERVER_URL + "/" + project + "/" + svcName),
new QName("http://" + svcPkg + "/", svcClass + "Service"),
new QName("http://" + svcPkg + "/", svcClass + "Port"));
Asserts.assertContain(c.callService(MessageFormat.format(SOAP_REQUEST, svcPkg, msgContent)),
"Hello " + msgContent + "!");
new WaitUntil(new ConsoleHasText("Hello: " + msgContent));
} catch (MalformedURLException e) {
LOGGER.log(Level.WARNING, e.getMessage(), e);
}
}
@Override
protected String getEarProjectName() {
return null;
}
}