package org.jacorb.test.poa;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.util.Arrays;
import junit.framework.AssertionFailedError;
import org.jacorb.poa.except.POAInternalError;
import org.jacorb.poa.policy.IdAssignmentPolicy;
import org.jacorb.poa.policy.IdUniquenessPolicy;
import org.jacorb.poa.policy.ImplicitActivationPolicy;
import org.jacorb.poa.policy.LifespanPolicy;
import org.jacorb.poa.policy.RequestProcessingPolicy;
import org.jacorb.poa.policy.ServantRetentionPolicy;
import org.jacorb.poa.policy.ThreadPolicy;
import org.jacorb.poa.util.POAUtil;
import org.junit.Test;
import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID;
import org.omg.PortableServer.ID_UNIQUENESS_POLICY_ID;
import org.omg.PortableServer.IMPLICIT_ACTIVATION_POLICY_ID;
import org.omg.PortableServer.IdAssignmentPolicyValue;
import org.omg.PortableServer.IdUniquenessPolicyValue;
import org.omg.PortableServer.ImplicitActivationPolicyValue;
import org.omg.PortableServer.LIFESPAN_POLICY_ID;
import org.omg.PortableServer.LifespanPolicyValue;
import org.omg.PortableServer.REQUEST_PROCESSING_POLICY_ID;
import org.omg.PortableServer.RequestProcessingPolicyValue;
import org.omg.PortableServer.SERVANT_RETENTION_POLICY_ID;
import org.omg.PortableServer.ServantRetentionPolicyValue;
import org.omg.PortableServer.THREAD_POLICY_ID;
import org.omg.PortableServer.ThreadPolicyValue;
/**
* A unit test of several of the stand-alone methods in org.jacorb.poa.POAUtil.
* @author Andre Spiegel spiegel@gnu.org
*/
public class POAUtilTest
{
@Test
public void test_mask_id_1()
{
do_mask_id ("abc", "abc");
}
@Test
public void test_mask_id_2()
{
do_mask_id ("a", "a");
}
@Test
public void test_mask_id_3()
{
do_mask_id ("", "");
}
@Test
public void test_mask_id_4()
{
do_mask_id ("a/b", "a&%b");
}
@Test
public void test_mask_id_5()
{
do_mask_id ("a//b", "a&%&%b");
}
@Test
public void test_mask_id_6()
{
do_mask_id ("a&b", "a&&b");
}
@Test
public void test_mask_id_7()
{
do_mask_id ("a&&b", "a&&&&b");
}
@Test
public void test_mask_id_8()
{
do_mask_id ("/", "&%");
}
@Test
public void test_mask_id_9()
{
do_mask_id ("&", "&&");
}
@Test
public void test_mask_id_10()
{
do_mask_id ("&%", "&&%");
}
@Test
public void test_unmask_id_1()
{
do_unmask_id ("abc", "abc");
}
@Test
public void test_unmask_id_2()
{
do_unmask_id ("a", "a");
}
@Test
public void test_unmask_id_3()
{
do_unmask_id ("", "");
}
@Test
public void test_unmask_id_4()
{
do_unmask_id ("a&%c", "a/c");
}
@Test
public void test_unmask_id_5()
{
do_unmask_id ("a&&c", "a&c");
}
@Test
public void test_unmask_id_6()
{
do_unmask_id ("a&%%c", "a/%c");
}
@Test
public void test_unmask_id_7()
{
do_unmask_id ("&&", "&");
}
@Test
public void test_unmask_id_8()
{
do_unmask_id ("&%", "/");
}
@Test
public void test_unmask_id_9()
{
do_unmask_id ("%&&%", "%&%");
}
@Test
public void test_unmask_id_10()
{
try
{
do_unmask_id ("&", "");
fail ("illegal oid, should have raised an exception");
}
catch (ArrayIndexOutOfBoundsException ex)
{
// ok
}
}
@Test
public void test_unmask_id_11()
{
try
{
do_unmask_id ("ab&cd", "");
fail ("illegal oid, should have raised an exception");
}
catch (POAInternalError ex)
{
// ok
}
}
@Test
public void test_convert_policy()
{
// ThreadPolicy
assertEquals
(
"ORB_CTRL_MODEL",
POAUtil.convert (null, THREAD_POLICY_ID.value)
);
assertEquals
(
"ORB_CTRL_MODEL",
POAUtil.convert
(
new ThreadPolicy (ThreadPolicyValue.ORB_CTRL_MODEL),
THREAD_POLICY_ID.value)
);
assertEquals
(
"SINGLE_THREAD_MODEL",
POAUtil.convert
(
new ThreadPolicy (ThreadPolicyValue.SINGLE_THREAD_MODEL),
THREAD_POLICY_ID.value)
);
// LifespanPolicy
assertEquals
(
"TRANSIENT",
POAUtil.convert (null, LIFESPAN_POLICY_ID.value)
);
assertEquals
(
"TRANSIENT",
POAUtil.convert
(
new LifespanPolicy (LifespanPolicyValue.TRANSIENT),
LIFESPAN_POLICY_ID.value)
);
assertEquals
(
"PERSISTENT",
POAUtil.convert
(
new LifespanPolicy (LifespanPolicyValue.PERSISTENT),
LIFESPAN_POLICY_ID.value)
);
// IdUniquenessPolicy
assertEquals
(
"UNIQUE_ID",
POAUtil.convert (null, ID_UNIQUENESS_POLICY_ID.value)
);
assertEquals
(
"UNIQUE_ID",
POAUtil.convert
(
new IdUniquenessPolicy (IdUniquenessPolicyValue.UNIQUE_ID),
ID_UNIQUENESS_POLICY_ID.value)
);
assertEquals
(
"MULTIPLE_ID",
POAUtil.convert
(
new IdUniquenessPolicy (IdUniquenessPolicyValue.MULTIPLE_ID),
ID_UNIQUENESS_POLICY_ID.value)
);
// IdAssignmentPolicy
assertEquals
(
"SYSTEM_ID",
POAUtil.convert (null, ID_ASSIGNMENT_POLICY_ID.value)
);
assertEquals
(
"SYSTEM_ID",
POAUtil.convert
(
new IdAssignmentPolicy (IdAssignmentPolicyValue.SYSTEM_ID),
ID_ASSIGNMENT_POLICY_ID.value)
);
assertEquals
(
"USER_ID",
POAUtil.convert
(
new IdAssignmentPolicy (IdAssignmentPolicyValue.USER_ID),
ID_ASSIGNMENT_POLICY_ID.value)
);
// ServantRetentionPolicy
assertEquals
(
"RETAIN",
POAUtil.convert (null, SERVANT_RETENTION_POLICY_ID.value)
);
assertEquals
(
"RETAIN",
POAUtil.convert
(
new ServantRetentionPolicy (ServantRetentionPolicyValue.RETAIN),
SERVANT_RETENTION_POLICY_ID.value)
);
assertEquals
(
"NON_RETAIN",
POAUtil.convert
(
new ServantRetentionPolicy (ServantRetentionPolicyValue.NON_RETAIN),
SERVANT_RETENTION_POLICY_ID.value)
);
// RequestProcessingPolicy
assertEquals
(
"USE_ACTIVE_OBJECT_MAP_ONLY",
POAUtil.convert (null, REQUEST_PROCESSING_POLICY_ID.value)
);
assertEquals
(
"USE_ACTIVE_OBJECT_MAP_ONLY",
POAUtil.convert
(
new RequestProcessingPolicy (RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY),
REQUEST_PROCESSING_POLICY_ID.value)
);
assertEquals
(
"USE_SERVANT_MANAGER",
POAUtil.convert
(
new RequestProcessingPolicy (RequestProcessingPolicyValue.USE_SERVANT_MANAGER),
REQUEST_PROCESSING_POLICY_ID.value)
);
assertEquals
(
"USE_DEFAULT_SERVANT",
POAUtil.convert
(
new RequestProcessingPolicy (RequestProcessingPolicyValue.USE_DEFAULT_SERVANT),
REQUEST_PROCESSING_POLICY_ID.value)
);
// ImplicitActicationPolicy
assertEquals
(
"NO_IMPLICIT_ACTIVATION",
POAUtil.convert (null, IMPLICIT_ACTIVATION_POLICY_ID.value)
);
assertEquals
(
"NO_IMPLICIT_ACTIVATION",
POAUtil.convert
(
new ImplicitActivationPolicy (ImplicitActivationPolicyValue.NO_IMPLICIT_ACTIVATION),
IMPLICIT_ACTIVATION_POLICY_ID.value)
);
assertEquals
(
"IMPLICIT_ACTIVATION",
POAUtil.convert
(
new ImplicitActivationPolicy (ImplicitActivationPolicyValue.IMPLICIT_ACTIVATION),
IMPLICIT_ACTIVATION_POLICY_ID.value)
);
}
private void do_mask_id (byte[] input, byte[] expected)
{
byte[] result = POAUtil.maskId (input);
assertArraysEqual (expected, result);
}
private void do_mask_id (String input, String expected)
{
do_mask_id (input.getBytes(), expected.getBytes());
}
private void do_unmask_id (byte[] input, byte[] expected)
{
byte[] result = POAUtil.unmaskId (input);
assertArraysEqual (expected, result);
}
private void do_unmask_id (String input, String expected)
{
do_unmask_id (input.getBytes(), expected.getBytes());
}
private void assertArraysEqual (byte[] expected, byte[] result)
{
if (!Arrays.equals (expected, result))
{
throw new AssertionFailedError
(
"expected: <" + byteArrayToString (expected) + ">, but was: <"
+ byteArrayToString (result) + ">"
);
}
}
private String byteArrayToString (byte[] data)
{
StringBuffer result = new StringBuffer();
for (int i=0; i<data.length; i++)
{
result.append (Integer.toHexString (data[i]));
if (i < data.length-1) result.append (' ');
}
return result.toString();
}
}