/* * Copyright (c) 2011-2012 ICM Uniwersytet Warszawski All rights reserved. * See LICENCE.txt file for licensing information. */ package eu.emi.security.authn.x509.ns; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.security.auth.x500.X500Principal; import static org.junit.Assert.*; import org.junit.Test; import eu.emi.security.authn.x509.helpers.ObserversHandler; import eu.emi.security.authn.x509.helpers.ns.EuGridPmaNamespacesParser; import eu.emi.security.authn.x509.helpers.ns.EuGridPmaNamespacesStore; import eu.emi.security.authn.x509.helpers.ns.NamespacePolicy; import eu.emi.security.authn.x509.impl.X500NameUtils; public class NamespacesParserTest { public static final String PFX = "src/test/resources/namespaces/"; private static Case[] CORRECT_TEST_CASES = { new Case(PFX + "4798da47.0", new String[] { "CN=HKU Grid CA,DC=GRID,DC=HKU,DC=HK", "CN=Test,C=EU", "CN=http://www.net.org,C=EU", }, new String[][] { {"OU=sadsa,O=ddd,CN=sdsss,C=EU", "CN=aasda,C=EU", "SN=sdfas,CN=sdaaa,O=t,C=EU", "CN=ddsadsa,O=t,C=EU"}, {"c=ll,dc=ola,CN=zzz,O=q,C=EU", "CN=sdasd,O=q,C=EU", "E=a@b,CN=sada,UID=sdas,S=dd,C=Ed", "CN=sss,l=sds,C=Ej"}, {"CN=ha\\,ha \\,ha,EMAILADDRESS=c@d,EMAILADDRESS=a@b,EMAILADDRESS=some@email"}, }, new String[][] { {"SN=sdsss,C=EU"}, {"SN=sdfas,CN=sdaaa,O=t,C=EU,O=foo"}, {} }) }; private static String[] INCORRECT_TEST_CASES = { PFX+"00000001.0", PFX+"00000002.0", PFX+"00000003.0", PFX+"00000004.0", PFX+"00000005.0", PFX+"00000006.0" }; @Test public void testEuGridPMADistro() { File f = new File(PFX+"eugridpma-namespaces"); String []files = f.list(); ObserversHandler observers = new ObserversHandler(); for (String file: files) { File toTest = new File(f, file); if (toTest.isDirectory()) continue; System.out.println("Testing file " + file); List<String> policies = Collections.singletonList(f.getPath()+File.separator+file); EuGridPmaNamespacesStore store = new EuGridPmaNamespacesStore(observers, false); store.setPolicies(policies); } } /* @Test public void testInheritance() { EuGridPmaNamespacesParser parser = new EuGridPmaNamespacesParser("src/test/resources/namespaces/4798da47.namespaces"); EuGridPmaNamespacesStore store = new EuGridPmaNamespacesStore(); try { List<NamespacePolicy> parsed = parser.parse(); parser = new EuGridPmaNamespacesParser("src/test/resources/namespaces/12345678.namespaces"); parsed.addAll(parser.parse()); store.setPolicies(parsed); List<NamespacePolicy> p1 = store.getPolicies(X500NameUtils.getX500Principal( "CN=HKU Grid CA,DC=GRID,DC=HKU,DC=HK")); assertEquals(2, p1.size()); List<NamespacePolicy> p2 = store.getPolicies(X500NameUtils.getX500Principal( "CN=Test,C=EU")); assertEquals(3, p2.size()); } catch (IOException e) { e.printStackTrace(); fail(e.toString()); } } */ @Test public void testInheritance() { ObserversHandler observers = new ObserversHandler(); EuGridPmaNamespacesStore store = new EuGridPmaNamespacesStore(observers, false); try { List<String> policies = new ArrayList<String>(); policies.add("src/test/resources/namespaces/4798da47.0"); policies.add("src/test/resources/namespaces/62faf355.0"); store.setPolicies(policies); List<NamespacePolicy> p1 = store.getPolicies(new X500Principal[]{X500NameUtils.getX500Principal( "CN=HKU Grid CA,DC=GRID,DC=HKU,DC=HK")}, 0); assertNotNull(p1); assertEquals(2, p1.size()); List<NamespacePolicy> p2 = store.getPolicies(new X500Principal[]{ X500NameUtils.getX500Principal("CN=Test,C=EU"), X500NameUtils.getX500Principal("CN=HKU Grid CA,DC=GRID,DC=HKU,DC=HK")}, 0); assertNotNull(p2); assertEquals(1, p2.size()); } catch (IOException e) { e.printStackTrace(); fail(e.toString()); } } @Test public void testCorrect() throws IOException { X500Principal rootP = X500NameUtils.getX500Principal("CN=HKU Grid CA,DC=GRID,DC=HKU,DC=HK"); ObserversHandler observers = new ObserversHandler(); for (Case testCase: CORRECT_TEST_CASES) { System.out.println("Testing file " + testCase.file); EuGridPmaNamespacesStore store = new EuGridPmaNamespacesStore(observers, false); testCase.testCase(store, testCase.file, rootP); } } @Test public void testIncorrect() { for (String testCase: INCORRECT_TEST_CASES) { EuGridPmaNamespacesParser parser = new EuGridPmaNamespacesParser(testCase, false); try { parser.parse(); fail("Should get an error but parsing was successful, file " + testCase); } catch (IOException e) { //OK System.out.println("Got an expected error for file " + testCase + ": " + e.getMessage()); } } } }