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.CMCStatus; import org.bouncycastle.util.test.SimpleTest; public class CMCStatusTest extends SimpleTest { public static void main(String[] args) { runTest(new CMCStatusTest()); } public String getName() { return "CMCStatusTest"; } // From Page 68, CMC: Structures RFC 5272 private static Object[][] types = new Object[][]{ {"success", new Long(0L) }, // -- reserved (1), {"failed", new Long(2L) }, {"pending", new Long(3L) }, {"noSupport", new Long(4L) }, {"confirmRequired", new Long(5L) }, {"popRequired", new Long(6L) }, {"partial", new Long(7L) } }; 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 CMCStatus presets by // requiring this test to be updated equally to ensure it will pass. // Field rangeField = CMCStatus.class.getDeclaredField("range"); rangeField.setAccessible(true); Map range = (Map)rangeField.get(null); isEquals("Range in CMCStatus 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 CMCStatus 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 CMCStatusTest contains a value not in the CMCStatus ('range') map, value was: " + j.toString()); } } // // Test encoding / decoding // byte[] b = CMCStatus.failed.getEncoded(); CMCStatus r = CMCStatus.getInstance(b); isEquals(r, CMCStatus.failed); } }