/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.test;
import org.dspace.kernel.DSpaceKernel;
import org.dspace.kernel.ServiceManager;
import org.dspace.servicemanager.DSpaceKernelImpl;
import org.dspace.servicemanager.DSpaceKernelInit;
import org.dspace.services.RequestService;
/**
* This is an abstract class which makes it easier to test things that use the DSpace Kernel
*
* @author Aaron Zeckoski (azeckoski @ gmail.com)
*/
public abstract class DSpaceAbstractTest {
protected static DSpaceKernelImpl kernelImpl;
/**
* The current kernel for testing
*/
public static DSpaceKernel kernel;
/**
* @return the current kernel running for this test
*/
public static DSpaceKernel getKernel() {
return kernel;
}
/**
* @return the current service manager for this kernel
*/
public static ServiceManager getServiceManager() {
return kernel.getServiceManager();
}
/**
* This starts up the kernel,
* run this before running all your tests (before the test suite),
* do not run this after each individual test
*/
public static void _initializeKernel() {
kernelImpl = DSpaceKernelInit.getKernel(null);
kernelImpl.start(); // init the kernel
kernel = kernelImpl.getManagedBean();
}
/**
* This shuts the kernel down,
* run this at the end of all your tests (after the test suite),
* do not run this after each individual test
*/
public static void _destroyKernel() {
if (kernelImpl != null) {
// cleanup the kernel
try {
kernelImpl.stop();
} catch (Exception e) {
// keep going
}
kernelImpl.destroy();
}
// must null things out or JUnit will not clean them up
kernelImpl = null;
kernel = null;
}
/**
* Gets a service for testing, can be cast to the impl if desired,
* only works if this is the only service of the given type
*
* @param <T>
* @param type the type of the service desired
* @return the service of the type requested
*/
public static <T> T getService(Class<T> type) {
T service = kernel.getServiceManager().getServiceByName(null, type);
if (service == null) {
throw new IllegalStateException("Could not find service ("+type+") in service manager for testing");
}
return service;
}
/**
* The request service
*/
public static RequestService requestService;
public static RequestService getRequestService() {
return requestService;
}
/**
* Holds the current request Id
*/
protected String requestId = null;
/**
* Gets the request service,
* run this before all tests (before the test suite)
*/
public static void _initializeRequestService() {
requestService = getService(RequestService.class);
}
/**
* Cleans up the request service,
* run this after all tests are complete (after the test suite)
*/
public static void _destroyRequestService() {
// must null things out or JUnit will not clean them up
requestService = null;
}
/**
* Starts a request,
* this should be run before each individual test
*/
public void _startRequest() {
requestId = requestService.startRequest();
}
/**
* Ends a request,
* this should be run after each individual test
*/
public void _endRequest() {
requestService.endRequest(new RuntimeException("End of test request ("+requestId+"), standard handling, this is not a failure"));
}
}