/*
* JBoss, Home of Professional Open Source.
* Copyright 2011, Red Hat Middleware LLC, 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.controller;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.HOST;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SERVER;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import org.jboss.as.controller._private.OperationFailedRuntimeException;
import org.jboss.dmr.ModelNode;
import org.junit.Assert;
import org.junit.Test;
/**
*
* @author <a href="kabir.khan@jboss.com">Kabir Khan</a>
*/
public class PathAddressTestCase {
@Test
public void testValidAddresses() {
//If the address starts with host=>*,server=>* we allow another host and another server
PathAddress pathAddress = PathAddress.pathAddress(PathElement.pathElement(HOST), PathElement.pathElement(SERVER));
Assert.assertEquals(2, pathAddress.size());
Assert.assertEquals(HOST, pathAddress.getElement(0).getKey());
Assert.assertEquals(SERVER, pathAddress.getElement(1).getKey());
pathAddress = PathAddress.pathAddress(new ModelNode().add(HOST, "*").add(SERVER, "*"));
Assert.assertEquals(2, pathAddress.size());
Assert.assertEquals(HOST, pathAddress.getElement(0).getKey());
Assert.assertEquals(SERVER, pathAddress.getElement(1).getKey());
pathAddress = PathAddress.pathAddress(PathElement.pathElement(HOST), PathElement.pathElement(SERVER), PathElement.pathElement(HOST), PathElement.pathElement(SERVER));
Assert.assertEquals(4, pathAddress.size());
Assert.assertEquals(HOST, pathAddress.getElement(0).getKey());
Assert.assertEquals(SERVER, pathAddress.getElement(1).getKey());
Assert.assertEquals(HOST, pathAddress.getElement(2).getKey());
Assert.assertEquals(SERVER, pathAddress.getElement(3).getKey());
pathAddress = PathAddress.pathAddress(new ModelNode().add(HOST, "*").add(SERVER, "*").add(HOST, "*").add(SERVER, "*"));
Assert.assertEquals(4, pathAddress.size());
Assert.assertEquals(HOST, pathAddress.getElement(0).getKey());
Assert.assertEquals(SERVER, pathAddress.getElement(1).getKey());
Assert.assertEquals(HOST, pathAddress.getElement(2).getKey());
Assert.assertEquals(SERVER, pathAddress.getElement(3).getKey());
pathAddress = PathAddress.pathAddress(PathElement.pathElement(HOST), PathElement.pathElement(SERVER, "server"), PathElement.pathElement(HOST, "host2"), PathElement.pathElement(SERVER), PathElement.pathElement("X"));
Assert.assertEquals(5, pathAddress.size());
Assert.assertEquals(HOST, pathAddress.getElement(0).getKey());
Assert.assertEquals("*", pathAddress.getElement(0).getValue());
Assert.assertEquals(SERVER, pathAddress.getElement(1).getKey());
Assert.assertEquals("server", pathAddress.getElement(1).getValue());
Assert.assertEquals(HOST, pathAddress.getElement(2).getKey());
Assert.assertEquals("host2", pathAddress.getElement(2).getValue());
Assert.assertEquals(SERVER, pathAddress.getElement(3).getKey());
Assert.assertEquals("*", pathAddress.getElement(3).getValue());
Assert.assertEquals("X", pathAddress.getElement(4).getKey());
Assert.assertEquals("*", pathAddress.getElement(4).getValue());
pathAddress = PathAddress.pathAddress(new ModelNode().add(HOST, "host").add(SERVER, "server").add(SERVER, "server2").add(HOST, "host2").add("X", "*").add("Y", "y"));
Assert.assertEquals(6, pathAddress.size());
Assert.assertEquals(HOST, pathAddress.getElement(0).getKey());
Assert.assertEquals("host", pathAddress.getElement(0).getValue());
Assert.assertEquals(SERVER, pathAddress.getElement(1).getKey());
Assert.assertEquals("server", pathAddress.getElement(1).getValue());
Assert.assertEquals(SERVER, pathAddress.getElement(2).getKey());
Assert.assertEquals("server2", pathAddress.getElement(2).getValue());
Assert.assertEquals(HOST, pathAddress.getElement(3).getKey());
Assert.assertEquals("host2", pathAddress.getElement(3).getValue());
Assert.assertEquals("X", pathAddress.getElement(4).getKey());
Assert.assertEquals("*", pathAddress.getElement(4).getValue());
Assert.assertEquals("Y", pathAddress.getElement(5).getKey());
Assert.assertEquals("y", pathAddress.getElement(5).getValue());
pathAddress = PathAddress.pathAddress(PathElement.pathElement("one"));
Assert.assertEquals(1, pathAddress.size());
Assert.assertEquals("one", pathAddress.getElement(0).getKey());
Assert.assertEquals("*", pathAddress.getElement(0).getValue());
pathAddress = PathAddress.pathAddress(new ModelNode().add("one", "1").add("two", "2").add("three", "3"));
Assert.assertEquals(3, pathAddress.size());
Assert.assertEquals("one", pathAddress.getElement(0).getKey());
Assert.assertEquals("1", pathAddress.getElement(0).getValue());
Assert.assertEquals("two", pathAddress.getElement(1).getKey());
Assert.assertEquals("2", pathAddress.getElement(1).getValue());
Assert.assertEquals("three", pathAddress.getElement(2).getKey());
Assert.assertEquals("3", pathAddress.getElement(2).getValue());
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateFailsElement() {
PathAddress.pathAddress(PathElement.pathElement("one", "1"), PathElement.pathElement("one", "2"));
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateFailsModelNode() {
PathAddress.pathAddress(new ModelNode().add("one", "1").add("one", "2"));
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateHostOnlyFailsElement() {
PathAddress.pathAddress(PathElement.pathElement(HOST, "1"), PathElement.pathElement(HOST, "2"));
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateHostOnlyFailsModelNode() {
PathAddress.pathAddress(new ModelNode().add(HOST, "1").add(HOST, "2"));
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateServerOnlyFailsElement() {
PathAddress.pathAddress(PathElement.pathElement(SERVER, "1"), PathElement.pathElement(SERVER, "2"));
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateServerOnlyFailsModelNode() {
PathAddress.pathAddress(new ModelNode().add(SERVER, "1").add(SERVER, "2"));
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateWrongOrderServerFailsElement() {
PathAddress.pathAddress(PathElement.pathElement(SERVER, "1"), PathElement.pathElement(HOST, "2"), PathElement.pathElement(SERVER));
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateWrongOrderServerFailsModelNode() {
PathAddress.pathAddress(new ModelNode().add(SERVER, "1").add(HOST, "2").add(SERVER, "*"));
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateWrongOrderHostFailsElement() {
PathAddress.pathAddress(PathElement.pathElement(SERVER, "1"), PathElement.pathElement(HOST, "2"), PathElement.pathElement(HOST));
}
@Test(expected=OperationFailedRuntimeException.class)
public void testDuplicateWrongOrderHostFailsModelNode() {
PathAddress.pathAddress(new ModelNode().add(SERVER, "1").add(HOST, "2").add(HOST, "*"));
}
@Test
public void testParseCLIStyleAddress() {
assertThat(PathAddress.parseCLIStyleAddress(""), is(PathAddress.EMPTY_ADDRESS));
PathAddress expectedResult = PathAddress.pathAddress(PathElement.pathElement("subsystem", "io"), PathElement.pathElement("worker", "new-worker1"));
assertThat(PathAddress.parseCLIStyleAddress("/subsystem=io/worker=new-worker1"), is(expectedResult));
expectedResult = PathAddress.pathAddress(PathElement.pathElement("subsystem", "io"), PathElement.pathElement("workers"), PathElement.pathElement("worker", "new-worker1"));
assertThat(PathAddress.parseCLIStyleAddress("/subsystem=io/workers=*/worker=new-worker1"), is(expectedResult));
}
@Test
public void testParseCLIStyleWrongAddress() {
String wrongAddress = "/subsystem=io/workers/worker=new-worker1";
try {
PathAddress.parseCLIStyleAddress(wrongAddress);
fail();
} catch (IllegalArgumentException ex) {
assertThat(ex.getMessage(), containsString("WFLYCTL0387"));
assertThat(ex.getMessage(), containsString(wrongAddress));
}
}
}