/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright 2008 Pentaho Corporation. All rights reserved.
*
*/
package org.pentaho.test.platform.plugin.pluginmgr;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.pentaho.platform.api.engine.IContentGenerator;
import org.pentaho.platform.api.engine.IPentahoSession;
import org.pentaho.platform.api.engine.IPlatformPlugin;
import org.pentaho.platform.api.engine.IPluginManager;
import org.pentaho.platform.api.engine.IPluginProvider;
import org.pentaho.platform.api.engine.IServiceManager;
import org.pentaho.platform.api.engine.ISolutionEngine;
import org.pentaho.platform.api.engine.PlatformPluginRegistrationException;
import org.pentaho.platform.api.engine.PluginServiceDefinition;
import org.pentaho.platform.api.engine.ServiceInitializationException;
import org.pentaho.platform.api.engine.IPentahoDefinableObjectFactory.Scope;
import org.pentaho.platform.api.repository.ISolutionRepository;
import org.pentaho.platform.engine.core.solution.ContentGeneratorInfo;
import org.pentaho.platform.engine.core.system.PentahoSessionHolder;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.engine.core.system.StandaloneSession;
import org.pentaho.platform.engine.services.solution.SolutionEngine;
import org.pentaho.platform.plugin.services.pluginmgr.DefaultPluginManager;
import org.pentaho.platform.plugin.services.pluginmgr.PlatformPlugin;
import org.pentaho.platform.plugin.services.pluginmgr.servicemgr.AxisWebServiceManager;
import org.pentaho.platform.plugin.services.pluginmgr.servicemgr.DefaultServiceManager;
import org.pentaho.platform.plugin.services.pluginmgr.servicemgr.IServiceTypeManager;
import org.pentaho.platform.plugin.services.webservices.content.StyledHtmlAxisServiceLister;
import org.pentaho.platform.repository.solution.filebased.FileBasedSolutionRepository;
import org.pentaho.test.platform.engine.core.EchoServiceBean;
import org.pentaho.test.platform.engine.core.MicroPlatform;
import org.pentaho.test.platform.engine.services.ContentGeneratorUtil;
@SuppressWarnings("nls")
public class AxisWebServiceManagerTest {
private MicroPlatform microPlatform;
/*
* Wire up an in-memory platform to register and expose plug-in web services.
*/
@SuppressWarnings("deprecation")
@Before
public void init0() throws ServiceInitializationException {
//set solution path to a place that hosts an axis config file
microPlatform = new MicroPlatform("plugin-mgr/test-res/AxisWebServiceManagerTest/");
assertNotNull(PentahoSystem.getObjectFactory());
microPlatform.define(ISolutionEngine.class, SolutionEngine.class);
assertNotNull(PentahoSystem.getObjectFactory());
microPlatform.define(ISolutionRepository.class, FileBasedSolutionRepository.class);
microPlatform.define(IPluginManager.class, DefaultPluginManager.class, Scope.GLOBAL);
microPlatform.define(IServiceManager.class, DefaultServiceManager.class, Scope.GLOBAL);
microPlatform.define(IPluginProvider.class, TstPluginProvider.class);
IServiceTypeManager axisManager = new AxisWebServiceManager();
DefaultServiceManager sm = (DefaultServiceManager)PentahoSystem.get(IServiceManager.class);
sm.setServiceTypeManagers(Arrays.asList(axisManager));
microPlatform.init();
new StandaloneSession();
PentahoSystem.get(IPluginManager.class).reload(PentahoSessionHolder.getSession());
}
/*
* The following tests are checking that the HtmlServiceLister (content generator) outputs
* the correct meta information about the services defined in the test plugin.
* They are integration tests in the sense that all the work of registering the plugin
* that defines the services and content generators is done by actual platform
* modules as it would normally happen, and is not mocked for these tests.
*/
@Test
public void testExecuteUrlListed() throws Exception {
IContentGenerator serviceLister = new StyledHtmlAxisServiceLister();
String html = ContentGeneratorUtil.getContentAsString(serviceLister);
System.out.println(html);
assertTrue("Run URL is missing", html.contains("/content/ws-run/echoService"));
}
@Test
public void testWsdlUrlListed() throws Exception {
IContentGenerator serviceLister = new StyledHtmlAxisServiceLister();
String html = ContentGeneratorUtil.getContentAsString(serviceLister);
System.out.println(html);
assertTrue("WSDL URL is missing", html.contains("/content/ws-wsdl/echoService"));
}
@Test
@Ignore
public void testListingPageStyled() throws Exception {
IContentGenerator serviceLister = new StyledHtmlAxisServiceLister();
String html = ContentGeneratorUtil.getContentAsString(serviceLister);
System.out.println(html);
assertTrue("style is missing", html.contains(".h1"));
assertTrue("style is missing", html.contains("text/css"));
}
@Test
public void testMetaInf() throws Exception {
IContentGenerator serviceLister = new StyledHtmlAxisServiceLister();
String html = ContentGeneratorUtil.getContentAsString(serviceLister);
System.out.println(html);
assertTrue("title is not displayed", html.contains("junit echo service"));
}
public static class TstPluginProvider implements IPluginProvider {
public List<IPlatformPlugin> getPlugins(IPentahoSession session) throws PlatformPluginRegistrationException {
PlatformPlugin p = new PlatformPlugin();
p.setId("testPlugin");
p.setSourceDescription("");
ContentGeneratorInfo cg1 = new ContentGeneratorInfo();
cg1.setDescription("Mock web service execution generator");
cg1.setId("ws-run");
cg1.setType("ws-run"); //type is used as the key to verify that there is a cg that can handle a ws request
cg1.setTitle("Mock web service execution generator");
cg1.setClassname("org.pentaho.test.platform.plugin.pluginmgr.ContentGenerator1");
p.addContentGenerator(cg1);
ContentGeneratorInfo cg2 = new ContentGeneratorInfo();
cg2.setDescription("Mock WSDL generator");
cg2.setId("ws-wsdl");
cg2.setType("ws-wsdl"); //type is used as the key to verify that there is a cg that can handle a wsdl request
cg2.setTitle("Mock WSDL generator");
cg2.setClassname("org.pentaho.test.platform.plugin.pluginmgr.ContentGenerator1");
p.addContentGenerator(cg2);
PluginServiceDefinition ws = new PluginServiceDefinition();
ws.setId("echoService");
ws.setServiceClass(EchoServiceBean.class.getName());
ws.setTypes(new String[] { "xml" });
ws.setTitle("junit echo service");
p.addWebservice(ws);
return Arrays.asList((IPlatformPlugin) p);
}
}
}