package org.jacorb.test.orb; import static org.junit.Assert.assertTrue; import java.net.InetAddress; import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; import java.util.Properties; import org.jacorb.orb.ParsedIOR; import org.jacorb.orb.etf.ProfileBase; import org.jacorb.orb.iiop.IIOPAddress; import org.jacorb.test.BasicServer; import org.jacorb.test.BasicServerHelper; import org.jacorb.test.harness.ClientServerSetup; import org.jacorb.test.harness.FixedPortClientServerTestCase; import org.jacorb.test.harness.TestUtils; import org.junit.After; import org.junit.Assume; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; import org.omg.ETF.Profile; import org.omg.IOP.TAG_ALTERNATE_IIOP_ADDRESS; import org.omg.IOP.TAG_CODE_SETS; import org.omg.IOP.TaggedComponent; /** * Verify the correct number of profiles/TAG_ALTERNATE_IIOP_ADDRESS in the IOR. */ @RunWith(Parameterized.class) public class IORTest extends FixedPortClientServerTestCase { /** * Total count of non-loopback interfaces */ private final static int nonLocalInterfaceCount; static { int counter = 0; LinkedList<InetAddress> n = IIOPAddress.getNetworkInetAddresses(); for (InetAddress ia : n) { if (!ia.isLoopbackAddress() && !ia.isLinkLocalAddress()) { counter++; } } nonLocalInterfaceCount = counter; } @BeforeClass public static void beforeClassSetUp() throws Exception { Assume.assumeFalse(TestUtils.isSSLEnabled); } private BasicServer server; @Parameter public String key; @Parameter(value = 1) public String value; @Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object [][] { { "jacorb.iiop.alternate_addresses", "192.168.123.7:" + getNextAvailablePort() }, { "-ORBListenEndpoints", "'iiop://:" + getNextAvailablePort() + ",iiop://:" + getNextAvailablePort() + "'" } } ); } private int matchCount; @Before public void setUp() throws Exception { Properties properties = new Properties (); String [] orbargs; // We have to match interfaces that are not in the primary profile. Therefore // there will always be one less than we have. We can't have negative amount of // interfaces. int interfaceCount = (nonLocalInterfaceCount - 1) < 0 ? 0 : (nonLocalInterfaceCount - 1); // If the key (from the parameters above starts with '-' it is an ORB argument if (key.startsWith("-")) { orbargs = new String [] { key, value }; } // Else its a property else { orbargs = new String [] {}; properties.put(key, value); interfaceCount++; } properties.put("jacorb.codeset", "true"); properties.put("org.omg.PortableInterceptor.ORBInitializerClass.standard_init","org.jacorb.orb.standardInterceptors.IORInterceptorInitializer"); matchCount = interfaceCount; setup = new ClientServerSetup(null, "org.jacorb.test.orb.BasicServerImpl", orbargs, properties, properties); server = BasicServerHelper.narrow( setup.getServerObject() ); } @After public void tearDown() throws Exception { setup.tearDown(); server._release(); } @Test public void profileSize() { ParsedIOR p = new ParsedIOR (setup.getORB(), setup.getServerIOR()); // If we're not using -ORBListenEndpoints then expect one profile assertTrue ("Should be two profiles", p.getProfiles().size() == ( key.startsWith("-") ? 2 : 1)); } @Test public void interfaceCount() { ParsedIOR p = new ParsedIOR (setup.getORB(), setup.getServerIOR()); TaggedComponent[] taggedComponents = ((ProfileBase)p.getEffectiveProfile()).getComponents().asArray(); int tagCount = 0; for (TaggedComponent t : taggedComponents) { if ( t.tag == TAG_ALTERNATE_IIOP_ADDRESS.value) { tagCount++; } } assertTrue ("Network interface count does not match TAG_ALTERNATE_IIOP_ADDRESS: "+ setup.getServerIOR() + " and " + tagCount + " and " + matchCount , tagCount == matchCount); } @Test public void codesetCount() { ParsedIOR pior = new ParsedIOR (setup.getORB(), setup.getServerIOR()); int codesetTagCount = 0; for (Profile p : pior.getProfiles()) { for (TaggedComponent t : ((ProfileBase)p).getComponents().asArray()) { if ( t.tag == TAG_CODE_SETS.value) { codesetTagCount++; } } } assertTrue ("Profile count does not having matching TAG_CODE_SETS: " + setup.getServerIOR() + " and " + codesetTagCount , codesetTagCount == pior.getProfiles().size()); } }