/*
* Copyright 2015 JBoss, by Red Hat, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.guvnor.common.services.builder;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.spi.InitialContextFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class IncrementalBuilderExecutorManagerFactoryImplTest {
private String spUberfireAsyncExecutorSafeMode;
private String spJavaNamingFactoryInitial;
@Before
public void before() {
spUberfireAsyncExecutorSafeMode = System.getProperty( "org.uberfire.async.executor.safemode" );
spJavaNamingFactoryInitial = System.getProperty( Context.INITIAL_CONTEXT_FACTORY );
System.clearProperty( "org.uberfire.async.executor.safemode" );
System.clearProperty( Context.INITIAL_CONTEXT_FACTORY );
}
@After
public void after() {
if ( spUberfireAsyncExecutorSafeMode != null ) {
System.setProperty( "org.uberfire.async.executor.safemode",
spUberfireAsyncExecutorSafeMode );
}
if ( spJavaNamingFactoryInitial != null ) {
System.setProperty( Context.INITIAL_CONTEXT_FACTORY,
spJavaNamingFactoryInitial );
}
}
@Test
public void testUseJDNILookup() throws NamingException {
//Test ExecutorService is looked up from JNDI
System.setProperty( Context.INITIAL_CONTEXT_FACTORY,
MockInitialContextFactory.class.getName() );
final Context context = mock( Context.class );
final IncrementalBuilderExecutorManager service = mock( IncrementalBuilderExecutorManager.class );
when( context.lookup( "java:module/IncrementalBuilderExecutorManager" ) ).thenReturn( service );
MockInitialContextFactory.setCurrentContext( context );
final IncrementalBuilderExecutorManagerFactoryImpl factory = new IncrementalBuilderExecutorManagerFactoryImpl();
final IncrementalBuilderExecutorManager executor1 = factory.getExecutorManager();
assertNotNull( executor1 );
assertTrue( executor1 instanceof IncrementalBuilderExecutorManager );
assertSame( service,
executor1 );
final IncrementalBuilderExecutorManager executor2 = factory.getExecutorManager();
assertNotNull( executor2 );
assertTrue( executor2 instanceof IncrementalBuilderExecutorManager );
assertSame( service,
executor2 );
assertSame( executor1,
executor2 );
}
@Test
public void testUseExecutorThreadPool() {
//Test ExecutorService is a "simple" implementation
System.setProperty( "org.uberfire.async.executor.safemode",
"true" );
final IncrementalBuilderExecutorManagerFactoryImpl factory = new IncrementalBuilderExecutorManagerFactoryImpl();
final IncrementalBuilderExecutorManager executor1 = factory.getExecutorManager();
assertNotNull( executor1 );
assertTrue( executor1 instanceof IncrementalBuilderExecutorManager );
final IncrementalBuilderExecutorManager executor2 = factory.getExecutorManager();
assertNotNull( executor2 );
assertTrue( executor2 instanceof IncrementalBuilderExecutorManager );
assertSame( executor1,
executor2 );
}
public static class MockInitialContextFactory implements InitialContextFactory {
private static final ThreadLocal<Context> currentContext = new ThreadLocal<Context>();
@Override
public Context getInitialContext( final Hashtable<?, ?> environment ) throws NamingException {
return currentContext.get();
}
public static void setCurrentContext( final Context context ) {
currentContext.set( context );
}
}
}