[ 
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)

Reply via email to