/* * 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 - 2009 Pentaho Corporation. All rights reserved. * */ package org.pentaho.test.platform.plugin.services.webservices; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.axis2.AxisFault; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.description.TransportInDescription; import org.apache.axis2.description.TransportOutDescription; import org.apache.axis2.engine.AxisConfiguration; import org.apache.axis2.transport.local.LocalTransportReceiver; import org.junit.Ignore; import org.junit.Test; import org.pentaho.platform.api.engine.IOutputHandler; import org.pentaho.platform.api.engine.IParameterProvider; import org.pentaho.platform.api.repository.IContentItem; import org.pentaho.platform.engine.core.output.SimpleOutputHandler; import org.pentaho.platform.engine.core.solution.SimpleParameterProvider; import org.pentaho.platform.engine.core.system.PentahoSessionHolder; import org.pentaho.platform.engine.core.system.StandaloneSession; import org.pentaho.platform.plugin.services.pluginmgr.servicemgr.AxisWebServiceManager; import org.pentaho.platform.plugin.services.webservices.content.AxisServiceExecutor; import org.pentaho.platform.util.web.SimpleUrlFactory; import com.mockrunner.mock.web.MockHttpServletRequest; import com.mockrunner.mock.web.MockHttpServletResponse; import com.mockrunner.mock.web.MockServletConfig; import com.mockrunner.mock.web.MockServletContext; @SuppressWarnings("nls") public class AxisServiceExecutorTest { private void setupAxis() throws AxisFault { StandaloneSession session = new StandaloneSession( "test" ); StubServiceSetup setup = new StubServiceSetup(); setup.setSession(session); /* // create a test transport so we can catch the output config.setTransportOut( "http" ); assertEquals( "Transport is wrong", "http", config.getTransportOut() ); */ AxisConfiguration axisConfig = AxisWebServiceManager.currentAxisConfiguration; TransportInDescription tIn = new TransportInDescription( "http" ); StubTransportListener receiver = new StubTransportListener(); tIn.setReceiver(receiver); axisConfig.addTransportIn(tIn); TransportOutDescription tOut = new TransportOutDescription( "http" ); StubTransportSender sender = new StubTransportSender(); tOut.setSender(sender); axisConfig.addTransportOut(tOut); LocalTransportReceiver.CONFIG_CONTEXT = new ConfigurationContext(axisConfig); } @Test @Ignore public void testRunGet1() throws Exception { setupAxis(); AxisServiceExecutor contentGenerator = new AxisServiceExecutor(); assertNotNull( "contentGenerator is null", contentGenerator ); assertNotNull( "Logger is null", contentGenerator.getLogger() ); ByteArrayOutputStream out = new ByteArrayOutputStream(); IOutputHandler outputHandler = new SimpleOutputHandler( out, false ); String baseUrl = "http://testhost:testport/testcontent"; Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>(); SimpleParameterProvider requestParams = new SimpleParameterProvider(); parameterProviders.put( IParameterProvider.SCOPE_REQUEST, requestParams ); SimpleParameterProvider pathParams = new SimpleParameterProvider(); pathParams.setParameter( "path" , "/StubService/getString"); pathParams.setParameter( "remoteaddr" , "http:test"); parameterProviders.put( "path", pathParams ); SimpleUrlFactory urlFactory = new SimpleUrlFactory( baseUrl+"?" ); List<String> messages = new ArrayList<String>(); contentGenerator.setOutputHandler(outputHandler); MimeTypeListener mimeTypeListener = new MimeTypeListener(); outputHandler.setMimeTypeListener(mimeTypeListener); contentGenerator.setMessagesList(messages); contentGenerator.setParameterProviders(parameterProviders); contentGenerator.setSession(PentahoSessionHolder.getSession()); contentGenerator.setUrlFactory(urlFactory); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockServletConfig servletConfig = new MockServletConfig(); MockServletContext servletContext = new MockServletContext(); servletConfig.setServletContext( servletContext ); pathParams.setParameter("servletconfig", servletConfig); request.setMethod( "GET" ); request.setRequestURI( "/pentaho/content/ws-run/StubService/getString" ); request.setRequestURL( "http://localhost:8080/pentaho/content/ws-run/StubService/getString" ); request.setRemoteAddr( "127.0.0.1" ); pathParams.setParameter( "httprequest" , request ); pathParams.setParameter( "httpresponse" , response ); try { IContentItem contentItem = outputHandler.getOutputContentItem( "response", "content", "", null, null ); assertEquals( "content type is wrong", null, contentItem.getMimeType() ); contentGenerator.setContentType( "text/xml" ); contentItem = outputHandler.getOutputContentItem( "response", "content", "", null, null ); assertEquals( "content type is wrong", "text/xml", contentItem.getMimeType() ); StubTransportSender.transportOutStr = null; StubService.getStringCalled = false; contentGenerator.createContent(); assertTrue( StubService.getStringCalled ); String content = StubTransportSender.transportOutStr; assertEquals( "result are wrong", "<ns:getStringResponse xmlns:ns=\"http://webservices.services.plugin.platform.test.pentaho.org\"><return>test result</return></ns:getStringResponse>", content ); System.out.println( content ); } catch (Exception e) { e.printStackTrace(); assertTrue( "Exception occurred", false ); } } @Test @Ignore public void testRunGet2() throws Exception { StandaloneSession session = new StandaloneSession( "test" ); AxisServiceExecutor contentGenerator = new AxisServiceExecutor(); assertNotNull( "contentGenerator is null", contentGenerator ); assertNotNull( "Logger is null", contentGenerator.getLogger() ); ByteArrayOutputStream out = new ByteArrayOutputStream(); IOutputHandler outputHandler = new SimpleOutputHandler( out, false ); String baseUrl = "http://testhost:testport/testcontent"; Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>(); SimpleParameterProvider requestParams = new SimpleParameterProvider(); parameterProviders.put( IParameterProvider.SCOPE_REQUEST, requestParams ); SimpleParameterProvider pathParams = new SimpleParameterProvider(); pathParams.setParameter( "path" , "/StubService/setString?str=testinput"); parameterProviders.put( "path", pathParams ); SimpleUrlFactory urlFactory = new SimpleUrlFactory( baseUrl+"?" ); List<String> messages = new ArrayList<String>(); contentGenerator.setOutputHandler(outputHandler); MimeTypeListener mimeTypeListener = new MimeTypeListener(); outputHandler.setMimeTypeListener(mimeTypeListener); contentGenerator.setMessagesList(messages); contentGenerator.setParameterProviders(parameterProviders); contentGenerator.setSession(session); contentGenerator.setUrlFactory(urlFactory); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockServletConfig servletConfig = new MockServletConfig(); MockServletContext servletContext = new MockServletContext(); servletConfig.setServletContext( servletContext ); pathParams.setParameter("servletconfig", servletConfig); request.setMethod( "GET" ); request.setRequestURI( "/pentaho/content/ws-run/StubService/setString" ); request.setRequestURL( "http://localhost:8080/pentaho/content/ws-run/StubService/getString" ); request.setRemoteAddr( "127.0.0.1" ); request.setQueryString("str=testinput"); pathParams.setParameter( "httprequest" , request ); pathParams.setParameter( "httpresponse" , response ); try { StubService.setStringCalled = false; StubTransportSender.transportOutStr = null; contentGenerator.createContent(); assertTrue( StubService.setStringCalled ); assertEquals( "testinput", StubService.str ); String content = StubTransportSender.transportOutStr; System.out.println( content ); } catch (Exception e) { e.printStackTrace(); assertTrue( "Exception occurred", false ); } } @Test @Ignore public void testRunGet3() throws Exception { StandaloneSession session = new StandaloneSession( "test" ); AxisServiceExecutor contentGenerator = new AxisServiceExecutor(); assertNotNull( "contentGenerator is null", contentGenerator ); assertNotNull( "Logger is null", contentGenerator.getLogger() ); ByteArrayOutputStream out = new ByteArrayOutputStream(); IOutputHandler outputHandler = new SimpleOutputHandler( out, false ); String baseUrl = "http://testhost:testport/testcontent"; Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>(); SimpleParameterProvider requestParams = new SimpleParameterProvider(); parameterProviders.put( IParameterProvider.SCOPE_REQUEST, requestParams ); SimpleParameterProvider pathParams = new SimpleParameterProvider(); pathParams.setParameter( "path" , "/StubService/throwsError1"); parameterProviders.put( "path", pathParams ); SimpleUrlFactory urlFactory = new SimpleUrlFactory( baseUrl+"?" ); List<String> messages = new ArrayList<String>(); contentGenerator.setOutputHandler(outputHandler); MimeTypeListener mimeTypeListener = new MimeTypeListener(); outputHandler.setMimeTypeListener(mimeTypeListener); contentGenerator.setMessagesList(messages); contentGenerator.setParameterProviders(parameterProviders); contentGenerator.setSession(session); contentGenerator.setUrlFactory(urlFactory); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockServletConfig servletConfig = new MockServletConfig(); MockServletContext servletContext = new MockServletContext(); servletConfig.setServletContext( servletContext ); pathParams.setParameter("servletconfig", servletConfig); request.setMethod( "GET" ); request.setRequestURI( "/pentaho/content/ws-run/StubService/throwsError1" ); request.setRequestURL( "http://localhost:8080/pentaho/content/ws-run/StubService/throwsError1" ); request.setRemoteAddr( "127.0.0.1" ); pathParams.setParameter( "httprequest" , request ); pathParams.setParameter( "httpresponse" , response ); try { StubService.throwsError1Called = false; StubTransportSender.transportOutStr = null; contentGenerator.createContent(); assertTrue( StubService.throwsError1Called ); String content = StubTransportSender.transportOutStr; assertEquals( "Content should be empty", null, content ); System.out.println( content ); } catch (Exception e) { e.printStackTrace(); assertTrue( "Exception occurred", false ); } } @Test @Ignore public void testRunGet4() throws Exception { StandaloneSession session = new StandaloneSession( "test" ); AxisServiceExecutor contentGenerator = new AxisServiceExecutor(); assertNotNull( "contentGenerator is null", contentGenerator ); assertNotNull( "Logger is null", contentGenerator.getLogger() ); ByteArrayOutputStream out = new ByteArrayOutputStream(); IOutputHandler outputHandler = new SimpleOutputHandler( out, false ); String baseUrl = "http://testhost:testport/testcontent"; Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>(); SimpleParameterProvider requestParams = new SimpleParameterProvider(); parameterProviders.put( IParameterProvider.SCOPE_REQUEST, requestParams ); SimpleParameterProvider pathParams = new SimpleParameterProvider(); pathParams.setParameter( "path" , "/StubService/throwsError2"); parameterProviders.put( "path", pathParams ); SimpleUrlFactory urlFactory = new SimpleUrlFactory( baseUrl+"?" ); List<String> messages = new ArrayList<String>(); contentGenerator.setOutputHandler(outputHandler); MimeTypeListener mimeTypeListener = new MimeTypeListener(); outputHandler.setMimeTypeListener(mimeTypeListener); contentGenerator.setMessagesList(messages); contentGenerator.setParameterProviders(parameterProviders); contentGenerator.setSession(session); contentGenerator.setUrlFactory(urlFactory); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockServletConfig servletConfig = new MockServletConfig(); MockServletContext servletContext = new MockServletContext(); servletConfig.setServletContext( servletContext ); pathParams.setParameter("servletconfig", servletConfig); request.setMethod( "GET" ); request.setRequestURI( "/pentaho/content/ws-run/StubService/throwsError2" ); request.setRequestURL( "http://localhost:8080/pentaho/content/ws-run/StubService/throwsError2" ); request.setRemoteAddr( "127.0.0.1" ); pathParams.setParameter( "httprequest" , request ); pathParams.setParameter( "httpresponse" , response ); try { StubService.throwsError2Called = false; StubTransportSender.transportOutStr = null; contentGenerator.createContent(); assertTrue( StubService.throwsError2Called ); String content = StubTransportSender.transportOutStr; assertTrue( "results are wrong", content.indexOf( "soapenv:Fault" ) > 0 ); assertTrue( "results are wrong", content.indexOf( "test error 2" ) > 0 ); System.out.println( content ); } catch (Exception e) { e.printStackTrace(); assertTrue( "Exception occurred", false ); } } @Test @Ignore public void testRunGet5() throws Exception { StandaloneSession session = new StandaloneSession( "test" ); AxisServiceExecutor contentGenerator = new AxisServiceExecutor(); assertNotNull( "contentGenerator is null", contentGenerator ); assertNotNull( "Logger is null", contentGenerator.getLogger() ); ByteArrayOutputStream out = new ByteArrayOutputStream(); IOutputHandler outputHandler = new SimpleOutputHandler( out, false ); String baseUrl = "http://testhost:testport/testcontent"; Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>(); SimpleParameterProvider requestParams = new SimpleParameterProvider(); parameterProviders.put( IParameterProvider.SCOPE_REQUEST, requestParams ); SimpleParameterProvider pathParams = new SimpleParameterProvider(); pathParams.setParameter( "path" , "/StubService/bogus"); parameterProviders.put( "path", pathParams ); SimpleUrlFactory urlFactory = new SimpleUrlFactory( baseUrl+"?" ); List<String> messages = new ArrayList<String>(); contentGenerator.setOutputHandler(outputHandler); MimeTypeListener mimeTypeListener = new MimeTypeListener(); outputHandler.setMimeTypeListener(mimeTypeListener); contentGenerator.setMessagesList(messages); contentGenerator.setParameterProviders(parameterProviders); contentGenerator.setSession(session); contentGenerator.setUrlFactory(urlFactory); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockServletConfig servletConfig = new MockServletConfig(); MockServletContext servletContext = new MockServletContext(); servletConfig.setServletContext( servletContext ); pathParams.setParameter("servletconfig", servletConfig); request.setMethod( "GET" ); request.setRequestURI( "/pentaho/content/ws-run/StubService/bogus" ); request.setRequestURL( "http://localhost:8080/pentaho/content/ws-run/StubService/bogus" ); request.setRemoteAddr( "127.0.0.1" ); pathParams.setParameter( "httprequest" , request ); pathParams.setParameter( "httpresponse" , response ); try { StubTransportSender.transportOutStr = null; contentGenerator.createContent(); String content = StubTransportSender.transportOutStr; System.out.println( content ); assertTrue( "results are wrong", content.indexOf( "soapenv:Fault" ) > 0 ); assertTrue( "results are wrong", content.indexOf( "AxisServletHooks" ) > 0 ); } catch (Exception e) { e.printStackTrace(); assertTrue( "Exception occurred", false ); } } @Test @Ignore public void testRunPost1() throws Exception { StandaloneSession session = new StandaloneSession( "test" ); AxisServiceExecutor contentGenerator = new AxisServiceExecutor(); assertNotNull( "contentGenerator is null", contentGenerator ); assertNotNull( "Logger is null", contentGenerator.getLogger() ); ByteArrayOutputStream out = new ByteArrayOutputStream(); IOutputHandler outputHandler = new SimpleOutputHandler( out, false ); String baseUrl = "http://testhost:testport/testcontent"; Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>(); SimpleParameterProvider requestParams = new SimpleParameterProvider(); parameterProviders.put( IParameterProvider.SCOPE_REQUEST, requestParams ); SimpleParameterProvider pathParams = new SimpleParameterProvider(); pathParams.setParameter( "path" , "/StubService"); pathParams.setParameter( "remoteaddr" , "http:test"); parameterProviders.put( "path", pathParams ); SimpleUrlFactory urlFactory = new SimpleUrlFactory( baseUrl+"?" ); List<String> messages = new ArrayList<String>(); contentGenerator.setOutputHandler(outputHandler); MimeTypeListener mimeTypeListener = new MimeTypeListener(); outputHandler.setMimeTypeListener(mimeTypeListener); contentGenerator.setMessagesList(messages); contentGenerator.setParameterProviders(parameterProviders); contentGenerator.setSession(session); contentGenerator.setUrlFactory(urlFactory); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockServletConfig servletConfig = new MockServletConfig(); MockServletContext servletContext = new MockServletContext(); servletConfig.setServletContext( servletContext ); pathParams.setParameter("servletconfig", servletConfig); request.setMethod( "POST" ); request.setRequestURI( "/pentaho/content/ws-run/StubService" ); request.setRequestURL( "http://localhost:8080/pentaho/content/ws-run/StubService" ); request.setRemoteAddr( "127.0.0.1" ); request.setContentType( "application/soap+xml; charset=UTF-8; action=\"urn:getString\"" ); String xml = "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv=\"http://www.w3.org/2003/05/soap-envelope\"><soapenv:Body><ns2:getString xmlns:ns2=\"http://webservice.pentaho.com\"></ns2:getString></soapenv:Body></soapenv:Envelope>"; request.setBodyContent( xml ); pathParams.setParameter( "httprequest" , request ); pathParams.setParameter( "httpresponse" , response ); try { StubTransportSender.transportOutStr = null; StubService.getStringCalled = false; contentGenerator.createContent(); assertTrue( StubService.getStringCalled ); String content = StubTransportSender.transportOutStr; assertEquals( "result are wrong", "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv=\"http://www.w3.org/2003/05/soap-envelope\"><soapenv:Body><ns:getStringResponse xmlns:ns=\"http://webservices.services.plugin.platform.test.pentaho.org\"><return>test result</return></ns:getStringResponse></soapenv:Body></soapenv:Envelope>", content ); System.out.println( content ); } catch (Exception e) { e.printStackTrace(); assertTrue( "Exception occurred", false ); } } @Test @Ignore public void testRunPut1() throws Exception { StandaloneSession session = new StandaloneSession( "test" ); AxisServiceExecutor contentGenerator = new AxisServiceExecutor(); assertNotNull( "contentGenerator is null", contentGenerator ); assertNotNull( "Logger is null", contentGenerator.getLogger() ); ByteArrayOutputStream out = new ByteArrayOutputStream(); IOutputHandler outputHandler = new SimpleOutputHandler( out, false ); String baseUrl = "http://testhost:testport/testcontent"; Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>(); SimpleParameterProvider requestParams = new SimpleParameterProvider(); parameterProviders.put( IParameterProvider.SCOPE_REQUEST, requestParams ); SimpleParameterProvider pathParams = new SimpleParameterProvider(); pathParams.setParameter( "path" , "/StubService"); pathParams.setParameter( "remoteaddr" , "http:test"); parameterProviders.put( "path", pathParams ); SimpleUrlFactory urlFactory = new SimpleUrlFactory( baseUrl+"?" ); List<String> messages = new ArrayList<String>(); contentGenerator.setOutputHandler(outputHandler); MimeTypeListener mimeTypeListener = new MimeTypeListener(); outputHandler.setMimeTypeListener(mimeTypeListener); contentGenerator.setMessagesList(messages); contentGenerator.setParameterProviders(parameterProviders); contentGenerator.setSession(session); contentGenerator.setUrlFactory(urlFactory); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockServletConfig servletConfig = new MockServletConfig(); MockServletContext servletContext = new MockServletContext(); servletConfig.setServletContext( servletContext ); pathParams.setParameter("servletconfig", servletConfig); request.setMethod( "PUT" ); request.setRequestURI( "/pentaho/content/ws-run/StubService" ); request.setRequestURL( "http://localhost:8080/pentaho/content/ws-run/StubService" ); request.setRemoteAddr( "127.0.0.1" ); request.setContentType( "application/soap+xml; charset=UTF-8; action=\"urn:getString\"" ); String xml = "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv=\"http://www.w3.org/2003/05/soap-envelope\"><soapenv:Body><ns2:getString xmlns:ns2=\"http://webservice.pentaho.com\"></ns2:getString></soapenv:Body></soapenv:Envelope>"; request.setBodyContent( xml ); pathParams.setParameter( "httprequest" , request ); pathParams.setParameter( "httpresponse" , response ); try { StubTransportSender.transportOutStr = null; StubService.getStringCalled = false; contentGenerator.createContent(); assertTrue( StubService.getStringCalled ); String content = StubTransportSender.transportOutStr; assertEquals( "result are wrong", "<ns:getStringResponse xmlns:ns=\"http://webservices.services.plugin.platform.test.pentaho.org\"><return>test result</return></ns:getStringResponse>", content ); System.out.println( content ); } catch (Exception e) { e.printStackTrace(); assertTrue( "Exception occurred", false ); } } }