Just had a quick play with this, it  looks really nice. Thanks for a great
contribution. I think it would be good to get this added to subversion and
some info up on the website. I'm happy to get this in, anyone got any
thoughts about where it goes (under openejb3 or somewhere else)?

One problem I did run into was this error running the TestEjbSecurity test
case:

java.lang.RuntimeException: Failed to configure object.
    at
org.apache.openejb.junit.context.OpenEjbTestContext.configureTest(OpenEjbTestContext.java:109)
    at
org.apache.openejb.junit.context.ContextWrapperStatement.evaluate(ContextWrapperStatement.java:44)
    at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
    at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
    at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
    at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
    at org.apache.openejb.junit.OpenEjbRunner.run(OpenEjbRunner.java:133)
    at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
    at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: javax.naming.AuthenticationException: User could not be
authenticated: RoleA [Root exception is
javax.security.auth.login.LoginException: No LoginModules configured for
OpenEjbJunitSecurityRealm]
    at
org.apache.openejb.client.LocalInitialContext.login(LocalInitialContext.java:127)
    at
org.apache.openejb.client.LocalInitialContext.<init>(LocalInitialContext.java:77)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown
Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at
org.apache.openejb.client.LocalInitialContextFactory.getLocalInitialContext(LocalInitialContextFactory.java:86)
    at
org.apache.openejb.client.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:43)
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.init(Unknown Source)
    at javax.naming.InitialContext.<init>(Unknown Source)
    at
org.apache.openejb.junit.context.OpenEjbTestContext.getInitialContext(OpenEjbTestContext.java:130)
    at
org.apache.openejb.junit.context.OpenEjbTestContext.configureTest(OpenEjbTestContext.java:97)
    ... 16 more
Caused by: javax.security.auth.login.LoginException: No LoginModules
configured for OpenEjbJunitSecurityRealm
    at javax.security.auth.login.LoginContext.init(Unknown Source)
    at javax.security.auth.login.LoginContext.<init>(Unknown Source)
    at
org.apache.openejb.core.security.SecurityServiceImpl.login(SecurityServiceImpl.java:74)
    at
org.apache.openejb.core.security.SecurityServiceImpl.login(SecurityServiceImpl.java:35)
    at
org.apache.openejb.client.LocalInitialContext.login(LocalInitialContext.java:123)
    ... 29 more


I guess there's something extra I need in my setup, any thoughts? (I admit I
haven't tried particularly hard to troubleshoot it yet - its getting late,
but I'll have another go tomorrow!),

Cheers

Jon

On Sun, Sep 27, 2009 at 8:16 PM, Quintin Beukes <[email protected]> wrote:

> Hey,
>
> The previous runner I started modifying extensively to customize for
> our company's tests. I already had a small testing framework for the
> tests, which used Spring to initial OpenEJB and do the lookups. I
> changed this to use the runner technique.
>
> Then over the weekend I decided to extract the runner code into an
> openejb-junit project, and make it extensible so I could use the
> library's code and only extend to give our tests the same
> functionality.
>
> This is what I came up with:
> https://issues.apache.org/jira/browse/OPENEJB-1078
>
> The JUnit tests demonstrate it's behaviour. These 3 tests are the best
> examples:
> org.apache.openejb.junit.TestEjbBasic
> org.apache.openejb.junit.TestEjbSecurity
> org.apache.openejb.junit.TestDualConfigOverride
>
> It supports class level configuration of the InitialContext, and then
> method specific configurations. You can configure the InitialContext
> from a file, or by directly specifying properties. You can have
> OpenEJB do any of it's supported injections, or you can have the
> runner inject the InitialContext (or it's initialization Properties
> object) and do your own lookups. You can specify as which role to load
> the InitialContext (basically a RunAs).
>
> I'm planning on doing resource configurations, such as datasources.
> Any other suggestions, please throw them my way. And please send me
> feedback. So far it's working very well for my tests. I have yet to
> complete the spring modification, but for those tests which don't
> require it, it works very well. Especially the role tests.
>
> Not that it still doesn't support JUnit 3. If you require JUnit 3, let
> me know and I'll prioritize implementing JUnit 3 support.
>
> An basic example would be the following:
> @RunWith(OpenEjbRunner.class)
> @ContextConfig(
>  properties={
>
>  
> @Property("java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory")
>  }
> )
> @LocalClient
> public class TestEjbSecurity
> {
>  @EJB
>  private MyBusinessBean myBean;
>
>  @TestResource
>  private InitialContext currentInitialContext;
>
>  @Test
>  @ContextConfig(
>    securityRole="Admin"
>  )
>  public void testAsAdmin()
>  {
>    myBean.someMethod();
>    currentInitialContext.lookup("some/custom/lookup");
>  }
>
>  @Test
>  @ContextConfig(
>    propertiesFile="/META-INF/employee-context.properties",
>    securityRole="Employe"
>  )
>  public void testAsEmployee()
>  {
>    myBean.someMethod();
>  }
> }
>
> Quintin Beukes
>

Reply via email to