From 52bc266416b7152a0e26376adab007e75320ce94 Mon Sep 17 00:00:00 2001 From: Florian Ruschbaschan <46709526+floruschbaschan@users.noreply.github.com> Date: Tue, 18 Jun 2019 15:29:15 +0200 Subject: [PATCH] Increase target name to 128 and target controller id to 256 (#849) * Increase target name to 128 and target controller id to 256 * Fix test failures by using constant NamedEntity.NAME_MAX_SIZE + 1 * Use constant NamedEntity.NAME_MAX_SIZE + 1 for mgmt-resource tests * Add db migration scripts to increase the controllerId and name limit * Fix review issues * Use correct constant field for junit tests * Change Hawkbit documentation url of application-.properties * Add new line at the end of db migration scripts * Update assertion description * Revert copyright years to its creator year * Add DDI-, AMQP- and controller management-tests Signed-off-by: Florian Ruschbaschan --- ...pMessageHandlerServiceIntegrationTest.java | 164 ++++---- .../hawkbit/repository/model/NamedEntity.java | 2 +- .../hawkbit/repository/model/Target.java | 2 +- ...length_of_controller_id_and_name___DB2.sql | 13 + .../migration/DB2/V1_12_5__baseline___DB2.sql | 6 +- ..._length_of_controller_id_and_name___H2.sql | 13 + ...ngth_of_controller_id_and_name___MYSQL.sql | 13 + ...of_controller_id_and_name___SQL_SERVER.sql | 13 + .../jpa/ControllerManagementTest.java | 386 +++++++++--------- .../jpa/DistributionSetManagementTest.java | 18 +- .../DistributionSetTypeManagementTest.java | 10 +- .../repository/jpa/TargetManagementTest.java | 13 +- .../jpa/TargetTagManagementTest.java | 7 +- .../rest/resource/DdiRootControllerTest.java | 70 ++-- .../MgmtDistributionSetResourceTest.java | 3 +- .../MgmtDistributionSetTypeResourceTest.java | 3 +- .../MgmtSoftwareModuleTypeResourceTest.java | 3 +- .../rest/resource/MgmtTargetResourceTest.java | 3 +- .../main/resources/application-db2.properties | 18 + .../resources/application-mssql.properties | 2 +- .../resources/application-mysql.properties | 2 +- 21 files changed, 427 insertions(+), 337 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_12__change_length_of_controller_id_and_name___DB2.sql create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_12__change_length_of_controller_id_and_name___H2.sql create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_12__change_length_of_controller_id_and_name___MYSQL.sql create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_12__change_length_of_controller_id_and_name___SQL_SERVER.sql create mode 100644 hawkbit-runtime/hawkbit-update-server/src/main/resources/application-db2.properties diff --git a/hawkbit-dmf/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java b/hawkbit-dmf/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java index 4be78fbfa8..44305a3abd 100644 --- a/hawkbit-dmf/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java +++ b/hawkbit-dmf/hawkbit-dmf-amqp/src/test/java/org/eclipse/hawkbit/integration/AmqpMessageHandlerServiceIntegrationTest.java @@ -21,8 +21,7 @@ import java.util.UUID; import java.util.stream.Collectors; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import org.apache.commons.lang3.RandomStringUtils; import org.eclipse.hawkbit.amqp.AmqpProperties; import org.eclipse.hawkbit.dmf.amqp.api.EventTopic; import org.eclipse.hawkbit.dmf.amqp.api.MessageHeaderKey; @@ -60,6 +59,9 @@ import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.beans.factory.annotation.Autowired; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + import io.qameta.allure.Description; import io.qameta.allure.Feature; import io.qameta.allure.Step; @@ -87,8 +89,8 @@ public void pingDmfInterface() { @Test @Description("Tests register target") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 2), - @Expect(type = TargetPollEvent.class, count = 3) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 2), + @Expect(type = TargetPollEvent.class, count = 3)}) public void registerTargets() { final String controllerId = TARGET_PREFIX + "registerTargets"; registerAndAssertTargetWithExistingTenant(controllerId, 1); @@ -101,38 +103,44 @@ public void registerTargets() { } @Test - @Description("Tests register invalid target withy empty controller id. Tests register invalid target with null controller id") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @Description("Tests register invalid target withy empty controller id.") + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void registerEmptyTarget() { createAndSendThingCreated("", TENANT_EXIST); assertAllTargetsCount(0); verifyOneDeadLetterMessage(); - } @Test - @Description("Tests register invalid target with whitspace controller id. Tests register invalid target with null controller id") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @Description("Tests register invalid target with whitspace controller id.") + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void registerWhitespaceTarget() { createAndSendThingCreated("Invalid Invalid", TENANT_EXIST); assertAllTargetsCount(0); verifyOneDeadLetterMessage(); - } @Test - @Description("Tests register invalid target with null controller id. Tests register invalid target with null controller id") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) - public void registerInvalidNullTargets() { + @Description("Tests register invalid target with null controller id.") + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) + public void registerInvalidNullTarget() { createAndSendThingCreated(null, TENANT_EXIST); assertAllTargetsCount(0); verifyOneDeadLetterMessage(); + } + @Test + @Description("Tests register invalid target with too long controller id") + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) + public void registerInvalidTargetWithTooLongControllerId() { + createAndSendThingCreated(RandomStringUtils.randomAlphabetic(Target.CONTROLLER_ID_MAX_SIZE + 1), TENANT_EXIST); + assertAllTargetsCount(0); + verifyOneDeadLetterMessage(); } @Test @Description("Tests null reply to property in message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void missingReplyToProperty() { final String controllerId = TARGET_PREFIX + "missingReplyToProperty"; final Message createTargetMessage = createTargetMessage(controllerId, TENANT_EXIST); @@ -145,7 +153,7 @@ public void missingReplyToProperty() { @Test @Description("Tests missing reply to property in message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void emptyReplyToProperty() { final String controllerId = TARGET_PREFIX + "emptyReplyToProperty"; final Message createTargetMessage = createTargetMessage(controllerId, TENANT_EXIST); @@ -158,7 +166,7 @@ public void emptyReplyToProperty() { @Test @Description("Tests missing thing id property in message. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void missingThingIdProperty() { final Message createTargetMessage = createTargetMessage(null, TENANT_EXIST); createTargetMessage.getMessageProperties().getHeaders().remove(MessageHeaderKey.THING_ID); @@ -170,7 +178,7 @@ public void missingThingIdProperty() { @Test @Description("Tests null thing id property in message. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void nullThingIdProperty() { final Message createTargetMessage = createTargetMessage(null, TENANT_EXIST); getDmfClient().send(createTargetMessage); @@ -181,7 +189,7 @@ public void nullThingIdProperty() { @Test @Description("Tests missing tenant message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void missingTenantHeader() { final String controllerId = TARGET_PREFIX + "missingTenantHeader"; final Message createTargetMessage = createTargetMessage(controllerId, TENANT_EXIST); @@ -194,7 +202,7 @@ public void missingTenantHeader() { @Test @Description("Tests null tenant message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void nullTenantHeader() { final String controllerId = TARGET_PREFIX + "nullTenantHeader"; final Message createTargetMessage = createTargetMessage(controllerId, null); @@ -206,7 +214,7 @@ public void nullTenantHeader() { @Test @Description("Tests empty tenant message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void emptyTenantHeader() { final String controllerId = TARGET_PREFIX + "emptyTenantHeader"; final Message createTargetMessage = createTargetMessage(controllerId, ""); @@ -218,7 +226,7 @@ public void emptyTenantHeader() { @Test @Description("Tests tenant not exist. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void tenantNotExist() { final String controllerId = TARGET_PREFIX + "tenantNotExist"; final Message createTargetMessage = createTargetMessage(controllerId, "TenantNotExist"); @@ -230,7 +238,7 @@ public void tenantNotExist() { @Test @Description("Tests missing type message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void missingTypeHeader() { final Message createTargetMessage = createTargetMessage(null, TENANT_EXIST); createTargetMessage.getMessageProperties().getHeaders().remove(MessageHeaderKey.TYPE); @@ -242,7 +250,7 @@ public void missingTypeHeader() { @Test @Description("Tests null type message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void nullTypeHeader() { final Message createTargetMessage = createTargetMessage(null, TENANT_EXIST); createTargetMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TYPE, null); @@ -254,7 +262,7 @@ public void nullTypeHeader() { @Test @Description("Tests empty type message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void emptyTypeHeader() { final Message createTargetMessage = createTargetMessage(null, TENANT_EXIST); createTargetMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TYPE, ""); @@ -266,7 +274,7 @@ public void emptyTypeHeader() { @Test @Description("Tests invalid type message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void invalidTypeHeader() { final Message createTargetMessage = createTargetMessage(null, TENANT_EXIST); createTargetMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TYPE, "NotExist"); @@ -278,7 +286,7 @@ public void invalidTypeHeader() { @Test @Description("Tests null topic message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void nullTopicHeader() { final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, ""); eventMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TOPIC, null); @@ -289,7 +297,7 @@ public void nullTopicHeader() { @Test @Description("Tests null topic message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void emptyTopicHeader() { final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, ""); eventMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TOPIC, ""); @@ -300,7 +308,7 @@ public void emptyTopicHeader() { @Test @Description("Tests null topic message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void invalidTopicHeader() { final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, ""); eventMessage.getMessageProperties().getHeaders().put(MessageHeaderKey.TOPIC, "NotExist"); @@ -311,7 +319,7 @@ public void invalidTopicHeader() { @Test @Description("Tests missing topic message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void missingTopicHeader() { final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, ""); eventMessage.getMessageProperties().getHeaders().remove(MessageHeaderKey.TOPIC); @@ -322,7 +330,7 @@ public void missingTopicHeader() { @Test @Description("Tests invalid null message content. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void updateActionStatusWithNullContent() { final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, null); getDmfClient().send(eventMessage); @@ -331,7 +339,7 @@ public void updateActionStatusWithNullContent() { @Test @Description("Tests invalid empty message content. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void updateActionStatusWithEmptyContent() { final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, ""); getDmfClient().send(eventMessage); @@ -340,7 +348,7 @@ public void updateActionStatusWithEmptyContent() { @Test @Description("Tests invalid json message content. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void updateActionStatusWithInvalidJsonContent() { final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, "Invalid Content"); @@ -350,7 +358,7 @@ public void updateActionStatusWithInvalidJsonContent() { @Test @Description("Tests invalid topic message header. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void updateActionStatusWithInvalidActionId() { final DmfActionUpdateStatus actionUpdateStatus = new DmfActionUpdateStatus(1L, DmfActionStatus.RUNNING); final Message eventMessage = createEventMessage(TENANT_EXIST, EventTopic.UPDATE_ACTION_STATUS, @@ -361,14 +369,14 @@ public void updateActionStatusWithInvalidActionId() { @Test @Description("Tests register target and send finished message") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetPollEvent.class, count = 1)}) public void finishActionStatus() { final String controllerId = TARGET_PREFIX + "finishActionStatus"; registerTargetAndSendAndAssertUpdateActionStatus(DmfActionStatus.FINISHED, Status.FINISHED, controllerId); @@ -376,13 +384,13 @@ public void finishActionStatus() { @Test @Description("Register a target and send a update action status (running). Verfiy if the updated action status is correct.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 0), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void runningActionStatus() { final String controllerId = TARGET_PREFIX + "runningActionStatus"; registerTargetAndSendAndAssertUpdateActionStatus(DmfActionStatus.RUNNING, Status.RUNNING, controllerId); @@ -390,13 +398,13 @@ public void runningActionStatus() { @Test @Description("Register a target and send an update action status (downloaded). Verfiy if the updated action status is correct.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 0), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void downloadedActionStatus() { final String controllerId = TARGET_PREFIX + "downloadedActionStatus"; registerTargetAndSendAndAssertUpdateActionStatus(DmfActionStatus.DOWNLOADED, Status.DOWNLOADED, controllerId); @@ -404,13 +412,13 @@ public void downloadedActionStatus() { @Test @Description("Register a target and send a update action status (download). Verfiy if the updated action status is correct.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void downloadActionStatus() { final String controllerId = TARGET_PREFIX + "downloadActionStatus"; registerTargetAndSendAndAssertUpdateActionStatus(DmfActionStatus.DOWNLOAD, Status.DOWNLOAD, controllerId); @@ -418,13 +426,13 @@ public void downloadActionStatus() { @Test @Description("Register a target and send a update action status (error). Verfiy if the updated action status is correct.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetPollEvent.class, count = 1)}) public void errorActionStatus() { final String controllerId = TARGET_PREFIX + "errorActionStatus"; registerTargetAndSendAndAssertUpdateActionStatus(DmfActionStatus.ERROR, Status.ERROR, controllerId); @@ -432,13 +440,13 @@ public void errorActionStatus() { @Test @Description("Register a target and send a update action status (warning). Verfiy if the updated action status is correct.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void warningActionStatus() { final String controllerId = TARGET_PREFIX + "warningActionStatus"; registerTargetAndSendAndAssertUpdateActionStatus(DmfActionStatus.WARNING, Status.WARNING, controllerId); @@ -446,13 +454,13 @@ public void warningActionStatus() { @Test @Description("Register a target and send a update action status (retrieved). Verfiy if the updated action status is correct.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void retrievedActionStatus() { final String controllerId = TARGET_PREFIX + "retrievedActionStatus"; registerTargetAndSendAndAssertUpdateActionStatus(DmfActionStatus.RETRIEVED, Status.RETRIEVED, controllerId); @@ -460,13 +468,13 @@ public void retrievedActionStatus() { @Test @Description("Register a target and send a invalid update action status (cancel). This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void cancelNotAllowActionStatus() { final String controllerId = TARGET_PREFIX + "cancelNotAllowActionStatus"; registerTargetAndSendActionStatus(DmfActionStatus.CANCELED, controllerId); @@ -475,13 +483,13 @@ public void cancelNotAllowActionStatus() { @Test @Description("Verfiy receiving a download and install message if a deployment is done before the target has polled the first time.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 2) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 2)}) public void receiveDownLoadAndInstallMessageAfterAssignment() { final String controllerId = TARGET_PREFIX + "receiveDownLoadAndInstallMessageAfterAssignment"; @@ -501,13 +509,13 @@ public void receiveDownLoadAndInstallMessageAfterAssignment() { @Test @Description("Verfiy receiving a download message if a deployment is done with window configured but before maintenance window start time.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 2) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 2)}) public void receiveDownloadMessageBeforeMaintenanceWindowStartTime() { final String controllerId = TARGET_PREFIX + "receiveDownLoadMessageBeforeMaintenanceWindowStartTime"; @@ -528,13 +536,13 @@ public void receiveDownloadMessageBeforeMaintenanceWindowStartTime() { @Test @Description("Verify receiving a download_and_install message if a deployment is done with window configured and during maintenance window start time.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 2) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 2)}) public void receiveDownloadAndInstallMessageDuringMaintenanceWindow() { final String controllerId = TARGET_PREFIX + "receiveDownLoadAndInstallMessageDuringMaintenanceWindow"; @@ -555,14 +563,14 @@ public void receiveDownloadAndInstallMessageDuringMaintenanceWindow() { @Test @Description("Verfiy receiving a cancel update message if a deployment is canceled before the target has polled the first time.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = CancelTargetAssignmentEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 1), - @Expect(type = TargetPollEvent.class, count = 2) }) + @Expect(type = TargetPollEvent.class, count = 2)}) public void receiveCancelUpdateMessageAfterAssignmentWasCanceled() { final String controllerId = TARGET_PREFIX + "receiveCancelUpdateMessageAfterAssignmentWasCanceled"; @@ -583,14 +591,14 @@ public void receiveCancelUpdateMessageAfterAssignmentWasCanceled() { @Test @Description("Register a target and send a invalid update action status (canceled). The current status (pending) is not a canceling state. This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = CancelTargetAssignmentEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void actionNotExists() { final String controllerId = TARGET_PREFIX + "actionNotExists"; @@ -603,13 +611,13 @@ public void actionNotExists() { @Test @Description("Register a target and send a invalid update action status (cancel_rejected). This message should forwarded to the deadletter queue") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void canceledRejectedNotAllowActionStatus() { final String controllerId = TARGET_PREFIX + "canceledRejectedNotAllowActionStatus"; registerTargetAndSendActionStatus(DmfActionStatus.CANCEL_REJECTED, controllerId); @@ -618,14 +626,14 @@ public void canceledRejectedNotAllowActionStatus() { @Test @Description("Register a target and send a valid update action status (cancel_rejected). Verfiy if the updated action status is correct.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = CancelTargetAssignmentEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void canceledRejectedActionStatus() { final String controllerId = TARGET_PREFIX + "canceledRejectedActionStatus"; @@ -637,8 +645,8 @@ public void canceledRejectedActionStatus() { @Test @Description("Verify that sending an update controller attribute message to an existing target works. Verify that different update modes (merge, replace, remove) can be used.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 4), @Expect(type = TargetPollEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetUpdatedEvent.class, count = 4), @Expect(type = TargetPollEvent.class, count = 1)}) public void updateAttributesWithDifferentUpdateModes() { final String controllerId = TARGET_PREFIX + "updateAttributes"; @@ -740,8 +748,8 @@ private void updateAttributesWithoutUpdateMode(final String controllerId) { @Test @Description("Verify that sending an update controller attribute message with no thingid header to an existing target does not work.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 0), @Expect(type = TargetPollEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetUpdatedEvent.class, count = 0), @Expect(type = TargetPollEvent.class, count = 1)}) public void updateAttributesWithNoThingId() { final String controllerId = TARGET_PREFIX + "updateAttributesWithNoThingId"; @@ -765,8 +773,8 @@ public void updateAttributesWithNoThingId() { @Test @Description("Verify that sending an update controller attribute message with invalid body to an existing target does not work.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 0), @Expect(type = TargetPollEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetUpdatedEvent.class, count = 0), @Expect(type = TargetPollEvent.class, count = 1)}) public void updateAttributesWithWrongBody() { // setup @@ -805,19 +813,17 @@ public void updateAttributesWithInvalidValues() { verifyNumberOfDeadLetterMessages(3); } - @Test @Description("Tests the download_only assignment: tests the handling of a target reporting DOWNLOADED") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetPollEvent.class, count = 1) }) - public void downloadOnlyAssignmentFinishesActionWhenTargetReportsDownloaded() - throws IOException { + @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetPollEvent.class, count = 1)}) + public void downloadOnlyAssignmentFinishesActionWhenTargetReportsDownloaded() throws IOException { // create target final String controllerId = TARGET_PREFIX + "registerTargets_1"; final DistributionSet distributionSet = createTargetAndDistributionSetAndAssign(controllerId, DOWNLOAD_ONLY); @@ -839,16 +845,14 @@ public void downloadOnlyAssignmentFinishesActionWhenTargetReportsDownloaded() @Test @Description("Tests the download_only assignment: tests the handling of a target reporting FINISHED") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = ActionUpdatedEvent.class, count = 2), - @Expect(type = ActionCreatedEvent.class, count = 1), + @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = TargetAttributesRequestedEvent.class, count = 2), - @Expect(type = TargetUpdatedEvent.class, count = 3), - @Expect(type = TargetPollEvent.class, count = 1) }) + @Expect(type = TargetUpdatedEvent.class, count = 3), @Expect(type = TargetPollEvent.class, count = 1)}) public void downloadOnlyAssignmentAllowsActionStatusUpdatesWhenTargetReportsFinishedAndUpdatesInstalledDS() throws IOException { @@ -874,7 +878,7 @@ public void downloadOnlyAssignmentAllowsActionStatusUpdatesWhenTargetReportsFini sendActionUpdateStatus(new DmfActionUpdateStatus(actionId, DmfActionStatus.FINISHED)); assertAction(actionId, 2, Status.RUNNING, Status.DOWNLOADED, Status.FINISHED); Mockito.verifyZeroInteractions(getDeadletterListener()); - + verifyAssignedDsAndInstalledDs(controllerId, distributionSet.getId(), distributionSet.getId()); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java index 127f3145f7..80c8ea62de 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/NamedEntity.java @@ -16,7 +16,7 @@ public interface NamedEntity extends TenantAwareBaseEntity { /** * Maximum length of name. */ - int NAME_MAX_SIZE = 64; + int NAME_MAX_SIZE = 128; /** * Maximum length of description. diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java index 8af9ccde0a..8591b2572a 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/model/Target.java @@ -23,7 +23,7 @@ public interface Target extends NamedEntity { /** * Maximum length of controllerId. */ - int CONTROLLER_ID_MAX_SIZE = 64; + int CONTROLLER_ID_MAX_SIZE = 256; /** * Maximum length of securityToken. diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_12__change_length_of_controller_id_and_name___DB2.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_12__change_length_of_controller_id_and_name___DB2.sql new file mode 100644 index 0000000000..fc5d4f0f03 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_12__change_length_of_controller_id_and_name___DB2.sql @@ -0,0 +1,13 @@ +ALTER TABLE sp_distribution_set ALTER COLUMN name SET DATA TYPE VARCHAR(128); +ALTER TABLE sp_distribution_set_type ALTER COLUMN name SET DATA TYPE VARCHAR(128); +ALTER TABLE sp_distributionset_tag ALTER COLUMN name SET DATA TYPE VARCHAR(128); +ALTER TABLE sp_base_software_module ALTER COLUMN name SET DATA TYPE VARCHAR(128); +ALTER TABLE sp_rollout ALTER COLUMN name SET DATA TYPE VARCHAR(128); +ALTER TABLE sp_rolloutgroup ALTER COLUMN name SET DATA TYPE VARCHAR(128); +ALTER TABLE sp_software_module_type ALTER COLUMN name SET DATA TYPE VARCHAR(128); +ALTER TABLE sp_target ALTER COLUMN name SET DATA TYPE VARCHAR(128); +ALTER TABLE sp_target_filter_query ALTER COLUMN name SET DATA TYPE VARCHAR(128); +ALTER TABLE sp_target_tag ALTER COLUMN name SET DATA TYPE VARCHAR(128); + + +ALTER TABLE sp_target ALTER COLUMN controller_id SET DATA TYPE VARCHAR(256); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_5__baseline___DB2.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_5__baseline___DB2.sql index 2bf33f7c06..274ead21b6 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_5__baseline___DB2.sql +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_5__baseline___DB2.sql @@ -27,11 +27,7 @@ CREATE TABLE sp_action maintenance_duration VARCHAR(40), maintenance_time_zone VARCHAR(40), PRIMARY KEY (id) - ); - - ALTER TABLE sp_action ADD column maintenance_cron_schedule VARCHAR(40); -ALTER TABLE sp_action ADD column maintenance_duration VARCHAR(40); -ALTER TABLE sp_action ADD column maintenance_time_zone VARCHAR(40); + ); CREATE INDEX sp_idx_action_01 ON sp_action (tenant, distribution_set); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_12__change_length_of_controller_id_and_name___H2.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_12__change_length_of_controller_id_and_name___H2.sql new file mode 100644 index 0000000000..b9b5e2a282 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_12__change_length_of_controller_id_and_name___H2.sql @@ -0,0 +1,13 @@ +ALTER TABLE sp_distribution_set ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_distribution_set_type ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_distributionset_tag ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_base_software_module ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_rollout ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_rolloutgroup ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_software_module_type ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_target ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_target_filter_query ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_target_tag ALTER COLUMN name VARCHAR(128); + + +ALTER TABLE sp_target ALTER COLUMN controller_id VARCHAR(256); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_12__change_length_of_controller_id_and_name___MYSQL.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_12__change_length_of_controller_id_and_name___MYSQL.sql new file mode 100644 index 0000000000..32b39dd59e --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_12__change_length_of_controller_id_and_name___MYSQL.sql @@ -0,0 +1,13 @@ +ALTER TABLE sp_distribution_set MODIFY name VARCHAR(128); +ALTER TABLE sp_distribution_set_type MODIFY name VARCHAR(128); +ALTER TABLE sp_distributionset_tag MODIFY name VARCHAR(128); +ALTER TABLE sp_base_software_module MODIFY name VARCHAR(128); +ALTER TABLE sp_rollout MODIFY name VARCHAR(128); +ALTER TABLE sp_rolloutgroup MODIFY name VARCHAR(128); +ALTER TABLE sp_software_module_type MODIFY name VARCHAR(128); +ALTER TABLE sp_target MODIFY name VARCHAR(128); +ALTER TABLE sp_target_filter_query MODIFY name VARCHAR(128); +ALTER TABLE sp_target_tag MODIFY name VARCHAR(128); + + +ALTER TABLE sp_target MODIFY controller_id VARCHAR(256); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_12__change_length_of_controller_id_and_name___SQL_SERVER.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_12__change_length_of_controller_id_and_name___SQL_SERVER.sql new file mode 100644 index 0000000000..b9b5e2a282 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_12__change_length_of_controller_id_and_name___SQL_SERVER.sql @@ -0,0 +1,13 @@ +ALTER TABLE sp_distribution_set ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_distribution_set_type ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_distributionset_tag ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_base_software_module ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_rollout ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_rolloutgroup ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_software_module_type ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_target ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_target_filter_query ALTER COLUMN name VARCHAR(128); +ALTER TABLE sp_target_tag ALTER COLUMN name VARCHAR(128); + + +ALTER TABLE sp_target ALTER COLUMN controller_id VARCHAR(256); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java index 0bc7904e28..5786002435 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/ControllerManagementTest.java @@ -33,6 +33,7 @@ import javax.validation.ConstraintViolationException; +import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomUtils; import org.eclipse.hawkbit.repository.RepositoryProperties; import org.eclipse.hawkbit.repository.UpdateMode; @@ -89,8 +90,8 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { @Test @Description("Verifies that management get access react as specfied on calls for non existing entities by means " + "of Optional not present.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = SoftwareModuleCreatedEvent.class, count = 1)}) public void nonExistingEntityAccessReturnsNotPresent() { final Target target = testdataFactory.createTarget(); final SoftwareModule module = testdataFactory.createSoftwareModuleOs(); @@ -110,8 +111,8 @@ public void nonExistingEntityAccessReturnsNotPresent() { @Test @Description("Verifies that management queries react as specfied on calls for non existing entities " + " by means of throwing EntityNotFoundException.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = SoftwareModuleCreatedEvent.class, count = 1)}) public void entityQueriesReferringToNotExistingEntitiesThrowsException() throws URISyntaxException { final Target target = testdataFactory.createTarget(); final SoftwareModule module = testdataFactory.createSoftwareModuleOs(); @@ -146,13 +147,13 @@ public void entityQueriesReferringToNotExistingEntitiesThrowsException() throws @Test @Description("Controller confirms successfull update with FINISHED status.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerConfirmsUpdateWithFinished() { final Long actionId = createTargetAndAssignDs(); @@ -160,8 +161,8 @@ public void controllerConfirmsUpdateWithFinished() { controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.FINISHED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, - Action.Status.FINISHED, Action.Status.FINISHED, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, Action.Status.FINISHED, + Action.Status.FINISHED, false); assertThat(actionStatusRepository.count()).isEqualTo(7); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(7); @@ -169,11 +170,11 @@ public void controllerConfirmsUpdateWithFinished() { @Test @Description("Controller confirmation failes with invalid messages.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerConfirmationFailsWithInvalidMessages() { final Long actionId = createTargetAndAssignDs(); @@ -197,22 +198,22 @@ public void controllerConfirmationFailsWithInvalidMessages() { @Test @Description("Controller confirms successfull update with FINISHED status on a action that is on canceling. " + "Reason: The decission to ignore the cancellation is in fact up to the controller.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = CancelTargetAssignmentEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerConfirmsUpdateWithFinishedAndIgnorsCancellationWithThat() { final Long actionId = createTargetAndAssignDs(); deploymentManagement.cancelAction(actionId); controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.FINISHED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, - Action.Status.FINISHED, Action.Status.FINISHED, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, Action.Status.FINISHED, + Action.Status.FINISHED, false); assertThat(actionStatusRepository.count()).isEqualTo(3); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); @@ -220,11 +221,11 @@ public void controllerConfirmsUpdateWithFinishedAndIgnorsCancellationWithThat() @Test @Description("Update server rejects cancelation feedback if action is not in CANCELING state.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void cancellationFeedbackRejectedIfActionIsNotInCanceling() { final Long actionId = createTargetAndAssignDs(); @@ -236,8 +237,8 @@ public void cancellationFeedbackRejectedIfActionIsNotInCanceling() { // expected } - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.RUNNING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.RUNNING, true); assertThat(actionStatusRepository.count()).isEqualTo(1); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(1); @@ -246,26 +247,26 @@ public void cancellationFeedbackRejectedIfActionIsNotInCanceling() { @Test @Description("Controller confirms action cancelation with FINISHED status.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = CancelTargetAssignmentEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerConfirmsActionCancelationWithFinished() { final Long actionId = createTargetAndAssignDs(); deploymentManagement.cancelAction(actionId); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.CANCELING, Action.Status.CANCELING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.CANCELING, + Action.Status.CANCELING, true); simulateIntermediateStatusOnCancellation(actionId); controllerManagement .addCancelActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.FINISHED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, - Action.Status.CANCELED, Action.Status.FINISHED, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, Action.Status.CANCELED, + Action.Status.FINISHED, false); assertThat(actionStatusRepository.count()).isEqualTo(8); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(8); @@ -273,26 +274,26 @@ public void controllerConfirmsActionCancelationWithFinished() { @Test @Description("Controller confirms action cancelation with FINISHED status.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = CancelTargetAssignmentEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerConfirmsActionCancelationWithCanceled() { final Long actionId = createTargetAndAssignDs(); deploymentManagement.cancelAction(actionId); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.CANCELING, Action.Status.CANCELING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.CANCELING, + Action.Status.CANCELING, true); simulateIntermediateStatusOnCancellation(actionId); controllerManagement .addCancelActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.CANCELED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, - Action.Status.CANCELED, Action.Status.CANCELED, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, Action.Status.CANCELED, + Action.Status.CANCELED, false); assertThat(actionStatusRepository.count()).isEqualTo(8); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(8); @@ -301,26 +302,26 @@ public void controllerConfirmsActionCancelationWithCanceled() { @Test @Description("Controller rejects action cancelation with CANCEL_REJECTED status. Action goes back to RUNNING status as it expects " + "that the controller will continue the original update.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = CancelTargetAssignmentEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerRejectsActionCancelationWithReject() { final Long actionId = createTargetAndAssignDs(); deploymentManagement.cancelAction(actionId); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.CANCELING, Action.Status.CANCELING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.CANCELING, + Action.Status.CANCELING, true); simulateIntermediateStatusOnCancellation(actionId); controllerManagement.addCancelActionStatus( entityFactory.actionStatus().create(actionId).status(Action.Status.CANCEL_REJECTED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.CANCEL_REJECTED, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.CANCEL_REJECTED, true); assertThat(actionStatusRepository.count()).isEqualTo(8); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(8); @@ -329,26 +330,26 @@ public void controllerRejectsActionCancelationWithReject() { @Test @Description("Controller rejects action cancelation with ERROR status. Action goes back to RUNNING status as it expects " + "that the controller will continue the original update.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = CancelTargetAssignmentEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerRejectsActionCancelationWithError() { final Long actionId = createTargetAndAssignDs(); deploymentManagement.cancelAction(actionId); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.CANCELING, Action.Status.CANCELING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.CANCELING, + Action.Status.CANCELING, true); simulateIntermediateStatusOnCancellation(actionId); controllerManagement .addCancelActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.ERROR)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.ERROR, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.ERROR, true); assertThat(actionStatusRepository.count()).isEqualTo(8); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(8); @@ -362,8 +363,7 @@ private Long createTargetAndAssignDs() { assertThat(targetManagement.getByControllerID(DEFAULT_CONTROLLER_ID).get().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.PENDING); - return deploymentManagement.findActiveActionsByTarget(PAGE, DEFAULT_CONTROLLER_ID).getContent() - .get(0).getId(); + return deploymentManagement.findActiveActionsByTarget(PAGE, DEFAULT_CONTROLLER_ID).getContent().get(0).getId(); } @Step @@ -373,8 +373,8 @@ private Long createAndAssignDsAsDownloadOnly(final String dsName, final String d assertThat(targetManagement.getByControllerID(defaultControllerId).get().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.PENDING); - final Long id = deploymentManagement.findActiveActionsByTarget(PAGE, defaultControllerId).getContent() - .get(0).getId(); + final Long id = deploymentManagement.findActiveActionsByTarget(PAGE, defaultControllerId).getContent().get(0) + .getId(); assertThat(id).isNotNull(); return id; } @@ -385,8 +385,8 @@ private Long assignDs(final Long dsId, final String defaultControllerId, final A assertThat(targetManagement.getByControllerID(defaultControllerId).get().getUpdateStatus()) .isEqualTo(TargetUpdateStatus.PENDING); - final Long id = deploymentManagement.findActiveActionsByTarget(PAGE, defaultControllerId).getContent() - .get(0).getId(); + final Long id = deploymentManagement.findActiveActionsByTarget(PAGE, defaultControllerId).getContent().get(0) + .getId(); assertThat(id).isNotNull(); return id; } @@ -395,55 +395,55 @@ private Long assignDs(final Long dsId, final String defaultControllerId, final A private void simulateIntermediateStatusOnCancellation(final Long actionId) { controllerManagement .addCancelActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.RUNNING)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.CANCELING, Action.Status.RUNNING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.CANCELING, + Action.Status.RUNNING, true); controllerManagement .addCancelActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.DOWNLOAD)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.CANCELING, Action.Status.DOWNLOAD, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.CANCELING, + Action.Status.DOWNLOAD, true); controllerManagement .addCancelActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.DOWNLOADED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.CANCELING, Action.Status.DOWNLOADED, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.CANCELING, + Action.Status.DOWNLOADED, true); controllerManagement .addCancelActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.RETRIEVED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.CANCELING, Action.Status.RETRIEVED, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.CANCELING, + Action.Status.RETRIEVED, true); controllerManagement .addCancelActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.WARNING)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.CANCELING, Action.Status.WARNING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.CANCELING, + Action.Status.WARNING, true); } @Step private void simulateIntermediateStatusOnUpdate(final Long actionId) { controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.RUNNING)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.RUNNING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.RUNNING, true); controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.DOWNLOAD)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.DOWNLOAD, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.DOWNLOAD, true); controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.DOWNLOADED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.DOWNLOADED, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.DOWNLOADED, true); controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.RETRIEVED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.RETRIEVED, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.RETRIEVED, true); controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.WARNING)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.WARNING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.WARNING, true); } private void assertActionStatus(final Long actionId, final String controllerId, @@ -467,12 +467,12 @@ private void assertActionStatus(final Long actionId, final String controllerId, @Test @Description("Verifies that assignement verification works based on SHA1 hash. By design it is not important which artifact " + "is actually used for the check as long as they have an identical binary, i.e. same SHA1 hash. ") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 2), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 6), - @Expect(type = SoftwareModuleUpdatedEvent.class, count = 2) }) + @Expect(type = SoftwareModuleUpdatedEvent.class, count = 2)}) public void hasTargetArtifactAssignedIsTrueWithMultipleArtifacts() { final int artifactSize = 5 * 1024; final byte[] random = RandomUtils.nextBytes(artifactSize); @@ -503,8 +503,8 @@ public void hasTargetArtifactAssignedIsTrueWithMultipleArtifacts() { @Test @Description("Register a controller which does not exist") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetPollEvent.class, count = 2) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetPollEvent.class, count = 2)}) public void findOrRegisterTargetIfItDoesNotExist() { final Target target = controllerManagement.findOrRegisterTargetIfItDoesNotExist("AA", LOCALHOST); assertThat(target).as("target should not be null").isNotNull(); @@ -512,17 +512,34 @@ public void findOrRegisterTargetIfItDoesNotExist() { final Target sameTarget = controllerManagement.findOrRegisterTargetIfItDoesNotExist("AA", LOCALHOST); assertThat(target.getId()).as("Target should be the equals").isEqualTo(sameTarget.getId()); assertThat(targetRepository.count()).as("Only 1 target should be registred").isEqualTo(1L); + } + + @Test + @Description("Tries to register a target with an invalid controller id") + public void findOrRegisterTargetIfItDoesNotExistThrowsExceptionForInvalidControllerIdParam() { + assertThatExceptionOfType(ConstraintViolationException.class) + .isThrownBy(() -> controllerManagement.findOrRegisterTargetIfItDoesNotExist(null, LOCALHOST)) + .as("register target with null as controllerId should fail"); assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> controllerManagement.findOrRegisterTargetIfItDoesNotExist("", LOCALHOST)) .as("register target with empty controllerId should fail"); + + assertThatExceptionOfType(ConstraintViolationException.class) + .isThrownBy(() -> controllerManagement.findOrRegisterTargetIfItDoesNotExist(" ", LOCALHOST)) + .as("register target with empty controllerId should fail"); + + assertThatExceptionOfType(ConstraintViolationException.class) + .isThrownBy(() -> controllerManagement.findOrRegisterTargetIfItDoesNotExist( + RandomStringUtils.random(Target.CONTROLLER_ID_MAX_SIZE + 1), LOCALHOST)) + .as("register target with too long controllerId should fail"); } @Test - @Description("Register a controller which does not exist, when a ConcurrencyFailureException is raised, the " + - "exception is rethrown after max retries") + @Description("Register a controller which does not exist, when a ConcurrencyFailureException is raised, the " + + "exception is rethrown after max retries") public void findOrRegisterTargetIfItDoesNotExistThrowsExceptionAfterMaxRetries() { - final TargetRepository mockTargetRepository = Mockito.mock(TargetRepository.class); + final TargetRepository mockTargetRepository = Mockito.mock(TargetRepository.class); when(mockTargetRepository.findOne(any())).thenThrow(ConcurrencyFailureException.class); ((JpaControllerManagement) controllerManagement).setTargetRepository(mockTargetRepository); @@ -538,20 +555,18 @@ public void findOrRegisterTargetIfItDoesNotExistThrowsExceptionAfterMaxRetries() } @Test - @Description("Register a controller which does not exist, when a ConcurrencyFailureException is raised, the " + - "exception is not rethrown when the max retries are not yet reached") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetPollEvent.class, count = 1) }) + @Description("Register a controller which does not exist, when a ConcurrencyFailureException is raised, the " + + "exception is not rethrown when the max retries are not yet reached") + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetPollEvent.class, count = 1)}) public void findOrRegisterTargetIfItDoesNotExistDoesNotThrowExceptionBeforeMaxRetries() { TargetRepository mockTargetRepository = Mockito.mock(TargetRepository.class); ((JpaControllerManagement) controllerManagement).setTargetRepository(mockTargetRepository); final Target target = testdataFactory.createTarget(); - when(mockTargetRepository.findOne(any())) - .thenThrow(ConcurrencyFailureException.class) - .thenThrow(ConcurrencyFailureException.class) - .thenReturn(Optional.of((JpaTarget) target)); + when(mockTargetRepository.findOne(any())).thenThrow(ConcurrencyFailureException.class) + .thenThrow(ConcurrencyFailureException.class).thenReturn(Optional.of((JpaTarget) target)); when(mockTargetRepository.save(any())).thenReturn(target); try { @@ -567,8 +582,8 @@ public void findOrRegisterTargetIfItDoesNotExistDoesNotThrowExceptionBeforeMaxRe } @Test - @Description("Register a controller which does not exist, if a EntityAlreadyExistsException is raised, the " + - "exception is rethrown and no further retries will be attempted") + @Description("Register a controller which does not exist, if a EntityAlreadyExistsException is raised, the " + + "exception is rethrown and no further retries will be attempted") public void findOrRegisterTargetIfItDoesNotExistDoesntRetryWhenEntityAlreadyExistsException() { TargetRepository mockTargetRepository = Mockito.mock(TargetRepository.class); @@ -590,8 +605,8 @@ public void findOrRegisterTargetIfItDoesNotExistDoesntRetryWhenEntityAlreadyExis } @Test - @Description("Retry is aborted when an unchecked exception is thrown and the exception should also be " + - "rethrown") + @Description("Retry is aborted when an unchecked exception is thrown and the exception should also be " + + "rethrown") public void recoverFindOrRegisterTargetIfItDoesNotExistIsNotInvokedForOtherExceptions() { TargetRepository mockTargetRepository = Mockito.mock(TargetRepository.class); @@ -602,7 +617,7 @@ public void recoverFindOrRegisterTargetIfItDoesNotExistIsNotInvokedForOtherExcep try { controllerManagement.findOrRegisterTargetIfItDoesNotExist("aControllerId", LOCALHOST); fail("Expected a RuntimeException to be thrown!"); - } catch (RuntimeException e){ + } catch (RuntimeException e) { verify(mockTargetRepository, times(1)).findOne(any()); } finally { // revert @@ -612,9 +627,9 @@ public void recoverFindOrRegisterTargetIfItDoesNotExistIsNotInvokedForOtherExcep @Test @Description("Verify that targetVisible metadata is returned from repository") - @ExpectEvents({ @Expect(type = DistributionSetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), - @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6) }) + @Expect(type = SoftwareModuleUpdatedEvent.class, count = 6)}) public void findTargetVisibleMetaDataBySoftwareModuleId() { final DistributionSet set = testdataFactory.createDistributionSet(); testdataFactory.addSoftwareModuleMetadata(set); @@ -629,8 +644,8 @@ public void findTargetVisibleMetaDataBySoftwareModuleId() { @Test @Description("Verify that controller registration does not result in a TargetPollEvent if feature is disabled") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetPollEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetPollEvent.class, count = 0)}) public void targetPollEventNotSendIfDisabled() { repositoryProperties.setPublishTargetPollEvent(false); controllerManagement.findOrRegisterTargetIfItDoesNotExist("AA", LOCALHOST); @@ -639,25 +654,25 @@ public void targetPollEventNotSendIfDisabled() { @Test @Description("Controller tries to finish an update process after it has been finished by an error action status.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void tryToFinishWithErrorUpdateProcessMoreThanOnce() { final Long actionId = createTargetAndAssignDs(); // test and verify controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.RUNNING)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.RUNNING, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.RUNNING, true); controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.ERROR)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.ERROR, - Action.Status.ERROR, Action.Status.ERROR, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.ERROR, Action.Status.ERROR, + Action.Status.ERROR, false); // try with disabled late feedback repositoryProperties.setRejectActionStatusForClosedAction(true); @@ -665,8 +680,8 @@ public void tryToFinishWithErrorUpdateProcessMoreThanOnce() { .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.FINISHED)); // test - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.ERROR, - Action.Status.ERROR, Action.Status.ERROR, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.ERROR, Action.Status.ERROR, + Action.Status.ERROR, false); // try with enabled late feedback - should not make a difference as it // only allows intermediate feedbacks and not multiple close @@ -675,8 +690,8 @@ public void tryToFinishWithErrorUpdateProcessMoreThanOnce() { .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.FINISHED)); // test - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.ERROR, - Action.Status.ERROR, Action.Status.ERROR, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.ERROR, Action.Status.ERROR, + Action.Status.ERROR, false); assertThat(actionStatusRepository.count()).isEqualTo(3); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); @@ -685,13 +700,13 @@ public void tryToFinishWithErrorUpdateProcessMoreThanOnce() { @Test @Description("Controller trys to finish an update process after it has been finished by an FINISHED action status.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void tryToFinishUpdateProcessMoreThanOnce() { final Long actionId = prepareFinishedUpdate().getId(); @@ -701,8 +716,8 @@ public void tryToFinishUpdateProcessMoreThanOnce() { .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.FINISHED)); // test - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, - Action.Status.FINISHED, Action.Status.FINISHED, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, Action.Status.FINISHED, + Action.Status.FINISHED, false); // try with enabled late feedback - should not make a difference as it // only allows intermediate feedbacks and not multiple close @@ -711,8 +726,8 @@ public void tryToFinishUpdateProcessMoreThanOnce() { .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Action.Status.FINISHED)); // test - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, - Action.Status.FINISHED, Action.Status.FINISHED, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, Action.Status.FINISHED, + Action.Status.FINISHED, false); assertThat(actionStatusRepository.count()).isEqualTo(3); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); @@ -722,13 +737,13 @@ public void tryToFinishUpdateProcessMoreThanOnce() { @Test @Description("Controller trys to send an update feedback after it has been finished which is reject as the repository is " + "configured to reject that.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void sendUpdatesForFinishUpdateProcessDropedIfDisabled() { repositoryProperties.setRejectActionStatusForClosedAction(true); @@ -749,13 +764,13 @@ public void sendUpdatesForFinishUpdateProcessDropedIfDisabled() { @Test @Description("Controller trys to send an update feedback after it has been finished which is accepted as the repository is " + "configured to accept them.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void sendUpdatesForFinishUpdateProcessAcceptedIfEnabled() { repositoryProperties.setRejectActionStatusForClosedAction(false); @@ -775,8 +790,8 @@ public void sendUpdatesForFinishUpdateProcessAcceptedIfEnabled() { @Test @Description("Ensures that target attribute update is reflected by the repository.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 3) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetUpdatedEvent.class, count = 3)}) public void updateTargetAttributes() throws Exception { final String controllerId = "test123"; final Target target = testdataFactory.createTarget(controllerId); @@ -831,8 +846,8 @@ private void updateAttributeAndVerify(final String controllerId) { @Test @Description("Ensures that target attributes can be updated using different update modes.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 4) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetUpdatedEvent.class, count = 4)}) public void updateTargetAttributesWithDifferentUpdateModes() { final String controllerId = "testCtrl"; @@ -929,8 +944,8 @@ private void updateTargetAttributesWithoutUpdateMode(final String controllerId) @Test @Description("Ensures that target attribute update fails if quota hits.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 2) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetUpdatedEvent.class, count = 2)}) public void updateTargetAttributesFailsIfTooManyEntries() throws Exception { final String controllerId = "test123"; final int allowedAttributes = quotaManagement.getMaxAttributeEntriesPerTarget(); @@ -1008,11 +1023,11 @@ public void updateTargetAttributesFailsForInvalidAttributes() { @Test @Description("Controller providing status entries fails if providing more than permitted by quota.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerProvidesIntermediateFeedbackFailsIfQuotaHit() { final int allowStatusEntries = 10; final Long actionId = createTargetAndAssignDs(); @@ -1056,11 +1071,11 @@ public void findMessagesByActionStatusId() { @Test @Description("Verifies that the quota specifying the maximum number of status entries per action is enforced.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 2), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 2), @Expect(type = DistributionSetCreatedEvent.class, count = 2), @Expect(type = ActionCreatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 2), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 6) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 6)}) public void addActionStatusUpdatesUntilQuotaIsExceeded() { // any distribution set assignment causes 1 status entity to be created @@ -1092,11 +1107,11 @@ public void addActionStatusUpdatesUntilQuotaIsExceeded() { @Test @Description("Verifies that the quota specifying the maximum number of messages per action status is enforced.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void createActionStatusWithTooManyMessages() { final int maxMessages = quotaManagement.getMaxMessagesPerActionStatus(); @@ -1120,87 +1135,80 @@ public void createActionStatusWithTooManyMessages() { @Test @Description("Verifies that a DOWNLOAD_ONLY action is not marked complete when the controller reports DOWNLOAD") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = ActionCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), + @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerReportsDownloadForDownloadOnlyAction() { testdataFactory.createTarget(); final Long actionId = createAndAssignDsAsDownloadOnly("downloadOnlyDs", DEFAULT_CONTROLLER_ID); assertThat(actionId).isNotNull(); controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Status.DOWNLOAD)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, - Action.Status.RUNNING, Action.Status.DOWNLOAD, true); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.PENDING, Action.Status.RUNNING, + Action.Status.DOWNLOAD, true); assertThat(actionStatusRepository.count()).isEqualTo(2); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(2); - assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)) - .isEqualTo(true); + assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)).isEqualTo(true); } @Test @Description("Verifies that a DOWNLOAD_ONLY action is marked complete once the controller reports DOWNLOADED") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = ActionCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 2), + @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerReportsDownloadedForDownloadOnlyAction() { testdataFactory.createTarget(); final Long actionId = createAndAssignDsAsDownloadOnly("downloadOnlyDs", DEFAULT_CONTROLLER_ID); assertThat(actionId).isNotNull(); controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Status.DOWNLOADED)); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, - Action.Status.DOWNLOADED, Action.Status.DOWNLOADED, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, Action.Status.DOWNLOADED, + Action.Status.DOWNLOADED, false); assertThat(actionStatusRepository.count()).isEqualTo(2); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(2); - assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)) - .isEqualTo(false); + assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)).isEqualTo(false); } @Test @Description("Verifies that a controller can report a FINISHED event for a DOWNLOAD_ONLY non-active action.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = ActionCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 3), + @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 3), @Expect(type = TargetAttributesRequestedEvent.class, count = 2), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerReportsActionFinishedForDownloadOnlyActionThatIsNotActive() { testdataFactory.createTarget(); final Long actionId = createAndAssignDsAsDownloadOnly("downloadOnlyDs", DEFAULT_CONTROLLER_ID); assertThat(actionId).isNotNull(); finishDownloadOnlyUpdateAndSendUpdateActionStatus(actionId, Status.FINISHED); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, - Action.Status.FINISHED, Action.Status.FINISHED, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, Action.Status.FINISHED, + Action.Status.FINISHED, false); assertThat(actionStatusRepository.count()).isEqualTo(3); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(3); - assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)) - .isEqualTo(false); + assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)).isEqualTo(false); } @Test @Description("Verifies that multiple DOWNLOADED events for a DOWNLOAD_ONLY action are handled.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = ActionCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 2), + @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAttributesRequestedEvent.class, count = 3), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void controllerReportsMultipleDownloadedForDownloadOnlyAction() { testdataFactory.createTarget(); final Long actionId = createAndAssignDsAsDownloadOnly("downloadOnlyDs", DEFAULT_CONTROLLER_ID); @@ -1208,26 +1216,24 @@ public void controllerReportsMultipleDownloadedForDownloadOnlyAction() { IntStream.range(0, 3).forEach(i -> controllerManagement .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Status.DOWNLOADED))); - assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, - Status.DOWNLOADED, Status.DOWNLOADED, false); + assertActionStatus(actionId, DEFAULT_CONTROLLER_ID, TargetUpdateStatus.IN_SYNC, Status.DOWNLOADED, + Status.DOWNLOADED, false); assertThat(actionStatusRepository.count()).isEqualTo(4); assertThat(controllerManagement.findActionStatusByAction(PAGE, actionId).getNumberOfElements()).isEqualTo(4); - assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)) - .isEqualTo(false); + assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)).isEqualTo(false); } @Test(expected = QuotaExceededException.class) - @Description("Verifies that quota is asserted when a controller reports too many DOWNLOADED events for a " + - "DOWNLOAD_ONLY action.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @Description("Verifies that quota is asserted when a controller reports too many DOWNLOADED events for a " + + "DOWNLOAD_ONLY action.") + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = ActionCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 2), + @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = TargetAttributesRequestedEvent.class, count = 9), @Expect(type = ActionUpdatedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void quotaExceptionWhencontrollerReportsTooManyDownloadedMessagesForDownloadOnlyAction() { final int maxMessages = quotaManagement.getMaxMessagesPerActionStatus(); testdataFactory.createTarget(); @@ -1240,14 +1246,13 @@ public void quotaExceptionWhencontrollerReportsTooManyDownloadedMessagesForDownl @Test @Description("Verifies that quota is enforced for UpdateActionStatus events for DOWNLOAD_ONLY assignments.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = ActionCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 2), + @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAttributesRequestedEvent.class, count = 9), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void quotaEceededExceptionWhenControllerReportsTooManyUpdateActionStatusMessagesForDownloadOnlyAction() { final int maxMessages = quotaManagement.getMaxMessagesPerActionStatus(); testdataFactory.createTarget(); @@ -1278,12 +1283,11 @@ public void quotaEceededExceptionWhenControllerReportsTooManyUpdateActionStatusM @Test @Description("Verifies that quota is enforced for UpdateActionStatus events for FORCED assignments.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), - @Expect(type = ActionCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), + @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void quotaEceededExceptionWhenControllerReportsTooManyUpdateActionStatusMessagesForForced() { final int maxMessages = quotaManagement.getMaxMessagesPerActionStatus(); final Long actionId = createTargetAndAssignDs(); @@ -1312,16 +1316,15 @@ public void quotaEceededExceptionWhenControllerReportsTooManyUpdateActionStatusM } @Test - @Description("Verifies that a target can report FINISHED/ERROR updates for DOWNLOAD_ONLY assignments regardless of " + - "repositoryProperties.rejectActionStatusForClosedAction value.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @Description("Verifies that a target can report FINISHED/ERROR updates for DOWNLOAD_ONLY assignments regardless of " + + "repositoryProperties.rejectActionStatusForClosedAction value.") + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 4), - @Expect(type = ActionCreatedEvent.class, count = 4), - @Expect(type = TargetUpdatedEvent.class, count = 12), + @Expect(type = ActionCreatedEvent.class, count = 4), @Expect(type = TargetUpdatedEvent.class, count = 12), @Expect(type = TargetAssignDistributionSetEvent.class, count = 4), @Expect(type = TargetAttributesRequestedEvent.class, count = 6), @Expect(type = ActionUpdatedEvent.class, count = 8), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 12) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 12)}) public void targetCanAlwaysReportFinishedOrErrorAfterActionIsClosedForDownloadOnlyAssignments() { testdataFactory.createTarget(); @@ -1344,38 +1347,35 @@ public void targetCanAlwaysReportFinishedOrErrorAfterActionIsClosedForDownloadOn assertThat(actionId).isNotNull(); finishDownloadOnlyUpdateAndSendUpdateActionStatus(actionId3, Status.FINISHED); - final Long actionId4 = createAndAssignDsAsDownloadOnly("downloadOnlyDs4", DEFAULT_CONTROLLER_ID); assertThat(actionId).isNotNull(); finishDownloadOnlyUpdateAndSendUpdateActionStatus(actionId4, Status.ERROR); - // actionStatusRepository should have 12 ActionStatusUpdates, 3 from each action + // actionStatusRepository should have 12 ActionStatusUpdates, 3 from + // each action assertThat(actionStatusRepository.count()).isEqualTo(12L); } @Step private void finishDownloadOnlyUpdateAndSendUpdateActionStatus(final Long actionId, final Status status) { // finishing action - controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(actionId) - .status(Status.DOWNLOADED)); + controllerManagement + .addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(Status.DOWNLOADED)); - controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(actionId) - .status(status)); - assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)) - .isEqualTo(false); + controllerManagement.addUpdateActionStatus(entityFactory.actionStatus().create(actionId).status(status)); + assertThat(actionRepository.activeActionExistsForControllerId(DEFAULT_CONTROLLER_ID)).isEqualTo(false); } @Test - @Description("Verifies that a controller can report a FINISHED event for a DOWNLOAD_ONLY action after having" + - " installed an intermediate update.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @Description("Verifies that a controller can report a FINISHED event for a DOWNLOAD_ONLY action after having" + + " installed an intermediate update.") + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 2), - @Expect(type = ActionCreatedEvent.class, count = 2), - @Expect(type = TargetUpdatedEvent.class, count = 5), + @Expect(type = ActionCreatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 5), @Expect(type = TargetAttributesRequestedEvent.class, count = 3), @Expect(type = ActionUpdatedEvent.class, count = 3), @Expect(type = TargetAssignDistributionSetEvent.class, count = 2), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 6) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 6)}) public void controllerReportsFinishedForOldDownloadOnlyActionAfterSuccessfulForcedAssignment() { testdataFactory.createTarget(); @@ -1390,8 +1390,8 @@ public void controllerReportsFinishedForOldDownloadOnlyActionAfterSuccessfulForc // assign distributionSet as FORCED assignment final Long forcedDistributionSetId = testdataFactory.createDistributionSet("forcedDs1").getId(); - final DistributionSetAssignmentResult assignmentResult = - assignDistributionSet(forcedDistributionSetId, DEFAULT_CONTROLLER_ID, Action.ActionType.SOFT); + final DistributionSetAssignmentResult assignmentResult = assignDistributionSet(forcedDistributionSetId, + DEFAULT_CONTROLLER_ID, Action.ActionType.SOFT); addUpdateActionStatus(assignmentResult.getActions().get(0).getId(), DEFAULT_CONTROLLER_ID, Status.FINISHED); assertAssignedDistributionSetId(DEFAULT_CONTROLLER_ID, forcedDistributionSetId); assertInstalledDistributionSetId(DEFAULT_CONTROLLER_ID, forcedDistributionSetId); @@ -1421,7 +1421,7 @@ private void assertInstalledDistributionSetId(final String controllerId, final L final Optional target = controllerManagement.getByControllerId(controllerId); assertThat(target).isPresent(); final DistributionSet installedDistributionSet = ((JpaTarget) target.get()).getInstalledDistributionSet(); - if(dsId == null){ + if (dsId == null) { assertThat(installedDistributionSet).isNull(); } else { assertThat(installedDistributionSet.getId()).isEqualTo(dsId); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index cbd2d5f7ee..1a7be6a2c7 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -46,6 +46,8 @@ import org.eclipse.hawkbit.repository.model.DistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.MetaData; +import org.eclipse.hawkbit.repository.model.NamedEntity; +import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.test.matcher.Expect; @@ -218,7 +220,7 @@ private void createAndUpdateDistributionSetWithInvalidName(final DistributionSet assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> distributionSetManagement.create(entityFactory.distributionSet().create().version("a") - .name(RandomStringUtils.randomAlphanumeric(65)))) + .name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)))) .as("entity with too long name should not be created"); assertThatExceptionOfType(ConstraintViolationException.class).isThrownBy( @@ -232,7 +234,7 @@ private void createAndUpdateDistributionSetWithInvalidName(final DistributionSet assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> distributionSetManagement.update(entityFactory.distributionSet().update(set.getId()) - .name(RandomStringUtils.randomAlphanumeric(65)))) + .name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)))) .as("entity with too long name should not be updated"); assertThatExceptionOfType(ConstraintViolationException.class) @@ -251,21 +253,21 @@ private void createAndUpdateDistributionSetWithInvalidVersion(final Distribution assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> distributionSetManagement.create(entityFactory.distributionSet().create().name("a") - .version(RandomStringUtils.randomAlphanumeric(65)))) - .as("entity with too long name should not be created"); + .version(RandomStringUtils.randomAlphanumeric(NamedVersionedEntity.VERSION_MAX_SIZE + 1)))) + .as("entity with too long version should not be created"); assertThatExceptionOfType(ConstraintViolationException.class).isThrownBy( () -> distributionSetManagement.create(entityFactory.distributionSet().create().name("a").version(""))) - .as("entity with too long name should not be created"); + .as("entity with too short version should not be created"); assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> distributionSetManagement.update(entityFactory.distributionSet().update(set.getId()) - .version(RandomStringUtils.randomAlphanumeric(65)))) - .as("entity with too long name should not be updated"); + .version(RandomStringUtils.randomAlphanumeric(NamedVersionedEntity.VERSION_MAX_SIZE + 1)))) + .as("entity with too long version should not be updated"); assertThatExceptionOfType(ConstraintViolationException.class).isThrownBy( () -> distributionSetManagement.update(entityFactory.distributionSet().update(set.getId()).version(""))) - .as("entity with too short name should not be updated"); + .as("entity with too short version should not be updated"); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeManagementTest.java index f5554df94e..21bfe9cd93 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeManagementTest.java @@ -31,6 +31,8 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.NamedEntity; +import org.eclipse.hawkbit.repository.model.NamedVersionedEntity; import org.eclipse.hawkbit.repository.test.matcher.Expect; import org.eclipse.hawkbit.repository.test.matcher.ExpectEvents; import org.junit.Test; @@ -128,7 +130,7 @@ private void createAndUpdateDistributionSetWithInvalidName(final DistributionSet assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> distributionSetManagement.create(entityFactory.distributionSet().create().version("a") - .name(RandomStringUtils.randomAlphanumeric(65)))) + .name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)))) .as("set with too long name should not be created"); assertThatExceptionOfType(ConstraintViolationException.class) @@ -147,7 +149,7 @@ private void createAndUpdateDistributionSetWithInvalidName(final DistributionSet assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> distributionSetManagement.update(entityFactory.distributionSet().update(set.getId()) - .name(RandomStringUtils.randomAlphanumeric(65)))) + .name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)))) .as("set with too long name should not be updated"); assertThatExceptionOfType(ConstraintViolationException.class) @@ -165,7 +167,7 @@ private void createAndUpdateDistributionSetWithInvalidVersion(final Distribution assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> distributionSetManagement.create(entityFactory.distributionSet().create().name("a") - .version(RandomStringUtils.randomAlphanumeric(65)))) + .version(RandomStringUtils.randomAlphanumeric(NamedVersionedEntity.VERSION_MAX_SIZE + 1)))) .as("set with too long version should not be created"); assertThatExceptionOfType(ConstraintViolationException.class) @@ -184,7 +186,7 @@ private void createAndUpdateDistributionSetWithInvalidVersion(final Distribution assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> distributionSetManagement.update(entityFactory.distributionSet().update(set.getId()) - .version(RandomStringUtils.randomAlphanumeric(65)))) + .version(RandomStringUtils.randomAlphanumeric(NamedVersionedEntity.VERSION_MAX_SIZE + 1)))) .as("set with too long version should not be updated"); assertThatExceptionOfType(ConstraintViolationException.class) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java index 47c9d0cb8e..576cdf6c63 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetManagementTest.java @@ -49,6 +49,7 @@ import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.model.MetaData; +import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetMetadata; @@ -251,7 +252,7 @@ private void createAndUpdateTargetWithInvalidName(final Target target) { assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> targetManagement.create(entityFactory.target().create().controllerId("a") - .name(RandomStringUtils.randomAlphanumeric(65)))) + .name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)))) .as("target with too long name should not be created"); assertThatExceptionOfType(ConstraintViolationException.class) @@ -261,7 +262,7 @@ private void createAndUpdateTargetWithInvalidName(final Target target) { assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> targetManagement.update(entityFactory.target().update(target.getControllerId()) - .name(RandomStringUtils.randomAlphanumeric(65)))) + .name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)))) .as("target with too long name should not be updated"); assertThatExceptionOfType(ConstraintViolationException.class) @@ -281,7 +282,7 @@ private void createAndUpdateTargetWithInvalidSecurityToken(final Target target) assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> targetManagement.create(entityFactory.target().create().controllerId("a") - .securityToken(RandomStringUtils.randomAlphanumeric(129)))) + .securityToken(RandomStringUtils.randomAlphanumeric(Target.SECURITY_TOKEN_MAX_SIZE + 1)))) .as("target with too long token should not be created"); assertThatExceptionOfType(ConstraintViolationException.class) @@ -291,7 +292,7 @@ private void createAndUpdateTargetWithInvalidSecurityToken(final Target target) assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> targetManagement.update(entityFactory.target().update(target.getControllerId()) - .securityToken(RandomStringUtils.randomAlphanumeric(129)))) + .securityToken(RandomStringUtils.randomAlphanumeric(Target.SECURITY_TOKEN_MAX_SIZE + 1)))) .as("target with too long token should not be updated"); assertThatExceptionOfType(ConstraintViolationException.class) @@ -340,8 +341,8 @@ private void createTargetWithInvalidControllerId() { .as("target with null controller id should not be created"); assertThatExceptionOfType(ConstraintViolationException.class) - .isThrownBy(() -> targetManagement - .create(entityFactory.target().create().controllerId(RandomStringUtils.randomAlphanumeric(65)))) + .isThrownBy(() -> targetManagement.create(entityFactory.target().create() + .controllerId(RandomStringUtils.randomAlphanumeric(Target.CONTROLLER_ID_MAX_SIZE + 1)))) .as("target with too long controller id should not be created"); assertThatExceptionOfType(ConstraintViolationException.class) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetTagManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetTagManagementTest.java index 0284cc915d..f5729e71df 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetTagManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/TargetTagManagementTest.java @@ -27,6 +27,7 @@ import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagUpdatedEvent; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; +import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.Tag; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; @@ -132,7 +133,8 @@ private void createAndUpdateTagWithInvalidName(final Tag tag) { assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> targetTagManagement - .create(entityFactory.tag().create().name(RandomStringUtils.randomAlphanumeric(65)))) + .create(entityFactory.tag().create().name(RandomStringUtils.randomAlphanumeric( + NamedEntity.NAME_MAX_SIZE + 1)))) .as("tag with too long name should not be created"); assertThatExceptionOfType(ConstraintViolationException.class) @@ -141,7 +143,8 @@ private void createAndUpdateTagWithInvalidName(final Tag tag) { assertThatExceptionOfType(ConstraintViolationException.class) .isThrownBy(() -> targetTagManagement - .update(entityFactory.tag().update(tag.getId()).name(RandomStringUtils.randomAlphanumeric(65)))) + .update(entityFactory.tag().update(tag.getId()).name(RandomStringUtils.randomAlphanumeric( + NamedEntity.NAME_MAX_SIZE + 1)))) .as("tag with too long name should not be updated"); assertThatExceptionOfType(ConstraintViolationException.class).isThrownBy( diff --git a/hawkbit-rest/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java b/hawkbit-rest/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java index 90a307f627..3d57a2517f 100644 --- a/hawkbit-rest/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java +++ b/hawkbit-rest/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiRootControllerTest.java @@ -105,12 +105,12 @@ public void apiReturnsJSONByDefault() throws Exception { @Test @Description("Ensures that targets cannot be created e.g. in plug'n play scenarios when tenant does not exists but can be created if the tenant exists.") - @WithUser(tenantId = "tenantDoesNotExists", allSpPermissions = true, authorities = { CONTROLLER_ROLE, - SYSTEM_ROLE }, autoCreateTenant = false) - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @WithUser(tenantId = "tenantDoesNotExists", allSpPermissions = true, authorities = {CONTROLLER_ROLE, + SYSTEM_ROLE}, autoCreateTenant = false) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1), @Expect(type = DistributionSetTypeCreatedEvent.class, count = 3), - @Expect(type = SoftwareModuleTypeCreatedEvent.class, count = 2) }) + @Expect(type = SoftwareModuleTypeCreatedEvent.class, count = 2)}) public void targetCannotBeRegisteredIfTenantDoesNotExistsButWhenExists() throws Exception { mvc.perform(get("/default-tenant/", tenantAware.getCurrentTenant())).andDo(MockMvcResultPrinter.print()) @@ -131,10 +131,10 @@ public void targetCannotBeRegisteredIfTenantDoesNotExistsButWhenExists() throws @Test @Description("Ensures that target poll request does not change audit data on the entity.") - @WithUser(principal = "knownPrincipal", authorities = { SpPermission.READ_TARGET, SpPermission.UPDATE_TARGET, - SpPermission.CREATE_TARGET }, allSpPermissions = false) - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @WithUser(principal = "knownPrincipal", authorities = {SpPermission.READ_TARGET, SpPermission.UPDATE_TARGET, + SpPermission.CREATE_TARGET}, allSpPermissions = false) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void targetPollDoesNotModifyAuditData() throws Exception { // create target first with "knownPrincipal" user and audit data final String knownTargetControllerId = "target1"; @@ -162,15 +162,15 @@ public void targetPollDoesNotModifyAuditData() throws Exception { @Test @Description("Ensures that server returns a not found response in case of empty controlloer ID.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 0)}) public void rootRsWithoutId() throws Exception { mvc.perform(get("/controller/v1/")).andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound()); } @Test @Description("Ensures that the system creates a new target in plug and play manner, i.e. target is authenticated but does not exist yet.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetPollEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetPollEvent.class, count = 1)}) public void rootRsPlugAndPlay() throws Exception { final long current = System.currentTimeMillis(); @@ -198,8 +198,8 @@ public void rootRsPlugAndPlay() throws Exception { @Test @Description("Ensures that tenant specific polling time, which is saved in the db, is delivered to the controller.") @WithUser(principal = "knownpricipal", allSpPermissions = false) - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetPollEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetPollEvent.class, count = 1)}) public void pollWithModifiedGloablPollingTime() throws Exception { securityRule.runAs(WithSpringAuthorityRule.withUser("tenantadmin", HAS_AUTH_TENANT_CONFIGURATION), () -> { tenantConfigurationManagement.addOrUpdateConfiguration(TenantConfigurationKey.POLLING_TIME_INTERVAL, @@ -218,14 +218,14 @@ public void pollWithModifiedGloablPollingTime() throws Exception { @Test @Description("Ensures that etag check results in not modified response if provided etag by client is identical to entity in repository.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 6), @Expect(type = TargetAssignDistributionSetEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 3), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 2), @Expect(type = ActionCreatedEvent.class, count = 2), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 6) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 6)}) public void rootRsNotModified() throws Exception { final String etag = mvc.perform(get("/{tenant}/controller/v1/4711", tenantAware.getCurrentTenant())) .andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()) @@ -289,8 +289,8 @@ public void rootRsNotModified() throws Exception { @Test @Description("Ensures that the target state machine of a precomissioned target switches from " + "UNKNOWN to REGISTERED when the target polls for the first time.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetUpdatedEvent.class, count = 1), @Expect(type = TargetPollEvent.class, count = 1)}) public void rootRsPrecommissioned() throws Exception { testdataFactory.createTarget("4711"); @@ -314,8 +314,8 @@ public void rootRsPrecommissioned() throws Exception { @Test @Description("Ensures that the source IP address of the polling target is correctly stored in repository") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetPollEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetPollEvent.class, count = 1)}) public void rootRsPlugAndPlayIpAddress() throws Exception { // test final String knownControllerId1 = "0815"; @@ -341,8 +341,8 @@ public void rootRsPlugAndPlayIpAddress() throws Exception { @Test @Description("Ensures that the source IP address of the polling target is not stored in repository if disabled") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), - @Expect(type = TargetPollEvent.class, count = 1) }) + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), + @Expect(type = TargetPollEvent.class, count = 1)}) public void rootRsIpAddressNotStoredIfDisabled() throws Exception { securityProperties.getClients().setTrackRemoteIp(false); @@ -360,12 +360,12 @@ public void rootRsIpAddressNotStoredIfDisabled() throws Exception { @Test @Description("Controller trys to finish an update process after it has been finished by an error action status.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 1), @Expect(type = TargetUpdatedEvent.class, count = 2), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void tryToFinishAnUpdateProcessAfterItHasBeenFinished() throws Exception { final DistributionSet ds = testdataFactory.createDistributionSet(""); Target savedTarget = testdataFactory.createTarget("911"); @@ -385,13 +385,13 @@ public void tryToFinishAnUpdateProcessAfterItHasBeenFinished() throws Exception @Test @Description("Controller sends attribute update request after device successfully closed software update.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 2), @Expect(type = ActionCreatedEvent.class, count = 2), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 6), @Expect(type = TargetPollEvent.class, count = 4), @Expect(type = SoftwareModuleCreatedEvent.class, count = 3), - @Expect(type = TargetAttributesRequestedEvent.class, count = 1) }) + @Expect(type = TargetAttributesRequestedEvent.class, count = 1)}) public void attributeUpdateRequestSendingAfterSuccessfulDeployment() throws Exception { final DistributionSet ds = testdataFactory.createDistributionSet("1"); final Target savedTarget = testdataFactory.createTarget("922"); @@ -464,13 +464,13 @@ private ResultActions sendDeploymentActionFeedback(final Target target, final Ac @Test @Description("Test to verify that only a specific count of messages are returned based on the input actionHistory for getControllerDeploymentActionFeedback endpoint.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void testActionHistoryCount() throws Exception { final DistributionSet ds = testdataFactory.createDistributionSet(""); Target savedTarget = testdataFactory.createTarget("911"); @@ -500,13 +500,13 @@ public void testActionHistoryCount() throws Exception { @Test @Description("Test to verify that a zero input value of actionHistory results in no action history appended for getControllerDeploymentActionFeedback endpoint.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void testActionHistoryZeroInput() throws Exception { final DistributionSet ds = testdataFactory.createDistributionSet(""); Target savedTarget = testdataFactory.createTarget("911"); @@ -532,13 +532,13 @@ public void testActionHistoryZeroInput() throws Exception { @Test @Description("Test to verify that entire action history is returned if the input value for actionHistory is -1, for getControllerDeploymentActionFeedback endpoint.") - @ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 1), + @ExpectEvents({@Expect(type = TargetCreatedEvent.class, count = 1), @Expect(type = DistributionSetCreatedEvent.class, count = 1), @Expect(type = TargetAssignDistributionSetEvent.class, count = 1), @Expect(type = ActionCreatedEvent.class, count = 1), @Expect(type = ActionUpdatedEvent.class, count = 2), @Expect(type = TargetUpdatedEvent.class, count = 2), @Expect(type = TargetAttributesRequestedEvent.class, count = 1), - @Expect(type = SoftwareModuleCreatedEvent.class, count = 3) }) + @Expect(type = SoftwareModuleCreatedEvent.class, count = 3)}) public void testActionHistoryNegativeInput() throws Exception { final DistributionSet ds = testdataFactory.createDistributionSet(""); Target savedTarget = testdataFactory.createTarget("911"); @@ -671,6 +671,14 @@ public void earliestActionIsExposedToControllerInMultiAssignMode() throws Except } + @Test + @Description("The system should not create a new target because of a too long controller id.") + public void rootRsWithInvalidControllerId() throws Exception { + String invalidControllerId = RandomStringUtils.randomAlphabetic(Target.CONTROLLER_ID_MAX_SIZE + 1); + mvc.perform(get("/{tenant}/controller/v1/{controllerId}", tenantAware.getCurrentTenant(), invalidControllerId)) + .andExpect(status().isBadRequest()); + } + public void assertDeploymentActionIsExposedToTarget(final String controllerId, final long expectedActionId) throws Exception { final String expectedDeploymentBaseLink = String.format("/%s/controller/v1/%s/deploymentBase/%d", diff --git a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java index 740d461bd9..d58f481441 100644 --- a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java +++ b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetResourceTest.java @@ -37,6 +37,7 @@ import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetMetadata; +import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetWithActionType; @@ -989,7 +990,7 @@ public void invalidRequestsOnDistributionSetsResource() throws Exception { .andExpect(status().isBadRequest()); final DistributionSet toLongName = testdataFactory - .generateDistributionSet(RandomStringUtils.randomAlphanumeric(80)); + .generateDistributionSet(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)); mvc.perform(post("/rest/v1/distributionsets").content(JsonBuilder.distributionSets(Arrays.asList(toLongName))) .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) .andExpect(status().isBadRequest()); diff --git a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java index 52d6051131..435ae12af3 100644 --- a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java +++ b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtDistributionSetTypeResourceTest.java @@ -33,6 +33,7 @@ import org.eclipse.hawkbit.repository.builder.SoftwareModuleTypeCreate; import org.eclipse.hawkbit.repository.exception.QuotaExceededException; import org.eclipse.hawkbit.repository.model.DistributionSetType; +import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.rest.util.JsonBuilder; @@ -618,7 +619,7 @@ public void invalidRequestsOnDistributionSetTypesResource() throws Exception { .andExpect(status().isBadRequest()); final DistributionSetType toLongName = entityFactory.distributionSetType().create().key("test123") - .name(RandomStringUtils.randomAlphanumeric(80)).build(); + .name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)).build(); mvc.perform(post("/rest/v1/distributionsettypes") .content(JsonBuilder.distributionSetTypes(Arrays.asList(toLongName))) .contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()) diff --git a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java index cf368fd9fc..64ba7b9189 100644 --- a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java +++ b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSoftwareModuleTypeResourceTest.java @@ -27,6 +27,7 @@ import org.apache.commons.lang3.RandomStringUtils; import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants; +import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.test.util.WithUser; import org.eclipse.hawkbit.rest.util.JsonBuilder; @@ -371,7 +372,7 @@ public void invalidRequestsOnSoftwaremoduleTypesResource() throws Exception { .andExpect(status().isBadRequest()); final SoftwareModuleType toLongName = entityFactory.softwareModuleType().create().key("test123") - .name(RandomStringUtils.randomAlphanumeric(80)).build(); + .name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)).build(); mvc.perform( post("/rest/v1/softwaremoduletypes").content(JsonBuilder.softwareModuleTypes(Arrays.asList(toLongName))) .contentType(MediaType.APPLICATION_JSON)) diff --git a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index 05813b2e89..f569bc755b 100644 --- a/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-rest/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -48,6 +48,7 @@ import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.MetaData; +import org.eclipse.hawkbit.repository.model.NamedEntity; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetMetadata; @@ -722,7 +723,7 @@ public void createTargetWithMissingMandatoryPropertyBadRequest() throws Exceptio @Description("Verfies that a properties of new targets are validated as in allowed size range.") public void createTargetWithInvalidPropertyBadRequest() throws Exception { final Target test1 = entityFactory.target().create().controllerId("id1") - .name(RandomStringUtils.randomAlphanumeric(80)).build(); + .name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)).build(); final MvcResult mvcResult = mvc.perform(post(MgmtRestConstants.TARGET_V1_REQUEST_MAPPING) .content(JsonBuilder.targets(Arrays.asList(test1), true)).contentType(MediaType.APPLICATION_JSON)) diff --git a/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-db2.properties b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-db2.properties new file mode 100644 index 0000000000..a0a3bd2b1e --- /dev/null +++ b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-db2.properties @@ -0,0 +1,18 @@ +# +# Copyright (c) 2019 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 +# + +# This profile adds basic configurations for a DB2 DB usage. +# Keep in mind that you need the DB2 driver in your classpath on compile. +# see https://www.eclipse.org/hawkbit/guides/runhawkbit/ + +spring.jpa.database=DB2 +spring.datasource.url=jdbc:db2://localhost:50000/hawkbit +spring.datasource.username=db2inst1 +spring.datasource.password=db2inst1-pwd +spring.datasource.driverClassName=com.ibm.db2.jcc.DB2Driver diff --git a/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-mssql.properties b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-mssql.properties index 17ef486cc7..ddcf708648 100644 --- a/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-mssql.properties +++ b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-mssql.properties @@ -9,7 +9,7 @@ # This profile adds basic configurations for a Microsoft SQL Server DB usage. # Keep in mind that you need the SQL server driver in your classpath on compile. -# see https://www.eclipse.org/hawkbit/documentation/guide/runhawkbit.html +# see https://www.eclipse.org/hawkbit/guides/runhawkbit/ spring.jpa.database=SQL_SERVER spring.datasource.url=jdbc:sqlserver://localhost:1433;database=hawkbit diff --git a/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-mysql.properties b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-mysql.properties index e6f5cbcf5e..870a6c06b6 100644 --- a/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-mysql.properties +++ b/hawkbit-runtime/hawkbit-update-server/src/main/resources/application-mysql.properties @@ -9,7 +9,7 @@ # This profile adds basic configurations for a MySQL DB usage. # Keep in mind that you need the MariaDB driver in your classpath on compile. -# see https://www.eclipse.org/hawkbit/documentation/guide/runhawkbit.html +# see https://www.eclipse.org/hawkbit/guides/runhawkbit/ spring.jpa.database=MYSQL spring.datasource.url=jdbc:mysql://localhost:3306/hawkbit