blob: f60cad1819ffb940f527d01b28ced6b7590a51bf [file] [log] [blame]
package de.ids_mannheim.korap.config;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.concurrent.ThreadLocalRandom;
import org.junit.runner.RunWith;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.context.support.AbstractRefreshableWebApplicationContext;
import com.sun.jersey.spi.spring.container.servlet.SpringServlet;
import com.sun.jersey.test.framework.AppDescriptor;
import com.sun.jersey.test.framework.JerseyTest;
import com.sun.jersey.test.framework.WebAppDescriptor;
import com.sun.jersey.test.framework.spi.container.TestContainerException;
import com.sun.jersey.test.framework.spi.container.TestContainerFactory;
import com.sun.jersey.test.framework.spi.container.grizzly.web.GrizzlyWebTestContainerFactory;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:test-config.xml")
public abstract class SpringJerseyTest extends JerseyTest {
@Autowired
protected GenericApplicationContext applicationContext;
private static String[] classPackages =
new String[] { "de.ids_mannheim.korap.web.controller",
"de.ids_mannheim.korap.web.filter",
"de.ids_mannheim.korap.web.utils" };
@Override
protected TestContainerFactory getTestContainerFactory ()
throws TestContainerException {
return new GrizzlyWebTestContainerFactory();
}
@Override
public void setUp () throws Exception {
StaticContextLoaderListener.applicationContext =
new AbstractRefreshableWebApplicationContext() {
ConfigurableListableBeanFactory existingBeanFactory =
applicationContext.getBeanFactory();
@Override
protected void loadBeanDefinitions (
DefaultListableBeanFactory beanFactory)
throws BeansException, IOException {
String[] beanDefinitionNames =
existingBeanFactory.getBeanDefinitionNames();
for (String beanName : beanDefinitionNames) {
beanFactory.registerBeanDefinition(beanName,
existingBeanFactory
.getBeanDefinition(beanName));
}
}
};
super.setUp();
}
@Override
protected AppDescriptor configure () {
return new WebAppDescriptor.Builder(classPackages)
.servletClass(SpringServlet.class)
.contextListenerClass(StaticContextLoaderListener.class)
// .contextListenerClass(ContextLoaderListener.class)
// .contextParam("contextConfigLocation",
// "classpath:test-config.xml")
.build();
}
@Override
protected int getPort (int defaultPort) {
int port = ThreadLocalRandom.current().nextInt(5000, 8000 + 1);
try {
ServerSocket socket = new ServerSocket(port);
socket.close();
}
catch (IOException e) {
e.printStackTrace();
port = getPort(port);
}
return port;
}
}