blob: e16f9943ba249a9d4a19bc277bf2f7a6d227297a [file] [log] [blame]
/*
* 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 java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.PrintWriter;
import junit.framework.TestCase;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.qpid.server.security.access.config.ConfigurationFile;
import org.apache.qpid.server.security.access.config.PlainConfiguration;
/**
* These tests check that the ACL file parsing works correctly.
*
* For each message that can be returned in a {@link ConfigurationException}, an ACL file is created that should trigger this
* particular message.
*/
public class PlainConfigurationTest extends TestCase
{
public void 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
ConfigurationFile configFile = new PlainConfiguration(acl);
configFile.load();
}
public void testMissingACLConfig() throws Exception
{
try
{
// Load ruleset
ConfigurationFile configFile = new PlainConfiguration(new File("doesnotexist"));
configFile.load();
fail("fail");
}
catch (ConfigurationException ce)
{
assertEquals(String.format(PlainConfiguration.CONFIG_NOT_FOUND_MSG, "doesnotexist"), ce.getMessage());
assertTrue(ce.getCause() instanceof FileNotFoundException);
assertEquals("doesnotexist (No such file or directory)", ce.getCause().getMessage());
}
}
public void testACLFileSyntaxContinuation() throws Exception
{
try
{
writeACLConfig("ACL ALLOW ALL \\ ALL");
fail("fail");
}
catch (ConfigurationException 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 (ConfigurationException 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 testACLFileSyntaxNotEnoughGroup() throws Exception
{
try
{
writeACLConfig("GROUP blah");
fail("fail");
}
catch (ConfigurationException ce)
{
assertEquals(String.format(PlainConfiguration.NOT_ENOUGH_GROUP_MSG, 1), ce.getMessage());
}
}
public void testACLFileSyntaxNotEnoughACL() throws Exception
{
try
{
writeACLConfig("ACL ALLOW");
fail("fail");
}
catch (ConfigurationException ce)
{
assertEquals(String.format(PlainConfiguration.NOT_ENOUGH_ACL_MSG, 1), ce.getMessage());
}
}
public void testACLFileSyntaxNotEnoughConfig() throws Exception
{
try
{
writeACLConfig("CONFIG");
fail("fail");
}
catch (ConfigurationException ce)
{
assertEquals(String.format(PlainConfiguration.NOT_ENOUGH_TOKENS_MSG, 1), ce.getMessage());
}
}
public void testACLFileSyntaxNotEnough() throws Exception
{
try
{
writeACLConfig("INVALID");
fail("fail");
}
catch (ConfigurationException 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 (ConfigurationException 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 (ConfigurationException 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 (ConfigurationException ce)
{
assertEquals(String.format(PlainConfiguration.PROPERTY_NO_VALUE_MSG, 1), ce.getMessage());
}
}
}