01f7f939eba03e95a87e8e4a6883d2591336a5eccweng/*
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * The contents of this file are subject to the terms of the Common Development and
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * Distribution License (the License). You may not use this file except in compliance with the
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * License.
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng *
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * specific language governing permission and limitations under the License.
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng *
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * When distributing Covered Software, include this CDDL Header Notice in each file and include
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * Header, with the fields enclosed by brackets [] replaced by your own identifying
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * information: "Portions copyright [year] [name of copyright owner]".
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng *
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * Copyright 2016 ForgeRock AS.
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng */
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengpackage com.iplanet.services.naming;
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengimport static org.assertj.core.api.Assertions.assertThat;
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengimport static org.testng.Assert.assertTrue;
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengimport org.testng.annotations.Test;
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengimport java.io.InputStream;
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengimport java.io.IOException;
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengimport java.util.Hashtable;
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengimport java.util.Map;
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengimport java.util.Properties;
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengimport com.iplanet.services.naming.NamingTableConfigurationFactory.NamingTableConfiguration;
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccwengpublic class NamingTableConfigurationFactoryTest {
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng private final static String MOCK_NAMINGTABLE = "/mocknamingtable.properties";
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng private final static String serverURL = "http://openam.example.com:8080/openam";
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng /**
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * serverIDMapping for a server URL should return only the serverID
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * and not any other ID like siteID. The local server id should be 01.
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng */
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng @Test
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng public void testServerIDMappingMapsURLOnlytoServerID_0() throws Exception {
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // Case 0: Normal standalone server
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // Should pass
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng Hashtable<String, String> namingTable = getMockedNamingTable();
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("iplanet-am-platform-lb-cookie-value-list","01|01");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("iplanet-am-platform-site-id-list", "01");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("openam-am-platform-site-names-list","");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("iplanet-am-platform-server-list",serverURL);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("01",serverURL);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng testServerIDMapping(namingTable);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng }
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng @Test
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng public void testServerIDMappingMapsURLOnlytoServerID_1() throws Exception {
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // Case 1: Site and serverURL setup to be same
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // serverURL is part of the SITE
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // Given serverID = "01" & siteID = "02"
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng Hashtable<String, String> namingTable = getMockedNamingTable();
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("iplanet-am-platform-lb-cookie-value-list","01|01");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("iplanet-am-platform-site-id-list", "01|02,02");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("openam-am-platform-site-names-list","SITE|02");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("iplanet-am-platform-server-list",serverURL);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("01",serverURL);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("02",serverURL);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng testServerIDMapping(namingTable);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng }
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng @Test
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng public void testServerIDMappingMapsURLOnlytoServerID_2() throws Exception {
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // Case 2: serverURL setup and a site with same URL is setup
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // with same URL. However the SITE is not used.
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // Given serverID = "01" & siteID = "02"
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng Hashtable<String, String> namingTable = getMockedNamingTable();
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("iplanet-am-platform-lb-cookie-value-list","01|01");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("iplanet-am-platform-site-id-list", "01,02");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("openam-am-platform-site-names-list","UNUSEDSITE|02");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("iplanet-am-platform-server-list",serverURL);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("01",serverURL);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng namingTable.put("02",serverURL);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng testServerIDMapping(namingTable);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng }
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng private void testServerIDMapping(Hashtable namingTable) throws Exception {
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // When
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng NamingTableConfigurationFactory factory = new NamingTableConfigurationFactory();
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng NamingTableConfiguration config = factory.getConfiguration(namingTable);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng Map<String, String> serverIDTbl = config.getServerIDTable();
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng String result = serverIDTbl.get(serverURL);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // Then
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng // The serverURL shoud be the main serverID and not the siteID.
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng assertTrue(config.getServerIDs().contains("01"),
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng "ServerID not in "+config.getServerIDs().toString());
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng assertThat(result).isEqualTo("01");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng }
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng /**
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * Get a NamingTable hashmap from a configuration file
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng *
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * @param propfile Namingtable property file
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng *
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng * @return Non null Hashtable of NamingTable
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng */
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng private Hashtable<String, String> getMockedNamingTable() throws IOException {
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng Properties prop = new Properties();
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng try (InputStream is = this.getClass().getResourceAsStream(MOCK_NAMINGTABLE)) {
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng if (is == null) {
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng throw new IOException(MOCK_NAMINGTABLE+" missing");
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng }
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng prop.load(is);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng }
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng Map<String, String> map = (Map)prop;
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng return new Hashtable<String, String>(map);
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng }
01f7f939eba03e95a87e8e4a6883d2591336a5eccweng}