/*
* JBoss, Home of Professional Open Source.
* Copyright 2016 Red Hat, Inc., and individual contributors
* as indicated by the @author tags.
*
* Licensed 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.wildfly.security.permission;
import static org.junit.Assert.*;
import java.security.Permission;
import java.util.Iterator;
import org.junit.Test;
public class TestAbstractNameOnlyPermission {
@Test
public void testBasic() {
assertTrue(new SomePermission("name").implies(new SomePermission("name")));
assertTrue(new SomePermission("name").implies(new SomePermission("otherName").withName("name")));
assertFalse(new SomePermission("name").implies(new SomePermission("otherName")));
assertFalse(new SomePermission("name").implies(new SomeOtherPermission("name")));
assertFalse(new SomePermission("name").implies(NoPermission.getInstance()));
assertTrue(new SomePermission("*").implies(new SomePermission("name")));
assertTrue(new SomePermission("*").implies(new SomePermission("*")));
assertFalse(new SomePermission("name").implies(new SomePermission("*")));
assertFalse(new SomePermission("*").implies(new SomeOtherPermission("name")));
assertFalse(new SomePermission("*").implies(new SomeOtherPermission("*")));
assertFalse(new SomePermission("*").implies(NoPermission.getInstance()));
assertEquals(new SomePermission("name"), new SomePermission("name"));
assertNotEquals(new SomePermission("name"), new SomePermission("otherName"));
assertEquals(new SomePermission("name"), new SomePermission("otherName").withName("name"));
}
@Test
public void testCollection() {
final AbstractPermissionCollection collection = new SomePermission("xx").newPermissionCollection();
assertEquals(0, collection.size());
Iterator<Permission> iterator = collection.iterator();
assertFalse(iterator.hasNext());
collection.add(new SomePermission("name1"));
collection.add(new SomePermission("name2"));
assertEquals(2, collection.size());
iterator = collection.iterator();
assertTrue(iterator.hasNext());
assertNotNull(iterator.next());
assertTrue(iterator.hasNext());
assertNotNull(iterator.next());
assertFalse(iterator.hasNext());
assertTrue(collection.implies(new SomePermission("name1")));
assertTrue(collection.implies(new SomePermission("name2")));
assertFalse(collection.implies(new SomePermission("name3")));
assertFalse(collection.implies(new SomePermission("*")));
assertFalse(collection.implies(new SomeOtherPermission("name1")));
assertFalse(collection.implies(new SomeOtherPermission("name3")));
assertFalse(collection.implies(new SomeOtherPermission("*")));
collection.add(new SomePermission("*"));
assertEquals(1, collection.size());
assertTrue(collection.implies(new SomePermission("name1")));
assertTrue(collection.implies(new SomePermission("name2")));
assertTrue(collection.implies(new SomePermission("name3")));
assertTrue(collection.implies(new SomePermission("*")));
assertFalse(collection.implies(new SomeOtherPermission("name1")));
assertFalse(collection.implies(new SomeOtherPermission("name3")));
assertFalse(collection.implies(new SomeOtherPermission("*")));
iterator = collection.iterator();
assertTrue(iterator.hasNext());
assertEquals(new SomePermission("*"), iterator.next());
assertFalse(iterator.hasNext());
}
@Test
public void testSerialization() {
SomePermission perm = new SomePermission("name");
SerializedPermission obj = (SerializedPermission) perm.writeReplace();
SomePermission resolved = (SomePermission) obj.readResolve();
assertEquals(perm, resolved);
AbstractPermissionCollection permissions = perm.newPermissionCollection();
permissions.add(new SomePermission("otherName"));
SerializedPermissionCollection obj2 = (SerializedPermissionCollection) permissions.writeReplace();
AbstractPermissionCollection resolvedCollection = (AbstractPermissionCollection) obj2.readResolve();
assertTrue(PermissionUtil.equals(permissions, resolvedCollection));
Iterator<Permission> iterator = resolvedCollection.iterator();
assertTrue(iterator.hasNext());
assertEquals(new SomePermission("otherName"), iterator.next());
assertFalse(iterator.hasNext());
}
public static final class SomePermission extends AbstractNameOnlyPermission<SomePermission> {
public SomePermission(final String name) {
super(name);
}
public SomePermission withName(final String name) {
return new SomePermission(name);
}
}
public static final class SomeOtherPermission extends AbstractNameOnlyPermission<SomeOtherPermission> {
public SomeOtherPermission(final String name) {
super(name);
}
public SomeOtherPermission withName(final String name) {
return new SomeOtherPermission(name);
}
}
}