From f608f49db05a9c1a3b71f1ba8af48c928503cbee Mon Sep 17 00:00:00 2001 From: Dennis Melzer Date: Wed, 26 Apr 2017 10:36:21 +0200 Subject: [PATCH] Create dmf test module (#493) * Add DMF parent module + submodules Signed-off-by: SirWayne * Fix sonar issue Signed-off-by: SirWayne * Refactor Test Module Signed-off-by: SirWayne * - Fix tenant is empty - Small refactoring Signed-off-by: SirWayne * Remove org.springframework.context.annotation.Description Signed-off-by: SirWayne * Configure rabbit test template Signed-off-by: SirWayne * Fix header Signed-off-by: SirWayne * tenant should not be empty Signed-off-by: SirWayne * Increase time out Signed-off-by: SirWayne * Increase 3 to sec. Signed-off-by: SirWayne * Fix comments Signed-off-by: SirWayne * Add port Signed-off-by: SirWayne * Fix test config Signed-off-by: SirWayne --- .../README.md | 0 .../hawkbit-dmf-amqp}/pom.xml | 43 ++------ .../AmqpAuthenticationMessageHandler.java | 0 .../hawkbit/amqp/AmqpConfiguration.java | 0 .../amqp/AmqpControllerAuthentication.java | 0 .../amqp/AmqpDeadletterProperties.java | 0 .../amqp/AmqpMessageDispatcherService.java | 0 .../amqp/AmqpMessageHandlerService.java | 0 .../eclipse/hawkbit/amqp/AmqpProperties.java | 0 .../hawkbit/amqp/AmqpSenderService.java | 4 +- .../eclipse/hawkbit/amqp/BaseAmqpService.java | 0 ...gurableRabbitListenerContainerFactory.java | 0 .../amqp/DefaultAmqpSenderService.java | 0 .../amqp/DelayedRequeueExceptionStrategy.java | 0 .../hawkbit/amqp/DmfApiConfiguration.java | 0 .../AmqpControllerAuthenticationTest.java | 0 .../AmqpMessageDispatcherServiceTest.java | 0 .../amqp/AmqpMessageHandlerServiceTest.java | 0 .../hawkbit/amqp/BaseAmqpServiceTest.java | 0 ...ticationMessageHandlerIntegrationTest.java | 27 ++++- ...ssageDispatcherServiceIntegrationTest.java | 0 ...pMessageHandlerServiceIntegrationTest.java | 79 +++++++++----- .../AmqpServiceIntegrationTest.java | 12 ++- .../integration/DmfTestConfiguration.java | 55 ++++++++++ .../listener/DeadletterListener.java | 1 + .../integration/listener/ReplyToListener.java | 5 +- .../matcher/SoftwareModuleJsonMatcher.java | 0 .../resources/application-test.properties | 0 .../src/test/resources/logback-spring.xml | 0 .../hawkbit-dmf-api}/README.md | 0 .../hawkbit-dmf-api}/pom.xml | 4 +- .../hawkbit/dmf/amqp/api/AmqpSettings.java | 0 .../hawkbit/dmf/amqp/api/EventTopic.java | 0 .../dmf/amqp/api/MessageHeaderKey.java | 0 .../hawkbit/dmf/amqp/api/MessageType.java | 0 .../hawkbit/dmf/json/model/ActionStatus.java | 0 .../dmf/json/model/ActionUpdateStatus.java | 0 .../hawkbit/dmf/json/model/Artifact.java | 0 .../hawkbit/dmf/json/model/ArtifactHash.java | 0 .../dmf/json/model/AttributeUpdate.java | 0 .../json/model/DownloadAndUpdateRequest.java | 0 .../dmf/json/model/DownloadResponse.java | 0 .../dmf/json/model/SoftwareModule.java | 0 .../dmf/json/model/TenantSecurityToken.java | 0 .../hawkbit-dmf-rabbitmq-test/pom.xml | 62 +++++++++++ .../test}/AbstractAmqpIntegrationTest.java | 47 ++++++-- .../rabbitmq/test}/AmqpTestConfiguration.java | 100 +++++------------- .../rabbitmq/test}/RabbitMqSetupService.java | 30 ++++-- .../test}/listener/TestRabbitListener.java | 9 +- hawkbit-dmf-parent/pom.xml | 34 ++++++ .../MgmtDistributionSetResourceTest.java | 2 +- .../resource/MgmtDownloadResourceTest.java | 2 +- .../resource/MgmtRolloutResourceTest.java | 2 +- .../AbstractJpaTenantAwareBaseEntity.java | 2 + .../jpa/model/JpaTenantMetaData.java | 2 + .../im/authentication/PermissionTest.java | 2 +- .../criteria/ItemIdClientCriterionTest.java | 82 +++++++------- .../criteria/ViewClientCriterionTest.java | 62 +++++------ .../ViewComponentClientCriterionTest.java | 89 ++++++++-------- pom.xml | 3 +- 60 files changed, 472 insertions(+), 288 deletions(-) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent}/README.md (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/pom.xml (74%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/AmqpAuthenticationMessageHandler.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentication.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java (90%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/DelayedRequeueExceptionStrategy.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/main/java/org/eclipse/hawkbit/amqp/DmfApiConfiguration.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/amqp/BaseAmqpServiceTest.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/integration/AmqpAuthenticationMessageHandlerIntegrationTest.java (94%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageDispatcherServiceIntegrationTest.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java (94%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/integration/AmqpServiceIntegrationTest.java (95%) create mode 100644 hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/DmfTestConfiguration.java rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/integration/listener/DeadletterListener.java (92%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/integration/listener/ReplyToListener.java (91%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/java/org/eclipse/hawkbit/matcher/SoftwareModuleJsonMatcher.java (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/resources/application-test.properties (100%) rename {hawkbit-dmf-amqp => hawkbit-dmf-parent/hawkbit-dmf-amqp}/src/test/resources/logback-spring.xml (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/README.md (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/pom.xml (89%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/AmqpSettings.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/EventTopic.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageHeaderKey.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageType.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionStatus.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionUpdateStatus.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/json/model/Artifact.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/json/model/ArtifactHash.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/json/model/AttributeUpdate.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadResponse.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/json/model/SoftwareModule.java (100%) rename {hawkbit-dmf-api => hawkbit-dmf-parent/hawkbit-dmf-api}/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java (100%) create mode 100644 hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/pom.xml rename {hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration => hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test}/AbstractAmqpIntegrationTest.java (62%) rename {hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit => hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test}/AmqpTestConfiguration.java (53%) rename {hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit => hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test}/RabbitMqSetupService.java (78%) rename {hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration => hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test}/listener/TestRabbitListener.java (71%) create mode 100644 hawkbit-dmf-parent/pom.xml diff --git a/hawkbit-dmf-amqp/README.md b/hawkbit-dmf-parent/README.md similarity index 100% rename from hawkbit-dmf-amqp/README.md rename to hawkbit-dmf-parent/README.md diff --git a/hawkbit-dmf-amqp/pom.xml b/hawkbit-dmf-parent/hawkbit-dmf-amqp/pom.xml similarity index 74% rename from hawkbit-dmf-amqp/pom.xml rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/pom.xml index 19a7ade69..cdf90d5df 100644 --- a/hawkbit-dmf-amqp/pom.xml +++ b/hawkbit-dmf-parent/hawkbit-dmf-amqp/pom.xml @@ -14,7 +14,7 @@ 4.0.0 org.eclipse.hawkbit - hawkbit-parent + hawkbit-dmf-parent 0.2.0-SNAPSHOT hawkbit-dmf-amqp @@ -67,10 +67,18 @@ slf4j-api + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.eclipse.hawkbit - hawkbit-repository-test + hawkbit-dmf-rabbitmq-test ${project.version} test @@ -84,42 +92,11 @@ mariadb-java-client test - - javax.el - javax.el-api - test - - - org.eclipse.hawkbit - hawkbit-repository-jpa - ${project.version} - test - ru.yandex.qatools.allure allure-junit-adaptor test - - org.springframework.security - spring-security-aspects - test - - - org.springframework.security - spring-security-config - test - - - org.springframework - spring-context-support - test - - - org.springframework.amqp - spring-rabbit-junit - test - org.springframework.amqp spring-rabbit-test diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpAuthenticationMessageHandler.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpAuthenticationMessageHandler.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpAuthenticationMessageHandler.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpAuthenticationMessageHandler.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpConfiguration.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentication.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentication.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentication.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthentication.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpDeadletterProperties.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerService.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpProperties.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java similarity index 90% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java index f44e2e9bb..cb0b024b6 100644 --- a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpSenderService.java @@ -10,6 +10,8 @@ package org.eclipse.hawkbit.amqp; import java.net.URI; +import javax.validation.constraints.NotNull; + import org.springframework.amqp.core.Message; /** @@ -27,7 +29,7 @@ public interface AmqpSenderService { * @param replyTo * the reply to uri */ - void sendMessage(Message message, URI replyTo); + void sendMessage(@NotNull Message message, @NotNull URI replyTo); /** * Extract the exchange from the uri. Default implementation removes the diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/BaseAmqpService.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/ConfigurableRabbitListenerContainerFactory.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DefaultAmqpSenderService.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DelayedRequeueExceptionStrategy.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DelayedRequeueExceptionStrategy.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DelayedRequeueExceptionStrategy.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DelayedRequeueExceptionStrategy.java diff --git a/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DmfApiConfiguration.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DmfApiConfiguration.java similarity index 100% rename from hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DmfApiConfiguration.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DmfApiConfiguration.java diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java similarity index 100% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpControllerAuthenticationTest.java diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java similarity index 100% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherServiceTest.java diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java similarity index 100% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/AmqpMessageHandlerServiceTest.java diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/BaseAmqpServiceTest.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/BaseAmqpServiceTest.java similarity index 100% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/BaseAmqpServiceTest.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/amqp/BaseAmqpServiceTest.java diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpAuthenticationMessageHandlerIntegrationTest.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpAuthenticationMessageHandlerIntegrationTest.java similarity index 94% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpAuthenticationMessageHandlerIntegrationTest.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpAuthenticationMessageHandlerIntegrationTest.java index 42414422e..ae91b0103 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpAuthenticationMessageHandlerIntegrationTest.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpAuthenticationMessageHandlerIntegrationTest.java @@ -14,10 +14,15 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.eclipse.hawkbit.amqp.AmqpProperties; +import org.eclipse.hawkbit.amqp.DmfApiConfiguration; import org.eclipse.hawkbit.dmf.amqp.api.AmqpSettings; import org.eclipse.hawkbit.dmf.json.model.DownloadResponse; import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken; import org.eclipse.hawkbit.dmf.json.model.TenantSecurityToken.FileResource; +import org.eclipse.hawkbit.rabbitmq.test.AbstractAmqpIntegrationTest; +import org.eclipse.hawkbit.rabbitmq.test.AmqpTestConfiguration; +import org.eclipse.hawkbit.repository.jpa.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.repository.model.Artifact; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.SoftwareModule; @@ -28,15 +33,20 @@ import org.junit.Before; import org.junit.Test; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; -import org.springframework.context.annotation.Description; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.http.HttpStatus; import org.springframework.util.StringUtils; +import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; @Features("Component Tests - Device Management Federation API") @Stories("Amqp Authentication Message Handler") +@SpringApplicationConfiguration(classes = { RepositoryApplicationConfiguration.class, AmqpTestConfiguration.class, + DmfApiConfiguration.class }) public class AmqpAuthenticationMessageHandlerIntegrationTest extends AbstractAmqpIntegrationTest { private static final String TARGET_SECRUITY_TOKEN = "12345"; @@ -44,6 +54,9 @@ public class AmqpAuthenticationMessageHandlerIntegrationTest extends AbstractAmq private static final String TENANT_EXIST = "DEFAULT"; private static final String TARGET = "NewDmfTarget"; + @Autowired + private AmqpProperties amqpProperties; + @Before public void testSetup() { enableTargetTokenAuthentification(); @@ -55,6 +68,7 @@ public class AmqpAuthenticationMessageHandlerIntegrationTest extends AbstractAmq final Message createAndSendMessage = getDmfClient() .sendAndReceive(new Message("".getBytes(), new MessageProperties())); assertThat(createAndSendMessage).isNull(); + assertEmptyAuthenticationMessageCount(); } @Test @@ -62,6 +76,7 @@ public class AmqpAuthenticationMessageHandlerIntegrationTest extends AbstractAmq public void securityTokenIsNull() { final Message createAndSendMessage = sendAndReceiveAuthenticationMessage(null); assertThat(createAndSendMessage).isNull(); + assertEmptyAuthenticationMessageCount(); } @Test @@ -71,6 +86,7 @@ public class AmqpAuthenticationMessageHandlerIntegrationTest extends AbstractAmq FileResource.createFileResourceBySha1(TARGET_SECRUITY_TOKEN)); final Message createAndSendMessage = sendAndReceiveAuthenticationMessage(securityToken); assertThat(createAndSendMessage).isNull(); + assertEmptyAuthenticationMessageCount(); } @Test @@ -440,4 +456,13 @@ public class AmqpAuthenticationMessageHandlerIntegrationTest extends AbstractAmq return AmqpSettings.AUTHENTICATION_EXCHANGE; } + private int getAuthenticationMessageCount() { + return Integer.parseInt(getRabbitAdmin().getQueueProperties(amqpProperties.getAuthenticationReceiverQueue()) + .get(RabbitAdmin.QUEUE_MESSAGE_COUNT).toString()); + } + + private void assertEmptyAuthenticationMessageCount() { + assertThat(getAuthenticationMessageCount()).isEqualTo(0); + } + } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageDispatcherServiceIntegrationTest.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageDispatcherServiceIntegrationTest.java similarity index 100% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageDispatcherServiceIntegrationTest.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageDispatcherServiceIntegrationTest.java diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java similarity index 94% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java index c1f42e8a5..ec54849af 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java @@ -16,6 +16,7 @@ import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; +import org.eclipse.hawkbit.amqp.AmqpProperties; import org.eclipse.hawkbit.dmf.amqp.api.EventTopic; import org.eclipse.hawkbit.dmf.amqp.api.MessageHeaderKey; import org.eclipse.hawkbit.dmf.amqp.api.MessageType; @@ -42,6 +43,8 @@ import org.junit.Test; import org.mockito.Mockito; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; +import org.springframework.amqp.rabbit.core.RabbitAdmin; +import org.springframework.beans.factory.annotation.Autowired; import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; @@ -51,6 +54,9 @@ import ru.yandex.qatools.allure.annotations.Stories; @Stories("Amqp Message Handler Service") public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegrationTest { + @Autowired + private AmqpProperties amqpProperties; + @Test @Description("Tests register target") @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 2), @@ -71,7 +77,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra public void registerEmptyTarget() { createAndSendTarget("", TENANT_EXIST); assertAllTargetsCount(0); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @@ -81,7 +87,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra public void registerWhitespaceTarget() { createAndSendTarget("Invalid Invalid", TENANT_EXIST); assertAllTargetsCount(0); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @@ -91,7 +97,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra public void registerInvalidNullTargets() { createAndSendTarget(null, TENANT_EXIST); assertAllTargetsCount(0); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @@ -103,7 +109,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra createTargetMessage.getMessageProperties().setContentType("WrongContentType"); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -115,7 +121,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra createTargetMessage.getMessageProperties().setReplyTo(null); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -127,7 +133,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra createTargetMessage.getMessageProperties().setReplyTo(""); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -139,7 +145,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra createTargetMessage.getMessageProperties().getHeaders().remove(MessageHeaderKey.THING_ID); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -150,7 +156,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra final Message createTargetMessage = createTargetMessage(null, TENANT_EXIST); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -162,7 +168,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra createTargetMessage.getMessageProperties().getHeaders().remove(MessageHeaderKey.TENANT); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -173,7 +179,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra final Message createTargetMessage = createTargetMessage(REGISTER_TARGET, null); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -184,7 +190,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra final Message createTargetMessage = createTargetMessage(REGISTER_TARGET, ""); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -195,7 +201,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra final Message createTargetMessage = createTargetMessage(REGISTER_TARGET, "TenantNotExist"); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertThat(systemManagement.findTenants()).hasSize(1); } @@ -207,7 +213,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra createTargetMessage.getMessageProperties().getHeaders().remove(MessageHeaderKey.TYPE); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -219,7 +225,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra createTargetMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TYPE, null); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -231,7 +237,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra createTargetMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TYPE, ""); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -243,7 +249,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra createTargetMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TYPE, "NotExist"); getDmfClient().send(createTargetMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); assertAllTargetsCount(0); } @@ -255,7 +261,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra eventMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TOPIC, null); getDmfClient().send(eventMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -266,7 +272,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra eventMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TOPIC, ""); getDmfClient().send(eventMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -277,7 +283,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra eventMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TOPIC, "NotExist"); getDmfClient().send(eventMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -288,7 +294,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra eventMessage.getMessageProperties().getHeaders().remove(MessageHeaderKey.TOPIC); getDmfClient().send(eventMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -297,7 +303,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra public void updateActionStatusWithNullContent() { final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, null); getDmfClient().send(eventMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -306,7 +312,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra public void updateActionStatusWithEmptyContent() { final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, ""); getDmfClient().send(eventMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -316,7 +322,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, "Invalid Content"); getDmfClient().send(eventMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -327,7 +333,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, actionUpdateStatus); getDmfClient().send(eventMessage); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -412,7 +418,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) public void cancelNotAllowActionStatus() { registerTargetAndSendActionStatus(ActionStatus.CANCELED); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -479,7 +485,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra final Long actionNotExist = actionId + 1; sendActionUpdateStatus(new ActionUpdateStatus(actionNotExist, ActionStatus.CANCELED)); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -492,7 +498,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) public void canceledRejectedNotAllowActionStatus() { registerTargetAndSendActionStatus(ActionStatus.CANCEL_REJECTED); - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } @Test @@ -551,7 +557,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra getDmfClient().send(createUpdateAttributesMessage); // verify - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); final AttributeUpdate controllerAttributeEmpty = new AttributeUpdate(); assertUpdateAttributes(target, controllerAttributeEmpty.getAttributes()); } @@ -575,7 +581,7 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra getDmfClient().send(createUpdateAttributesMessageWrongBody); // verify - verifyDeadLetterMessages(1); + verifyOneDeadLetterMessage(); } private Long registerTargetAndSendActionStatus(final ActionStatus sendActionStatus) { @@ -630,4 +636,19 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AmqpServiceIntegra getDmfClient().send(updateMessage); } + private int getAuthenticationMessageCount() { + return Integer.parseInt(getRabbitAdmin().getQueueProperties(amqpProperties.getReceiverQueue()) + .get(RabbitAdmin.QUEUE_MESSAGE_COUNT).toString()); + } + + private void assertEmptyReceiverQueueCount() { + assertThat(getAuthenticationMessageCount()).isEqualTo(0); + } + + private void verifyOneDeadLetterMessage() { + assertEmptyReceiverQueueCount(); + createConditionFactory().until(() -> { + Mockito.verify(getDeadletterListener(), Mockito.times(1)).handleMessage(Mockito.any()); + }); + } } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpServiceIntegrationTest.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpServiceIntegrationTest.java similarity index 95% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpServiceIntegrationTest.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpServiceIntegrationTest.java index ff604c263..62566bb49 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpServiceIntegrationTest.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpServiceIntegrationTest.java @@ -16,7 +16,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.Callable; -import org.eclipse.hawkbit.AmqpTestConfiguration; +import org.eclipse.hawkbit.amqp.DmfApiConfiguration; import org.eclipse.hawkbit.dmf.amqp.api.AmqpSettings; import org.eclipse.hawkbit.dmf.amqp.api.EventTopic; import org.eclipse.hawkbit.dmf.amqp.api.MessageHeaderKey; @@ -26,6 +26,9 @@ import org.eclipse.hawkbit.dmf.json.model.DownloadAndUpdateRequest; import org.eclipse.hawkbit.integration.listener.DeadletterListener; import org.eclipse.hawkbit.integration.listener.ReplyToListener; import org.eclipse.hawkbit.matcher.SoftwareModuleJsonMatcher; +import org.eclipse.hawkbit.rabbitmq.test.AbstractAmqpIntegrationTest; +import org.eclipse.hawkbit.rabbitmq.test.AmqpTestConfiguration; +import org.eclipse.hawkbit.repository.jpa.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.model.Target; @@ -39,12 +42,15 @@ import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.test.RabbitListenerTestHarness; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; /** * * Common class for {@link AmqpMessageHandlerServiceIntegrationTest} and * {@link AmqpMessageDispatcherServiceIntegrationTest}. */ +@SpringApplicationConfiguration(classes = { RepositoryApplicationConfiguration.class, AmqpTestConfiguration.class, + DmfApiConfiguration.class, DmfTestConfiguration.class }) public abstract class AmqpServiceIntegrationTest extends AbstractAmqpIntegrationTest { protected static final String TENANT_EXIST = "DEFAULT"; @@ -230,14 +236,14 @@ public abstract class AmqpServiceIntegrationTest extends AbstractAmqpIntegration assertThat(target.getCreatedBy()).isEqualTo(createdBy); assertThat(target.getUpdateStatus()).isEqualTo(updateStatus); assertThat(target.getAddress()).isEqualTo( - IpUtil.createAmqpUri(connectionFactory.getVirtualHost(), AmqpTestConfiguration.REPLY_TO_EXCHANGE)); + IpUtil.createAmqpUri(connectionFactory.getVirtualHost(), DmfTestConfiguration.REPLY_TO_EXCHANGE)); } protected Message createTargetMessage(final String target, final String tenant) { final MessageProperties messageProperties = createMessagePropertiesWithTenant(tenant); messageProperties.getHeaders().put(MessageHeaderKey.THING_ID, target); messageProperties.getHeaders().put(MessageHeaderKey.TYPE, MessageType.THING_CREATED.toString()); - messageProperties.setReplyTo(AmqpTestConfiguration.REPLY_TO_EXCHANGE); + messageProperties.setReplyTo(DmfTestConfiguration.REPLY_TO_EXCHANGE); return createMessage("", messageProperties); } diff --git a/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/DmfTestConfiguration.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/DmfTestConfiguration.java new file mode 100644 index 000000000..d603b8f7d --- /dev/null +++ b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/DmfTestConfiguration.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.integration; + +import org.eclipse.hawkbit.integration.listener.DeadletterListener; +import org.eclipse.hawkbit.integration.listener.ReplyToListener; +import org.springframework.amqp.core.Binding; +import org.springframework.amqp.core.BindingBuilder; +import org.springframework.amqp.core.FanoutExchange; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.test.RabbitListenerTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * DMF Test configuration. + */ +@Configuration +@RabbitListenerTest +public class DmfTestConfiguration { + + public static final String REPLY_TO_EXCHANGE = "reply.queue"; + + @Bean + DeadletterListener deadletterListener() { + return new DeadletterListener(); + } + + @Bean + ReplyToListener replyToListener() { + return new ReplyToListener(); + } + + @Bean + Queue replyToQueue() { + return new Queue(ReplyToListener.REPLY_TO_QUEUE, false, false, true); + } + + @Bean + FanoutExchange replyToExchange() { + return new FanoutExchange(REPLY_TO_EXCHANGE, false, true); + } + + @Bean + Binding bindQueueToReplyToExchange() { + return BindingBuilder.bind(replyToQueue()).to(replyToExchange()); + } + +} diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/DeadletterListener.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/DeadletterListener.java similarity index 92% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/DeadletterListener.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/DeadletterListener.java index 58a780bec..23fe4c676 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/DeadletterListener.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/DeadletterListener.java @@ -8,6 +8,7 @@ */ package org.eclipse.hawkbit.integration.listener; +import org.eclipse.hawkbit.rabbitmq.test.listener.TestRabbitListener; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/ReplyToListener.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/ReplyToListener.java similarity index 91% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/ReplyToListener.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/ReplyToListener.java index 250c4e344..1034520d0 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/ReplyToListener.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/ReplyToListener.java @@ -13,22 +13,23 @@ import static org.junit.Assert.fail; import java.util.HashMap; import java.util.Map; -import org.eclipse.hawkbit.AmqpTestConfiguration; import org.eclipse.hawkbit.dmf.amqp.api.EventTopic; import org.eclipse.hawkbit.dmf.amqp.api.MessageHeaderKey; import org.eclipse.hawkbit.dmf.amqp.api.MessageType; +import org.eclipse.hawkbit.rabbitmq.test.listener.TestRabbitListener; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; public class ReplyToListener implements TestRabbitListener { public static final String LISTENER_ID = "replyto"; + public static final String REPLY_TO_QUEUE = "reply_queue"; private final Map eventTopicMessages = new HashMap<>(); private final Map deleteMessages = new HashMap<>(); @Override - @RabbitListener(id = LISTENER_ID, queues = AmqpTestConfiguration.REPLY_TO_QUEUE) + @RabbitListener(id = LISTENER_ID, queues = REPLY_TO_QUEUE) public void handleMessage(final Message message) { final MessageType messageType = MessageType diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/matcher/SoftwareModuleJsonMatcher.java b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/matcher/SoftwareModuleJsonMatcher.java similarity index 100% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/matcher/SoftwareModuleJsonMatcher.java rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/matcher/SoftwareModuleJsonMatcher.java diff --git a/hawkbit-dmf-amqp/src/test/resources/application-test.properties b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/resources/application-test.properties similarity index 100% rename from hawkbit-dmf-amqp/src/test/resources/application-test.properties rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/resources/application-test.properties diff --git a/hawkbit-dmf-amqp/src/test/resources/logback-spring.xml b/hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/resources/logback-spring.xml similarity index 100% rename from hawkbit-dmf-amqp/src/test/resources/logback-spring.xml rename to hawkbit-dmf-parent/hawkbit-dmf-amqp/src/test/resources/logback-spring.xml diff --git a/hawkbit-dmf-api/README.md b/hawkbit-dmf-parent/hawkbit-dmf-api/README.md similarity index 100% rename from hawkbit-dmf-api/README.md rename to hawkbit-dmf-parent/hawkbit-dmf-api/README.md diff --git a/hawkbit-dmf-api/pom.xml b/hawkbit-dmf-parent/hawkbit-dmf-api/pom.xml similarity index 89% rename from hawkbit-dmf-api/pom.xml rename to hawkbit-dmf-parent/hawkbit-dmf-api/pom.xml index 89eca9426..299025652 100644 --- a/hawkbit-dmf-api/pom.xml +++ b/hawkbit-dmf-parent/hawkbit-dmf-api/pom.xml @@ -14,11 +14,11 @@ org.eclipse.hawkbit - hawkbit-parent + hawkbit-dmf-parent 0.2.0-SNAPSHOT hawkbit-dmf-api - hawkBit :: Device Management Federation API + hawkBit :: DMF API diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/AmqpSettings.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/AmqpSettings.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/AmqpSettings.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/AmqpSettings.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/EventTopic.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/EventTopic.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/EventTopic.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/EventTopic.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageHeaderKey.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageHeaderKey.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageHeaderKey.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageHeaderKey.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageType.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageType.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageType.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/amqp/api/MessageType.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionStatus.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionStatus.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionStatus.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionStatus.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionUpdateStatus.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionUpdateStatus.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionUpdateStatus.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ActionUpdateStatus.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/Artifact.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/Artifact.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/Artifact.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/Artifact.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ArtifactHash.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ArtifactHash.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ArtifactHash.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/ArtifactHash.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/AttributeUpdate.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/AttributeUpdate.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/AttributeUpdate.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/AttributeUpdate.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadAndUpdateRequest.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadResponse.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadResponse.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadResponse.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/DownloadResponse.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/SoftwareModule.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/SoftwareModule.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/SoftwareModule.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/SoftwareModule.java diff --git a/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java b/hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java similarity index 100% rename from hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java rename to hawkbit-dmf-parent/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/json/model/TenantSecurityToken.java diff --git a/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/pom.xml b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/pom.xml new file mode 100644 index 000000000..49cf84c0e --- /dev/null +++ b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/pom.xml @@ -0,0 +1,62 @@ + + + + 4.0.0 + + org.eclipse.hawkbit + hawkbit-dmf-parent + 0.2.0-SNAPSHOT + + hawkbit-dmf-rabbitmq-test + hawkBit :: DMF RabbitMq Test module + + + + org.eclipse.hawkbit + hawkbit-repository-api + ${project.version} + + + org.eclipse.hawkbit + hawkbit-repository-core + ${project.version} + + + org.eclipse.hawkbit + hawkbit-repository-jpa + ${project.version} + + + org.eclipse.hawkbit + hawkbit-dmf-api + ${project.version} + + + org.springframework.amqp + spring-rabbit-junit + compile + + + org.springframework.amqp + spring-rabbit-test + compile + + + org.eclipse.hawkbit + hawkbit-repository-test + ${project.version} + compile + + + + \ No newline at end of file diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AbstractAmqpIntegrationTest.java b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/AbstractAmqpIntegrationTest.java similarity index 62% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AbstractAmqpIntegrationTest.java rename to hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/AbstractAmqpIntegrationTest.java index 782faf542..50f566714 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AbstractAmqpIntegrationTest.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/AbstractAmqpIntegrationTest.java @@ -6,22 +6,24 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.integration; +package org.eclipse.hawkbit.rabbitmq.test; import static java.util.concurrent.TimeUnit.SECONDS; -import org.eclipse.hawkbit.AmqpTestConfiguration; -import org.eclipse.hawkbit.amqp.DmfApiConfiguration; +import java.util.concurrent.TimeUnit; + import org.eclipse.hawkbit.repository.jpa.RepositoryApplicationConfiguration; import org.eclipse.hawkbit.repository.test.util.AbstractIntegrationTest; import org.junit.Before; import org.junit.Rule; 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.support.converter.Jackson2JsonMessageConverter; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; @@ -29,8 +31,7 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode; import com.jayway.awaitility.Awaitility; import com.jayway.awaitility.core.ConditionFactory; -@SpringApplicationConfiguration(classes = { RepositoryApplicationConfiguration.class, AmqpTestConfiguration.class, - DmfApiConfiguration.class }) +@SpringApplicationConfiguration(classes = { RepositoryApplicationConfiguration.class, AmqpTestConfiguration.class }) // Dirty context is necessary to create a new vhost and recreate all necessary // beans after every test class. @DirtiesContext(classMode = ClassMode.AFTER_CLASS) @@ -41,12 +42,16 @@ public abstract class AbstractAmqpIntegrationTest extends AbstractIntegrationTes public BrokerRunning brokerRunning; @Autowired - @Qualifier("dmfClient") + private ConnectionFactory connectionFactory; + + @Autowired + private RabbitAdmin rabbitAdmin; + private RabbitTemplate dmfClient; @Before public void setup() { - dmfClient.setExchange(getExchange()); + dmfClient = createDmfClient(); } protected abstract String getExchange(); @@ -67,4 +72,30 @@ public abstract class AbstractAmqpIntegrationTest extends AbstractIntegrationTes return getDmfClient().getMessageConverter().toMessage(payload, messageProperties); } + protected int getQueueMessageCount(String queueName) { + return Integer + .parseInt(rabbitAdmin.getQueueProperties(queueName).get(RabbitAdmin.QUEUE_MESSAGE_COUNT).toString()); + } + + protected RabbitAdmin getRabbitAdmin() { + return rabbitAdmin; + } + + private RabbitTemplate createDmfClient() { + final RabbitTemplate template = new RabbitTemplate(connectionFactory); + template.setMessageConverter(new Jackson2JsonMessageConverter()); + template.setReceiveTimeout(TimeUnit.SECONDS.toMillis(3)); + template.setReplyTimeout(TimeUnit.SECONDS.toMillis(3)); + template.setExchange(getExchange()); + return template; + } + + protected String getVirtualHost() { + return connectionFactory.getVirtualHost(); + } + + protected int getPort() { + return connectionFactory.getPort(); + } + } diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/AmqpTestConfiguration.java similarity index 53% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java rename to hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/AmqpTestConfiguration.java index 95c1a5bf2..dd5fcf938 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/AmqpTestConfiguration.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/AmqpTestConfiguration.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.rabbitmq.test; import java.net.MalformedURLException; import java.net.URL; @@ -15,29 +15,21 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import org.eclipse.hawkbit.RabbitMqSetupService.AlivenessException; -import org.eclipse.hawkbit.amqp.AmqpProperties; +import org.eclipse.hawkbit.HawkbitServerProperties; import org.eclipse.hawkbit.api.HostnameResolver; -import org.eclipse.hawkbit.integration.listener.DeadletterListener; -import org.eclipse.hawkbit.integration.listener.ReplyToListener; +import org.eclipse.hawkbit.rabbitmq.test.RabbitMqSetupService.AlivenessException; import org.eclipse.hawkbit.repository.jpa.model.helper.SystemSecurityContextHolder; -import org.eclipse.hawkbit.security.SystemSecurityContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.amqp.core.Binding; -import org.springframework.amqp.core.BindingBuilder; -import org.springframework.amqp.core.FanoutExchange; -import org.springframework.amqp.core.Queue; 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.rabbit.test.RabbitListenerTest; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.boot.autoconfigure.amqp.RabbitProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.core.task.TaskExecutor; import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @@ -49,22 +41,12 @@ import com.google.common.base.Throwables; * */ @Configuration -@EnableConfigurationProperties({ AmqpProperties.class }) -@RabbitListenerTest public class AmqpTestConfiguration { private static final Logger LOG = LoggerFactory.getLogger(AmqpTestConfiguration.class); - public static final String REPLY_TO_EXCHANGE = "reply.queue"; - public static final String REPLY_TO_QUEUE = "reply_queue"; - - /** - * @return the {@link SystemSecurityContext} singleton bean which make it - * accessible in beans which cannot access the service directly, - * e.g. JPA entities. - */ @Bean - public SystemSecurityContextHolder systemSecurityContextHolder() { + SystemSecurityContextHolder systemSecurityContextHolder() { return SystemSecurityContextHolder.getInstance(); } @@ -73,33 +55,23 @@ public class AmqpTestConfiguration { return new DelegatingSecurityContextExecutorService(Executors.newSingleThreadExecutor()); } - /** - * @return {@link TaskExecutor} for task execution - */ @Bean - public TaskExecutor taskExecutor() { + TaskExecutor taskExecutor() { return new ConcurrentTaskExecutor(asyncExecutor()); } - /** - * @return {@link ScheduledExecutorService} based on - * {@link #threadPoolTaskScheduler()}. - */ @Bean - public ScheduledExecutorService scheduledExecutorService() { + ScheduledExecutorService scheduledExecutorService() { return threadPoolTaskScheduler().getScheduledExecutor(); } - /** - * @return {@link ThreadPoolTaskScheduler} for scheduled operations. - */ @Bean - public ThreadPoolTaskScheduler threadPoolTaskScheduler() { + ThreadPoolTaskScheduler threadPoolTaskScheduler() { return new ThreadPoolTaskScheduler(); } @Bean - public HostnameResolver hostnameResolver(final HawkbitServerProperties serverProperties) { + HostnameResolver hostnameResolver(final HawkbitServerProperties serverProperties) { return () -> { try { return new URL(serverProperties.getUrl()); @@ -109,42 +81,8 @@ public class AmqpTestConfiguration { }; } - @Bean(name = "dmfClient") - public RabbitTemplate dmfClient(ConnectionFactory connectionFactory) { - final RabbitTemplate template = new RabbitTemplate(connectionFactory); - template.setMessageConverter(new Jackson2JsonMessageConverter()); - template.setReceiveTimeout(TimeUnit.SECONDS.toMillis(5)); - return template; - } - @Bean - public Queue replyToQueue() { - return new Queue(REPLY_TO_QUEUE, false, false, true); - } - - @Bean - public FanoutExchange replyToExchange() { - return new FanoutExchange(REPLY_TO_EXCHANGE, false, true); - } - - @Bean - public Binding bindQueueToReplyToExchange() { - return BindingBuilder.bind(replyToQueue()).to(replyToExchange()); - } - - @Bean - public DeadletterListener deadletterListener() { - return new DeadletterListener(); - } - - @Bean - public ReplyToListener replyToListener() { - return new ReplyToListener(); - } - - @Bean - public ConnectionFactory rabbitConnectionFactory(final RabbitMqSetupService rabbitmqSetupService) - throws AlivenessException { + ConnectionFactory rabbitConnectionFactory(final RabbitMqSetupService rabbitmqSetupService) { final CachingConnectionFactory factory = new CachingConnectionFactory(); factory.setHost(rabbitmqSetupService.getHostname()); factory.setPort(5672); @@ -152,7 +90,9 @@ public class AmqpTestConfiguration { factory.setPassword(rabbitmqSetupService.getPassword()); try { factory.setVirtualHost(rabbitmqSetupService.createVirtualHost()); - } catch (final Exception e) { + // 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.getMessage()); } @@ -160,12 +100,22 @@ public class AmqpTestConfiguration { } @Bean - public RabbitMqSetupService rabbitmqSetupService(RabbitProperties properties) { + RabbitMqSetupService rabbitmqSetupService(RabbitProperties properties) { return new RabbitMqSetupService(properties); } @Bean - public BrokerRunning brokerRunning(RabbitMqSetupService rabbitmqSetupService) { + @Primary + public RabbitTemplate rabbitTemplateForTest(ConnectionFactory connectionFactory) { + final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); + rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); + rabbitTemplate.setReplyTimeout(TimeUnit.SECONDS.toMillis(3)); + rabbitTemplate.setReceiveTimeout(TimeUnit.SECONDS.toMillis(3)); + return rabbitTemplate; + } + + @Bean + BrokerRunning brokerRunning(RabbitMqSetupService rabbitmqSetupService) { final BrokerRunning brokerRunning = BrokerRunning.isRunning(); brokerRunning.setHostName(rabbitmqSetupService.getHostname()); brokerRunning.getConnectionFactory().setUsername(rabbitmqSetupService.getUsername()); diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/RabbitMqSetupService.java b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/RabbitMqSetupService.java similarity index 78% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/RabbitMqSetupService.java rename to hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/RabbitMqSetupService.java index f8ab0b627..60dd1bb2b 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/RabbitMqSetupService.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/RabbitMqSetupService.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit; +package org.eclipse.hawkbit.rabbitmq.test; import java.net.MalformedURLException; import java.net.URISyntaxException; @@ -30,7 +30,12 @@ import com.rabbitmq.http.client.domain.UserPermissions; */ public class RabbitMqSetupService { - private static Client rabbitmqHttpClient; + private static final String GUEST = "guest"; + private static final String DEFAULT_USER = GUEST; + private static final String DEFAULT_PASSWORD = GUEST; + + private Client rabbitmqHttpClient; + private String virtualHost; private final String hostname; @@ -43,20 +48,20 @@ public class RabbitMqSetupService { hostname = properties.getHost(); username = properties.getUsername(); if (StringUtils.isEmpty(username)) { - username = "guest"; + username = DEFAULT_USER; } password = properties.getPassword(); if (StringUtils.isEmpty(password)) { - password = "guest"; + password = DEFAULT_PASSWORD; } + } - private Client getRabbitmqHttpClient() { + private synchronized Client getRabbitmqHttpClient() { if (rabbitmqHttpClient == null) { try { - rabbitmqHttpClient = new Client("http://" + getHostname() + ":15672/api/", getUsername(), - getPassword()); + rabbitmqHttpClient = new Client(getHttpApiUrl(), getUsername(), getPassword()); } catch (MalformedURLException | URISyntaxException e) { throw Throwables.propagate(e); } @@ -64,7 +69,12 @@ public class RabbitMqSetupService { return rabbitmqHttpClient; } - String createVirtualHost() throws JsonProcessingException, AlivenessException { + public String getHttpApiUrl() { + return "http://" + getHostname() + ":15672/api/"; + } + + @SuppressWarnings("squid:S1162") + public String createVirtualHost() throws JsonProcessingException { if (!getRabbitmqHttpClient().alivenessTest("/")) { throw new AlivenessException(getHostname()); @@ -77,7 +87,7 @@ public class RabbitMqSetupService { } @PreDestroy - void deleteVirtualHost() { + public void deleteVirtualHost() { if (StringUtils.isEmpty(virtualHost)) { return; } @@ -105,7 +115,7 @@ public class RabbitMqSetupService { return permissions; } - static class AlivenessException extends Exception { + static class AlivenessException extends RuntimeException { private static final long serialVersionUID = 1L; public AlivenessException(String hostname) { diff --git a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/TestRabbitListener.java b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/listener/TestRabbitListener.java similarity index 71% rename from hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/TestRabbitListener.java rename to hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/listener/TestRabbitListener.java index 28264c17d..7342781ae 100644 --- a/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/listener/TestRabbitListener.java +++ b/hawkbit-dmf-parent/hawkbit-dmf-rabbitmq-test/src/main/java/org/eclipse/hawkbit/rabbitmq/test/listener/TestRabbitListener.java @@ -6,11 +6,18 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.integration.listener; +package org.eclipse.hawkbit.rabbitmq.test.listener; import org.springframework.amqp.core.Message; +@FunctionalInterface public interface TestRabbitListener { + /** + * handle incoming message + * + * @param message + * the message + */ void handleMessage(Message message); } diff --git a/hawkbit-dmf-parent/pom.xml b/hawkbit-dmf-parent/pom.xml new file mode 100644 index 000000000..560df07a4 --- /dev/null +++ b/hawkbit-dmf-parent/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + + org.eclipse.hawkbit + 0.2.0-SNAPSHOT + hawkbit-parent + + hawkbit-dmf-parent + hawkBit :: Device Management Federation + pom + + + ${project.basedir}/../../target/ + + + + hawkbit-dmf-api + hawkbit-dmf-amqp + hawkbit-dmf-rabbitmq-test + + + + diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index cd77419f5..10a051f7d 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -42,7 +42,6 @@ import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.json.JSONArray; import org.json.JSONObject; import org.junit.Test; -import org.springframework.context.annotation.Description; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; @@ -50,6 +49,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.jayway.jsonpath.JsonPath; +import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Step; import ru.yandex.qatools.allure.annotations.Stories; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java index caae59752..0a1c708bf 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDownloadResourceTest.java @@ -22,8 +22,8 @@ import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Description; +import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; diff --git a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index e1141292b..d5d195f3a 100644 --- a/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java +++ b/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -43,13 +43,13 @@ import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter; import org.eclipse.hawkbit.rest.util.SuccessCondition; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Description; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort.Direction; import org.springframework.http.MediaType; import com.google.common.collect.Lists; +import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Step; import ru.yandex.qatools.allure.annotations.Stories; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java index d60311444..cb7e95f02 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/AbstractJpaTenantAwareBaseEntity.java @@ -20,6 +20,7 @@ import org.eclipse.hawkbit.repository.model.helper.SystemManagementHolder; import org.eclipse.persistence.annotations.Multitenant; import org.eclipse.persistence.annotations.MultitenantType; import org.eclipse.persistence.annotations.TenantDiscriminatorColumn; +import org.hibernate.validator.constraints.NotEmpty; /** * Holder of the base attributes common to all tenant aware entities. @@ -33,6 +34,7 @@ public abstract class AbstractJpaTenantAwareBaseEntity extends AbstractJpaBaseEn @Column(name = "tenant", nullable = false, insertable = false, updatable = false, length = 40) @Size(max = 40) + @NotEmpty private String tenant; /** diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java index 75223c06f..2430c61b5 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTenantMetaData.java @@ -24,6 +24,7 @@ import javax.validation.constraints.Size; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.TenantMetaData; +import org.hibernate.validator.constraints.NotEmpty; /** * Tenant entity with meta data that is configured globally for the entire @@ -45,6 +46,7 @@ public class JpaTenantMetaData extends AbstractJpaBaseEntity implements TenantMe @Column(name = "tenant", nullable = false, updatable = false, length = 40) @Size(max = 40) + @NotEmpty private String tenant; @OneToOne(fetch = FetchType.LAZY) diff --git a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java index 669cae1a6..a639a2128 100644 --- a/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java +++ b/hawkbit-security-core/src/test/java/org/eclipse/hawkbit/im/authentication/PermissionTest.java @@ -15,9 +15,9 @@ import java.util.List; import java.util.stream.Collectors; import org.junit.Test; -import org.springframework.context.annotation.Description; import org.springframework.security.core.GrantedAuthority; +import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; diff --git a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ItemIdClientCriterionTest.java b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ItemIdClientCriterionTest.java index f8f718aeb..978303e67 100644 --- a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ItemIdClientCriterionTest.java +++ b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ItemIdClientCriterionTest.java @@ -13,13 +13,13 @@ import static org.mockito.Mockito.when; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.context.annotation.Description; import com.google.gwt.core.client.GWT; import com.google.gwtmockito.GwtMockitoTestRunner; import com.vaadin.client.UIDL; import com.vaadin.client.ui.dd.VDragEvent; +import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; @@ -31,25 +31,25 @@ public class ItemIdClientCriterionTest { @Test @Description("Verifies that drag source is not valid for the configured id (strict mode)") public void noMatchInStrictMode() { - ItemIdClientCriterion cut = new ItemIdClientCriterion(); + final ItemIdClientCriterion cut = new ItemIdClientCriterion(); // prepare drag-event: - String testId = "thisId"; - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(testId); + final String testId = "thisId"; + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(testId); // prepare configuration: - UIDL uidl = GWT.create(UIDL.class); - String configuredId = "component0"; - String id = "this"; + final UIDL uidl = GWT.create(UIDL.class); + final String configuredId = "component0"; + final String id = "this"; when(uidl.getStringAttribute(configuredId)).thenReturn(id); - String configuredMode = "m"; - String strictMode = "s"; + final String configuredMode = "m"; + final String strictMode = "s"; when(uidl.getStringAttribute(configuredMode)).thenReturn(strictMode); - String count = "c"; + final String count = "c"; when(uidl.getIntAttribute(count)).thenReturn(1); // act - boolean result = cut.accept(dragEvent, uidl); + final boolean result = cut.accept(dragEvent, uidl); // verify that in strict mode: [thisId !equals this] assertThat(result).as("Expected: [" + id + " !equals " + testId + "].").isFalse(); @@ -58,25 +58,25 @@ public class ItemIdClientCriterionTest { @Test @Description("Verifies that drag source is valid for the configured id (strict mode)") public void matchInStrictMode() { - ItemIdClientCriterion cut = new ItemIdClientCriterion(); + final ItemIdClientCriterion cut = new ItemIdClientCriterion(); // prepare drag-event: - String testId = "thisId"; - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(testId); + final String testId = "thisId"; + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(testId); // prepare configuration: - UIDL uidl = GWT.create(UIDL.class); - String configuredId = "component0"; - String id = "thisId"; + final UIDL uidl = GWT.create(UIDL.class); + final String configuredId = "component0"; + final String id = "thisId"; when(uidl.getStringAttribute(configuredId)).thenReturn(id); - String configuredMode = "m"; - String strictMode = "s"; + final String configuredMode = "m"; + final String strictMode = "s"; when(uidl.getStringAttribute(configuredMode)).thenReturn(strictMode); - String count = "c"; + final String count = "c"; when(uidl.getIntAttribute(count)).thenReturn(1); // act - boolean result = cut.accept(dragEvent, uidl); + final boolean result = cut.accept(dragEvent, uidl); // verify that in strict mode: [thisId equals thisId] assertThat(result).as("Expected: [" + id + " equals " + testId + "].").isTrue(); @@ -85,25 +85,25 @@ public class ItemIdClientCriterionTest { @Test @Description("Verifies that drag source is not valid for the configured id (prefix mode)") public void noMatchInPrefixMode() { - ItemIdClientCriterion cut = new ItemIdClientCriterion(); + final ItemIdClientCriterion cut = new ItemIdClientCriterion(); // prepare drag-event: - String testId = "thisId"; - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(testId); + final String testId = "thisId"; + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(testId); // prepare configuration: - UIDL uidl = GWT.create(UIDL.class); - String configuredId = "component0"; - String prefix = "any"; + final UIDL uidl = GWT.create(UIDL.class); + final String configuredId = "component0"; + final String prefix = "any"; when(uidl.getStringAttribute(configuredId)).thenReturn(prefix); - String configuredMode = "m"; - String prefixMode = "p"; + final String configuredMode = "m"; + final String prefixMode = "p"; when(uidl.getStringAttribute(configuredMode)).thenReturn(prefixMode); - String count = "c"; + final String count = "c"; when(uidl.getIntAttribute(count)).thenReturn(1); // act - boolean result = cut.accept(dragEvent, uidl); + final boolean result = cut.accept(dragEvent, uidl); // verify that in strict mode: [thisId !startsWith any] assertThat(result).as("Expected: [" + testId + " !startsWith " + prefix + "].").isFalse(); @@ -112,25 +112,25 @@ public class ItemIdClientCriterionTest { @Test @Description("Verifies that drag source is valid for the configured id (prefix mode)") public void matchInPrefixMode() { - ItemIdClientCriterion cut = new ItemIdClientCriterion(); + final ItemIdClientCriterion cut = new ItemIdClientCriterion(); // prepare drag-event: - String testId = "thisId"; - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(testId); + final String testId = "thisId"; + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(testId); // prepare configuration: - UIDL uidl = GWT.create(UIDL.class); - String configuredId = "component0"; - String prefix = "this"; + final UIDL uidl = GWT.create(UIDL.class); + final String configuredId = "component0"; + final String prefix = "this"; when(uidl.getStringAttribute(configuredId)).thenReturn(prefix); - String configuredMode = "m"; - String prefixMode = "p"; + final String configuredMode = "m"; + final String prefixMode = "p"; when(uidl.getStringAttribute(configuredMode)).thenReturn(prefixMode); - String count = "c"; + final String count = "c"; when(uidl.getIntAttribute(count)).thenReturn(1); // act - boolean result = cut.accept(dragEvent, uidl); + final boolean result = cut.accept(dragEvent, uidl); // verify that in strict mode: [thisId startsWith this] assertThat(result).as("Expected: [" + testId + " startsWith " + prefix + "].").isTrue(); diff --git a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ViewClientCriterionTest.java b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ViewClientCriterionTest.java index 675d55bb1..7a1240485 100644 --- a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ViewClientCriterionTest.java +++ b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ViewClientCriterionTest.java @@ -20,7 +20,6 @@ import org.eclipse.hawkbit.ui.dd.client.criteria.ViewClientCriterion.ViewCriteri import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.springframework.context.annotation.Description; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Document; @@ -35,6 +34,7 @@ import com.vaadin.client.ui.VDragAndDropWrapper; import com.vaadin.client.ui.VScrollTable; import com.vaadin.client.ui.dd.VDragEvent; +import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; @@ -47,11 +47,11 @@ public class ViewClientCriterionTest { @Test @Description("Verfies compilation of template strings.") public void verifyCompiledTemplateStrings() { - ViewCriterionTemplates templates = GWT.create(ViewCriterionTemplates.class); + final ViewCriterionTemplates templates = GWT.create(ViewCriterionTemplates.class); // compile templates - String multiSelectionStyle = templates.multiSelectionStyle("my-theme", "10").asString(); - String notificationMsg = templates.notificationMsg("some-message").asString(); + final String multiSelectionStyle = templates.multiSelectionStyle("my-theme", "10").asString(); + final String notificationMsg = templates.notificationMsg("some-message").asString(); // assure compilation assertThat(multiSelectionStyle).as("Expected: Compiled template string").isNotNull(); @@ -61,13 +61,13 @@ public class ViewClientCriterionTest { @Test @Description("Process serialized config for hiding the drop hints.") public void processSerializedDropTargetHintsConfig() { - ViewClientCriterion cut = new ViewClientCriterion(); + final ViewClientCriterion cut = new ViewClientCriterion(); // prepare configuration: - Document document = Document.get(); - UIDL uidl = GWT.create(UIDL.class); + final Document document = Document.get(); + final UIDL uidl = GWT.create(UIDL.class); when(uidl.getIntAttribute("cdac")).thenReturn(3); - Element[] elements = new Element[3]; + final Element[] elements = new Element[3]; for (int i = 0; i < 3; i++) { when(uidl.getStringAttribute("dac" + String.valueOf(i))).thenReturn("itemId" + String.valueOf(i)); elements[i] = Mockito.mock(Element.class); @@ -95,11 +95,11 @@ public class ViewClientCriterionTest { @Test @Description("Exception occures when processing serialized config for hiding the drop hints.") public void exceptionWhenProcessingDropTargetHintsDataStructure() { - ViewClientCriterion cut = new ViewClientCriterion(); + final ViewClientCriterion cut = new ViewClientCriterion(); // prepare configuration: - Document document = Document.get(); - UIDL uidl = GWT.create(UIDL.class); + final Document document = Document.get(); + final UIDL uidl = GWT.create(UIDL.class); when(uidl.getIntAttribute("cdac")).thenReturn(2); when(uidl.getStringAttribute("dac0")).thenReturn("no-problem"); when(uidl.getStringAttribute("dac1")).thenReturn("problem-bear"); @@ -114,7 +114,7 @@ public class ViewClientCriterionTest { // cross-check that problem-bear was never invoked verify(document, Mockito.never()).getElementById("problem-bear"); - } catch (RuntimeException re) { + } catch (final RuntimeException re) { fail("Exception is not re-thrown in order to continue with the loop"); } finally { reset(Document.get()); @@ -124,12 +124,12 @@ public class ViewClientCriterionTest { @Test @Description("Check multi row drag decoration with non-table widget") public void processMultiRowDragDecorationNonTable() { - ViewClientCriterion cut = new ViewClientCriterion(); + final ViewClientCriterion cut = new ViewClientCriterion(); // prepare drag-event with non table widget: - VDragAndDropWrapper nonTable = Mockito.mock(VDragAndDropWrapper.class); - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent("thisId", nonTable); - Document document = Document.get(); + final VDragAndDropWrapper nonTable = Mockito.mock(VDragAndDropWrapper.class); + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent("thisId", nonTable); + final Document document = Document.get(); // act cut.setMultiRowDragDecoration(dragEvent); @@ -141,18 +141,18 @@ public class ViewClientCriterionTest { @Test @Description("Check multi row drag decoration with single selection") public void processMultiRowDragDecorationSingleSelection() { - ViewClientCriterion cut = new ViewClientCriterion(); + final ViewClientCriterion cut = new ViewClientCriterion(); // prepare table - VScrollTable table = Mockito.spy(new VScrollTable()); + final VScrollTable table = Mockito.spy(new VScrollTable()); table.selectedRowKeys.add("one"); // prepare drag-event with table widget: - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent("thisId", table); + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent("thisId", table); // prepare document - Document document = Document.get(); - Element ele = Mockito.mock(Element.class); + final Document document = Document.get(); + final Element ele = Mockito.mock(Element.class); when(document.getElementById(ViewClientCriterion.SP_DRAG_COUNT)).thenReturn(ele); try { @@ -172,21 +172,21 @@ public class ViewClientCriterionTest { @Test @Description("Check multi row drag decoration with a single item dragged while a multi selection is active in table") public void processMultiRowDragDecorationMultiSelectionNotDragged() { - ViewClientCriterion cut = new ViewClientCriterion(); + final ViewClientCriterion cut = new ViewClientCriterion(); // prepare table - VScrollTable table = Mockito.spy(new VScrollTable()); + final VScrollTable table = Mockito.spy(new VScrollTable()); table.selectedRowKeys.add("one"); table.selectedRowKeys.add("two"); table.focusedRow = Mockito.mock(VScrollTable.VScrollTableBody.VScrollTableRow.class); when(table.focusedRow.getKey()).thenReturn("another"); // prepare drag-event with table widget: - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent("thisId", table); + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent("thisId", table); // prepare document - Document document = Document.get(); - Element ele = Mockito.mock(Element.class); + final Document document = Document.get(); + final Element ele = Mockito.mock(Element.class); when(document.getElementById(ViewClientCriterion.SP_DRAG_COUNT)).thenReturn(ele); try { @@ -206,22 +206,22 @@ public class ViewClientCriterionTest { @Test @Description("Check multi row drag decoration with a valid multi selection") public void processMultiRowDragDecorationMultiSelection() { - ViewClientCriterion cut = new ViewClientCriterion(); + final ViewClientCriterion cut = new ViewClientCriterion(); // prepare table - VScrollTable table = Mockito.spy(new VScrollTable()); + final VScrollTable table = Mockito.spy(new VScrollTable()); table.selectedRowKeys.add("one"); table.selectedRowKeys.add("two"); table.focusedRow = Mockito.mock(VScrollTable.VScrollTableBody.VScrollTableRow.class); when(table.focusedRow.getKey()).thenReturn("one"); // prepare drag-event with table widget: - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent("thisId", table, "myTheme"); + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent("thisId", table, "myTheme"); dragEvent.getTransferable().getDragSource().getConnection().getUIConnector(); // prepare document - Document document = Document.get(); - StyleElement ele = Mockito.spy(StyleElement.class); + final Document document = Document.get(); + final StyleElement ele = Mockito.spy(StyleElement.class); when(ele.getTagName()).thenReturn(StyleElement.TAG); when(document.getElementById(ViewClientCriterion.SP_DRAG_COUNT)).thenReturn(ele); diff --git a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ViewComponentClientCriterionTest.java b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ViewComponentClientCriterionTest.java index ffbd4f50f..f1100590a 100644 --- a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ViewComponentClientCriterionTest.java +++ b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/dd/client/criteria/ViewComponentClientCriterionTest.java @@ -17,7 +17,6 @@ import static org.mockito.Mockito.when; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; -import org.springframework.context.annotation.Description; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Document; @@ -28,6 +27,7 @@ import com.vaadin.client.ui.dd.VDragAndDropManager; import com.vaadin.client.ui.dd.VDragEvent; import com.vaadin.client.ui.dd.VDropHandler; +import ru.yandex.qatools.allure.annotations.Description; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Stories; @@ -39,13 +39,13 @@ public class ViewComponentClientCriterionTest { @Test @Description("Process serialized data structure for preparing the drop targets to show.") public void processSerializedDropTargetHintsDataStructure() { - ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); + final ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); // prepare configuration: - Document document = Document.get(); - UIDL uidl = GWT.create(UIDL.class); + final Document document = Document.get(); + final UIDL uidl = GWT.create(UIDL.class); when(uidl.getIntAttribute("cda")).thenReturn(3); - Element[] elements = new Element[3]; + final Element[] elements = new Element[3]; for (int i = 0; i < 3; i++) { when(uidl.getStringAttribute("da" + String.valueOf(i))).thenReturn("itemId" + String.valueOf(i)); elements[i] = Mockito.mock(Element.class); @@ -69,11 +69,11 @@ public class ViewComponentClientCriterionTest { @Test @Description("Exception occures when processing serialized data structure for preparing the drop targets to show.") public void exceptionWhenProcessingDropTargetHintsDataStructure() { - ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); + final ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); // prepare configuration: - Document document = Document.get(); - UIDL uidl = GWT.create(UIDL.class); + final Document document = Document.get(); + final UIDL uidl = GWT.create(UIDL.class); when(uidl.getIntAttribute("cda")).thenReturn(2); when(uidl.getStringAttribute("da0")).thenReturn("no-problem"); when(uidl.getStringAttribute("da1")).thenReturn("problem-bear"); @@ -82,7 +82,7 @@ public class ViewComponentClientCriterionTest { // act try { cut.showDropTargetHints(uidl); - } catch (RuntimeException re) { + } catch (final RuntimeException re) { fail("Exception is not re-thrown in order to continue with the loop"); } @@ -96,19 +96,19 @@ public class ViewComponentClientCriterionTest { @Test @Description("Verifies that drag source is valid for the configured prefix") public void checkDragSourceWithValidId() { - ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); + final ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); // prepare drag-event: - String prefix = "this"; - String id = "thisId"; - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(id); + final String prefix = "this"; + final String id = "thisId"; + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(id); // prepare configuration: - UIDL uidl = GWT.create(UIDL.class); + final UIDL uidl = GWT.create(UIDL.class); when(uidl.getStringAttribute("ds")).thenReturn(prefix); // act - boolean result = cut.isValidDragSource(dragEvent, uidl); + final boolean result = cut.isValidDragSource(dragEvent, uidl); // assure that drag source is valid: [thisId startsWith this] assertThat(result).as("Expected: [" + id + " startsWith " + prefix + "].").isTrue(); @@ -117,19 +117,19 @@ public class ViewComponentClientCriterionTest { @Test @Description("Verifies that drag source is not valid for the configured prefix") public void checkDragSourceWithInvalidId() { - ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); + final ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); // prepare drag-event: - String prefix = "this"; - String id = "notThis"; - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(id); + final String prefix = "this"; + final String id = "notThis"; + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(id); // prepare configuration: - UIDL uidl = GWT.create(UIDL.class); + final UIDL uidl = GWT.create(UIDL.class); when(uidl.getStringAttribute("ds")).thenReturn(prefix); // act - boolean result = cut.isValidDragSource(dragEvent, uidl); + final boolean result = cut.isValidDragSource(dragEvent, uidl); // assure that drag source is valid: [thisId !startsWith this] assertThat(result).as("Expected: [" + id + " !startsWith " + prefix + "].").isFalse(); @@ -139,23 +139,23 @@ public class ViewComponentClientCriterionTest { @Description("An exception occures while the drag source is validated against the configured prefix") public void exceptionWhenCheckingDragSource() { - ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); + final ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); // prepare drag-event: - String prefix = "this"; - String id = "notThis"; - VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(id); + final String prefix = "this"; + final String id = "notThis"; + final VDragEvent dragEvent = CriterionTestHelper.createMockedVDragEvent(id); doThrow(new RuntimeException()).when(dragEvent).getTransferable(); // prepare configuration: - UIDL uidl = GWT.create(UIDL.class); + final UIDL uidl = GWT.create(UIDL.class); when(uidl.getStringAttribute("ds")).thenReturn(prefix); // act Boolean result = null; try { result = cut.isValidDragSource(dragEvent, uidl); - } catch (Exception ex) { + } catch (final Exception ex) { fail("Exception is not re-thrown"); } @@ -166,18 +166,18 @@ public class ViewComponentClientCriterionTest { @Test @Description("Successfully checks if the current drop location is in the list of valid drop targets") public void successfulCheckValidDropTarget() { - ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); + final ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); // prepare drag and drop manager: - String dtargetid = "dropTarget1Id"; - VDropHandler dropHandler = CriterionTestHelper.createMockedVDropHandler(dtargetid); + final String dtargetid = "dropTarget1Id"; + final VDropHandler dropHandler = CriterionTestHelper.createMockedVDropHandler(dtargetid); when(VDragAndDropManager.get().getCurrentDropHandler()).thenReturn(dropHandler); // prepare configuration: - UIDL uidl = createUidlWithThreeDropTargets(); + final UIDL uidl = createUidlWithThreeDropTargets(); // act - boolean result = cut.isValidDropTarget(uidl); + final boolean result = cut.isValidDropTarget(uidl); // assure drop target is valid: [dropTarget1Id startsWith dropTarget1] assertThat(result).as("Expected: [" + dtargetid + " startsWith dropTarget1].").isTrue(); @@ -186,43 +186,42 @@ public class ViewComponentClientCriterionTest { @Test @Description("Failed check if the current drop location is in the list of valid drop targets") public void failedCheckValidDropTarget() { - ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); + final ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); // prepare drag and drop manager: - String dtargetid = "no-hit"; - VDropHandler dropHandler = CriterionTestHelper.createMockedVDropHandler(dtargetid); + final String dtargetid = "no-hit"; + final VDropHandler dropHandler = CriterionTestHelper.createMockedVDropHandler(dtargetid); when(VDragAndDropManager.get().getCurrentDropHandler()).thenReturn(dropHandler); // prepare configuration: - UIDL uidl = createUidlWithThreeDropTargets(); + final UIDL uidl = createUidlWithThreeDropTargets(); // act - boolean result = cut.isValidDropTarget(uidl); + final boolean result = cut.isValidDropTarget(uidl); // assure "no-hit" does not match [dropTarget0,dropTarget1,dropTarget2] - assertThat(result).as("Expected: [" + dtargetid + " does not match one of the list entries].") - .isFalse(); + assertThat(result).as("Expected: [" + dtargetid + " does not match one of the list entries].").isFalse(); } @Test @Description("An exception occures while the current drop location is validated against the list of valid drop target prefixes") public void exceptionWhenCheckingValidDropTarget() { - ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); + final ViewComponentClientCriterion cut = new ViewComponentClientCriterion(); // prepare drag and drop manager: - String dtargetid = "no-hit"; - VDropHandler dropHandler = CriterionTestHelper.createMockedVDropHandler(dtargetid); + final String dtargetid = "no-hit"; + final VDropHandler dropHandler = CriterionTestHelper.createMockedVDropHandler(dtargetid); when(VDragAndDropManager.get().getCurrentDropHandler()).thenReturn(dropHandler); doThrow(new RuntimeException()).when(dropHandler).getConnector(); // prepare configuration: - UIDL uidl = createUidlWithThreeDropTargets(); + final UIDL uidl = createUidlWithThreeDropTargets(); // act Boolean result = null; try { result = cut.isValidDropTarget(uidl); - } catch (Exception ex) { + } catch (final Exception ex) { fail("Exception is not re-thrown"); } @@ -231,7 +230,7 @@ public class ViewComponentClientCriterionTest { } private UIDL createUidlWithThreeDropTargets() { - UIDL uidl = GWT.create(UIDL.class); + final UIDL uidl = GWT.create(UIDL.class); when(uidl.getIntAttribute("cdt")).thenReturn(3); for (int i = 0; i < 3; i++) { when(uidl.getStringAttribute("dt" + String.valueOf(i))).thenReturn("dropTarget" + String.valueOf(i)); diff --git a/pom.xml b/pom.xml index bfbcf8cb5..67c57939c 100644 --- a/pom.xml +++ b/pom.xml @@ -39,8 +39,7 @@ hawkbit-ddi-api hawkbit-ddi-dl-api hawkbit-ddi-resource - hawkbit-dmf-api - hawkbit-dmf-amqp + hawkbit-dmf-parent hawkbit-repository hawkbit-security-integration hawkbit-http-security