blob: d134a8c83287db2c2803199031f6eea98fe561a9 [file] [log] [blame]
package org.bouncycastle.asn1.test;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.cmc.CMCFailInfo;
import org.bouncycastle.util.test.SimpleTest;
public class CMCFailInfoTest
extends SimpleTest
{
// From Page 68, CMC: Structures RFC 5272
private static Object[][] types = new Object[][]{
{"badAlg", new Long(0L) },
{"badMessageCheck", new Long(1L) },
{"badRequest", new Long(2L) },
{"badTime", new Long(3L) },
{"badCertId", new Long(4L) },
{"unsupportedExt", new Long(5L) },
{"mustArchiveKeys", new Long(6L) },
{"badIdentity", new Long(7L) },
{"popRequired", new Long(8L) },
{"popFailed", new Long(9L) },
{"noKeyReuse", new Long(10L) },
{"internalCAError", new Long(11L) },
{"tryLater", new Long(12L) },
{"authDataFail", new Long(13L)}
};
private static Map typesMap = new HashMap();
static
{
for (int t = 0; t < types.length; t++)
{
typesMap.put(types[t][1], types[t][0]);
}
}
public void performTest()
throws Exception
{
//
// Check that range has changed and this test has not been updated or vice versa.
// It is intended to act as a double check on the addition of CMCFailInfo presets by
// requiring this test to be updated equally to ensure it will pass.
//
Field rangeField = CMCFailInfo.class.getDeclaredField("range");
rangeField.setAccessible(true);
Map range = (Map)rangeField.get(null);
isEquals("Range in CMCFailInfo does not match test data.",range.size(), types.length);
for (Iterator rangeKeys = range.keySet().iterator(); rangeKeys.hasNext(); )
{ Object j = rangeKeys.next();
if (!typesMap.containsKey(new Long(((ASN1Integer)j).getValue().longValue()))) {
fail("The 'range' map in CMCFailInfo contains a value not in the test ('typesMap') map, value was: "+j.toString());
}
}
for (Iterator typeKeys = typesMap.keySet().iterator(); typeKeys.hasNext(); )
{ Object j = typeKeys.next();
if (!range.containsKey(new ASN1Integer(((Long)j).longValue()))) {
fail("The 'typesMap' map in CMCFailInfoTest contains a value not in the CMCFailInfo ('range') map, value was: "+j.toString());
}
}
//
// Test encoding / decoding
//
byte[] b = CMCFailInfo.authDataFail.getEncoded();
CMCFailInfo r = CMCFailInfo.getInstance(b);
isEquals(r,CMCFailInfo.authDataFail);
}
public String getName()
{
return "CMCFailInfoTest";
}
public static void main(String[] args)
{
runTest(new CMCFailInfoTest());
}
}