summaryrefslogtreecommitdiff
path: root/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java')
-rw-r--r--java/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java206
1 files changed, 206 insertions, 0 deletions
diff --git a/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java b/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java
new file mode 100644
index 0000000000..1a7e2cdc0d
--- /dev/null
+++ b/java/broker-core/src/test/java/org/apache/qpid/server/virtualhostalias/VirtualHostAliasTest.java
@@ -0,0 +1,206 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.qpid.server.virtualhostalias;
+
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObjectFactory;
+import org.apache.qpid.server.model.PatternMatchingAlias;
+import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostAlias;
+import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.model.port.AmqpPort;
+import org.apache.qpid.server.util.BrokerTestHelper;
+import org.apache.qpid.server.virtualhost.VirtualHostImpl;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class VirtualHostAliasTest extends QpidTestCase
+{
+ private Broker<?> _broker;
+ private Map<String, VirtualHost<?,?,?>> _vhosts;
+ private AmqpPort _port;
+
+ @Override
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ _broker = BrokerTestHelper.createBrokerMock();
+
+ AuthenticationProvider dummyAuthProvider = mock(AuthenticationProvider.class);
+ when(dummyAuthProvider.getName()).thenReturn("dummy");
+ when(dummyAuthProvider.getId()).thenReturn(UUID.randomUUID());
+ when(_broker.getChildren(eq(AuthenticationProvider.class))).thenReturn(Collections.singleton(dummyAuthProvider));
+ _vhosts = new HashMap<>();
+ for(String name : new String[] { "red", "blue", "purple", "black" })
+ {
+ _vhosts.put(name, BrokerTestHelper.createVirtualHost(name, _broker));
+ }
+ ConfiguredObjectFactory objectFactory = _broker.getObjectFactory();
+ when(_broker.getDefaultVirtualHost()).thenReturn("black");
+
+ final Map<String, Object> attributes = new HashMap<>();
+ attributes.put(Port.NAME, getTestName());
+ attributes.put(Port.PORT, findFreePort());
+ attributes.put(Port.AUTHENTICATION_PROVIDER, "dummy");
+ attributes.put(Port.TYPE, "AMQP");
+ _port = (AmqpPort) objectFactory.create(Port.class, attributes, _broker );
+
+ }
+
+ public void testDefaultAliases()
+ {
+ VirtualHostImpl vhost = _port.getVirtualHost("red");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("red"), vhost);
+
+ vhost = _port.getVirtualHost("blue");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("blue"), vhost);
+
+ vhost = _port.getVirtualHost("orange!");
+
+ assertNull(vhost);
+
+ // test the default vhost resolution
+ vhost = _port.getVirtualHost("");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("black"), vhost);
+
+
+ // 127.0.0.1 should always resolve and thus return the default vhost
+ vhost = _port.getVirtualHost("127.0.0.1");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("black"), vhost);
+
+ }
+
+ public void testPatternMatching()
+ {
+ final Map<String, Object> attributes = new HashMap<>();
+ attributes.put(VirtualHostAlias.NAME, "matcher");
+ attributes.put(VirtualHostAlias.TYPE, PatternMatchingAlias.TYPE_NAME);
+ attributes.put(PatternMatchingAlias.PATTERN, "orange|pink.*");
+ attributes.put(PatternMatchingAlias.VIRTUAL_HOST_NODE, _vhosts.get("purple").getParent(VirtualHostNode.class));
+ _port.createVirtualHostAlias(attributes);
+
+ VirtualHostImpl vhost = _port.getVirtualHost("orange");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("purple"), vhost);
+
+ vhost = _port.getVirtualHost("pink");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("purple"), vhost);
+
+
+ vhost = _port.getVirtualHost("pinker");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("purple"), vhost);
+
+
+
+ vhost = _port.getVirtualHost("o.*");
+
+ assertNull(vhost);
+
+ }
+
+ public void testPriority()
+ {
+
+ VirtualHostImpl vhost = _port.getVirtualHost("blue");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("blue"), vhost);
+
+ vhost = _port.getVirtualHost("black");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("black"), vhost);
+
+
+
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put(VirtualHostAlias.NAME, "matcher10");
+ attributes.put(VirtualHostAlias.TYPE, PatternMatchingAlias.TYPE_NAME);
+ attributes.put(VirtualHostAlias.PRIORITY, 10);
+ attributes.put(PatternMatchingAlias.PATTERN, "bl.*");
+ attributes.put(PatternMatchingAlias.VIRTUAL_HOST_NODE, _vhosts.get("purple").getParent(VirtualHostNode.class));
+ _port.createVirtualHostAlias(attributes);
+
+ vhost = _port.getVirtualHost("blue");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("purple"), vhost);
+
+ vhost = _port.getVirtualHost("black");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("purple"), vhost);
+
+
+ attributes = new HashMap<>();
+ attributes.put(VirtualHostAlias.NAME, "matcher5");
+ attributes.put(VirtualHostAlias.TYPE, PatternMatchingAlias.TYPE_NAME);
+ attributes.put(VirtualHostAlias.PRIORITY, 5);
+ attributes.put(PatternMatchingAlias.PATTERN, ".*u.*");
+ attributes.put(PatternMatchingAlias.VIRTUAL_HOST_NODE, _vhosts.get("red").getParent(VirtualHostNode.class));
+ _port.createVirtualHostAlias(attributes);
+
+
+
+ vhost = _port.getVirtualHost("blue");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("red"), vhost);
+
+ vhost = _port.getVirtualHost("black");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("purple"), vhost);
+
+
+
+ vhost = _port.getVirtualHost("purple");
+
+ assertNotNull(vhost);
+ assertEquals(_vhosts.get("red"), vhost);
+
+
+
+ }
+}