/* * 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 static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import java.io.IOException; import java.util.Collections; import java.util.List; import javax.security.auth.x500.X500Principal; import eu.emi.security.authn.x509.helpers.ns.NamespacePolicy; import eu.emi.security.authn.x509.helpers.ns.NamespacesStore; import eu.emi.security.authn.x509.impl.X500NameUtils; public class Case { String file; String[] issuers; String[][] permitted; String[][] denied; public Case(String file, String[] issuers, String[][] permitted, String[][] denied) { if (issuers.length != permitted.length) throw new IllegalArgumentException("Wrong params"); this.file = file; this.issuers = issuers; this.permitted = permitted; this.denied = denied; } public void checkContains(List<NamespacePolicy> nps, int issuer) throws IOException { for (String aval: permitted[issuer]) { boolean found = false; for (NamespacePolicy np: nps) if (np.isSubjectMatching(X500NameUtils.getX500Principal(aval))) { found = true; break; } if (!found) fail(aval + " not permitted by the policy as expected"); } } public void checkNotContains(List<NamespacePolicy> nps, int issuer) throws IOException { for (String aval: denied[issuer]) { for (NamespacePolicy np: nps) if (np.isSubjectMatching(X500NameUtils.getX500Principal(aval))) fail(aval + " permitted by the policy while expected deny"); } } public void testCase(NamespacesStore store, String file, X500Principal rootP) { store.setPolicies(Collections.singletonList(file)); for (int i=0; i<issuers.length; i++) { String issuer = issuers[i]; X500Principal issuerP; try { issuerP = X500NameUtils.getX500Principal(issuer); } catch (IOException e) { e.printStackTrace(); fail(e.toString()); return; //dummy } List<NamespacePolicy> result = store.getPolicies(new X500Principal[]{issuerP, rootP}, 0); assertNotNull("Got no NSP for " + issuerP, result); try { checkContains(result, i); checkNotContains(result, i); } catch (IOException e) { e.printStackTrace(); fail(e.toString()); } } } }