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 ecaf64bb5..3716c0932 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 @@ -41,6 +41,7 @@ import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.ActionStatus; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetAssignmentResult; +import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.test.matcher.Expect; import org.eclipse.hawkbit.repository.test.matcher.ExpectEvents; @@ -782,10 +783,10 @@ public class AmqpMessageHandlerServiceIntegrationTest extends AbstractAmqpServic // setup final String target = "ControllerAttributeTestTarget"; registerAndAssertTargetWithExistingTenant(target); - final String keyTooLong = "123456789012345678901234567890123"; - final String keyValid = "12345678901234567890123456789012"; - final String valueTooLong = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"; - final String valueValid = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678"; + final String keyTooLong = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_KEY_SIZE + 1); + final String keyValid = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_KEY_SIZE); + final String valueTooLong = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE + 1); + final String valueValid = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE); sendUpdateAttributesMessageWithGivenAttributes(target, keyTooLong, valueValid); 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 ca7bdf883..8af9ccde0 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 @@ -38,7 +38,7 @@ public interface Target extends NamedEntity { /** * Maximum length of key of controller attribute */ - int CONTROLLER_ATTRIBUTE_KEY_SIZE = 32; + int CONTROLLER_ATTRIBUTE_KEY_SIZE = 128; /** * Maximum length of value of controller attribute diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java index 01fc2390b..f43704925 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaTarget.java @@ -156,8 +156,8 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Target, EventAw */ @CascadeOnDelete @ElementCollection - @Column(name = "attribute_value", length = 128) - @MapKeyColumn(name = "attribute_key", nullable = false, length = 32) + @Column(name = "attribute_value", length = Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE) + @MapKeyColumn(name = "attribute_key", nullable = false, length = Target.CONTROLLER_ATTRIBUTE_KEY_SIZE) @CollectionTable(name = "sp_target_attributes", joinColumns = { @JoinColumn(name = "target_id", nullable = false, updatable = false) }, foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_targ_attrib_target")) private final Map controllerAttributes = Collections.synchronizedMap(new HashMap()); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_10__change_length_of_target_attributes_key___DB2.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_10__change_length_of_target_attributes_key___DB2.sql new file mode 100644 index 000000000..cdcffc506 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_10__change_length_of_target_attributes_key___DB2.sql @@ -0,0 +1 @@ +ALTER TABLE sp_target_attributes ALTER COLUMN attribute_key SET DATA TYPE VARCHAR(128); \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_10__change_length_of_target_attributes_key___H2.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_10__change_length_of_target_attributes_key___H2.sql new file mode 100644 index 000000000..55f3eed5e --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_10__change_length_of_target_attributes_key___H2.sql @@ -0,0 +1 @@ +ALTER TABLE sp_target_attributes ALTER COLUMN attribute_key VARCHAR(128); \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_10__change_length_of_target_attributes_key___MYSQL.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_10__change_length_of_target_attributes_key___MYSQL.sql new file mode 100644 index 000000000..aeec222c2 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_10__change_length_of_target_attributes_key___MYSQL.sql @@ -0,0 +1 @@ +ALTER TABLE sp_target_attributes MODIFY attribute_key VARCHAR(128); \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_10__change_length_of_target_attributes_key___SQL_SERVER.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_10__change_length_of_target_attributes_key___SQL_SERVER.sql new file mode 100644 index 000000000..55f3eed5e --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_10__change_length_of_target_attributes_key___SQL_SERVER.sql @@ -0,0 +1 @@ +ALTER TABLE sp_target_attributes ALTER COLUMN attribute_key VARCHAR(128); \ No newline at end of file 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 92f77c2dd..7cf48859e 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 @@ -847,10 +847,10 @@ public class ControllerManagementTest extends AbstractJpaIntegrationTest { @Test @Description("Checks if invalid values of attribute-key and attribute-value are handled correctly") public void updateTargetAttributesFailsForInvalidAttributes() { - final String keyTooLong = "123456789012345678901234567890123"; - final String keyValid = "12345678901234567890123456789012"; - final String valueTooLong = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"; - final String valueValid = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678"; + final String keyTooLong = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_KEY_SIZE + 1); + final String keyValid = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_KEY_SIZE); + final String valueTooLong = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE + 1); + final String valueValid = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE); final String keyNull = null; final String controllerId = "targetId123"; diff --git a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java index 3c485a7d1..7c707099b 100644 --- a/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java +++ b/hawkbit-repository/hawkbit-repository-test/src/main/java/org/eclipse/hawkbit/repository/test/util/AbstractIntegrationTest.java @@ -18,6 +18,7 @@ import java.time.ZonedDateTime; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Random; import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; @@ -414,4 +415,18 @@ public abstract class AbstractIntegrationTest { final ZonedDateTime currentTime = ZonedDateTime.now(); return currentTime.getOffset().getId().replace("Z", "+00:00"); } + + protected static String generateRandomStringWithLength(final int length) { + final StringBuilder randomStringBuilder = new StringBuilder(length); + final Random rand = new Random(); + final int lowercaseACode = 97; + final int lowercaseZCode = 122; + + for (int i = 0; i < length; i++) { + final char randomCharacter = (char) (rand.nextInt(lowercaseZCode - lowercaseACode + 1) + lowercaseACode); + randomStringBuilder.append(randomCharacter); + } + + return randomStringBuilder.toString(); + } } diff --git a/hawkbit-rest/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java b/hawkbit-rest/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java index 6cca68729..b0c60f6c3 100644 --- a/hawkbit-rest/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java +++ b/hawkbit-rest/hawkbit-ddi-resource/src/test/java/org/eclipse/hawkbit/ddi/rest/resource/DdiConfigDataTest.java @@ -48,10 +48,11 @@ import io.qameta.allure.Story; @Story("Config Data Resource") public class DdiConfigDataTest extends AbstractDDiApiIntegrationTest { - private static final String KEY_TOO_LONG = "123456789012345678901234567890123"; - private static final String KEY_VALID = "12345678901234567890123456789012"; - private static final String VALUE_TOO_LONG = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"; - private static final String VALUE_VALID = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678"; + private static final String KEY_TOO_LONG = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_KEY_SIZE + 1); + private static final String KEY_VALID = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_KEY_SIZE); + private static final String VALUE_TOO_LONG = generateRandomStringWithLength( + Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE + 1); + private static final String VALUE_VALID = generateRandomStringWithLength(Target.CONTROLLER_ATTRIBUTE_VALUE_SIZE); @Test @Description("We verify that the config data (i.e. device attributes like serial number, hardware revision etc.) "