summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins/access-control/src/test
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2015-04-15 09:47:28 +0000
committerAlex Rudyy <orudyy@apache.org>2015-04-15 09:47:28 +0000
commit0a0baee45ebcff44635907d457c4ff6810b09c87 (patch)
tree8bfb0f9eddbc23cff88af69be80ab3ce7d47011c /qpid/java/broker-plugins/access-control/src/test
parent54aa3d7070da16ce55c28ccad3f7d0871479e461 (diff)
downloadqpid-python-0a0baee45ebcff44635907d457c4ff6810b09c87.tar.gz
QPID-6481: Move java source tree to top level
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1673693 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins/access-control/src/test')
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/AclActionTest.java66
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/AclRulePredicatesTest.java87
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/ActionTest.java95
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/ClientActionTest.java79
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/PlainConfigurationTest.java446
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/RuleTest.java53
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/firewall/HostnameFirewallRuleTest.java99
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/firewall/NetworkFirewallRuleTest.java115
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java118
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java81
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControlTest.java471
-rw-r--r--qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java468
12 files changed, 0 insertions, 2178 deletions
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/AclActionTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/AclActionTest.java
deleted file mode 100644
index 14620cff70..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/AclActionTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.security.access.config;
-
-import static org.mockito.Mockito.*;
-
-import org.apache.qpid.server.security.access.ObjectProperties;
-import org.apache.qpid.server.security.access.ObjectType;
-import org.apache.qpid.server.security.access.Operation;
-import org.apache.qpid.server.security.access.firewall.FirewallRule;
-
-import junit.framework.TestCase;
-
-public class AclActionTest extends TestCase
-{
- public void testEqualsAndHashCode()
- {
- AclRulePredicates predicates = createAclRulePredicates();
- ObjectType objectType = ObjectType.EXCHANGE;
- Operation operation = Operation.ACCESS;
-
- AclAction aclAction = new AclAction(operation, objectType, predicates);
- AclAction equalAclAction = new AclAction(operation, objectType, predicates);
-
- assertTrue(aclAction.equals(aclAction));
- assertTrue(aclAction.equals(equalAclAction));
- assertTrue(equalAclAction.equals(aclAction));
-
- assertTrue(aclAction.hashCode() == equalAclAction.hashCode());
-
- assertFalse("Different operation should cause aclActions to be unequal",
- aclAction.equals(new AclAction(Operation.BIND, objectType, predicates)));
-
- assertFalse("Different operation type should cause aclActions to be unequal",
- aclAction.equals(new AclAction(operation, ObjectType.GROUP, predicates)));
-
- assertFalse("Different predicates should cause aclActions to be unequal",
- aclAction.equals(new AclAction(operation, objectType, createAclRulePredicates())));
-
- }
-
- private AclRulePredicates createAclRulePredicates()
- {
- AclRulePredicates predicates = mock(AclRulePredicates.class);
- when(predicates.getFirewallRule()).thenReturn(mock(FirewallRule.class));
- when(predicates.getObjectProperties()).thenReturn(mock(ObjectProperties.class));
- return predicates;
- }
-
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/AclRulePredicatesTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/AclRulePredicatesTest.java
deleted file mode 100644
index 93b765d0fb..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/AclRulePredicatesTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.security.access.config;
-
-import static org.apache.qpid.server.security.access.ObjectProperties.Property.*;
-
-import org.apache.qpid.server.security.access.firewall.FirewallRule;
-import org.apache.qpid.server.security.access.firewall.FirewallRuleFactory;
-
-import static org.mockito.Mockito.*;
-
-import junit.framework.TestCase;
-
-public class AclRulePredicatesTest extends TestCase
-{
- private AclRulePredicates _aclRulePredicates = new AclRulePredicates();
- private FirewallRuleFactory _firewallRuleFactory = mock(FirewallRuleFactory.class);
-
- @Override
- protected void setUp() throws Exception
- {
- _aclRulePredicates.setFirewallRuleFactory(_firewallRuleFactory);
-
- when(_firewallRuleFactory.createForHostname((String[]) any())).thenReturn(mock(FirewallRule.class));
- when(_firewallRuleFactory.createForNetwork((String[]) any())).thenReturn(mock(FirewallRule.class));
- }
-
- public void testParse()
- {
- String name = "name";
- String className = "class";
-
- _aclRulePredicates.parse(NAME.name(), name);
- _aclRulePredicates.parse(CLASS.name(), className);
-
- assertEquals(name, _aclRulePredicates.getObjectProperties().get(NAME));
- assertEquals(className, _aclRulePredicates.getObjectProperties().get(CLASS));
- }
-
- public void testParseHostnameFirewallRule()
- {
- String hostname = "hostname1,hostname2";
- _aclRulePredicates.parse(FROM_HOSTNAME.name(), hostname);
-
- verify(_firewallRuleFactory).createForHostname(new String[] {"hostname1", "hostname2"});
- }
-
- public void testParseNetworkFirewallRule()
- {
- _aclRulePredicates.setFirewallRuleFactory(_firewallRuleFactory);
-
- String networks = "network1,network2";
- _aclRulePredicates.parse(FROM_NETWORK.name(), networks);
-
- verify(_firewallRuleFactory).createForNetwork(new String[] {"network1", "network2"});
- }
-
- public void testParseThrowsExceptionIfBothHostnameAndNetworkSpecified()
- {
- _aclRulePredicates.parse(FROM_NETWORK.name(), "network1,network2");
- try
- {
- _aclRulePredicates.parse(FROM_HOSTNAME.name(), "hostname1,hostname2");
- fail("Exception not thrown");
- }
- catch(IllegalStateException e)
- {
- // pass
- }
- }
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/ActionTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/ActionTest.java
deleted file mode 100644
index 00e06106bf..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/ActionTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.security.access.config;
-
-import static org.mockito.Mockito.*;
-
-import org.apache.qpid.server.security.access.ObjectProperties;
-import org.apache.qpid.server.security.access.ObjectType;
-import org.apache.qpid.server.security.access.Operation;
-
-import junit.framework.TestCase;
-
-public class ActionTest extends TestCase
-{
- private ObjectProperties _properties1 = mock(ObjectProperties.class);
- private ObjectProperties _properties2 = mock(ObjectProperties.class);
-
- public void testMatchesReturnsTrueForMatchingActions()
- {
- when(_properties1.matches(_properties2)).thenReturn(true);
-
- assertMatches(
- new Action(Operation.CONSUME, ObjectType.QUEUE, _properties1),
- new Action(Operation.CONSUME, ObjectType.QUEUE, _properties2));
- }
-
- public void testMatchesReturnsFalseWhenOperationsDiffer()
- {
- assertDoesntMatch(
- new Action(Operation.CONSUME, ObjectType.QUEUE, _properties1),
- new Action(Operation.CREATE, ObjectType.QUEUE, _properties1));
- }
-
- public void testMatchesReturnsFalseWhenOperationTypesDiffer()
- {
- assertDoesntMatch(
- new Action(Operation.CREATE, ObjectType.QUEUE, _properties1),
- new Action(Operation.CREATE, ObjectType.EXCHANGE, _properties1));
- }
-
- public void testMatchesReturnsFalseWhenOperationPropertiesDiffer()
- {
- assertDoesntMatch(
- new Action(Operation.CREATE, ObjectType.QUEUE, _properties1),
- new Action(Operation.CREATE, ObjectType.QUEUE, _properties2));
- }
-
- public void testMatchesReturnsFalseWhenMyOperationPropertiesIsNull()
- {
- assertDoesntMatch(
- new Action(Operation.CREATE, ObjectType.QUEUE, (ObjectProperties)null),
- new Action(Operation.CREATE, ObjectType.QUEUE, _properties1));
- }
-
- public void testMatchesReturnsFalseWhenOtherOperationPropertiesIsNull()
- {
- assertDoesntMatch(
- new Action(Operation.CREATE, ObjectType.QUEUE, _properties1),
- new Action(Operation.CREATE, ObjectType.QUEUE, (ObjectProperties)null));
- }
-
- public void testMatchesReturnsTrueWhenBothOperationPropertiesAreNull()
- {
- assertMatches(
- new Action(Operation.CREATE, ObjectType.QUEUE, (ObjectProperties)null),
- new Action(Operation.CREATE, ObjectType.QUEUE, (ObjectProperties)null));
- }
-
- private void assertMatches(Action action1, Action action2)
- {
- assertTrue(action1 + " should match " + action2, action1.matches(action2));
- }
-
- private void assertDoesntMatch(Action action1, Action action2)
- {
- assertFalse(action1 + " should not match " + action2, action1.matches(action2));
- }
-
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/ClientActionTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/ClientActionTest.java
deleted file mode 100644
index ae5d3fda74..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/ClientActionTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.security.access.config;
-
-import static org.mockito.Mockito.*;
-
-import java.net.InetAddress;
-
-import org.apache.qpid.server.security.access.firewall.FirewallRule;
-
-import junit.framework.TestCase;
-
-public class ClientActionTest extends TestCase
-{
- private Action _action = mock(Action.class);
- private AclAction _ruleAction = mock(AclAction.class);
- private InetAddress _addressOfClient = mock(InetAddress.class);
-
- private ClientAction _clientAction = new ClientAction(_action);
-
- public void testMatches_returnsTrueWhenActionsMatchAndNoFirewallRule()
- {
- when(_action.matches(any(Action.class))).thenReturn(true);
- when(_ruleAction.getFirewallRule()).thenReturn(null);
-
- assertTrue(_clientAction.matches(_ruleAction, _addressOfClient));
- }
-
- public void testMatches_returnsFalseWhenActionsDontMatch()
- {
- FirewallRule firewallRule = mock(FirewallRule.class);
- when(firewallRule.matches(_addressOfClient)).thenReturn(true);
-
- when(_action.matches(any(Action.class))).thenReturn(false);
- when(_ruleAction.getFirewallRule()).thenReturn(firewallRule);
-
- assertFalse(_clientAction.matches(_ruleAction, _addressOfClient));
- }
-
- public void testMatches_returnsTrueWhenActionsAndFirewallRuleMatch()
- {
- FirewallRule firewallRule = mock(FirewallRule.class);
- when(firewallRule.matches(_addressOfClient)).thenReturn(true);
-
- when(_action.matches(any(Action.class))).thenReturn(true);
- when(_ruleAction.getFirewallRule()).thenReturn(firewallRule);
-
- assertTrue(_clientAction.matches(_ruleAction, _addressOfClient));
- }
-
- public void testMatches_ignoresFirewallRuleIfClientAddressIsNull()
- {
- FirewallRule firewallRule = mock(FirewallRule.class);
-
- when(_action.matches(any(Action.class))).thenReturn(true);
- when(_ruleAction.getFirewallRule()).thenReturn(firewallRule);
-
- assertTrue(_clientAction.matches(_ruleAction, null));
-
- verifyZeroInteractions(firewallRule);
- }
-
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/PlainConfigurationTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/PlainConfigurationTest.java
deleted file mode 100644
index 76435cbae4..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/PlainConfigurationTest.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * 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.security.access.config;
-
-import static org.mockito.Mockito.mock;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.PrintWriter;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.apache.qpid.server.configuration.IllegalConfigurationException;
-import org.apache.qpid.server.logging.EventLoggerProvider;
-import org.apache.qpid.server.security.access.ObjectProperties;
-import org.apache.qpid.server.security.access.ObjectProperties.Property;
-import org.apache.qpid.server.security.access.ObjectType;
-import org.apache.qpid.server.security.access.Operation;
-
-public class PlainConfigurationTest extends TestCase
-{
- private PlainConfiguration writeACLConfig(String...aclData) throws Exception
- {
- File acl = File.createTempFile(getClass().getName() + getName(), "acl");
- acl.deleteOnExit();
-
- // Write ACL file
- PrintWriter aclWriter = new PrintWriter(new FileWriter(acl));
- for (String line : aclData)
- {
- aclWriter.println(line);
- }
- aclWriter.close();
-
- // Load ruleset
- PlainConfiguration configFile = new PlainConfiguration(acl.getName(), mock(EventLoggerProvider.class));
- configFile.load(new FileReader(acl));
- return configFile;
- }
-
- public void testACLFileSyntaxContinuation() throws Exception
- {
- try
- {
- writeACLConfig("ACL ALLOW ALL \\ ALL");
- fail("fail");
- }
- catch (IllegalConfigurationException ce)
- {
- assertEquals(String.format(PlainConfiguration.PREMATURE_CONTINUATION_MSG, 1), ce.getMessage());
- }
- }
-
- public void testACLFileSyntaxTokens() throws Exception
- {
- try
- {
- writeACLConfig("ACL unparsed ALL ALL");
- fail("fail");
- }
- catch (IllegalConfigurationException ce)
- {
- assertEquals(String.format(PlainConfiguration.PARSE_TOKEN_FAILED_MSG, 1), ce.getMessage());
- assertTrue(ce.getCause() instanceof IllegalArgumentException);
- assertEquals("Not a valid permission: unparsed", ce.getCause().getMessage());
- }
- }
-
- public void testACLFileSyntaxNotEnoughACL() throws Exception
- {
- try
- {
- writeACLConfig("ACL ALLOW");
- fail("fail");
- }
- catch (IllegalConfigurationException ce)
- {
- assertEquals(String.format(PlainConfiguration.NOT_ENOUGH_ACL_MSG, 1), ce.getMessage());
- }
- }
-
- public void testACLFileSyntaxNotEnoughConfig() throws Exception
- {
- try
- {
- writeACLConfig("CONFIG");
- fail("fail");
- }
- catch (IllegalConfigurationException ce)
- {
- assertEquals(String.format(PlainConfiguration.NOT_ENOUGH_TOKENS_MSG, 1), ce.getMessage());
- }
- }
-
- public void testACLFileSyntaxNotEnough() throws Exception
- {
- try
- {
- writeACLConfig("INVALID");
- fail("fail");
- }
- catch (IllegalConfigurationException ce)
- {
- assertEquals(String.format(PlainConfiguration.NOT_ENOUGH_TOKENS_MSG, 1), ce.getMessage());
- }
- }
-
- public void testACLFileSyntaxPropertyKeyOnly() throws Exception
- {
- try
- {
- writeACLConfig("ACL ALLOW adk CREATE QUEUE name");
- fail("fail");
- }
- catch (IllegalConfigurationException ce)
- {
- assertEquals(String.format(PlainConfiguration.PROPERTY_KEY_ONLY_MSG, 1), ce.getMessage());
- }
- }
-
- public void testACLFileSyntaxPropertyNoEquals() throws Exception
- {
- try
- {
- writeACLConfig("ACL ALLOW adk CREATE QUEUE name test");
- fail("fail");
- }
- catch (IllegalConfigurationException ce)
- {
- assertEquals(String.format(PlainConfiguration.PROPERTY_NO_EQUALS_MSG, 1), ce.getMessage());
- }
- }
-
- public void testACLFileSyntaxPropertyNoValue() throws Exception
- {
- try
- {
- writeACLConfig("ACL ALLOW adk CREATE QUEUE name =");
- fail("fail");
- }
- catch (IllegalConfigurationException ce)
- {
- assertEquals(String.format(PlainConfiguration.PROPERTY_NO_VALUE_MSG, 1), ce.getMessage());
- }
- }
-
- /**
- * Tests interpretation of an acl rule with no object properties.
- *
- */
- public void testValidRule() throws Exception
- {
- final PlainConfiguration config = writeACLConfig("ACL DENY-LOG user1 ACCESS VIRTUALHOST");
- final RuleSet rs = config.getConfiguration();
- assertEquals(1, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(1, rules.size());
- final Rule rule = rules.get(0);
- assertEquals("Rule has unexpected identity", "user1", rule.getIdentity());
- assertEquals("Rule has unexpected operation", Operation.ACCESS, rule.getAction().getOperation());
- assertEquals("Rule has unexpected operation", ObjectType.VIRTUALHOST, rule.getAction().getObjectType());
- assertEquals("Rule has unexpected object properties", ObjectProperties.EMPTY, rule.getAction().getProperties());
- }
-
- /**
- * Tests interpretation of an acl rule with object properties quoted in single quotes.
- */
- public void testValidRuleWithSingleQuotedProperty() throws Exception
- {
- final PlainConfiguration config = writeACLConfig("ACL ALLOW all CREATE EXCHANGE name = \'value\'");
- final RuleSet rs = config.getConfiguration();
- assertEquals(1, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(1, rules.size());
- final Rule rule = rules.get(0);
- assertEquals("Rule has unexpected identity", "all", rule.getIdentity());
- assertEquals("Rule has unexpected operation", Operation.CREATE, rule.getAction().getOperation());
- assertEquals("Rule has unexpected operation", ObjectType.EXCHANGE, rule.getAction().getObjectType());
- final ObjectProperties expectedProperties = new ObjectProperties();
- expectedProperties.setName("value");
- assertEquals("Rule has unexpected object properties", expectedProperties, rule.getAction().getProperties());
- }
-
- /**
- * Tests interpretation of an acl rule with object properties quoted in double quotes.
- */
- public void testValidRuleWithDoubleQuotedProperty() throws Exception
- {
- final PlainConfiguration config = writeACLConfig("ACL ALLOW all CREATE EXCHANGE name = \"value\"");
- final RuleSet rs = config.getConfiguration();
- assertEquals(1, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(1, rules.size());
- final Rule rule = rules.get(0);
- assertEquals("Rule has unexpected identity", "all", rule.getIdentity());
- assertEquals("Rule has unexpected operation", Operation.CREATE, rule.getAction().getOperation());
- assertEquals("Rule has unexpected operation", ObjectType.EXCHANGE, rule.getAction().getObjectType());
- final ObjectProperties expectedProperties = new ObjectProperties();
- expectedProperties.setName("value");
- assertEquals("Rule has unexpected object properties", expectedProperties, rule.getAction().getProperties());
- }
-
- /**
- * Tests interpretation of an acl rule with many object properties.
- */
- public void testValidRuleWithManyProperties() throws Exception
- {
- final PlainConfiguration config = writeACLConfig("ACL ALLOW admin DELETE QUEUE name=name1 owner = owner1");
- final RuleSet rs = config.getConfiguration();
- assertEquals(1, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(1, rules.size());
- final Rule rule = rules.get(0);
- assertEquals("Rule has unexpected identity", "admin", rule.getIdentity());
- assertEquals("Rule has unexpected operation", Operation.DELETE, rule.getAction().getOperation());
- assertEquals("Rule has unexpected operation", ObjectType.QUEUE, rule.getAction().getObjectType());
- final ObjectProperties expectedProperties = new ObjectProperties();
- expectedProperties.setName("name1");
- expectedProperties.put(Property.OWNER, "owner1");
- assertEquals("Rule has unexpected operation", expectedProperties, rule.getAction().getProperties());
- }
-
- /**
- * Tests interpretation of an acl rule with object properties containing wildcards. Values containing
- * hashes must be quoted otherwise they are interpreted as comments.
- */
- public void testValidRuleWithWildcardProperties() throws Exception
- {
- final PlainConfiguration config = writeACLConfig("ACL ALLOW all CREATE EXCHANGE routingKey = \'news.#\'",
- "ACL ALLOW all CREATE EXCHANGE routingKey = \'news.co.#\'",
- "ACL ALLOW all CREATE EXCHANGE routingKey = *.co.medellin");
- final RuleSet rs = config.getConfiguration();
- assertEquals(3, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(3, rules.size());
- final Rule rule1 = rules.get(0);
- assertEquals("Rule has unexpected identity", "all", rule1.getIdentity());
- assertEquals("Rule has unexpected operation", Operation.CREATE, rule1.getAction().getOperation());
- assertEquals("Rule has unexpected operation", ObjectType.EXCHANGE, rule1.getAction().getObjectType());
- final ObjectProperties expectedProperties1 = new ObjectProperties();
- expectedProperties1.put(Property.ROUTING_KEY,"news.#");
- assertEquals("Rule has unexpected object properties", expectedProperties1, rule1.getAction().getProperties());
-
- final Rule rule2 = rules.get(10);
- final ObjectProperties expectedProperties2 = new ObjectProperties();
- expectedProperties2.put(Property.ROUTING_KEY,"news.co.#");
- assertEquals("Rule has unexpected object properties", expectedProperties2, rule2.getAction().getProperties());
-
- final Rule rule3 = rules.get(20);
- final ObjectProperties expectedProperties3 = new ObjectProperties();
- expectedProperties3.put(Property.ROUTING_KEY,"*.co.medellin");
- assertEquals("Rule has unexpected object properties", expectedProperties3, rule3.getAction().getProperties());
- }
-
- /**
- * Tests that rules are case insignificant.
- */
- public void testMixedCaseRuleInterpretation() throws Exception
- {
- final PlainConfiguration config = writeACLConfig("AcL deny-LOG User1 BiND Exchange Name=AmQ.dIrect");
- final RuleSet rs = config.getConfiguration();
- assertEquals(1, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(1, rules.size());
- final Rule rule = rules.get(0);
- assertEquals("Rule has unexpected identity", "User1", rule.getIdentity());
- assertEquals("Rule has unexpected operation", Operation.BIND, rule.getAction().getOperation());
- assertEquals("Rule has unexpected operation", ObjectType.EXCHANGE, rule.getAction().getObjectType());
- final ObjectProperties expectedProperties = new ObjectProperties("AmQ.dIrect");
- assertEquals("Rule has unexpected object properties", expectedProperties, rule.getAction().getProperties());
- }
-
- /**
- * Tests whitespace is supported. Note that currently the Java implementation permits comments to
- * be introduced anywhere in the ACL, whereas the C++ supports only whitespace at the beginning of
- * of line.
- */
- public void testCommentsSupported() throws Exception
- {
- final PlainConfiguration config = writeACLConfig("#Comment",
- "ACL DENY-LOG user1 ACCESS VIRTUALHOST # another comment",
- " # final comment with leading whitespace");
- final RuleSet rs = config.getConfiguration();
- assertEquals(1, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(1, rules.size());
- final Rule rule = rules.get(0);
- assertEquals("Rule has unexpected identity", "user1", rule.getIdentity());
- assertEquals("Rule has unexpected operation", Operation.ACCESS, rule.getAction().getOperation());
- assertEquals("Rule has unexpected operation", ObjectType.VIRTUALHOST, rule.getAction().getObjectType());
- assertEquals("Rule has unexpected object properties", ObjectProperties.EMPTY, rule.getAction().getProperties());
- }
-
- /**
- * Tests interpretation of an acl rule using mixtures of tabs/spaces as token separators.
- *
- */
- public void testWhitespace() throws Exception
- {
- final PlainConfiguration config = writeACLConfig("ACL\tDENY-LOG\t\t user1\t \tACCESS VIRTUALHOST");
- final RuleSet rs = config.getConfiguration();
- assertEquals(1, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(1, rules.size());
- final Rule rule = rules.get(0);
- assertEquals("Rule has unexpected identity", "user1", rule.getIdentity());
- assertEquals("Rule has unexpected operation", Operation.ACCESS, rule.getAction().getOperation());
- assertEquals("Rule has unexpected operation", ObjectType.VIRTUALHOST, rule.getAction().getObjectType());
- assertEquals("Rule has unexpected object properties", ObjectProperties.EMPTY, rule.getAction().getProperties());
- }
-
- /**
- * Tests interpretation of an acl utilising line continuation.
- */
- public void testLineContinuation() throws Exception
- {
- final PlainConfiguration config = writeACLConfig("ACL DENY-LOG user1 \\",
- "ACCESS VIRTUALHOST");
- final RuleSet rs = config.getConfiguration();
- assertEquals(1, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(1, rules.size());
- final Rule rule = rules.get(0);
- assertEquals("Rule has unexpected identity", "user1", rule.getIdentity());
- assertEquals("Rule has unexpected operation", Operation.ACCESS, rule.getAction().getOperation());
- assertEquals("Rule has unexpected operation", ObjectType.VIRTUALHOST, rule.getAction().getObjectType());
- assertEquals("Rule has unexpected object properties", ObjectProperties.EMPTY, rule.getAction().getProperties());
- }
-
- public void testUserRuleParsing() throws Exception
- {
- validateRule(writeACLConfig("ACL ALLOW user1 CREATE USER"),
- "user1", Operation.CREATE, ObjectType.USER, ObjectProperties.EMPTY);
- validateRule(writeACLConfig("ACL ALLOW user1 CREATE USER name=\"otherUser\""),
- "user1", Operation.CREATE, ObjectType.USER, new ObjectProperties("otherUser"));
-
- validateRule(writeACLConfig("ACL ALLOW user1 DELETE USER"),
- "user1", Operation.DELETE, ObjectType.USER, ObjectProperties.EMPTY);
- validateRule(writeACLConfig("ACL ALLOW user1 DELETE USER name=\"otherUser\""),
- "user1", Operation.DELETE, ObjectType.USER, new ObjectProperties("otherUser"));
-
- validateRule(writeACLConfig("ACL ALLOW user1 UPDATE USER"),
- "user1", Operation.UPDATE, ObjectType.USER, ObjectProperties.EMPTY);
- validateRule(writeACLConfig("ACL ALLOW user1 UPDATE USER name=\"otherUser\""),
- "user1", Operation.UPDATE, ObjectType.USER, new ObjectProperties("otherUser"));
-
- validateRule(writeACLConfig("ACL ALLOW user1 ALL USER"),
- "user1", Operation.ALL, ObjectType.USER, ObjectProperties.EMPTY);
- validateRule(writeACLConfig("ACL ALLOW user1 ALL USER name=\"otherUser\""),
- "user1", Operation.ALL, ObjectType.USER, new ObjectProperties("otherUser"));
- }
-
- public void testGroupRuleParsing() throws Exception
- {
- validateRule(writeACLConfig("ACL ALLOW user1 CREATE GROUP"),
- "user1", Operation.CREATE, ObjectType.GROUP, ObjectProperties.EMPTY);
- validateRule(writeACLConfig("ACL ALLOW user1 CREATE GROUP name=\"groupName\""),
- "user1", Operation.CREATE, ObjectType.GROUP, new ObjectProperties("groupName"));
-
- validateRule(writeACLConfig("ACL ALLOW user1 DELETE GROUP"),
- "user1", Operation.DELETE, ObjectType.GROUP, ObjectProperties.EMPTY);
- validateRule(writeACLConfig("ACL ALLOW user1 DELETE GROUP name=\"groupName\""),
- "user1", Operation.DELETE, ObjectType.GROUP, new ObjectProperties("groupName"));
-
- validateRule(writeACLConfig("ACL ALLOW user1 UPDATE GROUP"),
- "user1", Operation.UPDATE, ObjectType.GROUP, ObjectProperties.EMPTY);
- validateRule(writeACLConfig("ACL ALLOW user1 UPDATE GROUP name=\"groupName\""),
- "user1", Operation.UPDATE, ObjectType.GROUP, new ObjectProperties("groupName"));
-
- validateRule(writeACLConfig("ACL ALLOW user1 ALL GROUP"),
- "user1", Operation.ALL, ObjectType.GROUP, ObjectProperties.EMPTY);
- validateRule(writeACLConfig("ACL ALLOW user1 ALL GROUP name=\"groupName\""),
- "user1", Operation.ALL, ObjectType.GROUP, new ObjectProperties("groupName"));
- }
-
- /** explicitly test for exception indicating that this functionality has been moved to Group Providers */
- public void testGroupDefinitionThrowsException() throws Exception
- {
- try
- {
- writeACLConfig("GROUP group1 bob alice");
- fail("Expected exception not thrown");
- }
- catch(IllegalConfigurationException e)
- {
- assertTrue(e.getMessage().contains("GROUP keyword not supported"));
- }
- }
-
- public void testManagementRuleParsing() throws Exception
- {
- validateRule(writeACLConfig("ACL ALLOW user1 ALL MANAGEMENT"),
- "user1", Operation.ALL, ObjectType.MANAGEMENT, ObjectProperties.EMPTY);
-
- validateRule(writeACLConfig("ACL ALLOW user1 ACCESS MANAGEMENT"),
- "user1", Operation.ACCESS, ObjectType.MANAGEMENT, ObjectProperties.EMPTY);
- }
-
- public void testBrokerRuleParsing() throws Exception
- {
- validateRule(writeACLConfig("ACL ALLOW user1 CONFIGURE BROKER"), "user1", Operation.CONFIGURE, ObjectType.BROKER,
- ObjectProperties.EMPTY);
- validateRule(writeACLConfig("ACL ALLOW user1 ALL BROKER"), "user1", Operation.ALL, ObjectType.BROKER, ObjectProperties.EMPTY);
- }
-
- private void validateRule(final PlainConfiguration config, String username, Operation operation, ObjectType objectType, ObjectProperties objectProperties)
- {
- final RuleSet rs = config.getConfiguration();
- assertEquals(1, rs.getRuleCount());
-
- final Map<Integer, Rule> rules = rs.getAllRules();
- assertEquals(1, rules.size());
- final Rule rule = rules.get(0);
- assertEquals("Rule has unexpected identity", username, rule.getIdentity());
- assertEquals("Rule has unexpected operation", operation, rule.getAction().getOperation());
- assertEquals("Rule has unexpected operation", objectType, rule.getAction().getObjectType());
- assertEquals("Rule has unexpected object properties", objectProperties, rule.getAction().getProperties());
- }
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/RuleTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/RuleTest.java
deleted file mode 100644
index 2ae7759679..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/config/RuleTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.security.access.config;
-
-import static org.mockito.Mockito.*;
-
-import org.apache.qpid.server.security.access.Permission;
-
-import junit.framework.TestCase;
-
-public class RuleTest extends TestCase
-{
- public void testEqualsAndHashCode()
- {
- AclAction aclAction = mock(AclAction.class);
- String identity = "identity";
- Permission allow = Permission.ALLOW;
-
- Rule rule = new Rule(identity, aclAction, allow);
- Rule equalRule = new Rule(identity, aclAction, allow);
-
- assertTrue(rule.equals(rule));
- assertTrue(rule.equals(equalRule));
- assertTrue(equalRule.equals(rule));
-
- assertTrue(rule.hashCode() == equalRule.hashCode());
-
- assertFalse("Different identity should cause rules to be unequal",
- rule.equals(new Rule("identity2", aclAction, allow)));
-
- assertFalse("Different action should cause rules to be unequal",
- rule.equals(new Rule(identity, mock(AclAction.class), allow)));
-
- assertFalse("Different permission should cause rules to be unequal",
- rule.equals(new Rule(identity, aclAction, Permission.DENY)));
- }
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/firewall/HostnameFirewallRuleTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/firewall/HostnameFirewallRuleTest.java
deleted file mode 100644
index d2beebfb0f..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/firewall/HostnameFirewallRuleTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * 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.security.access.firewall;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.net.InetAddress;
-
-import org.apache.qpid.server.security.access.firewall.HostnameFirewallRule;
-
-import junit.framework.TestCase;
-
-public class HostnameFirewallRuleTest extends TestCase
-{
- private InetAddress _addressNotInRule;
-
- private HostnameFirewallRule _HostnameFirewallRule;
-
- @Override
- protected void setUp() throws Exception
- {
- _addressNotInRule = InetAddress.getByName("127.0.0.1");
- }
-
- public void testSingleHostname() throws Exception
- {
- String hostnameInRule = "hostnameInRule";
- InetAddress addressWithMatchingHostname = mock(InetAddress.class);
- when(addressWithMatchingHostname.getCanonicalHostName()).thenReturn(hostnameInRule);
-
- _HostnameFirewallRule = new HostnameFirewallRule(hostnameInRule);
-
- assertFalse(_HostnameFirewallRule.matches(_addressNotInRule));
- assertTrue(_HostnameFirewallRule.matches(addressWithMatchingHostname));
- }
-
- public void testSingleHostnameWildcard() throws Exception
- {
- String hostnameInRule = ".*FOO.*";
- InetAddress addressWithMatchingHostname = mock(InetAddress.class);
- when(addressWithMatchingHostname.getCanonicalHostName()).thenReturn("xxFOOxx");
-
- _HostnameFirewallRule = new HostnameFirewallRule(hostnameInRule);
-
- assertFalse(_HostnameFirewallRule.matches(_addressNotInRule));
- assertTrue(_HostnameFirewallRule.matches(addressWithMatchingHostname));
- }
-
- public void testMultipleHostnames() throws Exception
- {
- String[] hostnamesInRule = new String[] {"hostnameInRule1", "hostnameInRule2"};
-
- _HostnameFirewallRule = new HostnameFirewallRule(hostnamesInRule);
-
- assertFalse(_HostnameFirewallRule.matches(_addressNotInRule));
- for (String hostnameInRule : hostnamesInRule)
- {
- InetAddress addressWithMatchingHostname = mock(InetAddress.class);
- when(addressWithMatchingHostname.getCanonicalHostName()).thenReturn(hostnameInRule);
-
- assertTrue(_HostnameFirewallRule.matches(addressWithMatchingHostname));
- }
- }
-
- public void testEqualsAndHashCode()
- {
- String hostname1 = "hostname1";
- String hostname2 = "hostname2";
-
- HostnameFirewallRule rule = new HostnameFirewallRule(hostname1, hostname2);
- HostnameFirewallRule equalRule = new HostnameFirewallRule(hostname1, hostname2);
-
- assertTrue(rule.equals(rule));
- assertTrue(rule.equals(equalRule));
- assertTrue(equalRule.equals(rule));
-
- assertTrue(rule.hashCode() == equalRule.hashCode());
-
- assertFalse("Different hostnames should cause rules to be unequal",
- rule.equals(new HostnameFirewallRule(hostname1, "different-hostname")));
- }
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/firewall/NetworkFirewallRuleTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/firewall/NetworkFirewallRuleTest.java
deleted file mode 100644
index e521039db2..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/firewall/NetworkFirewallRuleTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.security.access.firewall;
-
-import java.net.InetAddress;
-
-import org.apache.qpid.server.security.access.firewall.NetworkFirewallRule;
-
-import junit.framework.TestCase;
-
-public class NetworkFirewallRuleTest extends TestCase
-{
- private static final String LOCALHOST_IP = "127.0.0.1";
- private static final String OTHER_IP_1 = "192.168.23.1";
- private static final String OTHER_IP_2 = "192.168.23.2";
-
- private InetAddress _addressNotInRule;
-
- private NetworkFirewallRule _networkFirewallRule;
-
- @Override
- protected void setUp() throws Exception
- {
- _addressNotInRule = InetAddress.getByName(LOCALHOST_IP);
- }
-
- public void testIpRule() throws Exception
- {
- String ipAddressInRule = OTHER_IP_1;
-
- _networkFirewallRule = new NetworkFirewallRule(ipAddressInRule);
-
- assertFalse(_networkFirewallRule.matches(_addressNotInRule));
- assertTrue(_networkFirewallRule.matches(InetAddress.getByName(ipAddressInRule)));
- }
-
- public void testNetMask() throws Exception
- {
- String ipAddressInRule = "192.168.23.0/24";
- _networkFirewallRule = new NetworkFirewallRule(ipAddressInRule);
-
- assertFalse(_networkFirewallRule.matches(InetAddress.getByName("192.168.24.1")));
- assertTrue(_networkFirewallRule.matches(InetAddress.getByName("192.168.23.0")));
- assertTrue(_networkFirewallRule.matches(InetAddress.getByName("192.168.23.255")));
- }
-
- public void testWildcard() throws Exception
- {
- // Test xxx.xxx.*
-
- assertFalse(new NetworkFirewallRule("192.168.*")
- .matches(InetAddress.getByName("192.169.1.0")));
-
- assertTrue(new NetworkFirewallRule("192.168.*")
- .matches(InetAddress.getByName("192.168.1.0")));
-
- assertTrue(new NetworkFirewallRule("192.168.*")
- .matches(InetAddress.getByName("192.168.255.255")));
-
- // Test xxx.xxx.xxx.*
-
- assertFalse(new NetworkFirewallRule("192.168.1.*")
- .matches(InetAddress.getByName("192.169.2.0")));
-
- assertTrue(new NetworkFirewallRule("192.168.1.*")
- .matches(InetAddress.getByName("192.168.1.0")));
-
- assertTrue(new NetworkFirewallRule("192.168.1.*")
- .matches(InetAddress.getByName("192.168.1.255")));
- }
-
- public void testMultipleNetworks() throws Exception
- {
- String[] ipAddressesInRule = new String[] {OTHER_IP_1, OTHER_IP_2};
-
- _networkFirewallRule = new NetworkFirewallRule(ipAddressesInRule);
-
- assertFalse(_networkFirewallRule.matches(_addressNotInRule));
- for (String ipAddressInRule : ipAddressesInRule)
- {
- assertTrue(_networkFirewallRule.matches(InetAddress.getByName(ipAddressInRule)));
- }
- }
-
- public void testEqualsAndHashCode()
- {
- NetworkFirewallRule rule = new NetworkFirewallRule(LOCALHOST_IP, OTHER_IP_1);
- NetworkFirewallRule equalRule = new NetworkFirewallRule(LOCALHOST_IP, OTHER_IP_1);
-
- assertTrue(rule.equals(rule));
- assertTrue(rule.equals(equalRule));
- assertTrue(equalRule.equals(rule));
-
- assertTrue(rule.hashCode() == equalRule.hashCode());
-
- assertFalse("Different networks should cause rules to be unequal",
- rule.equals(new NetworkFirewallRule(LOCALHOST_IP, OTHER_IP_2)));
- }
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java
deleted file mode 100644
index c51ea64d9c..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- *
- * 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.security.access.plugins;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-import java.util.regex.Pattern;
-
-import org.apache.qpid.server.configuration.IllegalConfigurationException;
-import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor;
-import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.model.AccessControlProvider;
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.BrokerModel;
-import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl;
-import org.apache.qpid.server.security.access.FileAccessControlProviderConstants;
-import org.apache.qpid.test.utils.QpidTestCase;
-import org.apache.qpid.test.utils.TestFileUtils;
-
-public class ACLFileAccessControlProviderFactoryTest extends QpidTestCase
-{
- private Broker _broker;
- private ConfiguredObjectFactoryImpl _objectFactory;
-
- @Override
- public void setUp() throws Exception
- {
- super.setUp();
- _broker = mock(Broker.class);
- _objectFactory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance());
-
- when(_broker.getObjectFactory()).thenReturn(_objectFactory);
- when(_broker.getModel()).thenReturn(_objectFactory.getModel());
- when(_broker.getCategoryClass()).thenReturn(Broker.class);
- TaskExecutor taskExecutor = new CurrentThreadTaskExecutor();
- taskExecutor.start();
- when(_broker.getTaskExecutor()).thenReturn(taskExecutor);
- when(_broker.getChildExecutor()).thenReturn(taskExecutor);
-
- }
-
- public void testCreateInstanceWhenAclFileIsNotPresent()
- {
- Map<String, Object> attributes = new HashMap<String, Object>();
- attributes.put(AccessControlProvider.ID, UUID.randomUUID());
- attributes.put(AccessControlProvider.NAME, "acl");
- attributes.put(AccessControlProvider.TYPE, FileAccessControlProviderConstants.ACL_FILE_PROVIDER_TYPE);
-
- try
- {
- AccessControlProvider acl = _objectFactory.create(AccessControlProvider.class, attributes, _broker);
- fail("ACL was created without a configuration file path specified");
- }
- catch(IllegalArgumentException e)
- {
- // pass
- }
- }
-
-
- public void testCreateInstanceWhenAclFileIsSpecified()
- {
- File aclFile = TestFileUtils.createTempFile(this, ".acl", "ACL ALLOW all all");
- Map<String, Object> attributes = new HashMap<String, Object>();
- attributes.put(AccessControlProvider.ID, UUID.randomUUID());
- attributes.put(AccessControlProvider.NAME, "acl");
- attributes.put(AccessControlProvider.TYPE, FileAccessControlProviderConstants.ACL_FILE_PROVIDER_TYPE);
- attributes.put(FileAccessControlProviderConstants.PATH, aclFile.getAbsolutePath());
- AccessControlProvider acl = _objectFactory.create(AccessControlProvider.class, attributes, _broker);
- acl.getAccessControl().open();
-
- assertNotNull("ACL was not created from acl file: " + aclFile.getAbsolutePath(), acl);
- }
-
- public void testCreateInstanceWhenAclFileIsSpecifiedButDoesNotExist()
- {
- File aclFile = new File(TMP_FOLDER, "my-non-existing-acl-" + System.currentTimeMillis());
- assertFalse("ACL file " + aclFile.getAbsolutePath() + " actually exists but should not", aclFile.exists());
- Map<String, Object> attributes = new HashMap<String, Object>();
- attributes.put(AccessControlProvider.ID, UUID.randomUUID());
- attributes.put(AccessControlProvider.NAME, "acl");
- attributes.put(AccessControlProvider.TYPE, FileAccessControlProviderConstants.ACL_FILE_PROVIDER_TYPE);
- attributes.put(FileAccessControlProviderConstants.PATH, aclFile.getAbsolutePath());
- try
- {
- AccessControlProvider control = _objectFactory.create(AccessControlProvider.class, attributes, _broker);
- control.getAccessControl().open();
- fail("It should not be possible to create and initialise ACL with non existing file");
- }
- catch (IllegalConfigurationException e)
- {
- assertTrue("Unexpected exception message: " + e.getMessage(), Pattern.matches("Cannot convert .* to a readable resource", e.getMessage()));
- }
- }
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java
deleted file mode 100644
index abe8c6fd9f..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImplTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *
- * 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.security.access.plugins;
-
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.qpid.server.configuration.IllegalConfigurationException;
-import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor;
-import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.BrokerModel;
-import org.apache.qpid.server.model.Model;
-import org.apache.qpid.test.utils.QpidTestCase;
-
-public class ACLFileAccessControlProviderImplTest extends QpidTestCase
-{
- private TaskExecutor _taskExecutor;
- private Model _model;
- private Broker _broker;
-
- public void setUp() throws Exception
- {
- super.setUp();
- _taskExecutor = CurrentThreadTaskExecutor.newStartedInstance();
- _model = BrokerModel.getInstance();
-
- _broker = mock(Broker.class);
- when(_broker.getTaskExecutor()).thenReturn(_taskExecutor);
- when(_broker.getChildExecutor()).thenReturn(_taskExecutor);
- when(_broker.getModel()).thenReturn(_model);
- when(_broker.getId()).thenReturn(UUID.randomUUID());
- }
-
- public void testValidationOnCreateWithNonExistingACLFile()
- {
- Map<String,Object> attributes = new HashMap<>();
- String aclFilePath = new File(TMP_FOLDER, "test_" + getTestName() + System.nanoTime() + ".acl").getAbsolutePath();
-
- attributes.put("path", aclFilePath);
- attributes.put(ACLFileAccessControlProvider.NAME, getTestName());
-
-
- ACLFileAccessControlProviderImpl aclProvider = new ACLFileAccessControlProviderImpl(attributes, _broker);
- try
- {
- aclProvider.create();
- fail("Exception is expected on validation with non-existing ACL file");
- }
- catch (IllegalConfigurationException e)
- {
- assertEquals("Unexpected exception message:" + e.getMessage(), String.format("Cannot convert %s to a readable resource", aclFilePath ), e.getMessage());
- }
- }
-
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControlTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControlTest.java
deleted file mode 100644
index 072bd6a87f..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/DefaultAccessControlTest.java
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- *
- * 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.security.access.plugins;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
-
-import javax.security.auth.Subject;
-
-import junit.framework.TestCase;
-
-import org.apache.qpid.server.connection.ConnectionPrincipal;
-import org.apache.qpid.server.logging.EventLogger;
-import org.apache.qpid.server.logging.EventLoggerProvider;
-import org.apache.qpid.server.logging.UnitTestMessageLogger;
-import org.apache.qpid.server.protocol.AMQConnectionModel;
-import org.apache.qpid.server.security.Result;
-import org.apache.qpid.server.security.access.ObjectProperties;
-import org.apache.qpid.server.security.access.ObjectType;
-import org.apache.qpid.server.security.access.Operation;
-import org.apache.qpid.server.security.access.Permission;
-import org.apache.qpid.server.security.access.config.Rule;
-import org.apache.qpid.server.security.access.config.RuleSet;
-import org.apache.qpid.server.security.auth.TestPrincipalUtils;
-
-/**
- * In these tests, the ruleset is configured programmatically rather than from an external file.
- *
- * @see RuleSetTest
- */
-public class DefaultAccessControlTest extends TestCase
-{
- private static final String ALLOWED_GROUP = "allowed_group";
- private static final String DENIED_GROUP = "denied_group";
-
- private DefaultAccessControl _plugin = null; // Class under test
- private UnitTestMessageLogger _messageLogger;
- private EventLogger _eventLogger;
-
- public void setUp() throws Exception
- {
- super.setUp();
- _messageLogger = new UnitTestMessageLogger();
- _eventLogger = new EventLogger(_messageLogger);
- _plugin = null;
- }
-
- private void setUpGroupAccessControl()
- {
- configureAccessControl(createGroupRuleSet());
- }
-
- private void configureAccessControl(final RuleSet rs)
- {
- _plugin = new DefaultAccessControl(rs);
- }
-
- private RuleSet createGroupRuleSet()
- {
- final EventLoggerProvider provider = mock(EventLoggerProvider.class);
- when(provider.getEventLogger()).thenReturn(_eventLogger);
- final RuleSet rs = new RuleSet(provider);
-
- // Rule expressed with username
- rs.grant(0, "user1", Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- // Rules expressed with groups
- rs.grant(1, ALLOWED_GROUP, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- rs.grant(2, DENIED_GROUP, Permission.DENY, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- // Catch all rule
- rs.grant(3, Rule.ALL, Permission.DENY_LOG, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
-
- return rs;
- }
-
- /**
- * ACL plugin must always abstain if there is no subject attached to the thread.
- */
- public void testNoSubjectAlwaysAbstains()
- {
- setUpGroupAccessControl();
- final Result result = _plugin.authorise(Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- assertEquals(Result.ABSTAIN, result);
- }
-
- /**
- * Tests that an allow rule expressed with a username allows an operation performed by a thread running
- * with the same username.
- */
- public void testUsernameAllowsOperation()
- {
- setUpGroupAccessControl();
- Subject.doAs(TestPrincipalUtils.createTestSubject("user1"), new PrivilegedAction<Object>()
- {
- @Override
- public Object run()
- {
- final Result result = _plugin.authorise(Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- assertEquals(Result.ALLOWED, result);
- return null;
- }
- });
- }
-
- /**
- * Tests that an allow rule expressed with an <b>ACL groupname</b> allows an operation performed by a thread running
- * by a user who belongs to the same group..
- */
- public void testGroupMembershipAllowsOperation()
- {
- setUpGroupAccessControl();
-
- authoriseAndAssertResult(Result.ALLOWED, "member of allowed group", ALLOWED_GROUP);
- authoriseAndAssertResult(Result.DENIED, "member of denied group", DENIED_GROUP);
- authoriseAndAssertResult(Result.ALLOWED, "another member of allowed group", ALLOWED_GROUP);
- }
-
- /**
- * Tests that a deny rule expressed with a <b>groupname</b> denies an operation performed by a thread running
- * by a user who belongs to the same group.
- */
- public void testGroupMembershipDeniesOperation()
- {
- setUpGroupAccessControl();
- authoriseAndAssertResult(Result.DENIED, "user3", DENIED_GROUP);
- }
-
- /**
- * Tests that the catch all deny denies the operation and logs with the logging actor.
- */
- public void testCatchAllRuleDeniesUnrecognisedUsername()
- {
- setUpGroupAccessControl();
- Subject.doAs(TestPrincipalUtils.createTestSubject("unknown", "unkgroup1", "unkgroup2"),
- new PrivilegedAction<Object>()
- {
- @Override
- public Object run()
- {
- assertEquals("Expecting zero messages before test",
- 0,
- _messageLogger.getLogMessages().size());
- final Result result = _plugin.authorise(Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- assertEquals(Result.DENIED, result);
-
- assertEquals("Expecting one message before test", 1, _messageLogger.getLogMessages().size());
- assertTrue("Logged message does not contain expected string",
- _messageLogger.messageContains(0, "ACL-1002"));
- return null;
- }
- });
-
- }
-
- /**
- * Tests that a grant access method rule allows any access operation to be performed on any component
- */
- public void testAuthoriseAccessMethodWhenAllAccessOperationsAllowedOnAllComponents()
- {
- final RuleSet rs = new RuleSet(mock(EventLoggerProvider.class));
-
- // grant user4 access right on any method in any component
- rs.grant(1, "user4", Permission.ALLOW, Operation.ACCESS, ObjectType.METHOD, new ObjectProperties(ObjectProperties.WILD_CARD));
- configureAccessControl(rs);
- Subject.doAs(TestPrincipalUtils.createTestSubject("user4"), new PrivilegedAction<Object>()
- {
- @Override
- public Object run()
- {
- ObjectProperties actionProperties = new ObjectProperties("getName");
- actionProperties.put(ObjectProperties.Property.COMPONENT, "Test");
-
- final Result result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, actionProperties);
- assertEquals(Result.ALLOWED, result);
- return null;
- }
- });
-
- }
-
- /**
- * Tests that a grant access method rule allows any access operation to be performed on a specified component
- */
- public void testAuthoriseAccessMethodWhenAllAccessOperationsAllowedOnSpecifiedComponent()
- {
- final RuleSet rs = new RuleSet(mock(EventLoggerProvider.class));
-
- // grant user5 access right on any methods in "Test" component
- ObjectProperties ruleProperties = new ObjectProperties(ObjectProperties.WILD_CARD);
- ruleProperties.put(ObjectProperties.Property.COMPONENT, "Test");
- rs.grant(1, "user5", Permission.ALLOW, Operation.ACCESS, ObjectType.METHOD, ruleProperties);
- configureAccessControl(rs);
- Subject.doAs(TestPrincipalUtils.createTestSubject("user5"), new PrivilegedAction<Object>()
- {
- @Override
- public Object run()
- {
- ObjectProperties actionProperties = new ObjectProperties("getName");
- actionProperties.put(ObjectProperties.Property.COMPONENT, "Test");
- Result result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, actionProperties);
- assertEquals(Result.ALLOWED, result);
-
- actionProperties.put(ObjectProperties.Property.COMPONENT, "Test2");
- result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, actionProperties);
- assertEquals(Result.DEFER, result);
- return null;
- }
- });
-
-
- }
-
- public void testAccess() throws Exception
- {
- final Subject subject = TestPrincipalUtils.createTestSubject("user1");
- final String testVirtualHost = getName();
- final InetAddress inetAddress = InetAddress.getLocalHost();
- final InetSocketAddress inetSocketAddress = new InetSocketAddress(inetAddress, 1);
-
- AMQConnectionModel connectionModel = mock(AMQConnectionModel.class);
- when(connectionModel.getRemoteAddress()).thenReturn(inetSocketAddress);
-
- subject.getPrincipals().add(new ConnectionPrincipal(connectionModel));
-
- Subject.doAs(subject, new PrivilegedExceptionAction<Object>()
- {
- @Override
- public Object run() throws Exception
- {
- RuleSet mockRuleSet = mock(RuleSet.class);
-
- DefaultAccessControl accessControl = new DefaultAccessControl(mockRuleSet);
-
- ObjectProperties properties = new ObjectProperties(testVirtualHost);
- accessControl.authorise(Operation.ACCESS, ObjectType.VIRTUALHOST, properties);
-
- verify(mockRuleSet).check(subject, Operation.ACCESS, ObjectType.VIRTUALHOST, properties, inetAddress);
- return null;
- }
- });
-
- }
-
- public void testAccessIsDeniedIfRuleThrowsException() throws Exception
- {
- final Subject subject = TestPrincipalUtils.createTestSubject("user1");
- final InetAddress inetAddress = InetAddress.getLocalHost();
- final InetSocketAddress inetSocketAddress = new InetSocketAddress(inetAddress, 1);
-
- AMQConnectionModel connectionModel = mock(AMQConnectionModel.class);
- when(connectionModel.getRemoteAddress()).thenReturn(inetSocketAddress);
-
- subject.getPrincipals().add(new ConnectionPrincipal(connectionModel));
-
- Subject.doAs(subject, new PrivilegedExceptionAction<Object>()
- {
- @Override
- public Object run() throws Exception
- {
-
-
- RuleSet mockRuleSet = mock(RuleSet.class);
- when(mockRuleSet.check(
- subject,
- Operation.ACCESS,
- ObjectType.VIRTUALHOST,
- ObjectProperties.EMPTY,
- inetAddress)).thenThrow(new RuntimeException());
-
- DefaultAccessControl accessControl = new DefaultAccessControl(mockRuleSet);
- Result result = accessControl.authorise(Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
-
- assertEquals(Result.DENIED, result);
- return null;
- }
- });
-
- }
-
-
- /**
- * Tests that a grant access method rule allows any access operation to be performed on a specified component
- */
- public void testAuthoriseAccessMethodWhenSpecifiedAccessOperationsAllowedOnSpecifiedComponent()
- {
- final RuleSet rs = new RuleSet(mock(EventLoggerProvider.class));
-
- // grant user6 access right on "getAttribute" method in "Test" component
- ObjectProperties ruleProperties = new ObjectProperties("getAttribute");
- ruleProperties.put(ObjectProperties.Property.COMPONENT, "Test");
- rs.grant(1, "user6", Permission.ALLOW, Operation.ACCESS, ObjectType.METHOD, ruleProperties);
- configureAccessControl(rs);
- Subject.doAs(TestPrincipalUtils.createTestSubject("user6"), new PrivilegedAction<Object>()
- {
- @Override
- public Object run()
- {
- ObjectProperties properties = new ObjectProperties("getAttribute");
- properties.put(ObjectProperties.Property.COMPONENT, "Test");
- Result result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.ALLOWED, result);
-
- properties.put(ObjectProperties.Property.COMPONENT, "Test2");
- result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.DEFER, result);
-
- properties = new ObjectProperties("getAttribute2");
- properties.put(ObjectProperties.Property.COMPONENT, "Test");
- result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.DEFER, result);
-
- return null;
- }
- });
-
- }
-
- /**
- * Tests that granting of all method rights on a method allows a specified operation to be performed on any component
- */
- public void testAuthoriseAccessUpdateMethodWhenAllRightsGrantedOnSpecifiedMethodForAllComponents()
- {
- final RuleSet rs = new RuleSet(mock(EventLoggerProvider.class));
-
- // grant user8 all rights on method queryNames in all component
- rs.grant(1, "user8", Permission.ALLOW, Operation.ALL, ObjectType.METHOD, new ObjectProperties("queryNames"));
- configureAccessControl(rs);
- Subject.doAs(TestPrincipalUtils.createTestSubject("user8"), new PrivilegedAction<Object>()
- {
- @Override
- public Object run()
- {
- ObjectProperties properties = new ObjectProperties();
- properties.put(ObjectProperties.Property.COMPONENT, "Test");
- properties.put(ObjectProperties.Property.NAME, "queryNames");
-
- Result result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.ALLOWED, result);
-
- result = _plugin.authorise(Operation.UPDATE, ObjectType.METHOD, properties);
- assertEquals(Result.ALLOWED, result);
-
- properties = new ObjectProperties("getAttribute");
- properties.put(ObjectProperties.Property.COMPONENT, "Test");
- result = _plugin.authorise(Operation.UPDATE, ObjectType.METHOD, properties);
- assertEquals(Result.DEFER, result);
-
- result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.DEFER, result);
- return null;
- }
- });
-
-
- }
-
- /**
- * Tests that granting of all method rights allows any operation to be performed on any component
- */
- public void testAuthoriseAccessUpdateMethodWhenAllRightsGrantedOnAllMethodsInAllComponents()
- {
- final RuleSet rs = new RuleSet(mock(EventLoggerProvider.class));
-
- // grant user9 all rights on any method in all component
- rs.grant(1, "user9", Permission.ALLOW, Operation.ALL, ObjectType.METHOD, new ObjectProperties());
- configureAccessControl(rs);
- Subject.doAs(TestPrincipalUtils.createTestSubject("user9"), new PrivilegedAction<Object>()
- {
- @Override
- public Object run()
- {
- ObjectProperties properties = new ObjectProperties("queryNames");
- properties.put(ObjectProperties.Property.COMPONENT, "Test");
-
- Result result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.ALLOWED, result);
-
- result = _plugin.authorise(Operation.UPDATE, ObjectType.METHOD, properties);
- assertEquals(Result.ALLOWED, result);
-
- properties = new ObjectProperties("getAttribute");
- properties.put(ObjectProperties.Property.COMPONENT, "Test");
- result = _plugin.authorise(Operation.UPDATE, ObjectType.METHOD, properties);
- assertEquals(Result.ALLOWED, result);
-
- result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.ALLOWED, result);
- return null;
- }
- });
-
-
- }
-
- /**
- * Tests that granting of access method rights with mask allows matching operations to be performed on the specified component
- */
- public void testAuthoriseAccessMethodWhenMatchingAccessOperationsAllowedOnSpecifiedComponent()
- {
- final RuleSet rs = new RuleSet(mock(EventLoggerProvider.class));
-
- // grant user9 all rights on "getAttribute*" methods in Test component
- ObjectProperties ruleProperties = new ObjectProperties();
- ruleProperties.put(ObjectProperties.Property.COMPONENT, "Test");
- ruleProperties.put(ObjectProperties.Property.NAME, "getAttribute*");
-
- rs.grant(1, "user9", Permission.ALLOW, Operation.ACCESS, ObjectType.METHOD, ruleProperties);
- configureAccessControl(rs);
- Subject.doAs(TestPrincipalUtils.createTestSubject("user9"), new PrivilegedAction<Object>()
- {
- @Override
- public Object run()
- {
- ObjectProperties properties = new ObjectProperties("getAttributes");
- properties.put(ObjectProperties.Property.COMPONENT, "Test");
- Result result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.ALLOWED, result);
-
- properties = new ObjectProperties("getAttribute");
- properties.put(ObjectProperties.Property.COMPONENT, "Test");
- result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.ALLOWED, result);
-
- properties = new ObjectProperties("getAttribut");
- properties.put(ObjectProperties.Property.COMPONENT, "Test");
- result = _plugin.authorise(Operation.ACCESS, ObjectType.METHOD, properties);
- assertEquals(Result.DEFER, result);
- return null;
- }
- });
- }
-
- private void authoriseAndAssertResult(final Result expectedResult, String userName, String... groups)
- {
-
- Subject.doAs(TestPrincipalUtils.createTestSubject(userName, groups), new PrivilegedAction<Object>()
- {
- @Override
- public Object run()
- {
- Result result = _plugin.authorise(Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- assertEquals(expectedResult, result);
- return null;
- }
- });
-
- }
-}
diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java
deleted file mode 100644
index 5301d2e49d..0000000000
--- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- *
- * 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.security.access.plugins;
-
-import static org.mockito.Mockito.mock;
-
-import javax.security.auth.Subject;
-
-import org.apache.qpid.server.logging.EventLoggerProvider;
-import org.apache.qpid.server.security.Result;
-import org.apache.qpid.server.security.access.ObjectProperties;
-import org.apache.qpid.server.security.access.ObjectType;
-import org.apache.qpid.server.security.access.Operation;
-import org.apache.qpid.server.security.access.Permission;
-import org.apache.qpid.server.security.access.ObjectProperties.Property;
-import org.apache.qpid.server.security.access.config.Rule;
-import org.apache.qpid.server.security.access.config.RuleSet;
-import org.apache.qpid.server.security.auth.TestPrincipalUtils;
-import org.apache.qpid.test.utils.QpidTestCase;
-
-/**
- * This test checks that the {@link RuleSet} object which forms the core of the access control plugin performs correctly.
- *
- * The ruleset is configured directly rather than using an external file by adding rules individually, calling the
- * {@link RuleSet#grant(Integer, String, Permission, Operation, ObjectType, ObjectProperties)} method. Then, the
- * access control mechanism is validated by checking whether operations would be authorised by calling the
- * {@link RuleSet#check(Subject, Operation, ObjectType, ObjectProperties)} method.
- *
- * It ensure that permissions can be granted correctly on users directly and on groups.
- */
-public class RuleSetTest extends QpidTestCase
-{
- private static final String DENIED_VH = "deniedVH";
- private static final String ALLOWED_VH = "allowedVH";
-
- private RuleSet _ruleSet; // Object under test
-
- private static final String TEST_USER = "user";
-
- // Common things that are passed to frame constructors
- private String _queueName = this.getClass().getName() + "queue";
- private String _exchangeName = "amq.direct";
- private String _exchangeType = "direct";
- private Subject _testSubject = TestPrincipalUtils.createTestSubject(TEST_USER);
-
- @Override
- public void setUp() throws Exception
- {
- super.setUp();
-
- _ruleSet = new RuleSet(mock(EventLoggerProvider.class));
- }
-
- @Override
- public void tearDown() throws Exception
- {
- _ruleSet.clear();
- super.tearDown();
- }
-
- public void assertDenyGrantAllow(Subject subject, Operation operation, ObjectType objectType)
- {
- assertDenyGrantAllow(subject, operation, objectType, ObjectProperties.EMPTY);
- }
-
- public void assertDenyGrantAllow(Subject subject, Operation operation, ObjectType objectType, ObjectProperties properties)
- {
- assertEquals(Result.DENIED, _ruleSet.check(subject, operation, objectType, properties));
- _ruleSet.grant(0, TEST_USER, Permission.ALLOW, operation, objectType, properties);
- assertEquals(1, _ruleSet.getRuleCount());
- assertEquals(Result.ALLOWED, _ruleSet.check(subject, operation, objectType, properties));
- }
-
- public void testEmptyRuleSet()
- {
- assertNotNull(_ruleSet);
- assertEquals(_ruleSet.getRuleCount(), 0);
- assertEquals(_ruleSet.getDefault(), _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
- }
-
- public void testVirtualHostNodeCreateAllowPermissionWithVirtualHostName() throws Exception
- {
- _ruleSet.grant(0, TEST_USER, Permission.ALLOW, Operation.CREATE, ObjectType.VIRTUALHOSTNODE, ObjectProperties.EMPTY);
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.VIRTUALHOSTNODE, ObjectProperties.EMPTY));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.DELETE, ObjectType.VIRTUALHOSTNODE, ObjectProperties.EMPTY));
- }
-
- public void testVirtualHostAccessAllowPermissionWithVirtualHostName() throws Exception
- {
- _ruleSet.grant(0, TEST_USER, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ALLOWED_VH));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ALLOWED_VH)));
- assertEquals(Result.DEFER, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(DENIED_VH)));
- }
-
- public void testVirtualHostAccessAllowPermissionWithNameSetToWildCard() throws Exception
- {
- _ruleSet.grant(0, TEST_USER, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ObjectProperties.WILD_CARD));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ALLOWED_VH)));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(DENIED_VH)));
- }
-
- public void testVirtualHostAccessAllowPermissionWithNoName() throws Exception
- {
- _ruleSet.grant(0, TEST_USER, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ALLOWED_VH)));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(DENIED_VH)));
- }
-
- public void testVirtualHostAccessDenyPermissionWithNoName() throws Exception
- {
- _ruleSet.grant(0, TEST_USER, Permission.DENY, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ALLOWED_VH)));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(DENIED_VH)));
- }
-
- public void testVirtualHostAccessDenyPermissionWithNameSetToWildCard() throws Exception
- {
- _ruleSet.grant(0, TEST_USER, Permission.DENY, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ObjectProperties.WILD_CARD));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ALLOWED_VH)));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(DENIED_VH)));
- }
-
- public void testVirtualHostAccessAllowDenyPermissions() throws Exception
- {
- _ruleSet.grant(0, TEST_USER, Permission.DENY, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(DENIED_VH));
- _ruleSet.grant(1, TEST_USER, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ALLOWED_VH));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(ALLOWED_VH)));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(DENIED_VH)));
- }
-
- public void testVirtualHostAccessAllowPermissionWithVirtualHostNameOtherPredicate() throws Exception
- {
- ObjectProperties properties = new ObjectProperties();
- properties.put(Property.VIRTUALHOST_NAME, ALLOWED_VH);
-
- _ruleSet.grant(0, TEST_USER, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, properties);
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, properties));
- assertEquals(Result.DEFER, _ruleSet.check(_testSubject, Operation.ACCESS, ObjectType.VIRTUALHOST, new ObjectProperties(DENIED_VH)));
- }
-
-
- public void testQueueCreateNamed() throws Exception
- {
- assertDenyGrantAllow(_testSubject, Operation.CREATE, ObjectType.QUEUE, new ObjectProperties(_queueName));
- }
-
- public void testQueueCreateNamedVirtualHost() throws Exception
- {
- _ruleSet.grant(0, TEST_USER, Permission.ALLOW, Operation.CREATE, ObjectType.QUEUE, new ObjectProperties(Property.VIRTUALHOST_NAME, ALLOWED_VH));
-
- ObjectProperties allowedQueueObjectProperties = new ObjectProperties(_queueName);
- allowedQueueObjectProperties.put(Property.VIRTUALHOST_NAME, ALLOWED_VH);
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, new ObjectProperties(allowedQueueObjectProperties)));
-
- ObjectProperties deniedQueueObjectProperties = new ObjectProperties(_queueName);
- deniedQueueObjectProperties.put(Property.VIRTUALHOST_NAME, DENIED_VH);
- assertEquals(Result.DEFER, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, deniedQueueObjectProperties));
- }
-
- public void testQueueCreateNamedNullRoutingKey()
- {
- ObjectProperties properties = new ObjectProperties(_queueName);
- properties.put(ObjectProperties.Property.ROUTING_KEY, (String) null);
-
- assertDenyGrantAllow(_testSubject, Operation.CREATE, ObjectType.QUEUE, properties);
- }
-
- public void testExchangeCreateNamedVirtualHost()
- {
- _ruleSet.grant(0, TEST_USER, Permission.ALLOW, Operation.CREATE, ObjectType.EXCHANGE, new ObjectProperties(Property.VIRTUALHOST_NAME, ALLOWED_VH));
-
- ObjectProperties allowedExchangeProperties = new ObjectProperties(_exchangeName);
- allowedExchangeProperties.put(Property.TYPE, _exchangeType);
- allowedExchangeProperties.put(Property.VIRTUALHOST_NAME, ALLOWED_VH);
-
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.EXCHANGE, allowedExchangeProperties));
-
- ObjectProperties deniedExchangeProperties = new ObjectProperties(_exchangeName);
- deniedExchangeProperties.put(Property.TYPE, _exchangeType);
- deniedExchangeProperties.put(Property.VIRTUALHOST_NAME, DENIED_VH);
- assertEquals(Result.DEFER, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.EXCHANGE, deniedExchangeProperties));
- }
-
- public void testExchangeCreate()
- {
- ObjectProperties properties = new ObjectProperties(_exchangeName);
- properties.put(ObjectProperties.Property.TYPE, _exchangeType);
-
- assertDenyGrantAllow(_testSubject, Operation.CREATE, ObjectType.EXCHANGE, properties);
- }
-
- public void testConsume()
- {
- assertDenyGrantAllow(_testSubject, Operation.CONSUME, ObjectType.QUEUE);
- }
-
- public void testPublish()
- {
- assertDenyGrantAllow(_testSubject, Operation.PUBLISH, ObjectType.EXCHANGE);
- }
-
- /**
- * If the consume permission for temporary queues is for an unnamed queue then it should
- * be global for any temporary queue but not for any non-temporary queue
- */
- public void testTemporaryUnnamedQueueConsume()
- {
- ObjectProperties temporary = new ObjectProperties();
- temporary.put(ObjectProperties.Property.AUTO_DELETE, Boolean.TRUE);
-
- ObjectProperties normal = new ObjectProperties();
- normal.put(ObjectProperties.Property.AUTO_DELETE, Boolean.FALSE);
-
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CONSUME, ObjectType.QUEUE, temporary));
- _ruleSet.grant(0, TEST_USER, Permission.ALLOW, Operation.CONSUME, ObjectType.QUEUE, temporary);
- assertEquals(1, _ruleSet.getRuleCount());
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CONSUME, ObjectType.QUEUE, temporary));
-
- // defer to global if exists, otherwise default answer - this is handled by the security manager
- assertEquals(Result.DEFER, _ruleSet.check(_testSubject, Operation.CONSUME, ObjectType.QUEUE, normal));
- }
-
- /**
- * Test that temporary queue permissions before queue perms in the ACL config work correctly
- */
- public void testTemporaryQueueFirstConsume()
- {
- ObjectProperties temporary = new ObjectProperties(_queueName);
- temporary.put(ObjectProperties.Property.AUTO_DELETE, Boolean.TRUE);
-
- ObjectProperties normal = new ObjectProperties(_queueName);
- normal.put(ObjectProperties.Property.AUTO_DELETE, Boolean.FALSE);
-
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CONSUME, ObjectType.QUEUE, temporary));
-
- // should not matter if the temporary permission is processed first or last
- _ruleSet.grant(1, TEST_USER, Permission.ALLOW, Operation.CONSUME, ObjectType.QUEUE, normal);
- _ruleSet.grant(2, TEST_USER, Permission.ALLOW, Operation.CONSUME, ObjectType.QUEUE, temporary);
- assertEquals(2, _ruleSet.getRuleCount());
-
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CONSUME, ObjectType.QUEUE, normal));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CONSUME, ObjectType.QUEUE, temporary));
- }
-
- /**
- * Test that temporary queue permissions after queue perms in the ACL config work correctly
- */
- public void testTemporaryQueueLastConsume()
- {
- ObjectProperties temporary = new ObjectProperties(_queueName);
- temporary.put(ObjectProperties.Property.AUTO_DELETE, Boolean.TRUE);
-
- ObjectProperties normal = new ObjectProperties(_queueName);
- normal.put(ObjectProperties.Property.AUTO_DELETE, Boolean.FALSE);
-
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CONSUME, ObjectType.QUEUE, temporary));
-
- // should not matter if the temporary permission is processed first or last
- _ruleSet.grant(1, TEST_USER, Permission.ALLOW, Operation.CONSUME, ObjectType.QUEUE, temporary);
- _ruleSet.grant(2, TEST_USER, Permission.ALLOW, Operation.CONSUME, ObjectType.QUEUE, normal);
- assertEquals(2, _ruleSet.getRuleCount());
-
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CONSUME, ObjectType.QUEUE, normal));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CONSUME, ObjectType.QUEUE, temporary));
- }
-
- /*
- * Test different rules for temporary queues.
- */
-
- /**
- * The more generic rule first is used, so both requests are allowed.
- */
- public void testFirstNamedSecondTemporaryQueueDenied()
- {
- ObjectProperties named = new ObjectProperties(_queueName);
- ObjectProperties namedTemporary = new ObjectProperties(_queueName);
- namedTemporary.put(ObjectProperties.Property.AUTO_DELETE, Boolean.TRUE);
-
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
-
- _ruleSet.grant(1, TEST_USER, Permission.ALLOW, Operation.CREATE, ObjectType.QUEUE, named);
- _ruleSet.grant(2, TEST_USER, Permission.DENY, Operation.CREATE, ObjectType.QUEUE, namedTemporary);
- assertEquals(2, _ruleSet.getRuleCount());
-
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
- }
-
- /**
- * The more specific rule is first, so those requests are denied.
- */
- public void testFirstTemporarySecondNamedQueueDenied()
- {
- ObjectProperties named = new ObjectProperties(_queueName);
- ObjectProperties namedTemporary = new ObjectProperties(_queueName);
- namedTemporary.put(ObjectProperties.Property.AUTO_DELETE, Boolean.TRUE);
-
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
-
- _ruleSet.grant(1, TEST_USER, Permission.DENY, Operation.CREATE, ObjectType.QUEUE, namedTemporary);
- _ruleSet.grant(2, TEST_USER, Permission.ALLOW, Operation.CREATE, ObjectType.QUEUE, named);
- assertEquals(2, _ruleSet.getRuleCount());
-
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
- }
-
- /**
- * The more specific rules are first, so those requests are denied.
- */
- public void testFirstTemporarySecondDurableThirdNamedQueueDenied()
- {
- ObjectProperties named = new ObjectProperties(_queueName);
- ObjectProperties namedTemporary = new ObjectProperties(_queueName);
- namedTemporary.put(ObjectProperties.Property.AUTO_DELETE, Boolean.TRUE);
- ObjectProperties namedDurable = new ObjectProperties(_queueName);
- namedDurable.put(ObjectProperties.Property.DURABLE, Boolean.TRUE);
-
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedDurable));
-
- _ruleSet.grant(1, TEST_USER, Permission.DENY, Operation.CREATE, ObjectType.QUEUE, namedTemporary);
- _ruleSet.grant(2, TEST_USER, Permission.DENY, Operation.CREATE, ObjectType.QUEUE, namedDurable);
- _ruleSet.grant(3, TEST_USER, Permission.ALLOW, Operation.CREATE, ObjectType.QUEUE, named);
- assertEquals(3, _ruleSet.getRuleCount());
-
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedDurable));
- }
-
- public void testNamedTemporaryQueueAllowed()
- {
- ObjectProperties named = new ObjectProperties(_queueName);
- ObjectProperties namedTemporary = new ObjectProperties(_queueName);
- namedTemporary.put(ObjectProperties.Property.AUTO_DELETE, Boolean.TRUE);
-
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
-
- _ruleSet.grant(1, TEST_USER, Permission.ALLOW, Operation.CREATE, ObjectType.QUEUE, namedTemporary);
- _ruleSet.grant(2, TEST_USER, Permission.ALLOW, Operation.CREATE, ObjectType.QUEUE, named);
- assertEquals(2, _ruleSet.getRuleCount());
-
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
- }
-
- public void testNamedTemporaryQueueDeniedAllowed()
- {
- ObjectProperties named = new ObjectProperties(_queueName);
- ObjectProperties namedTemporary = new ObjectProperties(_queueName);
- namedTemporary.put(ObjectProperties.Property.AUTO_DELETE, Boolean.TRUE);
-
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
-
- _ruleSet.grant(1, TEST_USER, Permission.ALLOW, Operation.CREATE, ObjectType.QUEUE, namedTemporary);
- _ruleSet.grant(2, TEST_USER, Permission.DENY, Operation.CREATE, ObjectType.QUEUE, named);
- assertEquals(2, _ruleSet.getRuleCount());
-
- assertEquals(Result.DENIED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, named));
- assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.QUEUE, namedTemporary));
- }
-
- /**
- * Tests support for the {@link Rule#ALL} keyword.
- */
- public void testAllowToAll()
- {
- _ruleSet.grant(1, Rule.ALL, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- assertEquals(1, _ruleSet.getRuleCount());
-
- assertEquals(Result.ALLOWED, _ruleSet.check(TestPrincipalUtils.createTestSubject("usera"),Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
- assertEquals(Result.ALLOWED, _ruleSet.check(TestPrincipalUtils.createTestSubject("userb"),Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
- }
-
- public void testGroupsSupported()
- {
- String allowGroup = "allowGroup";
- String deniedGroup = "deniedGroup";
-
- _ruleSet.grant(1, allowGroup, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- _ruleSet.grant(2, deniedGroup, Permission.DENY, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
-
- assertEquals(2, _ruleSet.getRuleCount());
-
- assertEquals(Result.ALLOWED, _ruleSet.check(TestPrincipalUtils.createTestSubject("usera", allowGroup),Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
- assertEquals(Result.DENIED, _ruleSet.check(TestPrincipalUtils.createTestSubject("userb", deniedGroup),Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
- assertEquals(Result.DEFER, _ruleSet.check(TestPrincipalUtils.createTestSubject("user", "group not mentioned in acl"),Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
- }
-
- /**
- * Rule order in the ACL determines the outcome of the check. This test ensures that a user who is
- * granted explicit permission on an object, is granted that access even though a group
- * to which the user belongs is later denied the permission.
- */
- public void testAllowDeterminedByRuleOrder()
- {
- String group = "group";
- String user = "user";
-
- _ruleSet.grant(1, user, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- _ruleSet.grant(2, group, Permission.DENY, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- assertEquals(2, _ruleSet.getRuleCount());
-
- assertEquals(Result.ALLOWED, _ruleSet.check(TestPrincipalUtils.createTestSubject(user, group),Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
- }
-
- /**
- * Rule order in the ACL determines the outcome of the check. This tests ensures that a user who is denied
- * access by group, is denied access, despite there being a later rule granting permission to that user.
- */
- public void testDenyDeterminedByRuleOrder()
- {
- String group = "aclgroup";
- String user = "usera";
-
- _ruleSet.grant(1, group, Permission.DENY, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- _ruleSet.grant(2, user, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
-
- assertEquals(2, _ruleSet.getRuleCount());
-
- assertEquals(Result.DENIED, _ruleSet.check(TestPrincipalUtils.createTestSubject(user, group),Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
- }
-
- public void testUserInMultipleGroups()
- {
- String allowedGroup = "group1";
- String deniedGroup = "group2";
-
- _ruleSet.grant(1, allowedGroup, Permission.ALLOW, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
- _ruleSet.grant(2, deniedGroup, Permission.DENY, Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY);
-
- Subject subjectInBothGroups = TestPrincipalUtils.createTestSubject("user", allowedGroup, deniedGroup);
- Subject subjectInDeniedGroupAndOneOther = TestPrincipalUtils.createTestSubject("user", deniedGroup, "some other group");
- Subject subjectInAllowedGroupAndOneOther = TestPrincipalUtils.createTestSubject("user", allowedGroup, "some other group");
-
- assertEquals(Result.ALLOWED, _ruleSet.check(subjectInBothGroups,Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
-
- assertEquals(Result.DENIED, _ruleSet.check(subjectInDeniedGroupAndOneOther,Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
-
- assertEquals(Result.ALLOWED, _ruleSet.check(subjectInAllowedGroupAndOneOther,Operation.ACCESS, ObjectType.VIRTUALHOST, ObjectProperties.EMPTY));
- }
-}