Hi Petar,

Thanks once again for your reply.
I thought I would spend today trying to resolve my issues before I responded ...
So I've stripped all my code (commented out, rather!!!) so see what you were 
referring to below.
(I should have seen that here: 
http://jakarta.apache.org/cactus/how_it_works.html . sorry, i've been reading 
so much on the net for days that docos have begun melting in front of me!)

Ok so I understand what you said about the Authentication object.
I thought I was doing that with the WebRequest? (see below)

I hope I'm not taking up too much of yours or anyone else's time :(
I'm really stuck!

Before I explain what I have, just a quick word on how I run my test.
I create my ear file and deploy that to JBoss.
I cactify my project war and deploy that to JBoss.
I then run my test through my web browser by accessing:

(I know the docs somewhere say to do it other ways, but I can't even get that 
So this is what I have:



        <target name="test" depends="test.prepare" description="Run the tests 
on the defined containers">

          <echo message="Running test target ..."/>

          <cactus warfile="${project.build.dir}/test.war" fork="yes" 
              <path refid="project.classpath"/>
              <pathelement location="${httpunit.jar}"/>
              <pathelement location="${nekohtml.jar}"/>
              <pathelement location="${target.classes.java.dir}"/>
              <pathelement location="${target.classes.cactus.dir}"/>
            <containerset timeout="180000"/>
            <formatter type="brief" usefile="false"/>
            <formatter type="xml"/>
              <fileset dir="${src.cactus.dir}">
                <include name="**/Test*.java"/>
                <exclude name="**/Test*All.java"/>

          <echo message="Finished test target ..."/>

        <target name="test.prepare" depends="war,compile.cactus">
          <!-- Cactify the web-app archive -->
          <cactifywar srcfile="${project.build.dir}/${projectname}.war" 
            <classes dir="${project.build.dir}/test/"/>

          <target name="compile.cactus" depends="compile">
                <mkdir dir="${project.build.dir}/test/" />
            <javac destdir="${project.build.dir}/test/"
                debug="true" optimize="true"
                        <src path="${project.src.dir}/junit/" />
                        <include name="com/**/*.java" />
                <classpath refid="project.classpath.junit" />

public class MyAppTestSuite extends junit.framework.TestCase {

        public static Test suite() {
                final junit.framework.TestSuite suite = new 
junit.framework.TestSuite ();
                return suite;

public class MyTest extends org.apache.cactus.ServletTestCase {
        public void begin(WebRequest theRequest) {
            theRequest.setAuthentication(new FormAuthentication("admin1", 

        public void setUp() throws Exception {
                Context context = new InitialContext();
                MyEJB3ServiceBean myService = (MyEJB3ServiceBean) 

                If(myService.checkPermissions()) { //IT FAILS RIGHT 
                        //do something

        public void tearDown() throws Exception {
                //no code

public class MyEJB3ServiceBean {

        protected SessionContext context;

        public boolean checkPermissions () {
                if(this.context.getCallerPrincipal().getName() == "admin1") {
                        return true;
                } else {
                        return false;

I can see through some log info statements that it does it exactly in the 
sequence you specified:

begin ...
setUp ...
tearDown ...
(I didn't specify an endXXX method)

So you see my dilemma, my test fails because I need to check who is logged in 
(with that getCallerPrincipal() ... call)
But in able to do that, I need to log someone in, namely "admin1" as seen in my 
begin method.
I thought I could "log" someone in by using the WebRequest in the beginXXX 

I am obviously doing this wrong, but I am really at a dead end as to how I am 
to go about this ...
I hope my problem makes more sense :(

Thnks again,

-----Original Message-----
From: Petar Tahchiev [mailto:paranoia...@gmail.com]
Sent: Wednesday, 7 January 2009 7:45 PM
To: Cactus Users List
Subject: Re: How to set user principal in setUp()

Hi Nicole,

I think you misunderstand the purpose of Cactus.
Your test will always be executed in the server side.
This means that the testXXX methods are executed on the
server side. You can, however, execute two methods - beginXXX and endXXX
on the client side. This means the execution flow would be this:

beginXXX()  - >client side

startUp() -> serverside
testXXX() -> serverside
tearDown() ->serverside

endXXX() -> client side.

If you see the documentation of the WebRequest (the one you use in
beginXXX methods) there is no set-up for a caller principal. You can,
setup an Authentication object.

HTH, Petar.

The contents of this email are confidential and may be subject to legal or 
professional privilege and copyright. No representation is made that this email 
is free of viruses or other defects. If you have received this communication in 
error, you may not copy or distribute any part of it or otherwise disclose its 
contents to anyone. Please advise the sender of your incorrect receipt of this 

To unsubscribe, e-mail: cactus-user-unsubscr...@jakarta.apache.org
For additional commands, e-mail: cactus-user-h...@jakarta.apache.org

Reply via email to