/*
* 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.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.GlobusNamespacesParser;
import eu.emi.security.authn.x509.helpers.ns.GlobusNamespacesStore;
public class GlobusParserTest
{
public static final String PFX = "src/test/resources/namespaces/";
private static Case[] CORRECT_TEST_CASES = {
new Case(PFX + "f2089c29.0",
new String[] {
"CN=AAA Certificate Services,O=Test Organization,C=EU",
"EMAILADDRESS=email@ee.net,EMAILADDRESS=email2@ee.net,EMAILADDRESS=email@ee.net,C=EU",
"CN=CA2,C=EU",
"CN=CA3,C=EU",
"CN=CA4,C=EU",
"CN=CA5,C=EU"},
new String[][] {
{"CN=AAA Certificate Services,O=Test Organization,C=EU",
"CN=Client Authentication and Email,OU=http://www.example.com,O=Test Organization,C=EU"},
{"EMAILADDRESS=email@ee.net,EMAILADDRESS=email2@ee.net,EMAILADDRESS=email@ee.net,C=EU"},
{"CN=aa,S=bb,EMAILADDRESS=email@ee.net,C=XY",
"SN=1,EMAILADDRESS=email@ee.net,C=ZZ",
"SN=2,EMAILADDRESS=email@ee.net,O=Test,C=EU"},
{"SN=2,EMAILADDRESS=email@ee.net,C=AU"},
{"SN=2,EMAILADDRESS=email@ee.net,C=AU"},
{"CN=alala,C=EU",
"CN=,C=EU",
"CN=asdsa,CN=qaa,C=EU"}
},
new String[][] {
{"CN=AAA Certificate Services,O=Test Organization"},
{"EMAILADDRESS=email@ee.net,EMAILADDRESS=email2@ee.net,EMAILADDRESS=email@ee.net,C=PL"},
{"CN=aa,S=bb,EMAILADDRESS=email@ee.net,C=XYZ",
"CN=x,EMAILADDRESS=email@ee.net,C=X"},
{},
{},
{"C=EU"}
}
)
};
private static String[] INCORRECT_TEST_CASES = {
PFX+"20000001.signing_policy",
PFX+"20000002.signing_policy",
PFX+"20000003.signing_policy",
PFX+"20000004.signing_policy",
PFX+"20000005.signing_policy"
};
// @Test
// public void testOpensslDNParser()
// {
// String rfc = CertificateHelpers.opensslToRfc2253("/C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=AAA Certificate Services");
//
// System.out.println(rfc);
// System.out.println(X500NameUtils.getReadableForm(rfc));
// assertEquals("CN=AAA Certificate Services,O=Comodo CA Limited,L=Salford,ST=Greater Manchester,C=GB",
// rfc);
//
// rfc = CertificateHelpers.opensslToRfc2253("/C=US/ST=UT/L=Salt Lake City/O=The USERTRUST Network/OU=http://www.usertrust.com/CN=UTN-USERFirst-Client Authentication and Email");
//
// System.out.println(rfc);
// System.out.println(X500NameUtils.getReadableForm(rfc));
// assertEquals("CN=UTN-USERFirst-Client Authentication and Email,OU=http://www.usertrust.com,O=The USERTRUST Network,L=Salt Lake City,ST=UT,C=US",
// rfc);
//
// rfc = CertificateHelpers.opensslToRfc2253("/C=??/E=email@ee.net/*", true);
// System.out.println(rfc);
// assertEquals("*,E=email@ee.net,C=??", rfc);
//
// rfc = CertificateHelpers.opensslToRfc2253("/C=US/CN=Company, Inc.");
// System.out.println(rfc);
// System.out.println(X500NameUtils.getReadableForm(rfc));
// assertEquals("CN=Company\\, Inc.,C=US", rfc);
// }
@Test
public void testRegExpConverter()
{
String pattern = GlobusNamespacesParser.makeRegexpClassicWildcard("*,E*=?ail@?*?.net,C=??*");
assertEquals(".*\\Q,E\\E.*\\Q=\\E.\\Qail@\\E..*.\\Q.net,C=\\E...*", pattern);
}
@Test
public void testEuGridPMADistro()
{
File f = new File(PFX+"eugridpma-globus");
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);
GlobusNamespacesStore store = new GlobusNamespacesStore(observers, false);
store.setPolicies(policies);
}
}
@Test
public void testCorrect()
{
X500Principal rootP = new X500Principal("CN=AAA Certificate Services,O=Test Organization,C=EU");
ObserversHandler observers = new ObserversHandler();
for (Case testCase: CORRECT_TEST_CASES)
{
System.out.println("Testing file " + testCase.file);
GlobusNamespacesStore store = new GlobusNamespacesStore(observers, false);
testCase.testCase(store, testCase.file, rootP);
}
}
@Test
public void testIncorrect()
{
for (String testCase: INCORRECT_TEST_CASES)
{
GlobusNamespacesParser parser = new GlobusNamespacesParser(testCase);
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());
}
}
}
}