Fix constraint violation exception when creating target with whitespaces (#363)

* Added a function to validate if controller id is empty

Signed-off-by: Jonathan Philip Knoblauch <JonathanPhilip.Knoblauch@bosch-si.com>

* Changed how the controller id gets past to other methods

Signed-off-by: Jonathan Philip Knoblauch <JonathanPhilip.Knoblauch@bosch-si.com>

* Changed the way controllderId gets validated in UI and repro

- added junit test

Signed-off-by: Jonathan Philip Knoblauch <JonathanPhilip.Knoblauch@bosch-si.com>

* Fixed sonar issue

Signed-off-by: Jonathan Philip Knoblauch <JonathanPhilip.Knoblauch@bosch-si.com>

* Switched to use the RegexpValidator 

Signed-off-by: Jonathan Philip Knoblauch <JonathanPhilip.Knoblauch@bosch-si.com>
This commit is contained in:
Jonathan Knoblauch
2016-11-28 17:58:52 +01:00
committed by Michael Hirsch
parent a57165686e
commit b30f2bdb1f
4 changed files with 53 additions and 0 deletions

View File

@@ -33,6 +33,7 @@ import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.eclipse.hawkbit.im.authentication.SpPermission;
@@ -77,6 +78,7 @@ public class JpaTarget extends AbstractJpaNamedEntity implements Persistable<Lon
@Column(name = "controller_id", length = 64)
@Size(min = 1, max = 64)
@NotEmpty
@Pattern(regexp = "[.\\S]*", message = "has whitespaces which are not allowed")
private String controllerId;
@Transient

View File

@@ -125,6 +125,54 @@ public class TargetManagementTest extends AbstractJpaIntegrationTest {
}
}
@Test
@Description("Verify that a target with whitespaces in controller id cannot be created")
@ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 0) })
public void createTargetWithWhitespaces() {
try {
targetManagement.createTarget(entityFactory.target().create().controllerId(" "));
fail("target with whitespaces in controller id should not be created");
} catch (final ConstraintViolationException e) {
// ok
}
try {
targetManagement.createTarget(entityFactory.target().create().controllerId(" a"));
fail("target with whitespaces in controller id should not be created");
} catch (final ConstraintViolationException e) {
// ok
}
try {
targetManagement.createTarget(entityFactory.target().create().controllerId("a "));
fail("target with whitespaces in controller id should not be created");
} catch (final ConstraintViolationException e) {
// ok
}
try {
targetManagement.createTarget(entityFactory.target().create().controllerId("a b"));
fail("target with whitespaces in controller id should not be created");
} catch (final ConstraintViolationException e) {
// ok
}
try {
targetManagement.createTarget(entityFactory.target().create().controllerId(" "));
fail("target with whitespaces in controller id should not be created");
} catch (final ConstraintViolationException e) {
// ok
}
try {
targetManagement.createTarget(entityFactory.target().create().controllerId("aaa bbb"));
fail("target with whitespaces in controller id should not be created");
} catch (final ConstraintViolationException e) {
// ok
}
}
@Test
@Description("Ensures that targets can assigned and unassigned to a target tag. Not exists target will be ignored for the assignment.")
@ExpectEvents({ @Expect(type = TargetCreatedEvent.class, count = 4),

View File

@@ -33,6 +33,7 @@ import org.eclipse.hawkbit.ui.utils.UINotification;
import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.spring.events.EventBus;
import com.vaadin.data.validator.RegexpValidator;
import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope;
import com.vaadin.ui.CustomComponent;
@@ -104,6 +105,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
private void createRequiredComponents() {
controllerIDTextField = createTextField("prompt.target.id", UIComponentIdProvider.TARGET_ADD_CONTROLLER_ID);
controllerIDTextField.addValidator(new RegexpValidator("[.\\S]*", i18n.get("message.target.whitespace.check")));
nameTextField = createTextField("textfield.name", UIComponentIdProvider.TARGET_ADD_NAME);
nameTextField.setRequired(false);

View File

@@ -273,6 +273,7 @@ message.no.available = --No messages available--
message.no.actionupdateds.available = No other updates available for this action
message.mandatory.check = Mandatory details are missing
message.target.duplicate.check = Target [ {0} ] must be unique, entered value already exists.
message.target.whitespace.check = Please enter a valid controller ID with no whitespaces
message.permission.insufficient = Insufficient permissions to perform this action.
message.error.temp = The operation cannot be fulfilled due to {0}. Please contact administrator
message.dist.alreadyassigned = {0} : {1} is already assigned/installed, cannot be updated