/*
* Copyright (c) 2011 ICM Uniwersytet Warszawski All rights reserved.
* See LICENCE file for licensing information.
*/
package eu.emi.security.authn.x509.impl;
import static org.junit.Assert.*;
import java.io.IOException;
import javax.security.auth.x500.X500Principal;
import org.junit.Assert;
import org.bouncycastle.asn1.x500.style.BCStyle;
import org.junit.Test;
import eu.emi.security.authn.x509.helpers.DNComparator;
public class X500NameUtilsTest
{
private static final String DN1 = "1.3.6.1.4.1.42.2.11.2.1=127.0.0.1, CN=Tomasz Hajto+CN=Tomasz Wałdoch,C=PL";
private static final String DN2 = "1.2.840.113549.1.9.1=#160b666f6f406261722e6e6574,DC=a,DC=B, C=PL";
private static final String DN3 = "1.2.840.113549.1.9.1=#160b666f6f406261722e6e6574,DC=a,DC=B,EMAIL=a@b+E=b@c,C=PL";
@Test
public void testPrint()
{
String rf = X500NameUtils.getReadableForm(DN1);
assertEquals("IP=127.0.0.1,CN=Tomasz Hajto+CN=Tomasz Wałdoch,C=PL", rf);
rf = X500NameUtils.getReadableForm(DN2);
assertEquals("EMAILADDRESS=foo@bar.net,DC=a,DC=B,C=PL", rf);
rf = X500NameUtils.getReadableForm("");
assertEquals("", rf);
}
@Test
public void testGetValues()
{
String[] ret = X500NameUtils.getAttributeValues(DN2, BCStyle.E);
assertEquals(1, ret.length);
assertEquals("foo@bar.net", ret[0]);
ret = X500NameUtils.getAttributeValues(DN3, BCStyle.E);
assertEquals(3, ret.length);
assertEquals("foo@bar.net", ret[0]);
assertEquals("a@b", ret[1]);
assertEquals("b@c", ret[2]);
}
/**
*
* CN commonName (2.5.4.3)
* L localityName (2.5.4.7)
* ST stateOrProvinceName (2.5.4.8)
* O organizationName (2.5.4.10)
* OU organizationalUnitName (2.5.4.11)
* C countryName (2.5.4.6)
* STREET streetAddress (2.5.4.9)
* DC domainComponent (0.9.2342.19200300.100.1.25)
* UID userId (0.9.2342.19200300.100.1.1)
*/
@Test
public void testDNs()
{
String dnA[] = {
"CN=James \\\"Jim\\\" Smith\\, III,DC=net,L=Before\0dAfter,1.3.6.1.4.1.1466.0=#04024869,ST=Lu\\C4\\8Di\\C4\\87,O=org,OU=OtherUnit,C=Country+STREET=Multi valued Avenue+0.9.2342.19200300.100.1.1=multiValuedUid,EMAIL=email@is.also.recognized",
"CN=James \\\"Jim\\\" Smith\\, III,DC=NET,L=Before\0dAfter,1.3.6.1.4.1.1466.0=#04024869,ST=Lu\\C4\\8Di\\C4\\87,O=org,OU=OtherUnit,C=Country+STREET=Multi valued Avenue+0.9.2342.19200300.100.1.1=multiValuedUid,EMAIL=email@is.ALSO.recognized",
"CN=James \\\"Jim\\\" Smith\\, III, DC=net,L=Before\0dAfter,1.3.6.1.4.1.1466.0=#04024869,ST=Lu\\C4\\8Di\\C4\\87,O=org,OU=OtherUnit,C=Country+STREET=Multi valued Avenue+0.9.2342.19200300.100.1.1=multivaluedUid,EMAIL=email@is.also.recognized",
};
checkAll(true, dnA);
String src = "CN=Ala ma kota, DC=nEt,EMAIL=golBi@localhost+DC=FFFF+C=PL,DC=kkL,EMAILADDRESS=ss@asddsfdsDDDD";
String normalized = DNComparator.preNormalize(src);
X500Principal x500 = new X500Principal(normalized);
String dnB[] = {
src,
normalized,
x500.getName(),
x500.getName(X500Principal.CANONICAL),
new X500Principal(src).getName(),
new X500Principal(src).getName(X500Principal.CANONICAL)
};
checkAll(true, dnB);
String dn1 = "EMAIL=e@at";
String dn2 = "EMAIL=E@At";
dn1 = new X500Principal(dn1).getName(X500Principal.CANONICAL);
dn2 = new X500Principal(dn2).getName(X500Principal.CANONICAL);
assertTrue(X500NameUtils.equal(dn1, dn2));
}
private void checkAll(boolean mode, String []dn)
{
for (int i=0; i<dn.length; i++)
for (int j=0; j<dn.length; j++)
{
boolean res = X500NameUtils.equal(dn[i], dn[j]);
if (mode && !res)
{
String msg = "DN " + i + " and " + j + " reported to be different.";
System.err.println(msg);
fail(msg);
}
if (!mode && res)
{
String msg = "DN " + i + " and " + j + " reported to be equivalent.";
System.err.println(msg);
fail(msg);
}
}
}
@Test
public void test()
{
try
{
X500Principal x500 = X500NameUtils.getX500Principal("CN=a,O=test,EMAIL=some@email.net,Gender=FEMALE");
Assert.assertEquals("CN=a, O=test, EMAILADDRESS=some@email.net, OID.1.3.6.1.5.5.7.9.3=FEMALE",
x500.toString());
} catch (IOException e)
{
e.printStackTrace();
Assert.fail(e.toString());
}
}
}