I was trying to write some cactus tests to test an ejb which required
authentication.  The application server used was jboss-4.0.2, with the
tomcat 5 web container.  I followed the instructions documented on the
official cactus web site and created a protected
ServletRedirectorSecure servlet to do it.  When I ran the tests, I got
an error message like:
    [cactus] -----------------------------------------------------------------
    [cactus] Running tests against JBoss 4.0.2
    [cactus] -----------------------------------------------------------------
    [cactus] (httpclient.HttpMethodBase           2543) Already tried
to authenticate with 'localhost:8080' authentication realm at
localhost, but still receiving: HTTP/1.1 401 Unauthorized
    [cactus] (httpclient.HttpMethodBase           2543) Already tried
to authenticate with 'localhost:8080' authentication realm at
localhost, but still receiving: HTTP/1.1 401 Unauthorized
    [cactus] Testsuite: com.saybot.directory.DirectoryTest
    [cactus] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0.251 sec
    [cactus] 
    [cactus] Testcase: testBasicAuthentication took 0.2 sec
    [cactus]    Caused an ERROR
    [cactus] Failed to get the test results at
[http://localhost:8080/directory/ServletRedirectorSecure]
    [cactus] org.apache.cactus.util.ChainedRuntimeException: Failed to
get the test results at
[http://localhost:8080/directory/ServletRedirectorSecure]
    [cactus]    at
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody0(DefaultHttpClient.java:92)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody1$advice(DefaultHttpClient.java:306)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest(DefaultHttpClient.java)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runWebTest(HttpProtocolHandler.java:159)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody0(HttpProtocolHandler.java:80)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody1$advice(HttpProtocolHandler.java:306)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest(HttpProtocolHandler.java)
    [cactus]    at
org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:144)
    [cactus]    at
org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:215)
    [cactus]    at
org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:133)
    [cactus] org.apache.cactus.internal.client.ParsingException: Not a
valid response [401 Unauthorized]
    [cactus]    at
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.callGetResult(DefaultHttpClient.java:211)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody0(DefaultHttpClient.java:87)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody1$advice(DefaultHttpClient.java:306)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest(DefaultHttpClient.java)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runWebTest(HttpProtocolHandler.java:159)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody0(HttpProtocolHandler.java:80)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody1$advice(HttpProtocolHandler.java:306)
    [cactus]    at
org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest(HttpProtocolHandler.java)
    [cactus]    at
org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:144)
    [cactus]    at
org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:215)
    [cactus]    at
org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:133)
    [cactus] 
    [cactus] Testcase: testBasicAuthentication

That was when I used maven to run the test.  I got the same error when
I ran java
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner from shell.

My web.xml was like:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.3//EN"
                         "http://java.sun.com/dtd/web-app_2_3.dtd";>
<web-app>
    <filter>
        <filter-name>FilterRedirector</filter-name>
        
<filter-class>org.apache.cactus.server.FilterTestRedirector</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterRedirector</filter-name>
        <url-pattern>/test/filterRedirector.jsp</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>ServletRedirector</servlet-name>
        
<servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>SerletRedirectorSecure</servlet-name>
        
<servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>JspRedirector</servlet-name>
        <jsp-file>/jspRedirector.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletRedirector</servlet-name>
        <url-pattern>/ServletRedirector</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>SerletRedirectorSecure</servlet-name>
        <url-pattern>/ServletRedirectorSecure</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>JspRedirector</servlet-name>
        <url-pattern>/JspRedirector</url-pattern>
    </servlet-mapping>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Cactus Test Redirector</web-resource-name>
            <url-pattern>/ServletRedirectorSecure</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>User</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>
    <security-role>
        <role-name>User</role-name>
    </security-role>
</web-app>

my test was just to test if I could get the principal in the test.  It
didn't even call any ejb:
    public void beginBasicAuthentication(WebRequest request) {
        request.setRedirectorName("ServletRedirectorSecure");
        request.setAuthentication(new BasicAuthentication("tester1",
        "tester1"));
    }

    public void testBasicAuthentication() {
        assertEquals("tester1", request.getUserPrincipal().getName());
        assertEquals("tester1", request.getRemoteUser());
        assertTrue(request.isUserInRole("User"));
    }

Can someone help me with this please?

When I used a browser to go to url
http://localhost:8080/directory/ServletRedirectorSecure?Cactus_Service=RUN_TEST
it popped up a dialog to ask me for username and password.  I entered
"tester1", "tester1", and it went to a blank page.  So that was
correct.  It didn't show me 401 error.

Your help is much appreciated.

-- 
-hoki

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to