/*
* JBoss, Home of Professional Open Source
* Copyright 2016, Red Hat, Inc., and individual contributors as indicated
* by the @authors tag.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.as.controller;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import org.jboss.dmr.ValueExpression;
import org.junit.Assert;
import org.junit.Test;
/**
* Unit tests of {@link ObjectMapAttributeDefinitionTestCase}.
*
* @author Tomaz Cerar (c) 2016 Red Hat Inc.
*/
public class ObjectMapAttributeDefinitionTestCase {
private final AttributeDefinition attribute1 = SimpleAttributeDefinitionBuilder.create("a", ModelType.INT).build();
private final AttributeDefinition attribute2 = SimpleAttributeDefinitionBuilder.create("b", ModelType.BOOLEAN).setAllowExpression(true).build();
private final AttributeDefinition attribute3 = SimpleAttributeDefinitionBuilder.create("c", ModelType.STRING).setAllowExpression(true).build();
private final ObjectTypeAttributeDefinition complex = ObjectTypeAttributeDefinition.create("complex", attribute1, attribute2, attribute3).build();
private final ObjectMapAttributeDefinition map = ObjectMapAttributeDefinition.create("map", complex).build();
@Test
public void testExpressions() throws OperationFailedException {
ModelNode op = new ModelNode();
ModelNode mapAttr = op.get(this.map.getName());
ModelNode one = mapAttr.get("key1");
one.get("a").set(2);
one.get("b").set(true);
one.get("c").set("some value");
ModelNode two = mapAttr.get("key2");
two.get("a").set(5);
two.get("b").set(new ValueExpression("${test:true}"));
two.get("c").set(new ValueExpression("${test:value}"));
ModelNode validated = this.map.validateOperation(op);
Assert.assertEquals(one, validated.get("key1"));
Assert.assertEquals(one.get("a"), validated.get("key1").get("a"));
Assert.assertEquals(two.get("b"), validated.get("key2").get("b"));
ModelNode model = new ModelNode();
this.map.validateAndSet(op, model);
Assert.assertEquals(one, model.get(map.getName()).get("key1"));
Assert.assertEquals(one.get("a"), model.get(map.getName()).get("key1").get("a"));
Assert.assertEquals(one.get("b"), model.get(map.getName()).get("key1").get("b"));
op = new ModelNode();
one = op.get(map.getName());
one.get("a").set(2);
one.get("b").set(true);
two = op.get(map.getName());
two.get("a").set("${test:1}");
two.get("b").set(false);
try {
this.map.validateOperation(op);
Assert.fail("Did not reject " + op);
} catch (OperationFailedException good) {
//
}
try {
this.map.validateAndSet(op, new ModelNode());
Assert.fail("Did not reject " + op);
} catch (OperationFailedException good) {
//
}
}
}