/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.remoting.transport.http.authorization; import java.net.InetAddress; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.management.MBeanServer; import junit.framework.TestCase; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.jboss.remoting.Client; import org.jboss.remoting.InvocationRequest; import org.jboss.remoting.InvokerLocator; import org.jboss.remoting.ServerInvocationHandler; import org.jboss.remoting.ServerInvoker; import org.jboss.remoting.callback.InvokerCallbackHandler; import org.jboss.remoting.transport.Connector; import org.jboss.remoting.transport.PortUtil; /** * Unit test for JBREM-791. * * @author Ron Sigal * @version $Revision: 2631 $ *

* Copyright Aug 14, 2007 *

*/ public class BASICAuthorizationTestCase extends TestCase { public static int port; private static Logger log = Logger.getLogger(BASICAuthorizationTestCase.class); private static boolean firstTime = true; // remoting server connector private Connector connector; private InvokerLocator serverLocator; private TestInvocationHandler invocationHandler; /** * Sets up target remoting server. */ public void setUp() throws Exception { if (firstTime) { firstTime = false; Logger.getLogger("org.jboss.remoting").setLevel(Level.INFO); Logger.getLogger("org.jboss.test.remoting").setLevel(Level.INFO); String pattern = "[%d{ABSOLUTE}] [%t] %5p (%F:%L) - %m%n"; PatternLayout layout = new PatternLayout(pattern); ConsoleAppender consoleAppender = new ConsoleAppender(layout); Logger.getRootLogger().addAppender(consoleAppender); } } public void tearDown() { } /** * Verifies that org.jboss.remoting.transport.http.HttpClientInvoker.getBasicAuth() * does not insert newlines into Base64 encoded name:password string. */ public void testLongNamePassword() throws Throwable { log.info("entering " + getName()); // Start server. String host = InetAddress.getLocalHost().getHostAddress(); port = PortUtil.findFreePort(host); String locatorURI = getTransport() + "://" + host + ":" + port; serverLocator = new InvokerLocator(locatorURI); log.info("Starting remoting server with locator uri of: " + locatorURI); HashMap config = new HashMap(); config.put(InvokerLocator.FORCE_REMOTE, "true"); addExtraServerConfig(config); connector = new Connector(serverLocator, config); connector.create(); invocationHandler = new TestInvocationHandler(); connector.addInvocationHandler("sample", invocationHandler); connector.start(); // Create client. HashMap clientConfig = new HashMap(); clientConfig.put(InvokerLocator.FORCE_REMOTE, "true"); addExtraClientConfig(clientConfig); Client client = new Client(serverLocator, clientConfig); client.connect(); assertEquals("abc", client.invoke("abc")); log.info("client is connected"); // Test invocation with BASIC authorization. HashMap metadata = new HashMap(); String s = "abcdefghijklmnopqursuvwxyz"; String name = s + s; String password = s + s; assertEquals(52, name.length()); assertEquals(52, password.length()); metadata.put("http.basic.username", name); metadata.put("http.basic.password", password); assertEquals("xyz", client.invoke("xyz", metadata)); client.disconnect(); connector.stop(); } protected String getTransport() { return "http"; } protected void addExtraClientConfig(Map config) {} protected void addExtraServerConfig(Map config) {} static class TestInvocationHandler implements ServerInvocationHandler { public Set listeners = new HashSet(); public void addListener(InvokerCallbackHandler callbackHandler) { listeners.add(callbackHandler); } public Object invoke(final InvocationRequest invocation) throws Throwable { return invocation.getParameter(); } public void removeListener(InvokerCallbackHandler callbackHandler) {} public void setMBeanServer(MBeanServer server) {} public void setInvoker(ServerInvoker invoker) {} } }