[
https://issues.apache.org/jira/browse/BROOKLYN-433?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15863584#comment-15863584
]
ASF GitHub Bot commented on BROOKLYN-433:
-----------------------------------------
Github user bostko commented on a diff in the pull request:
https://github.com/apache/brooklyn-server/pull/558#discussion_r100781917
--- Diff:
camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ConfigParametersYamlTest.java
---
@@ -750,6 +754,175 @@ public void testPortSetAsAttributeOnSoftwareProcess()
throws Exception {
assertEquals(entity.sensors().get(Sensors.newSensor(Object.class,
"my.param.key")), 1234);
}
+ @Test
+ public void testConfigParameterConstraintRequired() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " itemType: entity",
+ " items:",
+ " - id: entity-with-keys",
+ " item:",
+ " type: "+TestEntity.class.getName(),
+ " brooklyn.parameters:",
+ " - name: testRequired",
+ " type: String",
+ " constraints:",
+ " - required");
+
+ String yamlNoVal = Joiner.on("\n").join(
+ "services:",
+ "- type: entity-with-keys");
+
+ String yamlWithVal = Joiner.on("\n").join(
+ "services:",
+ "- type: entity-with-keys",
+ " brooklyn.config:",
+ " testRequired: myval");
+
+ try {
+ createStartWaitAndLogApplication(yamlNoVal);
+ Asserts.shouldHaveFailedPreviously();
+ } catch (ConstraintViolationException e) {
+ // success
+ }
+
+ Entity app = createStartWaitAndLogApplication(yamlWithVal);
+ TestEntity entity = (TestEntity)
Iterables.getOnlyElement(app.getChildren());
+ assertKeyEquals(entity, "testRequired", null, String.class, null,
"myval");
+
+ // Rebind, and then check again that the config key is listed
+ Entity newApp = rebind();
+ TestEntity newEntity = (TestEntity)
Iterables.getOnlyElement(newApp.getChildren());
+ assertKeyEquals(newEntity, "testRequired", null, String.class,
null, "myval");
+ }
+
+ @Test
+ public void testConfigParameterConstraintRegex() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " itemType: entity",
+ " items:",
+ " - id: entity-with-keys",
+ " item:",
+ " type: "+TestEntity.class.getName(),
+ " brooklyn.parameters:",
+ " - name: testRequired",
+ " type: String",
+ " constraints:",
+ " - regex: myprefix.*");
+
+ String yamlNoVal = Joiner.on("\n").join(
+ "services:",
+ "- type: entity-with-keys");
+
+ String yamlWrongVal = Joiner.on("\n").join(
+ "services:",
+ "- type: entity-with-keys",
+ " brooklyn.config:",
+ " testRequired: wrongval");
+
+ String yamlWithVal = Joiner.on("\n").join(
+ "services:",
+ "- type: entity-with-keys",
+ " brooklyn.config:",
+ " testRequired: myprefix-myVal");
+
+ try {
+ createStartWaitAndLogApplication(yamlNoVal);
+ Asserts.shouldHaveFailedPreviously();
+ } catch (ConstraintViolationException e) {
+ // success
+ }
+
+ try {
+ createStartWaitAndLogApplication(yamlWrongVal);
+ Asserts.shouldHaveFailedPreviously();
+ } catch (ConstraintViolationException e) {
+ // success
+ }
+
+ Entity app = createStartWaitAndLogApplication(yamlWithVal);
+ TestEntity entity = (TestEntity)
Iterables.getOnlyElement(app.getChildren());
+ assertKeyEquals(entity, "testRequired", null, String.class, null,
"myprefix-myVal");
+
+ // Rebind, and then check again that the config key is listed
+ Entity newApp = rebind();
+ TestEntity newEntity = (TestEntity)
Iterables.getOnlyElement(newApp.getChildren());
+ assertKeyEquals(newEntity, "testRequired", null, String.class,
null, "myprefix-myVal");
+ }
+
+ @Test
+ public void testConfigParameterConstraintObject() throws Exception {
+ addCatalogItems(
+ "brooklyn.catalog:",
+ " itemType: entity",
+ " items:",
+ " - id: entity-with-keys",
+ " item:",
+ " type: "+TestEntity.class.getName(),
+ " brooklyn.parameters:",
+ " - name: testRequired",
+ " type: String",
+ " constraints:",
+ " - $brooklyn:object:",
+ " type: " + PredicateRegexPojo.class.getName(),
+ " object.fields:",
+ " regex: myprefix.*");
+
+
+ String yamlNoVal = Joiner.on("\n").join(
+ "services:",
+ "- type: entity-with-keys");
+
+ String yamlWrongVal = Joiner.on("\n").join(
+ "services:",
+ "- type: entity-with-keys",
+ " brooklyn.config:",
+ " testRequired: wrongval");
+
+ String yamlWithVal = Joiner.on("\n").join(
+ "services:",
+ "- type: entity-with-keys",
+ " brooklyn.config:",
+ " testRequired: myprefix-myVal");
+
+ try {
+ createStartWaitAndLogApplication(yamlNoVal);
+ Asserts.shouldHaveFailedPreviously();
+ } catch (ConstraintViolationException e) {
+ // success
--- End diff --
What about putting a message assertion?
> YAML-based config constraint to support regex
> ---------------------------------------------
>
> Key: BROOKLYN-433
> URL: https://issues.apache.org/jira/browse/BROOKLYN-433
> Project: Brooklyn
> Issue Type: Improvement
> Affects Versions: 0.10.0
> Reporter: Aled Sage
> Assignee: Aled Sage
> Priority: Minor
>
> One can specify constraints on a config key's value, to give a validation
> error if an invalid value is supplied.
> In the Java code, this can be any predicate.
> However, in YAML we don't support many options. It would be good to support a
> regex constraint. For example:
> {noformat}
> brooklyn.parameters:
> - name: address
> type: string
> constraints:
> - required
> - regex: ^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$
> {noformat}
> See docs at
> https://raw.githubusercontent.com/apache/brooklyn-docs/master/guide/yaml/yaml-reference.md,
> and code at
> https://github.com/apache/brooklyn-server/blob/master/core/src/main/java/org/apache/brooklyn/core/objs/BasicSpecParameter.java#L204-L205
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)