Home | History | Annotate | Download | only in ssl
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 package org.apache.harmony.xnet.tests.javax.net.ssl;
     19 
     20 import javax.net.ssl.SSLEngineResult;
     21 
     22 import junit.framework.TestCase;
     23 
     24 /**
     25  * Tests for SSLEngineResult class
     26  */
     27 public class SSLEngineResultTest extends TestCase {
     28 
     29     /**
     30      * Test for <code>SSLEngineResult(SSLEngineResult.Status status,
     31      * SSLEngineResult.HandshakeStatus handshakeStatus,
     32      * int bytesConsumed,
     33      * int bytesProduced) </code> constructor and
     34      * <code>getHandshakeStatus()</code>
     35      * <code>getStatus()</code>
     36      * <code>bytesConsumed()</code>
     37      * <code>bytesProduced()</code>
     38      * <code>toString()</code>
     39      * methods
     40      * Assertions:
     41      * constructor throws IllegalArgumentException when bytesConsumed
     42      * or bytesProduced is negative or when status or handshakeStatus
     43      * is null
     44      */
     45     public void testSSLEngineResultConstructor() {
     46 
     47         int[] neg = { -1, -10, -1000, Integer.MIN_VALUE,
     48                 (Integer.MIN_VALUE + 1) };
     49         int[] pos = { 0, 1, 1000, Integer.MAX_VALUE, (Integer.MAX_VALUE - 1) };
     50         try {
     51             new SSLEngineResult(null, SSLEngineResult.HandshakeStatus.FINISHED,
     52                     1, 1);
     53             fail("IllegalArgumentException must be thrown");
     54         } catch (IllegalArgumentException e) {
     55         }
     56         try {
     57             new SSLEngineResult(SSLEngineResult.Status.BUFFER_OVERFLOW, null,
     58                     1, 1);
     59             fail("IllegalArgumentException must be thrown");
     60         } catch (IllegalArgumentException e) {
     61         }
     62         for (int i = 0; i < neg.length; i++) {
     63             try {
     64                 new SSLEngineResult(SSLEngineResult.Status.BUFFER_OVERFLOW,
     65                         SSLEngineResult.HandshakeStatus.FINISHED, neg[i], 1);
     66                 fail("IllegalArgumentException must be thrown");
     67             } catch (IllegalArgumentException e) {
     68             }
     69         }
     70         for (int i = 0; i < neg.length; i++) {
     71             try {
     72                 new SSLEngineResult(SSLEngineResult.Status.BUFFER_OVERFLOW,
     73                         SSLEngineResult.HandshakeStatus.FINISHED, 1, neg[i]);
     74                 fail("IllegalArgumentException must be thrown");
     75             } catch (IllegalArgumentException e) {
     76             }
     77         }
     78         SSLEngineResult.Status[] enS = SSLEngineResult.Status.values();
     79         SSLEngineResult.HandshakeStatus[] enHS = SSLEngineResult.HandshakeStatus
     80                 .values();
     81         SSLEngineResult res;
     82         String toS;
     83         for (int i = 0; i < enS.length; i++) {
     84             for (int j = 0; j < enHS.length; j++) {
     85                 for (int n = 0; n < pos.length; n++) {
     86                     for (int l = 0; l < pos.length; l++) {
     87                         res = new SSLEngineResult(enS[i], enHS[j], pos[n],
     88                                 pos[l]);
     89 
     90                         assertEquals("Incorrect bytesProduced", res
     91                                 .bytesProduced(), pos[l]);
     92                         assertEquals("Incorrect bytesConsumed", res
     93                                 .bytesConsumed(), pos[n]);
     94                         assertEquals("Incorrect HandshakeStatus", res
     95                                 .getHandshakeStatus(), enHS[j]);
     96                         assertEquals("Incorrect Status", res.getStatus(),
     97                                 enS[i]);
     98                         toS = res.toString();
     99                         assertNotNull("Result of toSring() method is null", toS);
    100                     }
    101                 }
    102             }
    103         }
    104 
    105     }
    106 
    107     /**
    108      * Test for <code>SSLEngineResult.Status.values()</code> method
    109      */
    110 
    111     public void testStatus01() {
    112         SSLEngineResult.Status[] enS = SSLEngineResult.Status.values();
    113         assertTrue("Incorrect array of Status objects", enS.length > 0);
    114         assertTrue("OK object does not define", findEl(enS,
    115                 SSLEngineResult.Status.OK));
    116         assertTrue("CLOSED object does not define", findEl(enS,
    117                 SSLEngineResult.Status.CLOSED));
    118         assertTrue("BUFFER_OVERFLOW object does not define", findEl(enS,
    119                 SSLEngineResult.Status.BUFFER_OVERFLOW));
    120         assertTrue("BUFFER_UNDERFLOW object does not define", findEl(enS,
    121                 SSLEngineResult.Status.BUFFER_UNDERFLOW));
    122     }
    123 
    124     /**
    125      * Test for <code>SSLEngineResult.Status.valueOf(String name)</code> method
    126      * Assertion:
    127      * throws IllegalArgumentException when there is no constan with specified
    128      * name
    129      */
    130 
    131     public void testStatus02() {
    132         String[] invalid = { "", "OK1", "BUFFER_overflow", "BUFFER_UND",
    133                 "CLOSED_CLOSED", "Bad string for verification valueOf method"
    134         };
    135         assertEquals(SSLEngineResult.Status.valueOf("BUFFER_OVERFLOW"),
    136                 SSLEngineResult.Status.BUFFER_OVERFLOW);
    137         assertEquals(SSLEngineResult.Status.valueOf("BUFFER_UNDERFLOW"),
    138                 SSLEngineResult.Status.BUFFER_UNDERFLOW);
    139         assertEquals(SSLEngineResult.Status.valueOf("CLOSED"),
    140                 SSLEngineResult.Status.CLOSED);
    141         assertEquals(SSLEngineResult.Status.valueOf("OK"),
    142                 SSLEngineResult.Status.OK);
    143         for (int i = 0; i < invalid.length; i++) {
    144             try {
    145                 SSLEngineResult.Status.valueOf(invalid[i]);
    146                 fail("IllegalArgumentException must be thrown for name: " + invalid[i]);
    147             } catch (IllegalArgumentException e) {
    148             }
    149         }
    150     }
    151 
    152     /**
    153      * Test for <code>SSLEngineResult.HandshakeStatus.values()</code> method
    154      */
    155 
    156     public void testHandshakeStatus01() {
    157         SSLEngineResult.HandshakeStatus[] enHS = SSLEngineResult.HandshakeStatus
    158                 .values();
    159         assertTrue("Incorrect array of HandshakeStatus objects",
    160                 enHS.length > 0);
    161         assertTrue("FINISHED object does not define", findEl(enHS,
    162                 SSLEngineResult.HandshakeStatus.FINISHED));
    163         assertTrue("NEED_UNWRAP object does not define", findEl(enHS,
    164                 SSLEngineResult.HandshakeStatus.NEED_UNWRAP));
    165         assertTrue("NEED_WRAP object does not define", findEl(enHS,
    166                 SSLEngineResult.HandshakeStatus.NEED_WRAP));
    167         assertTrue("NEED_TASK object does not define", findEl(enHS,
    168                 SSLEngineResult.HandshakeStatus.NEED_TASK));
    169         assertTrue("NOT_HANDSHAKING object does not define", findEl(enHS,
    170                 SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING));
    171     }
    172 
    173     /**
    174      * Test for <code>SSLEngineResult.HandshakeStatus.valueOf(String name)</code> method
    175      * Assertion:
    176      * throws IllegalArgumentException when there is no constan with specified
    177      * name
    178      */
    179 
    180     public void testHandshakeStatus02() {
    181         String[] invalid = { "", "FINISHED1", "NEED_task", "NEED_UN",
    182                 "NEED_WRAP_WRAP", "not_HANDSHAKING", "Bad string for verification valueOf method"
    183         };
    184         assertEquals(SSLEngineResult.HandshakeStatus.valueOf("NOT_HANDSHAKING"),
    185                 SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING);
    186         assertEquals(SSLEngineResult.HandshakeStatus.valueOf("NEED_WRAP"),
    187                 SSLEngineResult.HandshakeStatus.NEED_WRAP);
    188         assertEquals(SSLEngineResult.HandshakeStatus.valueOf("NEED_UNWRAP"),
    189                 SSLEngineResult.HandshakeStatus.NEED_UNWRAP);
    190         assertEquals(SSLEngineResult.HandshakeStatus.valueOf("FINISHED"),
    191                 SSLEngineResult.HandshakeStatus.FINISHED);
    192         assertEquals(SSLEngineResult.HandshakeStatus.valueOf("NEED_TASK"),
    193                 SSLEngineResult.HandshakeStatus.NEED_TASK);
    194         for (int i = 0; i < invalid.length; i++) {
    195             try {
    196                 SSLEngineResult.HandshakeStatus.valueOf(invalid[i]);
    197                 fail("IllegalArgumentException must be thrown for name: " + invalid[i]);
    198             } catch (IllegalArgumentException e) {
    199             }
    200         }
    201     }
    202 
    203     private boolean findEl(Object[] arr, Object el) {
    204         boolean ok = false;
    205         for (int i = 0; i < arr.length; i++) {
    206             if (arr[i].equals(el)) {
    207                 ok = true;
    208                 break;
    209             }
    210         }
    211         return ok;
    212     }
    213 
    214 }
    215