Migration to JUnit5 as default test runtime (#1082)
* Migrate tests to JUnit5 Signed-off-by: Dominic Schabel <dominic.schabel@bosch.io> * REST docs tests migrated to JUnit5 Signed-off-by: Dominic Schabel <dominic.schabel@bosch.io> * Migrated security and UI tests to JUnit5 Signed-off-by: Dominic Schabel <dominic.schabel@bosch.io> * Migrated management tests to JUnit5 Signed-off-by: Dominic Schabel <dominic.schabel@bosch.io> * Reflecting changes from JUnit5 migration Signed-off-by: Dominic Schabel <dominic.schabel@bosch.io> * Fix RabbitMQ test detection Signed-off-by: Dominic Schabel <dominic.schabel@bosch.io> * Drop support for JUnit4 Signed-off-by: Dominic Schabel <dominic.schabel@bosch.io>
This commit is contained in:
@@ -16,14 +16,13 @@ import org.awaitility.core.ConditionFactory;
|
||||
import org.eclipse.hawkbit.repository.jpa.RepositoryApplicationConfiguration;
|
||||
import org.eclipse.hawkbit.repository.test.TestConfiguration;
|
||||
import org.eclipse.hawkbit.repository.test.util.AbstractIntegrationTest;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.springframework.amqp.core.Message;
|
||||
import org.springframework.amqp.core.MessageProperties;
|
||||
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||
import org.springframework.amqp.rabbit.core.RabbitAdmin;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.amqp.rabbit.junit.BrokerRunning;
|
||||
import org.springframework.amqp.rabbit.junit.RabbitAvailable;
|
||||
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cloud.stream.test.binder.TestSupportBinderAutoConfiguration;
|
||||
@@ -31,17 +30,15 @@ import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.annotation.DirtiesContext.ClassMode;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
|
||||
@RabbitAvailable
|
||||
@ContextConfiguration(classes = { RepositoryApplicationConfiguration.class, AmqpTestConfiguration.class,
|
||||
TestConfiguration.class, TestSupportBinderAutoConfiguration.class })
|
||||
// Dirty context is necessary to create a new vhost and recreate all necessary
|
||||
// beans after every test class.
|
||||
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
|
||||
public abstract class AbstractAmqpIntegrationTest extends AbstractIntegrationTest {
|
||||
private static final Duration TIMEOUT = Duration.ofSeconds(5);
|
||||
|
||||
@Rule
|
||||
@Autowired
|
||||
public BrokerRunning brokerRunning;
|
||||
private static final Duration TIMEOUT = Duration.ofSeconds(5);
|
||||
|
||||
@Autowired
|
||||
private ConnectionFactory connectionFactory;
|
||||
@@ -51,7 +48,7 @@ public abstract class AbstractAmqpIntegrationTest extends AbstractIntegrationTes
|
||||
|
||||
private RabbitTemplate dmfClient;
|
||||
|
||||
@Before
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
dmfClient = createDmfClient();
|
||||
}
|
||||
|
||||
@@ -17,16 +17,10 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.eclipse.hawkbit.HawkbitServerProperties;
|
||||
import org.eclipse.hawkbit.api.HostnameResolver;
|
||||
import org.eclipse.hawkbit.rabbitmq.test.RabbitMqSetupService.AlivenessException;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
|
||||
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.amqp.rabbit.junit.BrokerRunning;
|
||||
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
|
||||
import org.springframework.boot.autoconfigure.amqp.RabbitProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
@@ -43,8 +37,6 @@ import com.google.common.base.Throwables;
|
||||
@Configuration
|
||||
public class AmqpTestConfiguration {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AmqpTestConfiguration.class);
|
||||
|
||||
@Bean
|
||||
SystemSecurityContextHolder systemSecurityContextHolder() {
|
||||
return SystemSecurityContextHolder.getInstance();
|
||||
@@ -82,26 +74,13 @@ public class AmqpTestConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
ConnectionFactory rabbitConnectionFactory(final RabbitMqSetupService rabbitmqSetupService) {
|
||||
final CachingConnectionFactory factory = new CachingConnectionFactory();
|
||||
factory.setHost(rabbitmqSetupService.getHostname());
|
||||
factory.setPort(5672);
|
||||
factory.setUsername(rabbitmqSetupService.getUsername());
|
||||
factory.setPassword(rabbitmqSetupService.getPassword());
|
||||
try {
|
||||
factory.setVirtualHost(rabbitmqSetupService.createVirtualHost());
|
||||
// All exception are catched. The BrokerRunning decide if the
|
||||
// test should break or not
|
||||
} catch (@SuppressWarnings("squid:S2221") final Exception e) {
|
||||
Throwables.propagateIfInstanceOf(e, AlivenessException.class);
|
||||
LOG.error("Cannot create virtual host.", e);
|
||||
}
|
||||
return factory;
|
||||
ConnectionFactory rabbitConnectionFactory(RabbitMqSetupService rabbitMqSetupService) {
|
||||
return rabbitMqSetupService.newVirtualHostWithConnectionFactory();
|
||||
}
|
||||
|
||||
@Bean
|
||||
RabbitMqSetupService rabbitmqSetupService(final RabbitProperties properties) {
|
||||
return new RabbitMqSetupService(properties);
|
||||
RabbitMqSetupService rabbitMqSetupService(){
|
||||
return new RabbitMqSetupService();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -113,14 +92,4 @@ public class AmqpTestConfiguration {
|
||||
rabbitTemplate.setReceiveTimeout(TimeUnit.SECONDS.toMillis(3));
|
||||
return rabbitTemplate;
|
||||
}
|
||||
|
||||
@Bean
|
||||
BrokerRunning brokerRunning(final RabbitMqSetupService rabbitmqSetupService) {
|
||||
final BrokerRunning brokerRunning = BrokerRunning.isRunning();
|
||||
brokerRunning.setHostName(rabbitmqSetupService.getHostname());
|
||||
brokerRunning.getConnectionFactory().setUsername(rabbitmqSetupService.getUsername());
|
||||
brokerRunning.getConnectionFactory().setPassword(rabbitmqSetupService.getPassword());
|
||||
return brokerRunning;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -14,10 +14,11 @@ import java.util.UUID;
|
||||
|
||||
import javax.annotation.PreDestroy;
|
||||
|
||||
import org.springframework.boot.autoconfigure.amqp.RabbitProperties;
|
||||
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
|
||||
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||
import org.springframework.amqp.rabbit.junit.BrokerRunningSupport;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.google.common.base.Throwables;
|
||||
import com.rabbitmq.http.client.Client;
|
||||
import com.rabbitmq.http.client.domain.UserPermissions;
|
||||
@@ -25,18 +26,15 @@ import com.rabbitmq.http.client.domain.UserPermissions;
|
||||
/**
|
||||
* Creates and deletes a new virtual host if the rabbit mq management api is
|
||||
* available.
|
||||
*
|
||||
*/
|
||||
// exception squid:S2068 - Test instance passwd
|
||||
@SuppressWarnings("squid:S2068")
|
||||
public class RabbitMqSetupService {
|
||||
|
||||
private static final String GUEST = "guest";
|
||||
private static final String DEFAULT_USER = GUEST;
|
||||
private static final String DEFAULT_PASSWORD = GUEST;
|
||||
|
||||
private Client rabbitmqHttpClient;
|
||||
|
||||
private final com.rabbitmq.client.ConnectionFactory connectionFactory;
|
||||
|
||||
private String virtualHost;
|
||||
|
||||
private final String hostname;
|
||||
@@ -45,18 +43,13 @@ public class RabbitMqSetupService {
|
||||
|
||||
private String password;
|
||||
|
||||
public RabbitMqSetupService(final RabbitProperties properties) {
|
||||
hostname = properties.getHost();
|
||||
username = properties.getUsername();
|
||||
if (StringUtils.isEmpty(username)) {
|
||||
username = DEFAULT_USER;
|
||||
}
|
||||
|
||||
password = properties.getPassword();
|
||||
if (StringUtils.isEmpty(password)) {
|
||||
password = DEFAULT_PASSWORD;
|
||||
}
|
||||
public RabbitMqSetupService() {
|
||||
|
||||
BrokerRunningSupport brokerSupport = BrokerRunningSupport.isRunning();
|
||||
connectionFactory = brokerSupport.getConnectionFactory();
|
||||
hostname = brokerSupport.getHostName();
|
||||
username = brokerSupport.getUser();
|
||||
password = brokerSupport.getPassword();
|
||||
}
|
||||
|
||||
private synchronized Client getRabbitmqHttpClient() {
|
||||
@@ -74,17 +67,12 @@ public class RabbitMqSetupService {
|
||||
return "http://" + getHostname() + ":15672/api/";
|
||||
}
|
||||
|
||||
@SuppressWarnings("squid:S1162")
|
||||
public String createVirtualHost() throws JsonProcessingException {
|
||||
if (!getRabbitmqHttpClient().alivenessTest("/")) {
|
||||
throw new AlivenessException(getHostname());
|
||||
|
||||
}
|
||||
public ConnectionFactory newVirtualHostWithConnectionFactory() {
|
||||
virtualHost = UUID.randomUUID().toString();
|
||||
getRabbitmqHttpClient().createVhost(virtualHost);
|
||||
getRabbitmqHttpClient().updatePermissions(virtualHost, getUsername(), createUserPermissionsFullAccess());
|
||||
return virtualHost;
|
||||
|
||||
connectionFactory.setVirtualHost(virtualHost);
|
||||
return new CachingConnectionFactory(connectionFactory);
|
||||
}
|
||||
|
||||
@PreDestroy
|
||||
@@ -95,15 +83,15 @@ public class RabbitMqSetupService {
|
||||
getRabbitmqHttpClient().deleteVhost(virtualHost);
|
||||
}
|
||||
|
||||
public String getHostname() {
|
||||
private String getHostname() {
|
||||
return hostname;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
private String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
private String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
@@ -115,14 +103,4 @@ public class RabbitMqSetupService {
|
||||
permissions.setWrite(".*");
|
||||
return permissions;
|
||||
}
|
||||
|
||||
static class AlivenessException extends RuntimeException {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public AlivenessException(final String hostname) {
|
||||
super("Aliveness test failed for " + hostname
|
||||
+ ":15672 guest/quest; rabbit mq management api not available");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user