package test.compliance.relation;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import javax.management.ObjectName;
import javax.management.MalformedObjectNameException;
import javax.management.relation.Role;
import javax.management.relation.RoleList;
import junit.framework.TestCase;
public class RoleListTestCase
extends TestCase
{
boolean setUpDone = false;
Role role1;
Role role2;
public RoleListTestCase(String s)
{
super(s);
}
public void testEmptyConstructors()
{
setUpRoles();
RoleList empty = new RoleList();
assertEquals(0, empty.size());
empty = new RoleList(100);
assertEquals(0, empty.size());
}
public void testBasicConstructor()
{
setUpRoles();
ArrayList roles = new ArrayList();
roles.add(role1);
roles.add(role2);
RoleList full = new RoleList(roles);
assertEquals(2, full.size());
assertEquals(role1, full.get(0));
assertEquals(role2, full.get(1));
Iterator iterator = full.iterator();
assertEquals(role1, iterator.next());
assertEquals(role2, iterator.next());
}
public void testBasicConstructorOrdering()
{
setUpRoles();
ArrayList roles = new ArrayList();
roles.add(role2);
roles.add(role1);
RoleList full = new RoleList(roles);
assertEquals(2, full.size());
assertEquals(role2, full.get(0));
assertEquals(role1, full.get(1));
Iterator iterator = full.iterator();
assertEquals(role2, iterator.next());
assertEquals(role1, iterator.next());
}
public void testBasicConstructorDuplicates()
{
setUpRoles();
ArrayList roles = new ArrayList();
roles.add(role1);
roles.add(role1);
RoleList full = new RoleList(roles);
assertEquals(2, full.size());
assertEquals(role1, full.get(0));
assertEquals(role1, full.get(1));
Iterator iterator = full.iterator();
assertEquals(role1, iterator.next());
assertEquals(role1, iterator.next());
}
public void testErrorHandling()
{
setUpRoles();
ArrayList roles = new ArrayList();
roles.add(role1);
roles.add(null);
boolean caught = false;
try
{
new RoleList(roles);
}
catch (IllegalArgumentException e)
{
caught = true;
}
if (caught == false)
fail ("Constructor accepts null roles");
roles = new ArrayList();
roles.add(role1);
roles.add(new Object());
caught = false;
try
{
new RoleList(roles);
}
catch (IllegalArgumentException e)
{
caught = true;
}
if (caught == false)
fail ("Constructor accepts non roles");
}
public void testSingleAppend()
{
setUpRoles();
RoleList list = new RoleList();
list.add(role1);
assertEquals(1, list.size());
assertEquals(role1.toString(), list.get(0).toString());
Iterator iterator = list.iterator();
assertEquals(role1.toString(), iterator.next().toString());
list.add(role2);
assertEquals(2, list.size());
assertEquals(role1.toString(), list.get(0).toString());
assertEquals(role2.toString(), list.get(1).toString());
iterator = list.iterator();
assertEquals(role1.toString(), iterator.next().toString());
assertEquals(role2.toString(), iterator.next().toString());
boolean caught = false;
try
{
list.add(null);
}
catch (IllegalArgumentException e)
{
caught = true;
}
if (caught == false)
fail ("addRole(null) shouldn't work");
}
public void testSingleAdd()
{
setUpRoles();
RoleList list = new RoleList();
list.add(role1);
list.add(role2);
list.add(1, role1);
assertEquals(3, list.size());
assertEquals(role1.toString(), list.get(0).toString());
assertEquals(role1.toString(), list.get(1).toString());
assertEquals(role2.toString(), list.get(2).toString());
Iterator iterator = list.iterator();
assertEquals(role1.toString(), iterator.next().toString());
assertEquals(role1.toString(), iterator.next().toString());
assertEquals(role2.toString(), iterator.next().toString());
boolean caught = false;
try
{
list.add(4, role1);
}
catch (IndexOutOfBoundsException e)
{
caught = true;
}
if (caught == false)
fail ("Shouldn't be able to add a role outside of valid range");
caught = false;
try
{
list.add(1, null);
}
catch (IllegalArgumentException e)
{
caught = true;
}
if (caught == false)
fail ("Shouldn't be able to add a null at an index");
}
public void testSingleSet()
{
setUpRoles();
RoleList list = new RoleList();
list.add(role1);
list.add(role2);
list.set(1, role1);
assertEquals(2, list.size());
assertEquals(role1.toString(), list.get(0).toString());
assertEquals(role1.toString(), list.get(1).toString());
Iterator iterator = list.iterator();
assertEquals(role1.toString(), iterator.next().toString());
assertEquals(role1.toString(), iterator.next().toString());
boolean caught = false;
try
{
list.set(4, role1);
}
catch (IndexOutOfBoundsException e)
{
caught = true;
}
if (caught == false)
fail ("Shouldn't be able to set a role outside of valid range");
caught = false;
try
{
list.add(1, null);
}
catch (IllegalArgumentException e)
{
caught = true;
}
if (caught == false)
fail ("Shouldn't be able to set a null at an index");
}
public void testMultipleAdd()
{
setUpRoles();
RoleList list = new RoleList();
list.add(role1);
list.add(role1);
RoleList listToAdd = new RoleList();
listToAdd.add(role2);
listToAdd.add(role2);
list.addAll(listToAdd);
assertEquals(4, list.size());
assertEquals(role1.toString(), list.get(0).toString());
assertEquals(role1.toString(), list.get(1).toString());
assertEquals(role2.toString(), list.get(2).toString());
assertEquals(role2.toString(), list.get(3).toString());
Iterator iterator = list.iterator();
assertEquals(role1.toString(), iterator.next().toString());
assertEquals(role1.toString(), iterator.next().toString());
assertEquals(role2.toString(), iterator.next().toString());
assertEquals(role2.toString(), iterator.next().toString());
boolean caught = false;
try
{
list.addAll(null);
}
catch (Exception e)
{
caught = true;
}
if (caught == true)
fail ("Should be able to addAll a null");
}
public void testMultipleLocationAdd()
{
setUpRoles();
RoleList list = new RoleList();
list.add(role1);
list.add(role1);
RoleList listToAdd = new RoleList();
listToAdd.add(role2);
listToAdd.add(role2);
list.addAll(1, listToAdd);
assertEquals(4, list.size());
assertEquals(role1.toString(), list.get(0).toString());
assertEquals(role2.toString(), list.get(1).toString());
assertEquals(role2.toString(), list.get(2).toString());
assertEquals(role1.toString(), list.get(3).toString());
Iterator iterator = list.iterator();
assertEquals(role1.toString(), iterator.next().toString());
assertEquals(role2.toString(), iterator.next().toString());
assertEquals(role2.toString(), iterator.next().toString());
assertEquals(role1.toString(), iterator.next().toString());
boolean caught = false;
try
{
list.addAll(6, listToAdd);
}
catch (IndexOutOfBoundsException e)
{
caught = true;
}
if (caught == false)
fail ("Shouldn't be able to addAll a role outside of valid range");
caught = false;
try
{
list.addAll(1, null);
}
catch (IllegalArgumentException e)
{
caught = true;
}
if (caught == false)
fail ("Shouldn't be able to addAll a null at an index");
}
public void testClone()
{
setUpRoles();
ArrayList roles = new ArrayList();
roles.add(role1);
roles.add(role2);
RoleList full = new RoleList(roles);
RoleList clone = (RoleList) full.clone();
assertEquals(2, clone.size());
assertEquals(role1.toString(), clone.get(0).toString());
assertEquals(role2.toString(), clone.get(1).toString());
Iterator iterator = clone.iterator();
assertEquals(role1.toString(), iterator.next().toString());
assertEquals(role2.toString(), iterator.next().toString());
}
public void testSerialization()
{
setUpRoles();
ArrayList roles = new ArrayList();
roles.add(role1);
roles.add(role2);
RoleList full = new RoleList(roles);
RoleList copy = null;
try
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(full);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
copy = (RoleList) ois.readObject();
}
catch (IOException ioe)
{
fail(ioe.toString());
}
catch (ClassNotFoundException cnfe)
{
fail(cnfe.toString());
}
assertEquals(2, copy.size());
assertEquals(role1.toString(), copy.get(0).toString());
assertEquals(role2.toString(), copy.get(1).toString());
Iterator iterator = copy.iterator();
assertEquals(role1.toString(), iterator.next().toString());
assertEquals(role2.toString(), iterator.next().toString());
}
private void setUpRoles()
{
if (setUpDone == true)
return;
try
{
ArrayList roleValue1 = new ArrayList();
ObjectName a = new ObjectName(":a=a");
ObjectName b = new ObjectName(":b=b");
roleValue1.add(a);
roleValue1.add(b);
role1 = new Role("RoleName1", roleValue1);
ArrayList roleValue2 = new ArrayList();
ObjectName c = new ObjectName(":c=c");
ObjectName d = new ObjectName(":d=d");
roleValue2.add(c);
roleValue2.add(d);
role2 = new Role("RoleName2", roleValue2);
}
catch (MalformedObjectNameException mfone)
{
fail(mfone.toString());
}
setUpDone = true;
}
}