package org.dcache.gplazma.plugins;
import com.google.common.io.Resources;
import junit.framework.AssertionFailedError;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.Collection;
import org.dcache.gplazma.plugins.AuthzMapLineParser.UserAuthzInformation;
public class CachedAuthzMapTest
{
public static final String VALID_USERNAME_RESPONSE = "tigran";
public static final String INVALID_USERNAME = "SomeInvalidUser";
public static final int VALID_USERNAME_UID = 3750;
public static final int VALID_USERNAME_GID = 500;
public static final int INVALID_GID = 666;
public static final int INVALID_UID = 666;
private final static URL TEST_FIXTURE =
Resources.getResource("org/dcache/gplazma/plugins/authzdb-parser.fixture");
private SourceBackedPredicateMap<String,UserAuthzInformation>
loadFixture(URL fixture)
throws IOException
{
return new SourceBackedPredicateMap<>(new MemoryLineSource(Resources.readLines(fixture, Charset.defaultCharset())), new AuthzMapLineParser());
}
@Test
public void testValidUsername()
throws IOException
{
Collection<UserAuthzInformation> results =
loadFixture(TEST_FIXTURE).getValuesForPredicatesMatching(VALID_USERNAME_RESPONSE);
assertCollectionContains(results, new UserAuthzInformation(
VALID_USERNAME_RESPONSE,
"read-write",
VALID_USERNAME_UID,
new long[] { VALID_USERNAME_GID },
"/ fff/fff/!@# $% /",
"/",
null));
assertCollectionContainsNot(results, new UserAuthzInformation(
VALID_USERNAME_RESPONSE,
null,
INVALID_UID,
new long[] { -1 },
null,
null,
null));
}
@Test
public void testInvalidUsername()
throws IOException
{
Collection<UserAuthzInformation> results =
loadFixture(TEST_FIXTURE).getValuesForPredicatesMatching(INVALID_USERNAME);
Assert.assertTrue(results.isEmpty());
}
private void assertCollectionContains(Collection<UserAuthzInformation> collection, UserAuthzInformation userInfo)
{
if (!collection.contains(userInfo)) {
throw new AssertionFailedError("Collection did not contain AuthzUserInfo: " + userInfo);
}
}
private void assertCollectionContainsNot(Collection<UserAuthzInformation> collection, UserAuthzInformation userInfo)
{
if (collection.contains(userInfo)) {
throw new AssertionFailedError("Collection contains AuthzUserInfo: " + userInfo);
}
}
}