blob: 4401a07d508e8a6bd3806bd774ebd3d77179cc2b [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.
*/
/**
* @author Alexey V. Varlamov
*/
package java.security;
import java.util.*;
import junit.framework.TestCase;
/**
* Tests for <code>UnresolvedPermissionCollection</code> class fields and methods
*
*/
public class UnresolvedPermissionCollection_ImplTest extends TestCase {
/**
* Can add any number of UnresolvedPermission instances, but no any other permissions.
* Cannot add if collection is read-only.
*/
public void testAdd()
{
PermissionCollection pc = new UnresolvedPermissionCollection();
Permission sp = new SecurityPermission("abc");
Permission up1 = new UnresolvedPermission("131234", null, null, null);
Permission up2 = new UnresolvedPermission("KUJKHVKJgyuygjhb", "xcv456", "26r ytf",
new java.security.cert.Certificate[0]);
try {
pc.add(sp);
fail("Should not add non-UnresolvedPermission");
}
catch (IllegalArgumentException ok) {}
pc.add(up1);
pc.add(up1);
pc.add(up2);
pc.setReadOnly();
try {
pc.add(up1);
fail("read-only flag is ignored");
}
catch (SecurityException ok) {}
}
/** This collection never implies any permission. */
public void testImplies()
{
Permission ap = new AllPermission();
Permission up = new UnresolvedPermission("131234", null, null, null);
PermissionCollection pc = up.newPermissionCollection();
assertFalse(pc.implies(ap));
assertFalse(pc.implies(up));
//pc.add(up);
//assertFalse(pc.implies(up));
}
/**
* Should return non-null empty enumeration for empty collection.
* For non-empty collection, should always return enumeration over unique elements.
*/
public void testElements()
{
PermissionCollection pc = new UnresolvedPermissionCollection();
Permission up1 = new UnresolvedPermission("131234", null, null, null);
Permission up2 = new UnresolvedPermission("131234", "ui23rjh", null, null);
Permission up3 = new UnresolvedPermission("KUJKHVKJgyuygjhb", "xcv456", "26r ytf",
new java.security.cert.Certificate[0]);
Enumeration en = pc.elements();
assertNotNull(en);
assertFalse(en.hasMoreElements());
pc.add(up1);
en = pc.elements();
assertTrue(en.hasMoreElements());
assertTrue(up1.equals(en.nextElement()));
assertFalse(en.hasMoreElements());
//no check for duplicate elements - this is too implementation specific.
/*pc.add(up1);
en = pc.elements();
assertTrue(en.hasMoreElements());
assertTrue(up1.equals(en.nextElement()));
assertFalse(en.hasMoreElements());*/
pc.add(up2);
pc.add(up3);
en = pc.elements();
Collection els = new ArrayList();
while (en.hasMoreElements())
{
els.add(en.nextElement());
}
assertEquals(3, els.size());
assertTrue(els.contains(up1) && els.contains(up2) && els.contains(up3));
}
/**
* For null collection passed, should behave correctly:
* <ul>
* <li>If nothing resolved, returns null and does not remove elements
* <li>If some permission resolved, returns proper collection and removes resolved elements
* </ul>
*/
public void testResolveCollection()
{
UnresolvedPermissionCollection upc = new UnresolvedPermissionCollection();
Permission up = new UnresolvedPermission("java.security.AllPermission", "xcv456", "26r ytf",
new java.security.cert.Certificate[0]);
Permission ap = new AllPermission();
Permission bp = new BasicPermission("sfwertsdg"){};
PermissionCollection resolved = upc.resolveCollection(ap, null);
assertNull(resolved);
upc.add(up);
resolved = upc.resolveCollection(bp, null);
assertNull(resolved);
assertTrue(up.equals(upc.elements().nextElement()));
resolved = upc.resolveCollection(ap, null);
assertNotNull(resolved);
assertTrue(ap.equals(resolved.elements().nextElement()));
assertFalse("resolved permission should be removed from unresolved collection", upc.elements().hasMoreElements());
}
/**
* For real collection passed, should behave correctly:
* <ul>
* <li>If nothing resolved, returns the collection and does not remove elements
* <li>If some permission resolved, returns the collection and removes resolved elements
* </ul>
*/
public void testResolveCollectionReturnedCollection()
{
UnresolvedPermissionCollection upc = new UnresolvedPermissionCollection();
Permission up3 = new UnresolvedPermission("java.security.AllPermission", "xcv456", null, null);
Permission ap = new AllPermission();
PermissionCollection apc = new AllPermissionCollection();
PermissionCollection resolved = upc.resolveCollection(ap, apc);
assertSame("should return the passed collection if it is not null", apc, resolved);
// retest the same for case of actually resolved permission
upc.add(up3);
resolved = upc.resolveCollection(ap, apc);
assertSame("should return the passed collection if it is not null", apc, resolved);
}
/**
* Test for case when some permissions of the expected type were not resolved for some reason,
* while others were resolved. Returned collection should contain resolved permissions only,
* and the unresolved collection should retain unresolved ones only.
*/
public void testResolveCollectionPartial()
{
UnresolvedPermissionCollection upc = new UnresolvedPermissionCollection();
String name = "ui23rjh";
Permission up1 = new UnresolvedPermission("java.security.SecurityPermission", null, null, null);
Permission up2 = new UnresolvedPermission("java.security.SecurityPermission", name, null, null);
Permission sp = new SecurityPermission(name);
upc.add(up1);
upc.add(up2);
PermissionCollection resolved = upc.resolveCollection(new SecurityPermission("34po5ijh"), null);
assertNotNull(resolved);
Enumeration els = resolved.elements();
assertTrue(sp.equals(els.nextElement()));
assertFalse(els.hasMoreElements());
els = upc.elements();
assertTrue("resolved permission should be removed from unresolved collection",
up1.equals(els.nextElement()));
assertFalse(els.hasMoreElements());
}
}