diff options
Diffstat (limited to 'pki/base')
21 files changed, 1678 insertions, 4 deletions
diff --git a/pki/base/CMakeLists.txt b/pki/base/CMakeLists.txt index 019564ea..6230f568 100644 --- a/pki/base/CMakeLists.txt +++ b/pki/base/CMakeLists.txt @@ -2,6 +2,7 @@ project(base) # The order is important! # add_subdirectory(osutil) +add_subdirectory(test) if (APPLICATION_FLAVOR_PKI_CORE) add_subdirectory(setup) add_subdirectory(symkey) diff --git a/pki/base/common/test/CMakeLists.txt b/pki/base/common/test/CMakeLists.txt index 8618bd02..7ded236f 100644 --- a/pki/base/common/test/CMakeLists.txt +++ b/pki/base/common/test/CMakeLists.txt @@ -51,15 +51,14 @@ set(pki-common-test_SRCS com/netscape/cmscore/request/RequestTest.java com/netscape/cmscore/test/CMSBaseTestCase.java com/netscape/cmscore/test/TestHelper.java - com/netscape/test/TestListener.java - com/netscape/test/TestRunner.java ) set(CMAKE_JAVA_INCLUDE_PATH ${PKI_NSUTIL_JAR} ${PKI_CMSUTIL_JAR} ${PKI_CERTSRV_JAR} ${PKI_CMS_JAR} ${PKI_CMSCORE_JAR} ${PKI_CMSBUNDLE_JAR} ${LDAPJDK_JAR} ${SERVLET_JAR} ${VELOCITY_JAR} ${XALAN_JAR} ${XERCES_JAR} - ${JSS_JAR} ${OSUTIL_JAR} ${SYMKEY_JAR} ${JUNIT_JAR} + ${JSS_JAR} ${OSUTIL_JAR} ${SYMKEY_JAR} + ${PKI_TEST_JAR} ${JUNIT_JAR} ) set(CMAKE_JAVA_TARGET_VERSION ${APPLICATION_VERSION}) @@ -72,6 +71,7 @@ add_jar(pki-common-test ${pki-common-test_SRCS}) add_dependencies(pki-common-test osutil pki-nsutil pki-cmsutil pki-certsrv pki-cms pki-cmscore pki-cmsbundle + pki-test ) # create test target @@ -83,7 +83,8 @@ add_junit_test(test-pki-common ${PKI_NSUTIL_JAR} ${PKI_CMSUTIL_JAR} ${PKI_CERTSRV_JAR} ${PKI_CMS_JAR} ${PKI_CMSCORE_JAR} ${PKI_CMSBUNDLE_JAR} ${LDAPJDK_JAR} ${SERVLET_JAR} ${VELOCITY_JAR} - ${JSS_JAR} ${OSUTIL_JAR} ${SYMKEY_JAR} ${JUNIT_JAR} + ${JSS_JAR} ${OSUTIL_JAR} ${SYMKEY_JAR} + ${PKI_TEST_JAR} ${JUNIT_JAR} TESTS com.netscape.certsrv.authentication.AuthTokenTest com.netscape.certsrv.request.AgentApprovalsTest diff --git a/pki/base/test/CMakeLists.txt b/pki/base/test/CMakeLists.txt new file mode 100644 index 00000000..9a4accee --- /dev/null +++ b/pki/base/test/CMakeLists.txt @@ -0,0 +1,3 @@ +project(test Java) + +add_subdirectory(src) diff --git a/pki/base/test/src/CMakeLists.txt b/pki/base/test/src/CMakeLists.txt new file mode 100644 index 00000000..3631baa7 --- /dev/null +++ b/pki/base/test/src/CMakeLists.txt @@ -0,0 +1,20 @@ +project(pki-test_java Java) + +# TODO: create CMake function to find all Java files +set(pki-test_java_SRCS + com/netscape/test/TestListener.java + com/netscape/test/TestRunner.java +) + +set(CMAKE_JAVA_INCLUDE_PATH + ${XALAN_JAR} ${XERCES_JAR} ${JUNIT_JAR} +) + +set(CMAKE_JAVA_TARGET_VERSION ${APPLICATION_VERSION}) + +# build test jar file +# TODO: create CMake function to compile without building jar file +# TODO: build test only when the test is invoked +set(CMAKE_JAR_CLASSES_PREFIX com/netscape) +add_jar(pki-test ${pki-test_java_SRCS}) +set(PKI_TEST_JAR ${pki-test_JAR_FILE} CACHE INTERNAL "pki-test jar file")
\ No newline at end of file diff --git a/pki/base/common/test/com/netscape/test/TestListener.java b/pki/base/test/src/com/netscape/test/TestListener.java index af6c9bf7..af6c9bf7 100644 --- a/pki/base/common/test/com/netscape/test/TestListener.java +++ b/pki/base/test/src/com/netscape/test/TestListener.java diff --git a/pki/base/common/test/com/netscape/test/TestRunner.java b/pki/base/test/src/com/netscape/test/TestRunner.java index 7eb4bfd3..7eb4bfd3 100644 --- a/pki/base/common/test/com/netscape/test/TestRunner.java +++ b/pki/base/test/src/com/netscape/test/TestRunner.java diff --git a/pki/base/util/CMakeLists.txt b/pki/base/util/CMakeLists.txt index 593e0637..b8600ba4 100644 --- a/pki/base/util/CMakeLists.txt +++ b/pki/base/util/CMakeLists.txt @@ -1,3 +1,4 @@ project(util Java) add_subdirectory(src) +add_subdirectory(test) diff --git a/pki/base/util/test/CMakeLists.txt b/pki/base/util/test/CMakeLists.txt new file mode 100644 index 00000000..119b4dd3 --- /dev/null +++ b/pki/base/util/test/CMakeLists.txt @@ -0,0 +1,60 @@ +project(pki-util-test Java) + +# TODO: create CMake function to find all Java files +set(pki-util-test_SRCS + com/netscape/security/util/BMPStringTest.java + com/netscape/security/util/IA5StringTest.java + com/netscape/security/util/JSSUtil.java + com/netscape/security/util/PrintableStringTest.java + com/netscape/security/util/StringTestUtil.java + com/netscape/security/util/TeletexStringTest.java + com/netscape/security/util/UniversalStringTest.java + com/netscape/security/util/UTF8StringTest.java + com/netscape/security/x509/ConverterTestUtil.java + com/netscape/security/x509/DirStrConverterTest.java + com/netscape/security/x509/GenericValueConverterTest.java + com/netscape/security/x509/IA5StringConverterTest.java + com/netscape/security/x509/PrintableConverterTest.java +) + +set(CMAKE_JAVA_INCLUDE_PATH + ${PKI_NSUTIL_JAR} ${PKI_CMSUTIL_JAR} + ${JSS_JAR} ${LDAPJDK_JAR} ${OSUTIL_JAR} ${XALAN_JAR} ${XERCES_JAR} + ${PKI_TEST_JAR} ${JUNIT_JAR} +) + +set(CMAKE_JAVA_TARGET_VERSION ${APPLICATION_VERSION}) + +# build test jar file +# TODO: create CMake function to compile without building jar file +# TODO: build test only when the test is invoked +set(CMAKE_JAR_CLASSES_PREFIX com/netscape) +add_jar(pki-util-test ${pki-util-test_SRCS}) +add_dependencies(pki-util-test osutil pki-test) + +# create test target +# do not include xalan and xerces in class path +# TODO: create CMake function to find all JUnit test classes +add_junit_test(test-pki-util + CLASSPATH + ${pki-util-test_JAR_FILE} + ${PKI_NSUTIL_JAR} ${PKI_CMSUTIL_JAR} + ${JSS_JAR} ${LDAPJDK_JAR} ${OSUTIL_JAR} + ${PKI_TEST_JAR} ${JUNIT_JAR} + TESTS + com.netscape.security.util.BMPStringTest + com.netscape.security.util.IA5StringTest + com.netscape.security.util.PrintableStringTest + com.netscape.security.util.TeletexStringTest + com.netscape.security.util.UniversalStringTest + com.netscape.security.util.UTF8StringTest + com.netscape.security.x509.DirStrConverterTest + com.netscape.security.x509.GenericValueConverterTest + com.netscape.security.x509.IA5StringConverterTest + com.netscape.security.x509.PrintableConverterTest + REPORTS_DIR + reports +) + +# include test into the main test +add_dependencies(test test-pki-util) diff --git a/pki/base/util/test/com/netscape/security/util/BMPStringTest.java b/pki/base/util/test/com/netscape/security/util/BMPStringTest.java new file mode 100644 index 00000000..e1dcb659 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/util/BMPStringTest.java @@ -0,0 +1,178 @@ +package com.netscape.security.util; + +import netscape.security.util.DerValue; + +import org.junit.Test; +import org.junit.Assert; + +public class BMPStringTest { + + public byte tag = DerValue.tag_BMPString; + + @Test + public void testEncodingEmptyString() throws Exception { + + String string = ""; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingEmptyString() throws Exception { + + String input = ""; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + actual = StringTestUtil.normalizeUnicode(actual); + System.out.println(" - norm. : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingPrintableCharacters() throws Exception { + + String input = StringTestUtil.PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingNonPrintableCharacters() throws Exception { + + String string = StringTestUtil.NON_PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + actual = StringTestUtil.normalizeUnicode(actual); + System.out.println(" - norm. : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingNonPrintableCharacters() throws Exception { + + String input = StringTestUtil.NON_PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Encoding: ["+StringTestUtil.toString(string.getBytes())+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + actual = StringTestUtil.normalizeUnicode(actual); + System.out.println(" - norm. : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingControlCharacters() throws Exception { + + String input = StringTestUtil.CONTROL_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+StringTestUtil.toString(input.getBytes())+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + actual = StringTestUtil.normalizeUnicode(actual); + System.out.println(" - norm. : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingMultibyteCharacters() throws Exception { + + String input = StringTestUtil.MULTIBYTE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+StringTestUtil.toString(input.getBytes())+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.assertEquals(input, output); + } +} diff --git a/pki/base/util/test/com/netscape/security/util/IA5StringTest.java b/pki/base/util/test/com/netscape/security/util/IA5StringTest.java new file mode 100644 index 00000000..f101e549 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/util/IA5StringTest.java @@ -0,0 +1,179 @@ +package com.netscape.security.util; + +import java.io.IOException; + +import org.junit.Test; +import org.junit.Assert; + +import sun.security.util.DerValue; + +public class IA5StringTest { + + public byte tag = DerValue.tag_IA5String; + + @Test + public void testEncodingEmptyString() throws Exception { + + String string = ""; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingEmptyString() throws Exception { + + String input = ""; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingPrintableCharacters() throws Exception { + + String input = StringTestUtil.PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingNonPrintableCharacters() throws Exception { + + String string = StringTestUtil.NON_PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingNonPrintableCharacters() throws Exception { + + String input = StringTestUtil.NON_PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Encoding: ["+StringTestUtil.toString(string.getBytes())+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingControlCharacters() throws Exception { + + String input = StringTestUtil.CONTROL_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+StringTestUtil.toString(input.getBytes())+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + System.out.println(" - expected: IOException"); + + try { + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } + + @Test + public void testDecodingMultibyteCharacters() throws Exception { + + String input = StringTestUtil.MULTIBYTE_CHARS; + byte[] data = JSSUtil.encode(DerValue.tag_UTF8String, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: IOException"); + + try { + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } +} diff --git a/pki/base/util/test/com/netscape/security/util/JSSUtil.java b/pki/base/util/test/com/netscape/security/util/JSSUtil.java new file mode 100644 index 00000000..abaab427 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/util/JSSUtil.java @@ -0,0 +1,43 @@ +package com.netscape.security.util; + +import netscape.security.util.DerValue; + +import org.mozilla.jss.asn1.ASN1Util; +import org.mozilla.jss.asn1.ASN1Value; +import org.mozilla.jss.asn1.BMPString; +import org.mozilla.jss.asn1.IA5String; +import org.mozilla.jss.asn1.PrintableString; +import org.mozilla.jss.asn1.TeletexString; +import org.mozilla.jss.asn1.UTF8String; +import org.mozilla.jss.asn1.UniversalString; + +public class JSSUtil { + + public static byte[] encode(byte tag, String string) throws Exception { + ASN1Value value; + + switch (tag) { + case DerValue.tag_BMPString: + value = new BMPString(string); + break; + case DerValue.tag_IA5String: + value = new IA5String(string); + break; + case DerValue.tag_PrintableString: + value = new PrintableString(string); + break; + case DerValue.tag_T61String: + value = new TeletexString(string); + break; + case DerValue.tag_UniversalString: + value = new UniversalString(string); + break; + case DerValue.tag_UTF8String: + value = new UTF8String(string); + break; + default: + throw new Exception("Unsupported tag: "+tag); + } + return ASN1Util.encode(value); + } +} diff --git a/pki/base/util/test/com/netscape/security/util/PrintableStringTest.java b/pki/base/util/test/com/netscape/security/util/PrintableStringTest.java new file mode 100644 index 00000000..4d0bc2cb --- /dev/null +++ b/pki/base/util/test/com/netscape/security/util/PrintableStringTest.java @@ -0,0 +1,201 @@ +package com.netscape.security.util; + +import java.io.IOException; + +import org.junit.Test; +import org.junit.Assert; + +import sun.security.util.DerValue; + +public class PrintableStringTest { + + public byte tag = DerValue.tag_PrintableString; + + @Test + public void testEncodingEmptyString() throws Exception { + + String string = ""; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingEmptyString() throws Exception { + + String input = ""; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingPrintableCharacters() throws Exception { + + String input = StringTestUtil.PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingNonPrintableCharacters() throws Exception { + + String string = StringTestUtil.NON_PRINTABLE_CHARS; + System.out.println("Encoding: ["+StringTestUtil.toString(string.getBytes())+"]"); + + System.out.println(" - expected: IOException"); + + try { + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } + + @Test + public void testDecodingNonPrintableCharacters() throws Exception { + + String input = StringTestUtil.NON_PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(DerValue.tag_UTF8String, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: IOException"); + + try { + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } + + @Test + public void testEncodingControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Encoding: ["+StringTestUtil.toString(string.getBytes())+"]"); + + System.out.println(" - expected: IOException"); + + try { + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } + + @Test + public void testDecodingControlCharacters() throws Exception { + + String input = StringTestUtil.CONTROL_CHARS; + byte[] data = JSSUtil.encode(DerValue.tag_UTF8String, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: IOException"); + + try { + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } + + @Test + public void testEncodingMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + System.out.println(" - expected: IOException"); + + try { + byte[] actual = StringTestUtil.encode(tag, StringTestUtil.MULTIBYTE_CHARS); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } + + @Test + public void testDecodingMultibyteCharacters() throws Exception { + + String input = StringTestUtil.MULTIBYTE_CHARS; + byte[] data = JSSUtil.encode(DerValue.tag_UTF8String, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: IOException"); + + try { + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } +} diff --git a/pki/base/util/test/com/netscape/security/util/StringTestUtil.java b/pki/base/util/test/com/netscape/security/util/StringTestUtil.java new file mode 100644 index 00000000..211ba518 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/util/StringTestUtil.java @@ -0,0 +1,76 @@ +package com.netscape.security.util; + +import netscape.security.util.DerInputStream; +import netscape.security.util.DerOutputStream; +import netscape.security.util.DerValue; + +public class StringTestUtil { + + public final static String PRINTABLE_CHARS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 \'()+,-./:=?"; + + public final static String NON_PRINTABLE_CHARS = "\"\\"; + + public final static String CONTROL_CHARS = "\b\t\n\f\r"; + + public final static String MULTIBYTE_CHARS = "我爱你"; // I love you + + public static String toString(byte[] array) { + + StringBuffer sb = new StringBuffer(); + for (int i=0; i<array.length; i++) { + if (i > 0) sb.append(" "); + sb.append(Integer.toHexString(0xff & array[i] | 0x100).substring(1).toUpperCase()); + } + + return sb.toString(); + } + + public static byte[] normalizeUnicode(byte[] data) throws Exception { + + DerValue value = new DerValue(data); + byte[] tmp = value.data.toByteArray(); + + if (tmp[0] == -2 && tmp[1] == -1) { // remove optional big-endian byte-order mark + + byte tag = value.tag; + int length = value.length() - 2; + + DerOutputStream os = new DerOutputStream(); + os.putTag((byte)0, false, tag); + os.putLength(length); + os.write(tmp, 2, length); + + return os.toByteArray(); + } + + return data; + } + + public static byte[] encode(byte tag, String string) throws Exception { + DerOutputStream os = new DerOutputStream(); + os.putStringType(tag, string); + return os.toByteArray(); + } + + public static String decode(byte tag, byte[] bytes) throws Exception { + DerInputStream is = new DerInputStream(bytes); + + switch (tag) { + case DerValue.tag_BMPString: + return is.getBMPString(); + case DerValue.tag_IA5String: + return is.getIA5String(); + case DerValue.tag_PrintableString: + return is.getPrintableString(); + case DerValue.tag_T61String: + return is.getT61String(); + case DerValue.tag_UniversalString: + return is.getUniversalString(); + case DerValue.tag_UTF8String: + return is.getDerValue().getUTF8String(); + default: + throw new Exception("Unsupported tag: "+tag); + } + } +} diff --git a/pki/base/util/test/com/netscape/security/util/TeletexStringTest.java b/pki/base/util/test/com/netscape/security/util/TeletexStringTest.java new file mode 100644 index 00000000..7217cae4 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/util/TeletexStringTest.java @@ -0,0 +1,179 @@ +package com.netscape.security.util; + +import java.io.IOException; + +import org.junit.Test; +import org.junit.Assert; + +import sun.security.util.DerValue; + +public class TeletexStringTest { + + public byte tag = DerValue.tag_T61String; + + @Test + public void testEncodingEmptyString() throws Exception { + + String string = ""; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingEmptyString() throws Exception { + + String input = ""; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingPrintableCharacters() throws Exception { + + String input = StringTestUtil.PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingNonPrintableCharacters() throws Exception { + + String string = StringTestUtil.NON_PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingNonPrintableCharacters() throws Exception { + + String input = StringTestUtil.NON_PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Encoding: ["+StringTestUtil.toString(string.getBytes())+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingControlCharacters() throws Exception { + + String input = StringTestUtil.CONTROL_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+StringTestUtil.toString(input.getBytes())+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + System.out.println(" - expected: IOException"); + + try { + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } + + @Test + public void testDecodingMultibyteCharacters() throws Exception { + + String input = StringTestUtil.MULTIBYTE_CHARS; + byte[] data = JSSUtil.encode(DerValue.tag_UTF8String, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: IOException"); + + try { + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IOException); + } + } +} diff --git a/pki/base/util/test/com/netscape/security/util/UTF8StringTest.java b/pki/base/util/test/com/netscape/security/util/UTF8StringTest.java new file mode 100644 index 00000000..3256a8e3 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/util/UTF8StringTest.java @@ -0,0 +1,166 @@ +package com.netscape.security.util; + +import org.junit.Test; +import org.junit.Assert; + +import sun.security.util.DerValue; + +public class UTF8StringTest { + + public byte tag = DerValue.tag_UTF8String; + + @Test + public void testEncodingEmptyString() throws Exception { + + String string = ""; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, ""); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, ""); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingEmptyString() throws Exception { + + String input = ""; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingPrintableCharacters() throws Exception { + + String input = StringTestUtil.PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingNonPrintableCharacters() throws Exception { + + String string = StringTestUtil.NON_PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingNonPrintableCharacters() throws Exception { + + String input = StringTestUtil.NON_PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Encoding: ["+StringTestUtil.toString(string.getBytes())+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingControlCharacters() throws Exception { + + String input = StringTestUtil.CONTROL_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+StringTestUtil.toString(input.getBytes())+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingMultibyteCharacters() throws Exception { + + String input = StringTestUtil.MULTIBYTE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+StringTestUtil.toString(input.getBytes())+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.assertEquals(input, output); + } +} diff --git a/pki/base/util/test/com/netscape/security/util/UniversalStringTest.java b/pki/base/util/test/com/netscape/security/util/UniversalStringTest.java new file mode 100644 index 00000000..aceae03b --- /dev/null +++ b/pki/base/util/test/com/netscape/security/util/UniversalStringTest.java @@ -0,0 +1,166 @@ +package com.netscape.security.util; + +import org.junit.Test; +import org.junit.Assert; + +import sun.security.util.DerValue; + +public class UniversalStringTest { + + public byte tag = DerValue.tag_UniversalString; + + @Test + public void testEncodingEmptyString() throws Exception { + + String string = ""; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingEmptyString() throws Exception { + + String input = ""; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingPrintableCharacters() throws Exception { + + String input = StringTestUtil.PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingNonPrintableCharacters() throws Exception { + + String string = StringTestUtil.NON_PRINTABLE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingNonPrintableCharacters() throws Exception { + + String input = StringTestUtil.NON_PRINTABLE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+input+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+output+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Encoding: ["+StringTestUtil.toString(string.getBytes())+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingControlCharacters() throws Exception { + + String input = StringTestUtil.CONTROL_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+StringTestUtil.toString(input.getBytes())+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.assertEquals(input, output); + } + + @Test + public void testEncodingMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Encoding: ["+string+"]"); + + byte[] expected = JSSUtil.encode(tag, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = StringTestUtil.encode(tag, string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testDecodingMultibyteCharacters() throws Exception { + + String input = StringTestUtil.MULTIBYTE_CHARS; + byte[] data = JSSUtil.encode(tag, input); + + System.out.println("Decoding: ["+StringTestUtil.toString(data)+"]"); + + System.out.println(" - expected: ["+StringTestUtil.toString(input.getBytes())+"]"); + + String output = StringTestUtil.decode(tag, data); + System.out.println(" - actual : ["+StringTestUtil.toString(output.getBytes())+"]"); + + Assert.assertEquals(input, output); + } +} diff --git a/pki/base/util/test/com/netscape/security/x509/ConverterTestUtil.java b/pki/base/util/test/com/netscape/security/x509/ConverterTestUtil.java new file mode 100644 index 00000000..748c1b28 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/x509/ConverterTestUtil.java @@ -0,0 +1,22 @@ +package com.netscape.security.x509; + +import netscape.security.util.DerOutputStream; +import netscape.security.util.DerValue; +import netscape.security.x509.AVAValueConverter; + +public class ConverterTestUtil { + + public static byte[] convert(AVAValueConverter converter, String string, byte[] tags) throws Exception { + + DerOutputStream os = new DerOutputStream(); + + DerValue value = converter.getValue(string, tags); + value.encode(os); + + return os.toByteArray(); + } + + public static byte[] convert(AVAValueConverter converter, String string) throws Exception { + return convert(converter, string, null); + } +} diff --git a/pki/base/util/test/com/netscape/security/x509/DirStrConverterTest.java b/pki/base/util/test/com/netscape/security/x509/DirStrConverterTest.java new file mode 100644 index 00000000..ec8ddc51 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/x509/DirStrConverterTest.java @@ -0,0 +1,107 @@ +package com.netscape.security.x509; + +import org.junit.Test; +import org.junit.Assert; + +import com.netscape.security.util.JSSUtil; +import com.netscape.security.util.StringTestUtil; + +import netscape.security.util.DerValue; +import netscape.security.x509.DirStrConverter; + +public class DirStrConverterTest { + + @Test + public void testEmptyString() throws Exception { + + String string = ""; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_PrintableString, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new DirStrConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_PrintableString, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new DirStrConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Converting: ["+StringTestUtil.toString(string.getBytes())+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_T61String, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new DirStrConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_UniversalString, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new DirStrConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testPrintableCharactersWithTags() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_IA5String, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new DirStrConverter(), string, new byte[] { + DerValue.tag_IA5String, DerValue.tag_UTF8String + }); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testMultibyteCharactersWithTags() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_UTF8String, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new DirStrConverter(), string, new byte[] { + DerValue.tag_IA5String, DerValue.tag_UTF8String + }); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } +} diff --git a/pki/base/util/test/com/netscape/security/x509/GenericValueConverterTest.java b/pki/base/util/test/com/netscape/security/x509/GenericValueConverterTest.java new file mode 100644 index 00000000..bee2b241 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/x509/GenericValueConverterTest.java @@ -0,0 +1,110 @@ +package com.netscape.security.x509; + +import org.junit.Test; +import org.junit.Assert; + +import com.netscape.security.util.JSSUtil; +import com.netscape.security.util.StringTestUtil; + +import netscape.security.util.DerValue; +import netscape.security.x509.GenericValueConverter; + +public class GenericValueConverterTest { + + @Test + public void testEmptyString() throws Exception { + + String string = ""; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_PrintableString, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new GenericValueConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_PrintableString, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new GenericValueConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Converting: ["+StringTestUtil.toString(string.getBytes())+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_IA5String, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new GenericValueConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_BMPString, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new GenericValueConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + actual = StringTestUtil.normalizeUnicode(actual); + System.out.println(" - norm. : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testPrintableCharactersWithTags() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_T61String, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new GenericValueConverter(), string, new byte[] { + DerValue.tag_T61String, DerValue.tag_UniversalString + }); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testMultibyteCharactersWithTags() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_UniversalString, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new GenericValueConverter(), string, new byte[] { + DerValue.tag_T61String, DerValue.tag_UniversalString + }); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } +} diff --git a/pki/base/util/test/com/netscape/security/x509/IA5StringConverterTest.java b/pki/base/util/test/com/netscape/security/x509/IA5StringConverterTest.java new file mode 100644 index 00000000..682e7384 --- /dev/null +++ b/pki/base/util/test/com/netscape/security/x509/IA5StringConverterTest.java @@ -0,0 +1,78 @@ +package com.netscape.security.x509; + +import org.junit.Test; +import org.junit.Assert; + +import com.netscape.security.util.JSSUtil; +import com.netscape.security.util.StringTestUtil; + +import netscape.security.util.DerValue; +import netscape.security.x509.IA5StringConverter; + +public class IA5StringConverterTest { + + @Test + public void testEmptyString() throws Exception { + + String string = ""; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_IA5String, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new IA5StringConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_IA5String, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new IA5StringConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Converting: ["+StringTestUtil.toString(string.getBytes())+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_IA5String, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new IA5StringConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Converting: ["+string+"]"); + + System.out.println(" - expected: IllegalArgumentException"); + + try { + byte[] actual = ConverterTestUtil.convert(new IA5StringConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IllegalArgumentException); + } + } +} diff --git a/pki/base/util/test/com/netscape/security/x509/PrintableConverterTest.java b/pki/base/util/test/com/netscape/security/x509/PrintableConverterTest.java new file mode 100644 index 00000000..acaa5c1b --- /dev/null +++ b/pki/base/util/test/com/netscape/security/x509/PrintableConverterTest.java @@ -0,0 +1,83 @@ +package com.netscape.security.x509; + +import org.junit.Test; +import org.junit.Assert; + +import com.netscape.security.util.JSSUtil; +import com.netscape.security.util.StringTestUtil; + +import netscape.security.util.DerValue; +import netscape.security.x509.PrintableConverter; + +public class PrintableConverterTest { + + @Test + public void testEmptyString() throws Exception { + + String string = ""; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_PrintableString, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new PrintableConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testPrintableCharacters() throws Exception { + + String string = StringTestUtil.PRINTABLE_CHARS; + System.out.println("Converting: ["+string+"]"); + + byte[] expected = JSSUtil.encode(DerValue.tag_PrintableString, string); + System.out.println(" - expected: "+StringTestUtil.toString(expected)); + + byte[] actual = ConverterTestUtil.convert(new PrintableConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.assertArrayEquals(expected, actual); + } + + @Test + public void testControlCharacters() throws Exception { + + String string = StringTestUtil.CONTROL_CHARS; + System.out.println("Converting: ["+StringTestUtil.toString(string.getBytes())+"]"); + + System.out.println(" - expected: IllegalArgumentException"); + + try { + byte[] actual = ConverterTestUtil.convert(new PrintableConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IllegalArgumentException); + } + } + + @Test + public void testMultibyteCharacters() throws Exception { + + String string = StringTestUtil.MULTIBYTE_CHARS; + System.out.println("Converting: ["+string+"]"); + + System.out.println(" - expected: IllegalArgumentException"); + + try { + byte[] actual = ConverterTestUtil.convert(new PrintableConverter(), string); + System.out.println(" - actual : "+StringTestUtil.toString(actual)); + + Assert.fail(); + + } catch (Exception e) { + System.out.println(" - actual : "+e.getClass().getSimpleName()); + Assert.assertTrue(e instanceof IllegalArgumentException); + } + } +} |