You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sm...@apache.org on 2006/12/11 14:40:20 UTC

svn commit: r485661 - in /harmony/enhanced/classlib/trunk/modules/auth/src: main/java/common/javax/security/auth/kerberos/ test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/ test/java/common/org/apache/harmony/auth/tests/javax...

Author: smishura
Date: Mon Dec 11 05:40:19 2006
New Revision: 485661

URL: http://svn.apache.org/viewvc?view=rev&rev=485661
Log:
Fix for KerberosTicket + regression test + serialization test

Added:
    harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.java   (with props)
    harmony/enhanced/classlib/trunk/modules/auth/src/test/resources/serialization/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.golden.ser   (with props)
Modified:
    harmony/enhanced/classlib/trunk/modules/auth/src/main/java/common/javax/security/auth/kerberos/KerberosTicket.java
    harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/KerberosTicketTest.java

Modified: harmony/enhanced/classlib/trunk/modules/auth/src/main/java/common/javax/security/auth/kerberos/KerberosTicket.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/auth/src/main/java/common/javax/security/auth/kerberos/KerberosTicket.java?view=diff&rev=485661&r1=485660&r2=485661
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/auth/src/main/java/common/javax/security/auth/kerberos/KerberosTicket.java (original)
+++ harmony/enhanced/classlib/trunk/modules/auth/src/main/java/common/javax/security/auth/kerberos/KerberosTicket.java Mon Dec 11 05:40:19 2006
@@ -57,8 +57,8 @@
     // INITIAL flag
     private static final int INITIAL = 9;
 
-    // UNUSED flag, 12 - 32 bit reserved
-    private static final int UNUSED = 31;
+    // number of flags used by Kerberos protocol
+    private static final int FLAGS_NUM = 32;
 
     // line feed 
     private static final String LF = "\n"; //$NON-NLS-1$
@@ -132,20 +132,16 @@
         this.sessionKey = new KeyImpl(keyBytes, keyType);
 
         if (flags == null) {
-            this.flags = new boolean[UNUSED];
-        } else if (flags.length > UNUSED) {
+            this.flags = new boolean[FLAGS_NUM];
+        } else if (flags.length > FLAGS_NUM) {
             this.flags = new boolean[flags.length];
-            //Arrays.fill(flags, UNUSED, flags.length, false);
             System.arraycopy(flags, 0, this.flags, 0, this.flags.length);
         } else {
-            this.flags = new boolean[flags.length];
-            //System.arraycopy(flags, 0, this.flags, 0, this.flags.length);
-            for (int i = 0; i < flags.length; i++) {
-                this.flags[i] = flags[i];
-            }
+            this.flags = new boolean[FLAGS_NUM];
+            System.arraycopy(flags, 0, this.flags, 0, flags.length);
         }
 
-        if (flags[RENEWABLE] && renewTill == null) {
+        if (this.flags[RENEWABLE] && renewTill == null) {
             throw new IllegalArgumentException(Messages.getString("auth.41")); //$NON-NLS-1$
         }
 

Modified: harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/KerberosTicketTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/KerberosTicketTest.java?view=diff&rev=485661&r1=485660&r2=485661
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/KerberosTicketTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/KerberosTicketTest.java Mon Dec 11 05:40:19 2006
@@ -46,6 +46,9 @@
 
     private static final int KEY_TYPE = 1;
 
+    // number of flags used by Kerberos protocol
+    private static final int FLAGS_NUM = 32;
+    
     private static final boolean[] flags = { true, false, true, false, true,
             false, true, false, true, false, true, false, };
 
@@ -198,6 +201,86 @@
     }
 
     /**
+     * @tests javax.security.auth.kerberos.KerberosTicket#getFlags()
+     */
+    public void test_getFlags() {
+
+        boolean[] myFlags = new boolean[] { true, //reserved
+                true, // forwardable
+                true, // forwarded
+                true, // proxiable
+                true, // proxy
+                true, // may-postdate 
+                true, // postdated
+                true, // invalid
+                true, // renewable
+                true, // initial
+                true, // pre-authent
+                true // hw-authent 
+        };
+
+        KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
+                sessionKey, KEY_TYPE, myFlags, // <=== we test this
+                authTime, startTime, endTime, renewTill, addesses);
+
+        // test: returned value is copied
+        assertNotSame(krbTicket.getFlags(), krbTicket.getFlags());
+
+        // test: flags values
+        assertTrue(krbTicket.isForwardable());
+        assertTrue(krbTicket.isForwarded());
+        assertTrue(krbTicket.isInitial());
+        assertTrue(krbTicket.isPostdated());
+        assertTrue(krbTicket.isProxiable());
+        assertTrue(krbTicket.isProxy());
+        assertTrue(krbTicket.isRenewable());
+
+        //
+        // test: number of flags less the in Kerberos protocol (<32)
+        //
+        boolean[] ktFlags = krbTicket.getFlags();
+        assertEquals("flags length", FLAGS_NUM, ktFlags.length);
+        int index = 0;
+        // must match to initial array
+        for (; index < flags.length; index++) {
+            assertEquals("Index: " + index, myFlags[index], ktFlags[index]);
+        }
+        // the rest is expected to be false
+        for (; index < FLAGS_NUM; index++) {
+            assertEquals("Index: " + index, false, ktFlags[index]);
+        }
+
+        //
+        // test: flags array is greater then 32
+        //
+        myFlags = new boolean[50];
+
+        krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
+                KEY_TYPE, myFlags, // <=== we test this 
+                authTime, startTime, endTime, renewTill, addesses);
+
+        ktFlags = krbTicket.getFlags();
+
+        assertEquals(myFlags.length, ktFlags.length);
+        for (index = 0; index < ktFlags.length; index++) {
+            assertEquals(false, ktFlags[index]);
+        }
+
+        // initial array is copied
+        assertFalse(krbTicket.isForwardable());
+        myFlags[1] = true;
+        assertFalse(krbTicket.isForwardable());
+
+        //
+        // test: Null value
+        //
+        krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
+                KEY_TYPE, null, // <=== we test this
+                authTime, startTime, endTime, renewTill, addesses);
+        assertTrue(Arrays.equals(new boolean[FLAGS_NUM], krbTicket.getFlags()));
+    }
+
+    /**
      * @tests javax.security.auth.kerberos.KerberosTicket#getServer() 
      */
     public void test_getServer() throws Exception {
@@ -286,7 +369,7 @@
         assertEquals(authTime, krbTicket.getStartTime());
         assertNotSame(authTime, krbTicket.getStartTime());
     }
-    
+
     /**
      * @tests javax.security.auth.kerberos.KerberosTicket#destroy()
      * @tests javax.security.auth.kerberos.KerberosTicket#isDestroyed()

Added: harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.java?view=auto&rev=485661
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.java Mon Dec 11 05:40:19 2006
@@ -0,0 +1,112 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.harmony.auth.tests.javax.security.auth.kerberos.serialization;
+
+import java.io.Serializable;
+import java.net.InetAddress;
+import java.util.Arrays;
+import java.util.Date;
+
+import javax.security.auth.kerberos.KerberosPrincipal;
+import javax.security.auth.kerberos.KerberosTicket;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.testframework.serialization.SerializationTest;
+import org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert;
+
+public class KerberosTicketTest extends TestCase {
+
+    // ticket's ASN.1 encoding  
+    private static final byte[] ticket = { 0x01, 0x02, 0x03, 0x04 };
+
+    // client's principal 
+    private static final KerberosPrincipal pClient = new KerberosPrincipal(
+            "client@apache.org");
+
+    // server's principal 
+    private static final KerberosPrincipal pServer = new KerberosPrincipal(
+            "server@apache.org");
+
+    // session key
+    private static final byte[] sessionKey = { 0x01, 0x04, 0x03, 0x02 };
+
+    private static final int KEY_TYPE = 1;
+
+    private static final boolean[] flags = { true, false, true, false, true,
+            false, true, false, true, false, true, false, };
+
+    private static final Date authTime = new Date(0);
+
+    private static final Date startTime = new Date(1);
+
+    private static final Date endTime = new Date(2);
+
+    private static final Date renewTill = new Date(3);
+
+    private static final InetAddress[] addesses = null;
+
+    // comparator for KerberosKey objects
+    private static final SerializableAssert COMPARATOR = new SerializableAssert() {
+        public void assertDeserialized(Serializable initial,
+                Serializable deserialized) {
+
+            KerberosTicket init = (KerberosTicket) initial;
+            KerberosTicket desr = (KerberosTicket) deserialized;
+
+            assertTrue("Ticket", Arrays.equals(init.getEncoded(), desr
+                    .getEncoded()));
+
+            assertEquals("Client", init.getClient(), desr.getClient());
+            assertEquals("Server", init.getServer(), desr.getServer());
+
+            assertTrue("Key", Arrays.equals(init.getSessionKey().getEncoded(),
+                    desr.getSessionKey().getEncoded()));
+            assertEquals("KeyType", init.getSessionKeyType(), desr
+                    .getSessionKeyType());
+
+            assertTrue("Flags", Arrays.equals(init.getFlags(), desr.getFlags()));
+
+            assertEquals("AuthTime", init.getAuthTime(), desr.getAuthTime());
+            assertEquals("StartTime", init.getStartTime(), desr.getStartTime());
+            assertEquals("EndTime", init.getEndTime(), desr.getEndTime());
+            assertEquals("RenewTill", init.getRenewTill(), desr.getRenewTill());
+
+            assertNull("ClientAddresses", desr.getClientAddresses());
+        }
+    };
+
+    /**
+     * @tests serialization/deserialization compatibility.
+     */
+    public void testSerializationSelf() throws Exception {
+        SerializationTest.verifySelf(new KerberosTicket(ticket, pClient,
+                pServer, sessionKey, KEY_TYPE, flags, authTime, startTime,
+                endTime, renewTill, addesses), COMPARATOR);
+    }
+
+    /**
+     * @tests serialization/deserialization compatibility with RI.
+     */
+    public void testSerializationCompatibility() throws Exception {
+        SerializationTest.verifyGolden(this, new KerberosTicket(ticket,
+                pClient, pServer, sessionKey, KEY_TYPE, flags, authTime,
+                startTime, endTime, renewTill, addesses), COMPARATOR);
+
+    }
+}

Propchange: harmony/enhanced/classlib/trunk/modules/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: harmony/enhanced/classlib/trunk/modules/auth/src/test/resources/serialization/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.golden.ser
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/auth/src/test/resources/serialization/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.golden.ser?view=auto&rev=485661
==============================================================================
Binary file - no diff available.

Propchange: harmony/enhanced/classlib/trunk/modules/auth/src/test/resources/serialization/org/apache/harmony/auth/tests/javax/security/auth/kerberos/serialization/KerberosTicketTest.golden.ser
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream