Hi,

Today the cookie token storage is initialized lazily at the first time there is any kind of operation interacting with the token storage. And there is a thread for a scheduled executor to clean up expired tokens, the first execution is performed right after the service is starting up, as following snippet code :

        executor.scheduleWithFixedDelay(new Runnable() {
            public void run() {
                try {
                    AbstractTokenService.this.cleanExpiredTokens();
                } catch (Throwable t) {
                    log.warn("Failed to clean expired tokens", t);
                }
            }
        }, 0, DELAY_TIME, TimeUnit.SECONDS);


That could explain why the "Thread.sleep(1000)" is needed, to be sure that the cookie token storage is not initialized twice concurrently which raises an exception.
To solve the problem, we could initialize the token storage at beginning of the service starting up, then we can start the thread of cleaning up executor. Actually, we solve a similar issue in GadgetTokenInfoService in https://issues.jboss.org/browse/GTNPORTAL-2711

I believe that the cleaning up expired tokens by a thread is leading to the NPE. Not only this test, it is also leading to similar exceptions in other tests that I have addressed at https://issues.jboss.org/browse/GTNPORTAL-2944


On 22 April 2013 23:09, Julien Viet <julien@julienviet.com> wrote:
Hi,

I had an issue with the TestSimpleGeneratorService that can randomly fail and I suspect it could be related to the "Thread.sleep(1000)" statement:

https://github.com/gatein/gatein-portal/blob/master/component/web/security/src/test/java/org/exoplatform/web/security/TestSimpleGeneratorService.java

can someone give me the reason of this and if there is a possible track for improving this ?

The observed issue with Jenkins (exo private instance)  was:

java.lang.NullPointerException
	at org.exoplatform.web.security.TestSimpleGeneratorService.testDuplicatedTokenGeneration(TestSimpleGeneratorService.java:80)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at junit.framework.TestCase.runTest(TestCase.java:168)
	at junit.framework.TestCase.runBare(TestCase.java:134)
	at org.exoplatform.component.test.AbstractGateInTest.runBare(AbstractGateInTest.java:81)
	at junit.framework.TestResult$1.protect(TestResult.java:110)
	at junit.framework.TestResult.runProtected(TestResult.java:128)
	at junit.framework.TestResult.run(TestResult.java:113)
	at junit.framework.TestCase.run(TestCase.java:124)
	at junit.framework.TestSuite.runTest(TestSuite.java:243)
	at junit.framework.TestSuite.run(TestSuite.java:238)
	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:234)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:133)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:114)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:188)
	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:166)
	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:86)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:101)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)


Julien


_______________________________________________
gatein-dev mailing list
gatein-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/gatein-dev



--
Trong Tran
(+84) 983841909 | trongtt@gmail.com
Twitter: http://twitter.com/trongtt