diff options
Diffstat (limited to 'pki/base/common/test/com/netscape/certsrv')
4 files changed, 965 insertions, 0 deletions
diff --git a/pki/base/common/test/com/netscape/certsrv/app/CMSEngineDefaultStub.java b/pki/base/common/test/com/netscape/certsrv/app/CMSEngineDefaultStub.java new file mode 100644 index 000000000..3977b05c5 --- /dev/null +++ b/pki/base/common/test/com/netscape/certsrv/app/CMSEngineDefaultStub.java @@ -0,0 +1,540 @@ +package com.netscape.certsrv.app; + +import com.netscape.certsrv.apps.ICMSEngine; +import com.netscape.certsrv.apps.ICommandQueue; +import com.netscape.certsrv.base.*; +import com.netscape.certsrv.logging.ILogger; +import com.netscape.certsrv.request.IRequest; +import com.netscape.certsrv.acls.IACL; +import com.netscape.certsrv.acls.EACLsException; +import com.netscape.certsrv.dbs.crldb.ICRLIssuingPointRecord; +import com.netscape.certsrv.dbs.repository.IRepositoryRecord; +import com.netscape.certsrv.connector.*; +import com.netscape.certsrv.ca.ICRLIssuingPoint; +import com.netscape.certsrv.ldap.ILdapConnInfo; +import com.netscape.certsrv.ldap.ELdapException; +import com.netscape.certsrv.ldap.ILdapAuthInfo; +import com.netscape.certsrv.ldap.ILdapConnFactory; +import com.netscape.certsrv.password.IPasswordCheck; +import com.netscape.certsrv.notification.*; +import com.netscape.certsrv.policy.IGeneralNamesConfig; +import com.netscape.certsrv.policy.IGeneralNameAsConstraintsConfig; +import com.netscape.certsrv.policy.IGeneralNamesAsConstraintsConfig; +import com.netscape.certsrv.policy.ISubjAltNameConfig; +import com.netscape.certsrv.authority.IAuthority; +import com.netscape.cmsutil.net.ISocketFactory; +import com.netscape.cmsutil.password.IPasswordStore; + +import java.util.*; +import java.math.BigInteger; +import java.security.cert.Certificate; +import java.security.cert.CertificateEncodingException; +import java.security.cert.X509Certificate; +import java.security.cert.X509CRL; +import java.security.NoSuchAlgorithmException; + +import netscape.security.x509.Extension; +import netscape.security.x509.X509CertInfo; +import netscape.security.x509.GeneralName; +import netscape.security.util.ObjectIdentifier; +import netscape.ldap.LDAPSSLSocketFactoryExt; +import netscape.ldap.LDAPConnection; +import netscape.ldap.LDAPException; +import org.mozilla.jss.util.PasswordCallback; + +/** + * Default engine stub for testing. + */ +public class CMSEngineDefaultStub implements ICMSEngine { + public String getId() { + return null; + } + + public void setId(String id) throws EBaseException { + } + + public void init(ISubsystem owner, IConfigStore config) throws EBaseException { + } + + public void startup() throws EBaseException { + } + + public void shutdown() { + } + + public IConfigStore getConfigStore() { + return null; + } + + public int getpid() { + return 0; + } + + public void reinit(String id) throws EBaseException { + } + + public int getCSState() { + return 0; + } + + public void setCSState(int mode) { + } + + public boolean isPreOpMode() { + return false; + } + + public boolean isRunningMode() { + return false; + } + + public String getInstanceDir() { + return null; + } + + public Date getCurrentDate() { + return null; + } + + public long getStartupTime() { + return 0; + } + + public boolean isInRunningState() { + return false; + } + + public Enumeration getSubsystemNames() { + return null; + } + + public Enumeration getSubsystems() { + return null; + } + + public ISubsystem getSubsystem(String name) { + return null; + } + + public ILogger getLogger() { + return null; + } + + public ILogger getSignedAuditLogger() { + return null; + } + + public void debug(byte data[]) { + } + + public void debug(String msg) { + } + + public void debug(int level, String msg) { + } + + public void debug(Throwable e) { + } + + public boolean debugOn() { + return false; + } + + public void debugStackTrace() { + } + + public void traceHashKey(String type, String key) { + } + + public void traceHashKey(String type, String key, String val) { + } + + public void traceHashKey(String type, String key, String val, String def) { + } + + public byte[] getPKCS7(Locale locale, IRequest req) { + return new byte[0]; + } + + public String getUserMessage(Locale locale, String msgID) { + return null; + } + + public String getUserMessage(Locale locale, String msgID, String p[]) { + return null; + } + + public String getUserMessage(Locale locale, String msgID, String p1) { + return null; + } + + public String getUserMessage(Locale locale, String msgID, String p1, String p2) { + return null; + } + + public String getUserMessage(Locale locale, String msgID, String p1, String p2, String p3) { + return null; + } + + public String getLogMessage(String msgID) { + return null; + } + + public String getLogMessage(String msgID, String p[]) { + return null; + } + + public String getLogMessage(String msgID, String p1) { + return null; + } + + public String getLogMessage(String msgID, String p1, String p2) { + return null; + } + + public String getLogMessage(String msgID, String p1, String p2, String p3) { + return null; + } + + public String getLogMessage(String msgID, String p1, String p2, String p3, String p4) { + return null; + } + + public String getLogMessage(String msgID, String p1, String p2, String p3, String p4, String p5) { + return null; + } + + public String getLogMessage(String msgID, String p1, String p2, String p3, String p4, String p5, String p6) { + return null; + } + + public String getLogMessage(String msgID, String p1, String p2, String p3, String p4, String p5, String p6, String p7) { + return null; + } + + public String getLogMessage(String msgID, String p1, String p2, String p3, String p4, String p5, String p6, String p7, String p8) { + return null; + } + + public String getLogMessage(String msgID, String p1, String p2, String p3, String p4, String p5, String p6, String p7, String p8, String p9) { + return null; + } + + public IACL parseACL(String resACLs) throws EACLsException { + return null; + } + + public ICRLIssuingPointRecord createCRLIssuingPointRecord(String id, BigInteger crlNumber, Long crlSize, Date thisUpdate, Date nextUpdate) { + return null; + } + + public String getCRLIssuingPointRecordName() { + return null; + } + + public String getFingerPrint(Certificate cert) throws CertificateEncodingException, NoSuchAlgorithmException { + return null; + } + + public String getFingerPrints(Certificate cert) throws NoSuchAlgorithmException, CertificateEncodingException { + return null; + }/* + * Returns the finger print of the given certificate. +* +* @param certDer DER byte array of certificate +* @return finger print of certificate +*/ +public String getFingerPrints(byte[] certDer) throws NoSuchAlgorithmException { + return null; +} + + public IRepositoryRecord createRepositoryRecord() { + return null; + } + + public IPKIMessage getHttpPKIMessage() { + return null; + } + + public IRequestEncoder getHttpRequestEncoder() { + return null; + } + + public String BtoA(byte data[]) { + return null; + } + + public byte[] AtoB(String data) { + return new byte[0]; + } + + public String getEncodedCert(X509Certificate cert) { + return null; + } + + public IPrettyPrintFormat getPrettyPrintFormat(String delimiter) { + return null; + } + + public IExtPrettyPrint getExtPrettyPrint(Extension e, int indent) { + return null; + } + + public ICertPrettyPrint getCertPrettyPrint(X509Certificate cert) { + return null; + } + + public ICRLPrettyPrint getCRLPrettyPrint(X509CRL crl) { + return null; + } + + public ICRLPrettyPrint getCRLCachePrettyPrint(ICRLIssuingPoint ip) { + return null; + } + + public ILdapConnInfo getLdapConnInfo(IConfigStore config) throws EBaseException, ELdapException { + return null; + } + + public LDAPSSLSocketFactoryExt getLdapJssSSLSocketFactory(String certNickname) { + return null; + } + + public LDAPSSLSocketFactoryExt getLdapJssSSLSocketFactory() { + return null; + } + + public ILdapAuthInfo getLdapAuthInfo() { + return null; + } + + public ILdapConnFactory getLdapBoundConnFactory() throws ELdapException { + return null; + } + + public LDAPConnection getBoundConnection(String host, int port, int version, LDAPSSLSocketFactoryExt fac, String bindDN, String bindPW) throws LDAPException { + return null; + } + + public ILdapConnFactory getLdapAnonConnFactory() throws ELdapException { + return null; + } + + public IPasswordCheck getPasswordChecker() { + return null; + } + + public void putPasswordCache(String tag, String pw) { + } + + public PasswordCallback getPasswordCallback() { + return null; + } + + public String getServerCertNickname() { + return null; + } + + public void setServerCertNickname(String tokenName, String nickName) { + } + + public void setServerCertNickname(String newName) { + } + + public String getEEHost() { + return null; + } + + public String getEENonSSLHost() { + return null; + } + + public String getEENonSSLIP() { + return null; + } + + public String getEENonSSLPort() { + return null; + } + + public String getEESSLHost() { + return null; + } + + public String getEESSLIP() { + return null; + } + + public String getEESSLPort() { + return null; + } + + public String getAgentHost() { + return null; + } + + public String getAgentIP() { + return null; + } + + public String getAgentPort() { + return null; + } + + public String getAdminHost() { + return null; + } + + public String getAdminIP() { + return null; + } + + public String getAdminPort() { + return null; + } + + public boolean isSigningCert(X509Certificate cert) { + return false; + } + + public boolean isEncryptionCert(X509Certificate cert) { + return false; + } + + public X509CertInfo getDefaultX509CertInfo() { + return null; + } + + public IEmailFormProcessor getEmailFormProcessor() { + return null; + } + + public IEmailTemplate getEmailTemplate(String path) { + return null; + } + + public IMailNotification getMailNotification() { + return null; + } + + public IEmailResolverKeys getEmailResolverKeys() { + return null; + } + + public IEmailResolver getReqCertSANameEmailResolver() { + return null; + } + + public ObjectIdentifier checkOID(String attrName, String value) throws EBaseException { + return null; + } + + public GeneralName form_GeneralNameAsConstraints(String generalNameChoice, String value) throws EBaseException { + return null; + } + + public GeneralName form_GeneralName(String generalNameChoice, String value) throws EBaseException { + return null; + } + + public void getGeneralNameConfigDefaultParams(String name, boolean isValueConfigured, Vector params) { + } + + public void getGeneralNamesConfigDefaultParams(String name, boolean isValueConfigured, Vector params) { + } + + public void getGeneralNameConfigExtendedPluginInfo(String name, boolean isValueConfigured, Vector info) { + } + + public void getGeneralNamesConfigExtendedPluginInfo(String name, boolean isValueConfigured, Vector info) { + } + + public IGeneralNamesConfig createGeneralNamesConfig(String name, IConfigStore config, boolean isValueConfigured, boolean isPolicyEnabled) throws EBaseException { + return null; + } + + public IGeneralNameAsConstraintsConfig createGeneralNameAsConstraintsConfig(String name, IConfigStore config, boolean isValueConfigured, boolean isPolicyEnabled) throws EBaseException { + return null; + } + + public IGeneralNamesAsConstraintsConfig createGeneralNamesAsConstraintsConfig(String name, IConfigStore config, boolean isValueConfigured, boolean isPolicyEnabled) throws EBaseException { + return null; + } + + public void getSubjAltNameConfigDefaultParams(String name, Vector params) { + } + + public void getSubjAltNameConfigExtendedPluginInfo(String name, Vector params) { + } + + public ISubjAltNameConfig createSubjAltNameConfig(String name, IConfigStore config, boolean isValueConfigured) throws EBaseException { + return null; + } + + public IHttpConnection getHttpConnection(IRemoteAuthority authority, ISocketFactory factory) { + return null; + } + + public IHttpConnection getHttpConnection(IRemoteAuthority authority, ISocketFactory factory, int timeout) { + return null; + } + + public IResender getResender(IAuthority authority, String nickname, IRemoteAuthority remote, int interval) { + return null; + } + + public ICommandQueue getCommandQueue() { + return null; + } + + public void disableRequests() { + } + + public void terminateRequests() { + } + + public boolean areRequestsDisabled() { + return false; + } + + public IConfigStore createFileConfigStore(String path) throws EBaseException { + return null; + } + + public IArgBlock createArgBlock() { + return null; + } + + public IArgBlock createArgBlock(String realm, Hashtable httpReq) { + return null; + } + + public IArgBlock createArgBlock(Hashtable httpReq) { + return null; + } + + public boolean isRevoked(X509Certificate[] certificates) { + return false; + } + + public void setListOfVerifiedCerts(int size, long interval, long unknownStateInterval) { + } + + public void forceShutdown() { + } + + public IPasswordStore getPasswordStore() { + return null; + } + + public ISecurityDomainSessionTable getSecurityDomainSessionTable() { + return null; + } + + public void setConfigSDSessionId(String id) { + } + + public String getConfigSDSessionId() { + return null; + } +} diff --git a/pki/base/common/test/com/netscape/certsrv/authentication/AuthTokenTest.java b/pki/base/common/test/com/netscape/certsrv/authentication/AuthTokenTest.java new file mode 100644 index 000000000..0df5ac1aa --- /dev/null +++ b/pki/base/common/test/com/netscape/certsrv/authentication/AuthTokenTest.java @@ -0,0 +1,274 @@ +package com.netscape.certsrv.authentication; + +import com.netscape.cmscore.test.CMSBaseTestCase; +import com.netscape.certsrv.app.CMSEngineDefaultStub; +import com.netscape.certsrv.apps.CMS; +import com.netscape.certsrv.usrgrp.Certificates; +import junit.framework.Test; +import junit.framework.TestSuite; + +import java.math.BigInteger; +import java.util.Hashtable; +import java.util.Date; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.io.IOException; + +import netscape.security.x509.X509CertImpl; +import netscape.security.x509.CertificateExtensions; +import netscape.security.x509.BasicConstraintsExtension; +import netscape.security.x509.PKIXExtensions; +import netscape.security.util.DerValue; +import netscape.security.util.DerOutputStream; + +public class AuthTokenTest extends CMSBaseTestCase { + + AuthToken authToken; + CMSMemoryStub cmsStub; + + public AuthTokenTest(String name) { + super(name); + } + + public void cmsTestSetUp() { + authToken = new AuthToken(null); + + // this is needed because of CMS.AtoB/BtoA calls + cmsStub = new CMSMemoryStub(); + CMS.setCMSEngine(cmsStub); + } + + public void cmsTestTearDown() { + } + + public static Test suite() { + return new TestSuite(AuthTokenTest.class); + } + + public void testGetSetString() { + authToken.set("key", "value"); + assertEquals("value", authToken.mAttrs.get("key")); + assertEquals("value", authToken.getInString("key")); + + assertFalse(authToken.set("key", (String)null)); + } + + public void testGetSetByteArray() { + byte[] data = new byte[] { -12, 0, 14, 15 }; + + assertFalse(cmsStub.bToACalled); + authToken.set("key", data); + assertTrue(cmsStub.bToACalled); + + assertFalse(cmsStub.aToBCalled); + byte[] retval = authToken.getInByteArray("key"); + assertEquals(data, retval); + + assertFalse(authToken.set("key2", (byte[])null)); + } + + public void testGetSetInteger() { + authToken.set("key", Integer.valueOf(432)); + assertEquals("432", authToken.mAttrs.get("key")); + assertEquals(Integer.valueOf(432), authToken.getInInteger("key")); + + assertNull(authToken.getInInteger("notfound")); + + authToken.set("key2", "value"); + assertNull(authToken.getInInteger("key2")); + + assertFalse(authToken.set("key3", (Integer)null)); + } + + public void testGetSetBigIntegerArray() { + BigInteger[] data = new BigInteger[] { + new BigInteger("111111111"), + new BigInteger("222222222"), + new BigInteger("333333333") + }; + authToken.set("key", data); + assertEquals("111111111,222222222,333333333", + authToken.mAttrs.get("key")); + BigInteger[] retval = authToken.getInBigIntegerArray("key"); + assertEquals(3, retval.length); + assertEquals(data[0], retval[0]); + assertEquals(data[1], retval[1]); + assertEquals(data[2], retval[2]); + + authToken.set("key2", "123456"); + retval = authToken.getInBigIntegerArray("key2"); + assertEquals(1, retval.length); + assertEquals(new BigInteger("123456"), retval[0]); + + authToken.set("key3", "oops"); + assertNull(authToken.getInBigIntegerArray("key3")); + + // corner case test + authToken.set("key",","); + retval = authToken.getInBigIntegerArray("key"); + assertNull(retval); + + assertFalse(authToken.set("key4", (BigInteger[])null)); + } + + public void testGetSetDate() { + Date value = new Date(); + authToken.set("key", value); + assertEquals(String.valueOf(value.getTime()), + authToken.mAttrs.get("key")); + assertEquals(value, authToken.getInDate("key")); + + authToken.set("key2", "234567"); + Date retval = authToken.getInDate("key2"); + assertEquals(234567L, retval.getTime()); + + authToken.set("key3", "oops"); + assertNull(authToken.getInDate("key3")); + + assertFalse(authToken.set("key4", (Date)null)); + } + + public void testGetSetStringArray() throws IOException { + String[] value = new String[] { + "eenie", "meenie", "miny", "moe" + }; + + assertFalse(cmsStub.bToACalled); + authToken.set("key", value); + assertTrue(cmsStub.bToACalled); + + assertFalse(cmsStub.aToBCalled); + String[] retval = authToken.getInStringArray("key"); + assertTrue(cmsStub.aToBCalled); + assertEquals(4, retval.length); + assertEquals(value[0], retval[0]); + assertEquals(value[1], retval[1]); + assertEquals(value[2], retval[2]); + assertEquals(value[3], retval[3]); + + // illegal value parsing + authToken.set("key2", new byte[] { 1, 2, 3, 4}); + assertNull(authToken.getInStringArray("key2")); + + + DerOutputStream out = new DerOutputStream(); + out.putPrintableString("testing"); + authToken.set("key3", out.toByteArray()); + assertNull(authToken.getInStringArray("key3")); + + assertFalse(authToken.set("key4", (String[])null)); + } + + public void testGetSetCert() throws CertificateException { + X509CertImpl cert = getFakeCert(); + + assertFalse(cmsStub.bToACalled); + authToken.set("key", cert); + assertTrue(cmsStub.bToACalled); + + assertFalse(cmsStub.aToBCalled); + X509CertImpl retval = authToken.getInCert("key"); + assertTrue(cmsStub.aToBCalled); + assertNotNull(retval); + assertEquals(cert, retval); + + assertFalse(authToken.set("key2", (X509CertImpl)null)); + } + + public void testGetSetCertExts() throws IOException { + CertificateExtensions certExts = new CertificateExtensions(); + BasicConstraintsExtension ext = new BasicConstraintsExtension(false, 1); + + assertTrue(authToken.set("key", certExts)); + assertTrue(authToken.mAttrs.containsKey("key")); + CertificateExtensions retval = authToken.getInCertExts("key"); + assertNotNull(retval); + assertEquals(0, retval.size()); + + certExts.set(PKIXExtensions.BasicConstraints_Id.toString(), ext); + assertTrue(authToken.set("key2", certExts)); + + retval = authToken.getInCertExts("key2"); + assertTrue(authToken.mAttrs.containsKey("key2")); + assertNotNull(retval); + assertEquals(1, retval.size()); + + assertFalse(authToken.set("key3", (CertificateExtensions)null)); + } + + public void testGetSetCertificates() throws CertificateException { + X509CertImpl cert1 = getFakeCert(); + X509CertImpl cert2 = getFakeCert(); + X509CertImpl[] certArray = new X509CertImpl[] {cert1, cert2}; + Certificates certs = new Certificates(certArray); + + assertFalse(cmsStub.bToACalled); + authToken.set("key", certs); + assertTrue(cmsStub.bToACalled); + + assertFalse(cmsStub.aToBCalled); + Certificates retval = authToken.getInCertificates("key"); + assertTrue(cmsStub.aToBCalled); + assertNotNull(retval); + + X509Certificate[] retCerts = retval.getCertificates(); + assertEquals(2, retCerts.length); + assertEquals(cert1, retCerts[0]); + assertEquals(cert2, retCerts[1]); + + assertFalse(authToken.set("key2", (Certificates)null)); + } + + public void testGetSetByteArrayArray() { + byte[][] value = new byte[][] { + new byte[] { 1, 2, 3, 4 }, + new byte[] {12, 13, 14}, + new byte[] { 50, -12, 0, 100} + }; + + assertFalse(cmsStub.bToACalled); + assertTrue(authToken.set("key", value)); + assertTrue(cmsStub.bToACalled); + + assertFalse(cmsStub.aToBCalled); + byte[][] retval = authToken.getInByteArrayArray("key"); + assertTrue(cmsStub.aToBCalled); + assertNotNull(retval); + assertEquals(value.length, retval.length); + for (int i = 0; i < value.length; i++) { + assertEquals(value[i].length, retval[i].length); + for (int j = 0; j < value[i].length; j++) { + assertEquals(value[i][j], retval[i][j]); + } + } + + assertFalse(authToken.set("key2", (byte[][])null)); + } + + /** + * CMSMemoryStub + * + * This class is used to help test methods that rely on setting and then + * getting a value out. It assumes BtoA is always called first, stores + * the value passed in, and then returns that value for BtoA. + */ + class CMSMemoryStub extends CMSEngineDefaultStub { + boolean bToACalled = false; + byte[] bToACalledWith = null; + + boolean aToBCalled = false; + String aToBCalledWith = null; + + public String BtoA(byte data[]) { + bToACalled = true; + bToACalledWith = data; + return "garbagetostoreinthehash"; + } + + public byte[] AtoB(String data) { + aToBCalled = true; + aToBCalledWith = data; + return bToACalledWith; + } + } +} diff --git a/pki/base/common/test/com/netscape/certsrv/logging/LoggerDefaultStub.java b/pki/base/common/test/com/netscape/certsrv/logging/LoggerDefaultStub.java new file mode 100644 index 000000000..b7772bb27 --- /dev/null +++ b/pki/base/common/test/com/netscape/certsrv/logging/LoggerDefaultStub.java @@ -0,0 +1,70 @@ +package com.netscape.certsrv.logging; + +import java.util.Properties; + +/** + * Default logging stub for testing. + */ +public class LoggerDefaultStub implements ILogger { + public void log(int evtClass, int source, String msg) { + } + + public void log(int evtClass, Properties props, int source, String msg) { + } + + public void log(int evtClass, int source, int level, String msg) { + } + + public void log(int evtClass, Properties props, int source, int level, String msg) { + } + + public void log(int evtClass, int source, int level, String msg, Object param) { + } + + public void log(int evtClass, int source, int level, String msg, Object params[]) { + } + + public void log(int evtClass, Properties props, int source, String msg, Object param) { + } + + public void log(int evtClass, Properties props, int source, int level, String msg, Object param) { + } + + public void log(int evtClass, Properties prop, int source, int level, String msg, Object params[]) { + } + + public void log(int evtClass, int source, String msg, boolean multiline) { + } + + public void log(int evtClass, Properties props, int source, String msg, boolean multiline) { + } + + public void log(int evtClass, int source, int level, String msg, boolean multiline) { + } + + public void log(int evtClass, Properties props, int source, int level, String msg, boolean multiline) { + } + + public void log(int evtClass, int source, int level, String msg, Object param, boolean multiline) { + } + + public void log(int evtClass, Properties props, int source, String msg, Object param, boolean multiline) { + } + + public void log(int evtClass, Properties props, int source, int level, String msg, Object param, boolean multiline) { + } + + public void log(int evtClass, Properties prop, int source, int level, String msg, Object params[], boolean multiline) { + } + + public ILogEvent create(int evtClass, Properties prop, int source, int level, String msg, Object params[], boolean multiline) { + return null; + } + + public void register(int evtClass, ILogEventFactory f) { + } + + public ILogQueue getLogQueue() { + return null; + } +} diff --git a/pki/base/common/test/com/netscape/certsrv/request/AgentApprovalsTest.java b/pki/base/common/test/com/netscape/certsrv/request/AgentApprovalsTest.java new file mode 100644 index 000000000..222944a7e --- /dev/null +++ b/pki/base/common/test/com/netscape/certsrv/request/AgentApprovalsTest.java @@ -0,0 +1,81 @@ +package com.netscape.certsrv.request; + +import com.netscape.cmscore.test.CMSBaseTestCase; +import junit.framework.Test; +import junit.framework.TestSuite; + +import java.util.Vector; + +public class AgentApprovalsTest extends CMSBaseTestCase { + + AgentApprovals agentApprovals; + + public AgentApprovalsTest(String name) { + super(name); + } + + public void cmsTestSetUp() { + agentApprovals = new AgentApprovals(); + } + + public void cmsTestTearDown() { + } + + public static Test suite() { + return new TestSuite(AgentApprovalsTest.class); + } + + public void testToFromStringVector() { + AgentApproval approval1 = new AgentApproval("user1"); + AgentApproval approval2 = new AgentApproval("user2"); + AgentApproval approval3 = new AgentApproval(";user4;messy name"); + agentApprovals.mVector.add(approval1); + agentApprovals.mVector.add(approval2); + agentApprovals.mVector.add(approval3); + + Vector stringVector = agentApprovals.toStringVector(); + assertNotNull(stringVector); + assertEquals(3, stringVector.size()); + assertEquals(approval1.getDate().getTime() + ";" + approval1.getUserName(), + stringVector.get(0)); + assertEquals(approval2.getDate().getTime() + ";" + approval2.getUserName(), + stringVector.get(1)); + assertEquals(approval3.getDate().getTime() + ";" + approval3.getUserName(), + stringVector.get(2)); + + AgentApprovals approvals = AgentApprovals.fromStringVector(stringVector); + assertNotNull(approvals); + assertEquals(3, approvals.mVector.size()); + + AgentApproval approval = (AgentApproval)approvals.mVector.get(0); + assertEquals(approval1.getUserName(), approval.getUserName()); + assertEquals(approval1.getDate(), approval.getDate()); + + approval = (AgentApproval)approvals.mVector.get(1); + assertEquals(approval2.getUserName(), approval.getUserName()); + assertEquals(approval2.getDate(), approval.getDate()); + + approval = (AgentApproval)approvals.mVector.get(2); + assertEquals(approval3.getUserName(), approval.getUserName()); + assertEquals(approval3.getDate(), approval.getDate()); + + // test bad data + stringVector = new Vector(); + stringVector.add("foo"); + assertNull(AgentApprovals.fromStringVector(stringVector)); + + stringVector = new Vector(); + stringVector.add(";foo"); + assertNull(AgentApprovals.fromStringVector(stringVector)); + + stringVector = new Vector(); + stringVector.add("bar;foo"); + assertNull(AgentApprovals.fromStringVector(stringVector)); + + stringVector = new Vector(); + stringVector.add("00123b;foo"); + assertNull(AgentApprovals.fromStringVector(stringVector)); + + assertNull(AgentApprovals.fromStringVector(null)); + } +} |