/* * Copyright 1999-2010 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. * * See the License for the specific language governing permissions and limitations under the License. */ package org.globus.gsi.gridmap; import org.globus.gsi.gridmap.GridMap; import org.globus.gsi.gridmap.GridMapLocal; import java.io.ByteArrayInputStream; import java.io.IOException; import junit.framework.TestCase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class GridMapTest extends TestCase { private Log logger = LogFactory.getLog(GridMapTest.class); private static final String GRIDMAP_1 = "\"/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Katarzyna (Kate) Keahey\" keahey,kate\r\n" + "# this is a comment\r\n" + " \r\n" + "\"/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak\" dvorak2\r\n" + "\"/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak\" dvorak\n" + "\"/DC=org/DC=doe grids/OU=People/UID=32845324/Email=john@doe.com/E=john@doe.com\" jdoe,doej\n" + "\"/DC=org/DC=doe grids/OU=People/UID=3284532/USERID=7878/UID=8989/E=john@doe.com\" john_doe\n" + "\"/DC=org/DC=doe grids/OU=People/UID=32845/Email=john@doe.com/Email=another@doe.edu\" doe\n" + "\"/DC=org/DC=doegrids/OU=Services/Email=admin@mcs/CN=host/effable.mcs.anl.gov\" host\n" + "user1DN user1\n" + "\ttestDN\tuser1\n"; private static final String GRIDMAP_2 = "\"/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Katarzyna (Kate) Keahey\"\r\n" + "# this is a comment\r\n" + " \r\n" + "\"/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak\" dvorak\r\n" + "dvorak\n"; private static final String GRIDMAP_3 = "\"/O=myCA/CN=\\\"Foo Bar\\\"\" account\r\n"; private static final String GRIDMAP_4 = "/C=DE/ST=Baden-Württemberg/O=University of Stuttgart/OU=HLRS/CN=Oliver Mangold/E=o.mangold@gmx.de test1"; public void test1() { GridMap map = new GridMap(); try { map.load(new ByteArrayInputStream(GRIDMAP_4.getBytes())); logger.debug("Test 1 " + map.getUserID("test1")); assertTrue(map.load(new ByteArrayInputStream(GRIDMAP_1.getBytes()))); } catch (IOException e) { fail(e.getMessage()); return; } assertEquals("user1", map.getUserID("user1DN")); assertEquals("user1", map.getUserID("testDN")); assertEquals("keahey", map.getUserID("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Katarzyna (Kate) Keahey")); assertEquals("dvorak2", map.getUserID("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak")); assertEquals(null, map.getUserID("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Jarek Gawor")); assertEquals("jdoe", map .getUserID("/DC=org/DC=doe grids/OU=People/UID=32845324/Email=john@doe.com/E=john@doe.com")); assertEquals("jdoe", map .getUserID("/DC=org/DC=doe grids/OU=People/USERID=32845324/Email=john@doe.com/E=john@doe.com")); assertEquals("john_doe", map .getUserID("/DC=org/DC=doe grids/OU=People/UID=3284532/USERID=7878/UID=8989/E=john@doe.com")); assertEquals("john_doe", map .getUserID("/DC=org/DC=doe grids/OU=People/UID=3284532/UID=7878/UID=8989/E=john@doe.com")); assertEquals("john_doe", map .getUserID("/DC=org/DC=doe grids/OU=People/UID=3284532/USERID=7878/UID=8989/EMAIL=john@doe.com")); assertEquals("doe", map .getUserID("/DC=org/DC=doe grids/OU=People/UID=32845/Email=john@doe.com/e=another@doe.edu")); assertEquals("doe", map .getUserID("/DC=org/DC=doe grids/OU=People/UID=32845/e=john@doe.com/Email=another@doe.edu")); assertEquals("host", map .getUserID("/DC=org/DC=doegrids/OU=Services/Email=admin@mcs/CN=host/effable.mcs.anl.gov")); String[] rs = null; String[] expected = null; rs = map.getUserIDs("/DC=org/DC=doe grids/OU=People/UID=32845324/Email=john@doe.com/E=john@doe.com"); expected = new String[] { "jdoe", "doej" }; assertEquals(expected.length, rs.length); for (int i = 0; i < expected.length; i++) { assertEquals(expected[i], rs[i]); } rs = map.getUserIDs("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Katarzyna (Kate) Keahey"); expected = new String[] { "keahey", "kate" }; assertEquals(expected.length, rs.length); for (int i = 0; i < expected.length; i++) { assertEquals(expected[i], rs[i]); } rs = map.getUserIDs("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak"); expected = new String[] { "dvorak2", "dvorak" }; assertEquals(expected.length, rs.length); for (int i = 0; i < expected.length; i++) { assertEquals(expected[i], rs[i]); } } public void testLocalLookup() { GridMap map = new GridMapLocal(); String username = System.getProperty("user.name"); assertEquals(username, map.getUserID("whatever")); System.setProperty("user.name", "ROot"); assertEquals(null, map.getUserID("whatever")); System.setProperty("user.name", "AdminISTRATOR"); assertEquals(null, map.getUserID("whatever")); System.setProperty("user.name", username); assertEquals(username, map.getUserID("whatever2")); } public void test3() { GridMap map = new GridMap(); try { map.load(new ByteArrayInputStream(GRIDMAP_1.getBytes())); } catch (IOException e) { fail(e.getMessage()); return; } assertEquals(true, map.checkUser("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Katarzyna (Kate) Keahey", "keahey")); assertEquals(true, map.checkUser("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Katarzyna (Kate) Keahey", "kate")); assertEquals(true, map.checkUser("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak", "dvorak")); assertEquals(false, map.checkUser("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak", "dvorakkkkk")); assertEquals(false, map.checkUser("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorakkkk", "dvorak")); assertEquals(false, map.checkUser("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Jarek Gawor", "gawor")); } public void test4() { GridMap map = new GridMap(); try { map.load(new ByteArrayInputStream(GRIDMAP_1.getBytes())); } catch (IOException e) { fail(e.getMessage()); return; } assertEquals("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak", map.getGlobusID("dvorak")); assertEquals("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Katarzyna (Kate) Keahey", map.getGlobusID("keahey")); assertEquals("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Katarzyna (Kate) Keahey", map.getGlobusID("kate")); assertEquals(null, map.getGlobusID("gawor")); } public void test5() { GridMap map = new GridMap(); try { map.load(new ByteArrayInputStream(GRIDMAP_1.getBytes())); } catch (IOException e) { fail(e.getMessage()); return; } map.map("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Jarek Gawor", "gawor"); assertEquals("gawor", map.getUserID("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Jarek Gawor")); map.map("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak", "dvorak2"); assertEquals(true, map.checkUser("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak", "dvorak")); assertEquals(true, map.checkUser("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak", "dvorak2")); } public void testIgnoreErrors() { GridMap map = new GridMap(); try { map.load(new ByteArrayInputStream(GRIDMAP_2.getBytes())); fail("did not throw exception"); } catch (IOException e) { } assertTrue(map.getUserID("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak") == null); map.setIgnoreErrors(false); try { map.load(new ByteArrayInputStream(GRIDMAP_2.getBytes())); fail("did not throw exception"); } catch (IOException e) { } assertTrue(map.getUserID("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak") == null); map.setIgnoreErrors(true); try { assertFalse(map.load(new ByteArrayInputStream(GRIDMAP_2.getBytes()))); } catch (IOException e) { e.printStackTrace(); fail("Unexpected error"); } assertEquals("dvorak", map.getUserID("/O=Grid/O=Globus/OU=mcs.anl.gov/CN=Michael Dvorak")); } public void test6() throws Exception { GridMap map = new GridMap(); try { map.load(new ByteArrayInputStream(GRIDMAP_3.getBytes())); } catch (IOException e) { fail(e.getMessage()); return; } assertTrue((map.getAllGlobusID("account").length) == 1); String[] globusId = map.getAllGlobusID("account"); logger.debug("** " + globusId[0]); assertEquals("account", map.getUserID("/O=myCA/CN=\"Foo Bar\"")); } }