package org.dcache.gplazma.plugins;
import com.google.common.collect.Sets;
import org.junit.Test;
import java.security.Principal;
import java.util.Properties;
import java.util.Set;
import org.dcache.auth.LoginNamePrincipal;
import org.dcache.auth.UserNamePrincipal;
import static com.google.common.base.Predicates.instanceOf;
import static com.google.common.collect.Iterables.find;
public class MutatorPluginTest {
@Test(expected = IllegalArgumentException.class)
public void testNoOption() throws Exception {
new MutatorPlugin(new Properties());
}
@Test(expected = ClassNotFoundException.class)
public void testNoClass() throws Exception {
Properties prop = new Properties();
prop.setProperty(MutatorPlugin.IN_OPTION, "BadINClassName");
prop.setProperty(MutatorPlugin.OUT_OPTION, "BadOUTClassName");
new MutatorPlugin(prop);
}
@Test(expected = IllegalArgumentException.class)
public void testNotPrincipalClass() throws Exception {
Properties prop = new Properties();
prop.setProperty(MutatorPlugin.IN_OPTION, "java.lang.String");
prop.setProperty(MutatorPlugin.OUT_OPTION, "java.lang.String");
new MutatorPlugin(prop);
}
@Test
public void testValidPrincipalClass() throws Exception {
Properties prop = new Properties();
prop.setProperty(MutatorPlugin.IN_OPTION, "org.dcache.auth.LoginNamePrincipal");
prop.setProperty(MutatorPlugin.OUT_OPTION, "username");
new MutatorPlugin(prop);
}
@Test
public void testMutation() throws Exception {
Properties prop = new Properties();
prop.setProperty(MutatorPlugin.IN_OPTION, "org.dcache.auth.LoginNamePrincipal");
prop.setProperty(MutatorPlugin.OUT_OPTION, "username");
MutatorPlugin mutator = new MutatorPlugin(prop);
Set<Principal> principals = Sets.newHashSet((Principal) new LoginNamePrincipal("myname"));
mutator.map(principals);
// will throw exception if no match
find(principals, instanceOf(UserNamePrincipal.class));
}
}