/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.toolkit.modules.concurrency.internal;
import org.junit.After;
import org.junit.Before;
import de.rcenvironment.toolkit.core.api.ImmutableServiceRegistry;
import de.rcenvironment.toolkit.core.api.Toolkit;
import de.rcenvironment.toolkit.core.api.ToolkitException;
import de.rcenvironment.toolkit.core.setup.ToolkitConfiguration;
import de.rcenvironment.toolkit.core.setup.ToolkitFactory;
import de.rcenvironment.toolkit.core.setup.ToolkitSetup;
import de.rcenvironment.toolkit.modules.concurrency.api.AsyncTaskService;
import de.rcenvironment.toolkit.modules.concurrency.api.ConcurrencyUtilsFactory;
import de.rcenvironment.toolkit.modules.concurrency.api.ThreadPoolManagementAccess;
import de.rcenvironment.toolkit.modules.concurrency.setup.ConcurrencyModule;
/**
* Abstract base class for {@link ConcurrencyModule} unit tests. Its main purpose is to construct a new {@link Toolkit} instance for each
* test run.
*
* @author Robert Mischke
*/
public abstract class AbstractConcurrencyModuleTest {
private volatile Toolkit toolkit;
private volatile ImmutableServiceRegistry serviceRegistry;
/**
* Creates a new test toolkit.
*
* @throws ToolkitException on setup errors
*/
@Before
public final void setupToolkit() throws ToolkitException {
toolkit = ToolkitFactory.create(new ToolkitConfiguration() {
@Override
public void configure(ToolkitSetup setup) throws ToolkitException {
// only load the concurrency module; let automatic dependency checking resolve the rest
setup.configureModule(ConcurrencyModule.class);
}
});
serviceRegistry = toolkit.getServiceRegistry();
}
/**
* Discards the current toolkit instance.
*/
@After
public final void tearDownToolkit() {
toolkit.shutdown();
toolkit = null;
serviceRegistry = null;
}
protected final AsyncTaskService getAsyncTaskService() {
return serviceRegistry.getService(AsyncTaskService.class);
}
protected final ConcurrencyUtilsFactory getConcurrencyUtilsFactory() {
return serviceRegistry.getService(ConcurrencyUtilsFactory.class);
}
protected final ThreadPoolManagementAccess getThreadPoolManagement() {
return serviceRegistry.getService(ThreadPoolManagementAccess.class);
}
}