Uploaded a new one. It has a few API changes to improve extensibility.

Quintin Beukes



On Mon, Sep 28, 2009 at 2:04 PM, Jonathan Gallimore
<[email protected]> wrote:
> Hi Quintin,
>
> Sorry I for the delay in responding to your other mails. I've picked up your
> latest code and it runs perfectly on my machine now - thanks for that. I'll
> have play around with this some more when I get home this evening.
>
> Jon
>
>
>
> On Mon, Sep 28, 2009 at 11:21 AM, Quintin Beukes <[email protected]>wrote:
>
>> Uploaded another one. Accidentally left the spring dependencies of my
>> project in the POM (like I mentioned it comes from my project).
>>
>> Quintin Beukes
>>
>>
>>
>> On Mon, Sep 28, 2009 at 12:16 PM, Quintin Beukes <[email protected]>
>> wrote:
>> > I'm not sure how to remove files from JIRA, so both are still there.
>> > Just check the upload times or the SNAPSHOT version number (which is a
>> > date/time).
>> >
>> > Quintin Beukes
>> >
>> >
>> >
>> > On Mon, Sep 28, 2009 at 12:14 PM, Quintin Beukes <[email protected]>
>> wrote:
>> >> OK. Stupid little bug. To fix it, change in the class
>> >> 'src/main/org/apache/openejb/junit/context/OpenEjbTestContext.java
>> >> line 125, change
>> >>      if (config.containsKey(REALM_PROPERTY_KEY))
>> >>      {
>> >>        String loginConfig =
>> >>
>> OpenEjbTestContext.class.getResource(LOGIN_CONFIG_RESOURCE).toExternalForm();
>> >>        System.out.println("Got the property : " + loginConfig);
>> >>        System.setProperty("java.security.auth.login.config",
>> >> URLDecoder.decode(loginConfig));
>> >>      }
>> >>
>> >> To:
>> >>      String loginConfig =
>> >>
>> OpenEjbTestContext.class.getResource(LOGIN_CONFIG_RESOURCE).toExternalForm();
>> >>      System.setProperty("java.security.auth.login.config",
>> >> URLDecoder.decode(loginConfig));
>> >>
>> >> I uploaded a new one to the same JIRA which has this fix applied. So
>> >> you could alternatively just download the new one.
>> >>
>> >> The problem was that the system property was not set when OpenEJB
>> >> started up, due to some minor difference in ordering I suppose? I
>> >> assume at the time the first InitialContext was created, the role
>> >> wasn't specified yet.
>> >>
>> >> My bad. Curious that JDK6u11 runs it perfectly fine on both my machines.
>> >>
>> >> Though I still don't feel right doing it this way :/
>> >>
>> >> Quintin Beukes
>> >>
>> >>
>> >>
>> >> On Mon, Sep 28, 2009 at 11:32 AM, Quintin Beukes <[email protected]>
>> wrote:
>> >>> Hey,
>> >>>
>> >>> I just download the tarball from the JIRA onto my office machine. Then
>> >>> I extracted it and ran mvn install, this is what I got:
>> >>>
>> >>> quin...@quintin-desktop openejb-junit $ mvn install
>> >>> [INFO] Scanning for projects...
>> >>> [INFO]
>> ------------------------------------------------------------------------
>> >>> [INFO] Building openejb-junit
>> >>> [INFO]    task-segment: [install]
>> >>> [INFO]
>> ------------------------------------------------------------------------
>> >>> [INFO] [resources:resources {execution: default-resources}]
>> >>> [WARNING] Using platform encoding (UTF-8 actually) to copy filtered
>> >>> resources, i.e. build is platform dependent!
>> >>> [INFO] Copying 2 resources
>> >>> [INFO] [compiler:compile {execution: default-compile}]
>> >>> [INFO] Compiling 12 source files to
>> >>> /home/quintin/dev/openejb/openejb-junit/target/classes
>> >>> [INFO] [resources:testResources {execution: default-testResources}]
>> >>> [WARNING] Using platform encoding (UTF-8 actually) to copy filtered
>> >>> resources, i.e. build is platform dependent!
>> >>> [INFO] Copying 3 resources
>> >>> [INFO] [compiler:testCompile {execution: default-testCompile}]
>> >>> [INFO] Compiling 15 source files to
>> >>> /home/quintin/dev/openejb/openejb-junit/target/test-classes
>> >>> [INFO] [surefire:test {execution: default-test}]
>> >>> [INFO] Surefire report directory:
>> >>> /home/quintin/dev/openejb/openejb-junit/target/surefire-reports
>> >>>
>> >>> -------------------------------------------------------
>> >>>  T E S T S
>> >>> -------------------------------------------------------
>> >>> Running org.apache.openejb.junit.TestEjbSecurity
>> >>> Apache OpenEJB 3.1.2-SNAPSHOT    build: 20090827-09:05
>> >>> http://openejb.apache.org/
>> >>> INFO - openejb.home = /home/quintin/dev/openejb/openejb-junit
>> >>> INFO - openejb.base = /home/quintin/dev/openejb/openejb-junit
>> >>> INFO - Configuring Service(id=Default Security Service,
>> >>> type=SecurityService, provider-id=Default Security Service)
>> >>> INFO - Configuring Service(id=Default Transaction Manager,
>> >>> type=TransactionManager, provider-id=Default Transaction Manager)
>> >>> INFO - Found EjbModule in classpath:
>> >>> /home/quintin/dev/openejb/openejb-junit/target/test-classes
>> >>> INFO - Beginning load:
>> >>> /home/quintin/dev/openejb/openejb-junit/target/test-classes
>> >>> INFO - Configuring enterprise application: classpath.ear
>> >>> INFO - Configuring Service(id=Default Stateless Container,
>> >>> type=Container, provider-id=Default Stateless Container)
>> >>> INFO - Auto-creating a container for bean SecuredEjb:
>> >>> Container(type=STATELESS, id=Default Stateless Container)
>> >>> INFO - Enterprise application "classpath.ear" loaded.
>> >>> INFO - Assembling app: classpath.ear
>> >>> INFO - Jndi(name=SecuredEjbLocal) --> Ejb(deployment-id=SecuredEjb)
>> >>> INFO - Jndi(name=BasicEjbLocal) --> Ejb(deployment-id=BasicEjb)
>> >>> INFO - Created Ejb(deployment-id=SecuredEjb, ejb-name=SecuredEjb,
>> >>> container=Default Stateless Container)
>> >>> INFO - Created Ejb(deployment-id=BasicEjb, ejb-name=BasicEjb,
>> >>> container=Default Stateless Container)
>> >>> INFO - Deployed Application(path=classpath.ear)
>> >>> INFO - Logging in
>> >>> INFO - Logging in
>> >>> INFO - Logging in
>> >>> Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.791
>> sec
>> >>> Running org.apache.openejb.junit.context.ContextWrapperStatementTest
>> >>> Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027
>> sec
>> >>> Running org.apache.openejb.junit.TestEjbBasic
>> >>> Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006
>> sec
>> >>> Running org.apache.openejb.junit.TestMethodConfigProperties
>> >>> Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006
>> sec
>> >>> Running org.apache.openejb.junit.TestClassConfigFileAndProperties
>> >>> Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002
>> sec
>> >>> Running org.apache.openejb.junit.TestClassConfigFile
>> >>> Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003
>> sec
>> >>> Running org.apache.openejb.junit.TestDualConfigOverride
>> >>> Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004
>> sec
>> >>> Running org.apache.openejb.junit.TestRunner
>> >>> Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003
>> sec
>> >>> Running org.apache.openejb.junit.TestMethodConfigFile
>> >>> Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002
>> sec
>> >>> Running org.apache.openejb.junit.context.UtilTest
>> >>> Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.011
>> sec
>> >>> Running org.apache.openejb.junit.TestClassConfigProperties
>> >>> Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002
>> sec
>> >>>
>> >>> Results :
>> >>>
>> >>> Tests run: 33, Failures: 0, Errors: 0, Skipped: 0
>> >>>
>> >>> [INFO] [jar:jar {execution: default-jar}]
>> >>> [INFO] Building jar:
>> >>>
>> /home/quintin/dev/openejb/openejb-junit/target/openejb-junit-0.1-SNAPSHOT.jar
>> >>> [INFO] [install:install {execution: default-install}]
>> >>> [INFO] Installing
>> >>>
>> /home/quintin/dev/openejb/openejb-junit/target/openejb-junit-0.1-SNAPSHOT.jar
>> >>> to
>> /home/quintin/.m2/repository/org/apache/openejb/openejb-junit/0.1-SNAPSHOT/openejb-junit-0.1-SNAPSHOT.jar
>> >>> [INFO]
>> ------------------------------------------------------------------------
>> >>> [INFO] BUILD SUCCESSFUL
>> >>> [INFO]
>> ------------------------------------------------------------------------
>> >>> [INFO] Total time: 1 minute 9 seconds
>> >>> [INFO] Finished at: Mon Sep 28 11:22:52 SAST 2009
>> >>>
>> >>> Can you perhaps send me your full output.
>> >>>
>> >>> And, are you perhaps running in JDK5? I haven't tested it in JDK5. I
>> >>> just did so an found I get the same error. I will be updating it for
>> >>> JDK5 today, which should probably fix the error. Thanks for the input.
>> >>>
>> >>> Quintin Beukes
>> >>>
>> >>>
>> >>>
>> >>> On Mon, Sep 28, 2009 at 12:55 AM, Jonathan Gallimore
>> >>> <[email protected]> wrote:
>> >>>> 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