Author: elecharny
Date: Mon May 2 14:23:08 2005
New Revision: 165698
URL: http://svn.apache.org/viewcvs?rev=165698&view=rev
Log:
Added a test and factorized some common code in a function.
Modified:
directory/sandbox/trunk/asn1-new-codec/src/test/org/apache/asn1/spnego/codec/SpnegoTest.java
Modified:
directory/sandbox/trunk/asn1-new-codec/src/test/org/apache/asn1/spnego/codec/SpnegoTest.java
URL:
http://svn.apache.org/viewcvs/directory/sandbox/trunk/asn1-new-codec/src/test/org/apache/asn1/spnego/codec/SpnegoTest.java?rev=165698&r1=165697&r2=165698&view=diff
==============================================================================
---
directory/sandbox/trunk/asn1-new-codec/src/test/org/apache/asn1/spnego/codec/SpnegoTest.java
(original)
+++
directory/sandbox/trunk/asn1-new-codec/src/test/org/apache/asn1/spnego/codec/SpnegoTest.java
Mon May 2 14:23:08 2005
@@ -23,6 +23,7 @@
import org.apache.asn1.ber.containers.IAsn1Container;
import org.apache.asn1.ldap.codec.BindRequestTest;
import org.apache.asn1.primitives.OID;
+import org.apache.asn1.primitives.OctetString;
import org.apache.asn1.spnego.pojo.SpnegoNegTokenInitPOJO;
import org.apache.asn1.spnego.pojo.SpnegoPOJO;
import org.apache.asn1.util.pools.PoolException;
@@ -43,6 +44,21 @@
{
PropertyConfigurator.configure( "conf/log4j.conf" );
}
+
+ /**
+ * Check the default value of Req Flags
+ * @param spnego The spnego POJO to test
+ */
+ private void checkDefaultReqFlags(SpnegoPOJO spnego)
+ {
+ Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isAnonFlag());
+ Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isConfFlag());
+ Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isDelegFlag());
+ Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isIntegFlag());
+ Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isMutualFlag());
+ Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isReplayFlag());
+ Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isSequenceFlag());
+ }
/**
* Test the decoding of an empty Spnego NegTokenInit.
@@ -107,13 +123,7 @@
Assert.assertEquals(0, nbOids);
// Check the reqFlags
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isAnonFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isConfFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isDelegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isIntegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isMutualFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isReplayFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isSequenceFlag());
+ checkDefaultReqFlags(spnego);
// Check the mech token
Assert.assertEquals(null,
((SpnegoNegTokenInitPOJO)spnego).getMechToken());
@@ -193,13 +203,7 @@
Assert.assertEquals("1.2.840.48018.1.2.2", oids[0].getOID());
// Check the reqFlags
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isAnonFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isConfFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isDelegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isIntegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isMutualFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isReplayFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isSequenceFlag());
+ checkDefaultReqFlags(spnego);
// Check the mech token
Assert.assertEquals(null,
((SpnegoNegTokenInitPOJO)spnego).getMechToken());
@@ -292,13 +296,7 @@
}
// Check the reqFlags
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isAnonFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isConfFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isDelegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isIntegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isMutualFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isReplayFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isSequenceFlag());
+ checkDefaultReqFlags(spnego);
// Check the mech token
Assert.assertEquals(null,
((SpnegoNegTokenInitPOJO)spnego).getMechToken());
@@ -388,13 +386,7 @@
}
// Check the reqFlags
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isAnonFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isConfFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isDelegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isIntegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isMutualFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isReplayFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isSequenceFlag());
+ checkDefaultReqFlags(spnego);
// Check the mech token
Assert.assertEquals(null,
((SpnegoNegTokenInitPOJO)spnego).getMechToken());
@@ -408,6 +400,253 @@
}
/**
+ * Test the decoding of a Spnego NegTokenInit with an empty mech token .
+ */
+ public void testDecodeSpnegoNegTokenInitEmptyMechToken()
+ {
+ Asn1Decoder spnegoDecoder = new SpnegoDecoder();
+
+ ByteBuffer stream = ByteBuffer.allocate( 0x08 );
+ stream.put(
+ new byte[]
+ {
+ (byte)0xa0, 0x06, // SPNEGO --> CHOICE {
+ // negTokenInit
[0] NegTokenInit
+ 0x30, 0x04, // NegTokenInit ::= SEQUENCE {
+ (byte)0xA2, 0x02, // mechToken [2] OCTET STRING
OPTIONAL ,
+ 0x04, 0x00 // empty mech token
+ } );
+
+ stream.flip();
+
+ // Allocate a Spnego Container
+ IAsn1Container spnegoContainer = null;
+
+ try
+ {
+ spnegoContainer = ( IAsn1Container ) spnegoDecoder.allocate(
+ SpnegoPoolEnum.SPNEGO_CONTAINER_POOL );
+ }
+ catch ( PoolException pe )
+ {
+ Assert.fail("Cannot allocat a SpnegoContainer : " +
pe.getMessage());
+ }
+
+ spnegoContainer.setPoolManager( spnegoDecoder.getPoolManager() );
+
+ try
+ {
+ spnegoDecoder.decode( stream, spnegoContainer );
+ }
+ catch ( DecoderException de )
+ {
+ de.printStackTrace();
+ Assert.fail( de.getMessage() );
+ }
+
+ SpnegoPOJO spnego = ( ( SpnegoContainer ) spnegoContainer
).getSpnego();
+
+ // Checks the Oids
+ OID oids[] = ((SpnegoNegTokenInitPOJO)spnego).getMechTypeList();
+ int nbOids = 0;
+
+ for ( int i = 0 ; i < oids.length ; i++ )
+ {
+ if (oids[i] == null)
+ {
+ break;
+ }
+
+ nbOids ++;
+ }
+
+ Assert.assertEquals(0, nbOids);
+
+ // Check the reqFlags
+ checkDefaultReqFlags(spnego);
+
+ // Check the mech token
+ OctetString mechToken =
((SpnegoNegTokenInitPOJO)spnego).getMechToken();
+
+ Assert.assertEquals(OctetString.EMPTY_STRING, mechToken);
+ Assert.assertEquals( "" , mechToken.toString() );
+
+ // Check the mech list MIC
+ Assert.assertEquals(null,
((SpnegoNegTokenInitPOJO)spnego).getMechListMIC());
+
+ // Free the BindRequest Container. It will be put back in the IPool
+ // after being reset.
+ spnegoContainer.free();
+ }
+
+ /**
+ * Test the decoding of a Spnego NegTokenInit with a mech token.
+ */
+ public void testDecodeSpnegoNegTokenInitMechToken()
+ {
+ Asn1Decoder spnegoDecoder = new SpnegoDecoder();
+
+ ByteBuffer stream = ByteBuffer.allocate( 0x0C );
+ stream.put(
+ new byte[]
+ {
+ (byte)0xa0, 0x0A, // SPNEGO --> CHOICE {
+ //
negTokenInit [0] NegTokenInit
+ 0x30, 0x08, // NegTokenInit ::= SEQUENCE {
+ (byte)0xA2, 0x06, // mechToken [2] OCTET
STRING OPTIONAL ,
+ 0x04, 0x04, 'a', 'b', 'c', 'd' // mechToken = 'abcd'
+ } );
+
+ stream.flip();
+
+ // Allocate a Spnego Container
+ IAsn1Container spnegoContainer = null;
+
+ try
+ {
+ spnegoContainer = ( IAsn1Container ) spnegoDecoder.allocate(
+ SpnegoPoolEnum.SPNEGO_CONTAINER_POOL );
+ }
+ catch ( PoolException pe )
+ {
+ Assert.fail("Cannot allocat a SpnegoContainer : " +
pe.getMessage());
+ }
+
+ spnegoContainer.setPoolManager( spnegoDecoder.getPoolManager() );
+
+ try
+ {
+ spnegoDecoder.decode( stream, spnegoContainer );
+ }
+ catch ( DecoderException de )
+ {
+ de.printStackTrace();
+ Assert.fail( de.getMessage() );
+ }
+
+ SpnegoPOJO spnego = ( ( SpnegoContainer ) spnegoContainer
).getSpnego();
+
+ // Checks the Oids
+ OID oids[] = ((SpnegoNegTokenInitPOJO)spnego).getMechTypeList();
+ int nbOids = 0;
+
+ for ( int i = 0 ; i < oids.length ; i++ )
+ {
+ if (oids[i] == null)
+ {
+ break;
+ }
+
+ nbOids ++;
+ }
+
+ Assert.assertEquals(0, nbOids);
+
+ // Check the reqFlags
+ checkDefaultReqFlags(spnego);
+
+ // Check the mech token
+ Assert.assertEquals("[61][62][63][64]",
((SpnegoNegTokenInitPOJO)spnego).getMechToken().toString());
+
+ // Check the mech list MIC
+ Assert.assertEquals(null,
((SpnegoNegTokenInitPOJO)spnego).getMechListMIC());
+
+ // Free the BindRequest Container. It will be put back in the IPool
+ // after being reset.
+ spnegoContainer.free();
+ }
+
+ /**
+ * Test the decoding of a Spnego NegTokenInit with a 2048 bytes long mech
token .
+ */
+ public void testDecodeSpnegoNegTokenInit2048MechToken()
+ {
+ Asn1Decoder spnegoDecoder = new SpnegoDecoder();
+
+ ByteBuffer stream = ByteBuffer.allocate( 0x810 );
+ stream.put(
+ new byte[]
+ {
+ (byte)0xa0, (byte)0x82, (byte)0x08, 0x0C, // SPNEGO -->
CHOICE {
+
// negTokenInit [0] NegTokenInit
+ 0x30, (byte)0x82, (byte)0x08, 0x08, // NegTokenInit
::= SEQUENCE {
+ (byte)0xA2, (byte)0x82, (byte)0x08, 0x04, // mechToken
[2] OCTET STRING OPTIONAL ,
+ 0x04, (byte)0x82, (byte)0x08, 0x00 // 2048 octets
+ } );
+
+ // Stores 2048 bytes in the stream
+ for ( int i = 0 ; i < 2048; i++)
+ {
+ stream.put( (byte)((i % 256) & 0x00FF) );
+ }
+
+ stream.flip();
+
+ // Allocate a Spnego Container
+ IAsn1Container spnegoContainer = null;
+
+ try
+ {
+ spnegoContainer = ( IAsn1Container ) spnegoDecoder.allocate(
+ SpnegoPoolEnum.SPNEGO_CONTAINER_POOL );
+ }
+ catch ( PoolException pe )
+ {
+ Assert.fail("Cannot allocat a SpnegoContainer : " +
pe.getMessage());
+ }
+
+ spnegoContainer.setPoolManager( spnegoDecoder.getPoolManager() );
+
+ try
+ {
+ spnegoDecoder.decode( stream, spnegoContainer );
+ }
+ catch ( DecoderException de )
+ {
+ de.printStackTrace();
+ Assert.fail( de.getMessage() );
+ }
+
+ SpnegoPOJO spnego = ( ( SpnegoContainer ) spnegoContainer
).getSpnego();
+
+ // Checks the Oids
+ OID oids[] = ((SpnegoNegTokenInitPOJO)spnego).getMechTypeList();
+ int nbOids = 0;
+
+ for ( int i = 0 ; i < oids.length ; i++ )
+ {
+ if (oids[i] == null)
+ {
+ break;
+ }
+
+ nbOids ++;
+ }
+
+ Assert.assertEquals(0, nbOids);
+
+ // Check the reqFlags
+ checkDefaultReqFlags(spnego);
+
+ // Check the mech token
+ OctetString mechToken =
((SpnegoNegTokenInitPOJO)spnego).getMechToken();
+
+ Assert.assertEquals(2048, mechToken.getValue().length);
+
+ for ( int i = 0 ; i < 2048 ; i++ )
+ {
+ Assert.assertEquals( (byte)((i % 256) & 0x00FF) ,
mechToken.getValue()[i] );
+ }
+
+ // Check the mech list MIC
+ Assert.assertEquals(null,
((SpnegoNegTokenInitPOJO)spnego).getMechListMIC());
+
+ // Free the BindRequest Container. It will be put back in the IPool
+ // after being reset.
+ spnegoContainer.free();
+ }
+
+ /**
* Test the decoding of a Spnego NegTokenInit with 2 mech types and
* one mech token.
*/
@@ -479,13 +718,7 @@
Assert.assertEquals("1.2.840.113554.1.2.2", oids[1].getOID());
// Check the reqFlags
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isAnonFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isConfFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isDelegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isIntegFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isMutualFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isReplayFlag());
- Assert.assertEquals(false,
((SpnegoNegTokenInitPOJO)spnego).isSequenceFlag());
+ checkDefaultReqFlags(spnego);
// Check the mech token
Assert.assertEquals("[61][62][63][64]",
((SpnegoNegTokenInitPOJO)spnego).getMechToken().toString());