/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.test.integration.domain.suites;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.CODE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.DISCOVERY_OPTIONS;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.HOST;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.MODULE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PORT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PROPERTIES;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.REMOVE;
import static org.jboss.as.host.controller.discovery.Constants.ACCESS_KEY;
import static org.jboss.as.host.controller.discovery.Constants.LOCATION;
import static org.jboss.as.host.controller.discovery.Constants.SECRET_ACCESS_KEY;
import static org.jboss.as.test.integration.domain.management.util.DomainTestSupport.validateResponse;
import static org.jboss.as.test.integration.domain.management.util.DomainTestUtils.exists;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.client.ModelControllerClient;
import org.jboss.as.controller.client.helpers.domain.DomainClient;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.operations.common.Util;
import org.jboss.as.test.integration.domain.management.util.DomainLifecycleUtil;
import org.jboss.as.test.integration.domain.management.util.DomainTestSupport;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ValueExpression;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Tests of management operations involving discovery options.
*
* @author Farah Juma
*/
public class DiscoveryOptionTestCase {
private static DomainTestSupport testSupport;
private static DomainLifecycleUtil domainMasterLifecycleUtil;
private static DomainLifecycleUtil domainSlaveLifecycleUtil;
@BeforeClass
public static void setupDomain() throws Exception {
testSupport = DomainTestSupport.createAndStartSupport(DomainTestSupport.Configuration.create(DiscoveryOptionTestCase.class.getName(),
"domain-configs/domain-standard.xml", "host-configs/host-master.xml", "host-configs/host-slave-discovery-options.xml"));
domainMasterLifecycleUtil = testSupport.getDomainMasterLifecycleUtil();
domainSlaveLifecycleUtil = testSupport.getDomainSlaveLifecycleUtil();
}
@AfterClass
public static void tearDownDomain() throws Exception {
DomainTestSuite.stopSupport();
testSupport = null;
domainMasterLifecycleUtil = null;
domainSlaveLifecycleUtil = null;
}
@Test
public void testAddAndRemoveS3DiscoveryOption() throws Exception {
DomainClient masterClient = domainMasterLifecycleUtil.getDomainClient();
ModelNode discoveryOptionProperties = new ModelNode();
discoveryOptionProperties.get(ACCESS_KEY).set("access_key");
discoveryOptionProperties.get(SECRET_ACCESS_KEY).set("secret_access_key");
discoveryOptionProperties.get(LOCATION).set("location");
ModelNode addDiscoveryOption = getS3DiscoveryOptionAddOperation(discoveryOptionProperties);
// (host=master),(core-service=discovery-options),(discovery-option=option-one)
ModelNode newMasterDiscoveryOptionAddress = new ModelNode();
newMasterDiscoveryOptionAddress.add("host", "master");
newMasterDiscoveryOptionAddress.add("core-service", "discovery-options");
newMasterDiscoveryOptionAddress.add("discovery-option", "option-one");
addAndRemoveDiscoveryOptionTest(masterClient, newMasterDiscoveryOptionAddress, addDiscoveryOption);
DomainClient slaveClient = domainSlaveLifecycleUtil.getDomainClient();
// (host=slave),(core-service=discovery-options),(discovery-option=option-one)
ModelNode newSlaveDiscoveryOptionAddress = new ModelNode();
newSlaveDiscoveryOptionAddress.add("host", "slave");
newSlaveDiscoveryOptionAddress.add("core-service", "discovery-options");
newSlaveDiscoveryOptionAddress.add("discovery-option", "option-one");
addAndRemoveDiscoveryOptionTest(slaveClient, newSlaveDiscoveryOptionAddress, addDiscoveryOption);
}
@Test
public void testAddAndRemoveStaticDiscoveryOption() throws Exception {
DomainClient slaveClient = domainSlaveLifecycleUtil.getDomainClient();
ModelNode addDiscoveryOption = new ModelNode();
addDiscoveryOption.get(OP).set(ADD);
addDiscoveryOption.get(HOST).set("127.0.0.2");
addDiscoveryOption.get(PORT).set("9999");
// (host=slave),(core-service=discovery-options),(static-discovery=option-one)
ModelNode newSlaveDiscoveryOptionAddress = new ModelNode();
newSlaveDiscoveryOptionAddress.add("host", "slave");
newSlaveDiscoveryOptionAddress.add("core-service", "discovery-options");
newSlaveDiscoveryOptionAddress.add("static-discovery", "option-one");
addAndRemoveDiscoveryOptionTest(slaveClient, newSlaveDiscoveryOptionAddress, addDiscoveryOption);
}
@Test
public void testDiscoveryOptionsOrdering() throws Exception {
DomainClient slaveClient = domainSlaveLifecycleUtil.getDomainClient();
ModelNode discoveryOptionsAddress = new ModelNode();
discoveryOptionsAddress.add("host", "slave");
discoveryOptionsAddress.add("core-service", "discovery-options");
ModelNode readDiscoveryOptionsOrdering = Util.getReadAttributeOperation(PathAddress.pathAddress(discoveryOptionsAddress), DISCOVERY_OPTIONS);
ModelNode expectedDiscoveryOptionsOrdering = new ModelNode();
expectedDiscoveryOptionsOrdering.add("static-discovery", "start-option");
ModelNode originalOptionsOrdering = new ModelNode();
originalOptionsOrdering.add("static-discovery", "start-option");
ModelNode discoveryOptionProperties = new ModelNode();
discoveryOptionProperties.get(ACCESS_KEY).set("access_key");
discoveryOptionProperties.get(SECRET_ACCESS_KEY).set("secret_access_key");
discoveryOptionProperties.get(LOCATION).set("location");
ModelNode addS3DiscoveryOption = getS3DiscoveryOptionAddOperation(discoveryOptionProperties);
ModelNode addStaticDiscoveryOption = new ModelNode();
addStaticDiscoveryOption.get(OP).set(ADD);
addStaticDiscoveryOption.get(HOST).set("127.0.0.2");
addStaticDiscoveryOption.get(PORT).set("9999");
ModelNode result = slaveClient.execute(readDiscoveryOptionsOrdering);
ModelNode returnVal = validateResponse(result);
Assert.assertEquals(originalOptionsOrdering, returnVal);
// (host=slave),(core-service=discovery-options),(discovery-option=option-one)
ModelNode discoveryOptionAddressOne = discoveryOptionsAddress.clone().add("discovery-option", "option-one");
addDiscoveryOptionTest(slaveClient, discoveryOptionAddressOne, addS3DiscoveryOption);
expectedDiscoveryOptionsOrdering.add("discovery-option", "option-one");
// (host=slave),(core-service=discovery-options),(static-discovery=option-two)
ModelNode discoveryOptionAddressTwo = discoveryOptionsAddress.clone().add("static-discovery", "option-two");
addDiscoveryOptionTest(slaveClient, discoveryOptionAddressTwo, addStaticDiscoveryOption);
expectedDiscoveryOptionsOrdering.add("static-discovery", "option-two");
// (host=slave),(core-service=discovery-options),(discovery-option=option-three)
ModelNode discoveryOptionAddressThree = discoveryOptionsAddress.clone().add("discovery-option", "option-three");
addDiscoveryOptionTest(slaveClient, discoveryOptionAddressThree, addS3DiscoveryOption);
expectedDiscoveryOptionsOrdering.add("discovery-option", "option-three");
result = slaveClient.execute(readDiscoveryOptionsOrdering);
returnVal = validateResponse(result);
Assert.assertEquals(expectedDiscoveryOptionsOrdering, returnVal);
removeDiscoveryOptionTest(slaveClient, discoveryOptionAddressOne);
removeDiscoveryOptionTest(slaveClient, discoveryOptionAddressTwo);
removeDiscoveryOptionTest(slaveClient, discoveryOptionAddressThree);
result = slaveClient.execute(readDiscoveryOptionsOrdering);
returnVal = validateResponse(result);
Assert.assertEquals(originalOptionsOrdering, returnVal);
}
@Test
public void testOptionsAttribute() throws Exception {
DomainClient slaveClient = domainSlaveLifecycleUtil.getDomainClient();
ModelNode discoveryOptionsAddress = new ModelNode();
discoveryOptionsAddress.add("host", "slave");
discoveryOptionsAddress.add("core-service", "discovery-options");
ModelNode readOptionsAttr = Util.getReadAttributeOperation(PathAddress.pathAddress(discoveryOptionsAddress), ModelDescriptionConstants.OPTIONS);
ModelNode item = new ModelNode();
ModelNode value = item.get("static-discovery");
value.get("name").set("start-option");
value.get("protocol");
value.get("host").set(new ValueExpression("${jboss.test.host.master.address}"));
value.get("port").set(9999);
ModelNode expectedOptions = new ModelNode();
expectedOptions.add(item);
ModelNode originalOptions = new ModelNode();
originalOptions.add(item);
ModelNode discoveryOptionProperties = new ModelNode();
discoveryOptionProperties.get(ACCESS_KEY).set("access_key");
discoveryOptionProperties.get(SECRET_ACCESS_KEY).set("secret_access_key");
discoveryOptionProperties.get(LOCATION).set("location");
ModelNode addS3DiscoveryOption = getS3DiscoveryOptionAddOperation(discoveryOptionProperties);
ModelNode addStaticDiscoveryOption = new ModelNode();
addStaticDiscoveryOption.get(OP).set(ADD);
addStaticDiscoveryOption.get(HOST).set("127.0.0.2");
addStaticDiscoveryOption.get(PORT).set("9999");
ModelNode result = slaveClient.execute(readOptionsAttr);
ModelNode returnVal = validateResponse(result);
Assert.assertEquals(originalOptions, returnVal);
// (host=slave),(core-service=discovery-options),(discovery-option=option-one)
ModelNode discoveryOptionAddressOne = discoveryOptionsAddress.clone().add("discovery-option", "option-one");
addDiscoveryOptionTest(slaveClient, discoveryOptionAddressOne, addS3DiscoveryOption);
item = new ModelNode();
value = item.get("custom-discovery");
value.get("name").set("option-one");
value.get("code").set("org.jboss.as.host.controller.discovery.S3Discovery");
value.get("module").set("org.jboss.as.host.controller.discovery");
value.get("properties").set(discoveryOptionProperties);
expectedOptions.add(item);
// (host=slave),(core-service=discovery-options),(static-discovery=option-two)
ModelNode discoveryOptionAddressTwo = discoveryOptionsAddress.clone().add("static-discovery", "option-two");
addDiscoveryOptionTest(slaveClient, discoveryOptionAddressTwo, addStaticDiscoveryOption);
item = new ModelNode();
value = item.get("static-discovery");
value.get("name").set("option-two");
value.get("protocol");
value.get("host").set("127.0.0.2");
value.get("port").set(9999);
expectedOptions.add(item);
// (host=slave),(core-service=discovery-options),(discovery-option=option-three)
ModelNode discoveryOptionAddressThree = discoveryOptionsAddress.clone().add("discovery-option", "option-three");
addDiscoveryOptionTest(slaveClient, discoveryOptionAddressThree, addS3DiscoveryOption);
item = new ModelNode();
value = item.get("custom-discovery");
value.get("name").set("option-three");
value.get("code").set("org.jboss.as.host.controller.discovery.S3Discovery");
value.get("module").set("org.jboss.as.host.controller.discovery");
value.get("properties").set(discoveryOptionProperties);
expectedOptions.add(item);
result = slaveClient.execute(readOptionsAttr);
returnVal = validateResponse(result);
Assert.assertEquals(expectedOptions, returnVal);
removeDiscoveryOptionTest(slaveClient, discoveryOptionAddressOne);
removeDiscoveryOptionTest(slaveClient, discoveryOptionAddressTwo);
removeDiscoveryOptionTest(slaveClient, discoveryOptionAddressThree);
result = slaveClient.execute(readOptionsAttr);
returnVal = validateResponse(result);
Assert.assertEquals(originalOptions, returnVal);
}
private void addAndRemoveDiscoveryOptionTest(ModelControllerClient client, ModelNode discoveryOptionAddress, ModelNode addDiscoveryOption) throws Exception {
addDiscoveryOptionTest(client, discoveryOptionAddress, addDiscoveryOption);
removeDiscoveryOptionTest(client, discoveryOptionAddress);
}
private ModelNode getS3DiscoveryOptionAddOperation(ModelNode discoveryOptionProperties) {
ModelNode addDiscoveryOption = new ModelNode();
addDiscoveryOption.get(OP).set(ADD);
addDiscoveryOption.get(CODE).set("org.jboss.as.host.controller.discovery.S3Discovery");
addDiscoveryOption.get(MODULE).set("org.jboss.as.host.controller.discovery");
addDiscoveryOption.get(PROPERTIES).set(discoveryOptionProperties);
return addDiscoveryOption;
}
private void addDiscoveryOptionTest(ModelControllerClient client, ModelNode discoveryOptionAddress, ModelNode addDiscoveryOption) throws Exception {
addDiscoveryOption.get(OP_ADDR).set(discoveryOptionAddress);
Assert.assertFalse(exists(discoveryOptionAddress, client));
ModelNode result = client.execute(addDiscoveryOption);
validateResponse(result, false);
Assert.assertTrue(exists(discoveryOptionAddress, client));
}
private void removeDiscoveryOptionTest(ModelControllerClient client, ModelNode discoveryOptionAddress) throws Exception {
final ModelNode removeDiscoveryOption = new ModelNode();
removeDiscoveryOption.get(OP).set(REMOVE);
removeDiscoveryOption.get(OP_ADDR).set(discoveryOptionAddress);
ModelNode result = client.execute(removeDiscoveryOption);
validateResponse(result);
Assert.assertFalse(exists(discoveryOptionAddress, client));
}
}