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 >> >>>>> >> >>>> >> >>> >> >> >> > >> >
