/*
* 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;
import org.jboss.as.controller.descriptions.NonResolvingResourceDescriptionResolver;
import org.jboss.as.controller.operations.global.GlobalNotifications;
import org.jboss.as.controller.operations.global.GlobalOperationHandlers;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.controller.test.AbstractControllerTestBase;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import org.junit.Test;
/**
* @author Tomaz Cerar (c) 2014 Red Hat Inc.
*/
public class ValidateModelTestCase extends AbstractControllerTestBase {
private static final SimpleAttributeDefinition ad = new SimpleAttributeDefinitionBuilder("test", ModelType.STRING, true)
//.setValidator(new IntRangeValidator(5, 10, false, false))
.setRequires("other")
.build();
private static final SimpleAttributeDefinition other = new SimpleAttributeDefinitionBuilder("other", ModelType.STRING, true)
.build();
private static final SimpleAttributeDefinition alter1 = new SimpleAttributeDefinitionBuilder("alter1", ModelType.STRING, true)
.build();
private static final SimpleAttributeDefinition alter2 = new SimpleAttributeDefinitionBuilder("alter2", ModelType.STRING, true)
.setAlternatives("other")
.build();
private static PathAddress TEST_ADDRESS = PathAddress.pathAddress("subsystem", "test");
@Override
protected void initModel(ManagementModel managementModel) {
ManagementResourceRegistration rootRegistration = managementModel.getRootResourceRegistration();
// register the global operations to be able to call :read-attribute and :write-attribute
GlobalOperationHandlers.registerGlobalOperations(rootRegistration, processType);
// register the global notifications so there is no warning that emitted notifications are not described by the resource.
GlobalNotifications.registerGlobalNotifications(rootRegistration, processType);
ResourceDefinition profileDefinition = createDummyProfileResourceDefinition();
rootRegistration.registerSubModel(profileDefinition);
}
private static ResourceDefinition createDummyProfileResourceDefinition() {
return ResourceBuilder.Factory.create(TEST_ADDRESS.getElement(0),
new NonResolvingResourceDescriptionResolver())
.setAddOperation(new AbstractAddStepHandler() {
@Override
protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
ad.validateAndSet(operation, model);
other.validateAndSet(operation, model);
alter1.validateAndSet(operation, model);
alter2.validateAndSet(operation, model);
}
})
.setRemoveOperation(ReloadRequiredRemoveStepHandler.INSTANCE)
.addReadWriteAttribute(ad, null, new ReloadRequiredWriteAttributeHandler(ad))
.addReadWriteAttribute(other, null, new ReloadRequiredWriteAttributeHandler(other))
.addReadWriteAttribute(alter1, null, new ReloadRequiredWriteAttributeHandler(other))
.addReadWriteAttribute(alter2, null, new ReloadRequiredWriteAttributeHandler(other))
.build();
}
@Test
public void testRequires() throws OperationFailedException {
ModelNode addOp = createOperation("add", TEST_ADDRESS);
addOp.get("test").set("some test value");
executeForFailure(addOp);
addOp.get("other").set("other value");
executeCheckNoFailure(addOp);
executeCheckNoFailure(createOperation("remove", TEST_ADDRESS));
}
@Test
public void testAlternatives() throws OperationFailedException {
ModelNode addOp = createOperation("add", TEST_ADDRESS);
addOp.get("other").set("some test value");
addOp.get("alter2").set("some test value");
executeCheckForFailure(addOp);
addOp.remove("other");
executeCheckNoFailure(addOp);
executeCheckNoFailure(createOperation("remove", TEST_ADDRESS));
}
}