package org.jacorb.test.poa;
/*
* JacORB - a free Java ORB
*
* Copyright (C) 1997-2014 Gerald Brose / The JacORB Team.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Properties;
import org.jacorb.orb.ORB;
import org.jacorb.orb.ParsedIOR;
import org.jacorb.orb.util.CorbaLoc;
import org.jacorb.test.harness.ORBTestCase;
import org.jacorb.test.orb.BasicServerImpl;
import org.junit.Test;
import org.omg.CORBA.Policy;
import org.omg.PortableServer.IdAssignmentPolicyValue;
import org.omg.PortableServer.LifespanPolicyValue;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POAPackage.InvalidPolicy;
/**
* <code>ImplNameTest</code> tests creating transient and persistent
* POAs when using the implname property.
*
* @author Nick Cross
* @author Alphonse Bendt
*/
public class ImplNameTest extends ORBTestCase
{
/**
* We utilise testName so each local ORB can get a different set of properties for each test
* @see org.jacorb.test.harness.ORBTestCase#patchORBProperties(java.util.Properties)
*/
@Override
protected void patchORBProperties(Properties props) throws Exception
{
if (name.getMethodName().equals("testNoImpl1"))
{
props.setProperty("jacorb.implname", "TEST_RANDOM_COMPONENT");
}
else if (name.getMethodName().equals("testNoImpl2"))
{
props.setProperty("jacorb.implname", "TEST_PERSISTENT_COMPONENT");
props.setProperty("jacorb.use_imr", "off");
}
else if (name.getMethodName().equals("testNoImpl3"))
{
props.setProperty("jacorb.implname", "TEST_RANDOM_COMPONENT_TWO");
props.setProperty("jacorb.logfile.append", "on");
}
else if (name.getMethodName().equals("testNoImpl4"))
{
props.setProperty("jacorb.implname", "");
}
else if (name.getMethodName().equals("testNoImpl5"))
{
props.setProperty("jacorb.implname", "");
}
else
{
fail ("Unknown name");
}
}
/**
* <code>testNoImpl1</code> tests that we can create a transient POA
* specifying an implname but the IOR still contains a random component
*/
@Test
public void testNoImpl1 () throws Exception
{
// Create a child POA
POA poa = rootPOA.create_POA
(
"TestServerPOA",
rootPOA.the_POAManager(),
new Policy[]
{
rootPOA.create_id_assignment_policy( IdAssignmentPolicyValue.USER_ID)
}
);
poa.the_POAManager().activate();
// create the object reference
poa.activate_object_with_id("Object".getBytes(), new BasicServerImpl());
org.omg.CORBA.Object obj = poa.id_to_reference( "Object".getBytes() );
ParsedIOR pior = new ParsedIOR(getORB(), orb.object_to_string(obj));
assertTrue
(
CorbaLoc.parseKey( pior.get_object_key()).indexOf
(orbProps.getProperty("jacorb.implname")) == -1
);
}
/**
* <code>testNoImpl2</code> tests that we can create a persistent POA
* specifying an implname and the IOR contains that component
*/
@Test
public void testNoImpl2 () throws Exception
{
// Create a child POA
POA poa = rootPOA.create_POA
(
"TestServerPOA",
rootPOA.the_POAManager(),
new Policy[]
{
rootPOA.create_lifespan_policy( LifespanPolicyValue.PERSISTENT),
rootPOA.create_id_assignment_policy( IdAssignmentPolicyValue.USER_ID)
}
);
poa.the_POAManager().activate();
// create the object reference
poa.activate_object_with_id("Object".getBytes(), new BasicServerImpl());
org.omg.CORBA.Object obj = poa.id_to_reference( "Object".getBytes() );
ParsedIOR pior = new ParsedIOR(getORB(), orb.object_to_string(obj));
assertTrue
(
CorbaLoc.parseKey( pior.get_object_key()).indexOf
(orbProps.getProperty("jacorb.implname")) != -1
);
}
/**
* <code>testNoImpl3</code> tests that we can creating two transient objects
* specifying the same impl and object id information name but the IOR will
* still be different.
*/
@Test
public void testNoImpl3 () throws Exception
{
// Create a child POA
POA poa = rootPOA.create_POA
(
"TestServerPOA",
rootPOA.the_POAManager(),
new Policy[]
{
rootPOA.create_lifespan_policy( LifespanPolicyValue.TRANSIENT),
rootPOA.create_id_assignment_policy( IdAssignmentPolicyValue.USER_ID)
}
);
poa.the_POAManager().activate();
// create the object reference
poa.activate_object_with_id("Object".getBytes(), new BasicServerImpl());
org.omg.CORBA.Object obj = poa.id_to_reference( "Object".getBytes() );
ParsedIOR pior = new ParsedIOR( getORB(), orb.object_to_string(obj));
// Now create number two.
final ORB orb2 = (org.jacorb.orb.ORB)getAnotherORB(orbProps);
rootPOA = (POAHelper.narrow( orb2.resolve_initial_references( "RootPOA" )));
// Create a child POA
poa = rootPOA.create_POA
(
"TestServerPOA",
rootPOA.the_POAManager(),
new Policy[]
{
rootPOA.create_lifespan_policy( LifespanPolicyValue.TRANSIENT),
rootPOA.create_id_assignment_policy( IdAssignmentPolicyValue.USER_ID)
}
);
poa.the_POAManager().activate();
// create the object reference
poa.activate_object_with_id("Object".getBytes(), new BasicServerImpl());
obj = poa.id_to_reference( "Object".getBytes() );
ParsedIOR pior2 = new ParsedIOR( orb2, orb2.object_to_string(obj));
assertTrue
(
! (CorbaLoc.parseKey( pior.get_object_key()).equals
(CorbaLoc.parseKey( pior2.get_object_key())))
);
}
/**
* <code>testNoImpl4</code> tests that we cannot create a persistent POA without
* specifying an implname.
*/
@Test
public void testNoImpl4 () throws Exception
{
try
{
// Create a child POA
rootPOA.create_POA
(
"TestServerPOA",
rootPOA.the_POAManager(),
new Policy[]
{
rootPOA.create_lifespan_policy( LifespanPolicyValue.PERSISTENT),
rootPOA.create_id_assignment_policy( IdAssignmentPolicyValue.USER_ID)
}
);
fail();
}
catch (InvalidPolicy e )
{
// expected
}
}
/**
* <code>testNoImpl5</code> tests that we can create a transient POA without
* specifying an implname.
*/
@Test
public void testNoImpl5 () throws Exception
{
// Create a child POA
rootPOA.create_POA
(
"TestServerPOA",
rootPOA.the_POAManager(),
new Policy[] {
rootPOA.create_id_assignment_policy( IdAssignmentPolicyValue.USER_ID)
}
);
}
}