/* * JBoss, Home of Professional Open Source * Copyright 2014, JBoss 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.operation.global; import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.VALUE; import org.jboss.as.controller.AbstractAddStepHandler; import org.jboss.as.controller.AbstractWriteAttributeHandler; import org.jboss.as.controller.ModelOnlyWriteAttributeHandler; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.PropertiesAttributeDefinition; import org.jboss.as.controller.ReloadRequiredRemoveStepHandler; import org.jboss.as.controller.ResourceBuilder; import org.jboss.as.controller.ResourceDefinition; import org.jboss.as.controller.StringListAttributeDefinition; import org.jboss.as.controller.descriptions.NonResolvingResourceDescriptionResolver; import org.jboss.dmr.ModelNode; import org.junit.Assert; import org.junit.Test; /** * @author Tomaz Cerar (c) 2014 Red Hat Inc. */ public class CollectionOperationsTestCase extends AbstractCollectionOperationsTestCase { private static final String WRONG_ATTRIBUTE_NAME = "attribute.with.wrong.name"; private static final StringListAttributeDefinition LIST_ATTRIBUTE = new StringListAttributeDefinition.Builder(LIST_ATTRIBUTE_NAME) .setAllowNull(true) .setAllowDuplicates(false) .build(); private static final PropertiesAttributeDefinition MAP_ATTRIBUTE = new PropertiesAttributeDefinition.Builder(MAP_ATTRIBUTE_NAME, true) .setAllowNull(true) .build(); private static final StringListAttributeDefinition WRONG_ATTRIBUTE = new StringListAttributeDefinition.Builder(WRONG_ATTRIBUTE_NAME) .setAllowNull(true) .build(); private static PathAddress TEST_ADDRESS = PathAddress.pathAddress("subsystem", "test"); @Override protected ResourceDefinition createProfileResourceDefinition() { return ResourceBuilder.Factory.create(TEST_ADDRESS.getElement(0), new NonResolvingResourceDescriptionResolver()) .setAddOperation(new AbstractAddStepHandler() { @Override protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException { LIST_ATTRIBUTE.validateAndSet(operation, model); MAP_ATTRIBUTE.validateAndSet(operation, model); WRONG_ATTRIBUTE.validateAndSet(operation, model); } }) .setRemoveOperation(ReloadRequiredRemoveStepHandler.INSTANCE) .addReadWriteAttribute(WRONG_ATTRIBUTE, null, new ModelOnlyWriteAttributeHandler(WRONG_ATTRIBUTE)) .addReadWriteAttribute(LIST_ATTRIBUTE, null, new AbstractWriteAttributeHandler(LIST_ATTRIBUTE) { @Override protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode resolvedValue, ModelNode currentValue, HandbackHolder handbackHolder) throws OperationFailedException { runtimeListAttributeValue = operation.get(VALUE); return false; } @Override protected void revertUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode valueToRestore, ModelNode valueToRevert, Object handback) throws OperationFailedException { } }) .addReadWriteAttribute(MAP_ATTRIBUTE, null, new AbstractWriteAttributeHandler(MAP_ATTRIBUTE) { @Override protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode resolvedValue, ModelNode currentValue, HandbackHolder handbackHolder) throws OperationFailedException { runtimeMapAttributeValue = operation.get(VALUE); return false; } @Override protected void revertUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode valueToRestore, ModelNode valueToRevert, Object handback) throws OperationFailedException { } }).build(); } @Test public void testListForWrongAttributeNameOperations() throws OperationFailedException { executeCheckNoFailure(createOperation("add", TEST_ADDRESS)); ModelNode op = createOperation("list-add", TEST_ADDRESS); op.get("name").set(WRONG_ATTRIBUTE_NAME); op.get("value").set("value1"); executeCheckNoFailure(op); //add second value op.get("value").set("value2"); executeCheckNoFailure(op); op = createOperation("list-get", TEST_ADDRESS); op.get("name").set(WRONG_ATTRIBUTE_NAME); op.get("index").set(0); Assert.assertEquals("value1", executeForResult(op).asString()); } }