1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Alexander Y. Kleymenov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.crypto.tests.javax.crypto; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Key; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.Cipher; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.KeyGenerator; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.NoSuchPaddingException; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.NullCipher; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.CipherInputStream; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class CipherInputStream1Test extends TestCase { 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static class TestInputStream extends ByteArrayInputStream { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean closed = false; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TestInputStream(byte[] data) { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(data); 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void close() { 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project closed = true; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean wasClosed() { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return closed; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * CipherInputStream(InputStream is) method testing. Tests that 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * CipherInputStream uses NullCipher if Cipher is not specified 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the constructor. 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testCipherInputStream() throws Exception { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data = new byte[] { -127, -100, -50, -10, -1, 0, 1, 10, 50, 127 }; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestInputStream tis = new TestInputStream(data); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CipherInputStream cis = new CipherInputStream(tis){}; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < data.length; i++) { 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((byte) cis.read() != data[i]) { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullCipher should be used " 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "if Cipher is not specified."); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cis.read() != -1) { 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullCipher should be used if Cipher is not specified."); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * read() method testing. Tests that method returns the correct value 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (related to the InputStream) and that it returns -1 at the end of stream. 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testRead1() throws Exception { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data = new byte[] { -127, -100, -50, -10, -1, 0, 1, 10, 50, 127 }; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestInputStream tis = new TestInputStream(data); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CipherInputStream cis = new CipherInputStream(tis, new NullCipher()); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte res; 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < data.length; i++) { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((res = (byte) cis.read()) != data[i]) { 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("read() returned the incorrect value. " + "Expected: " 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + data[i] + ", Got: " + res + "."); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cis.read() != -1) { 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("read() should return -1 at the end of the stream."); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * read(byte[] b) method testing. Tests that method returns the correct 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value (related to the InputStream) and that it returns -1 at the end of 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stream. 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testRead2() throws Exception { 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data = new byte[] { -127, -100, -50, -10, -1, 0, 1, 10, 50, 127 }; 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestInputStream tis = new TestInputStream(data); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CipherInputStream cis = new CipherInputStream(tis, new NullCipher()); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int expected = data.length; 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] result = new byte[expected]; 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int ind = 0; // index into the data array (to check the got data) 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int got = cis.read(result); // the number of got bytes 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (true) { 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int j = 0; j < got - ind; j++) { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (result[j] != data[ind + j]) { 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("read(byte[] b) returned incorrect data."); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (got == expected) { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (got > expected) { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("The data returned by read(byte[] b) " 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "is larger than expected."); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ind = got; 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project got += cis.read(result); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cis.read(result) != -1) { 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("read(byte[] b) should return -1 " 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "at the end of the stream."); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * read(byte[] b, int off, int len) method testing. Tests that method 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns the correct value (related to the InputStream), that it discards 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bytes in the case of null buffer, and that it returns -1 at the end of 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stream. 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testRead3() throws Exception { 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data = new byte[] { -127, -100, -50, -10, -1, 0, 1, 10, 50, 127 }; 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestInputStream tis = new TestInputStream(data); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CipherInputStream cis = new CipherInputStream(tis, new NullCipher()); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int expected = data.length; 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] result = new byte[expected]; 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int skip = 2; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int ind = skip; // index into the data array (to check the got data) 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // should read and discard bytes; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cis.read(null, 0, skip); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int got = skip + cis.read(result, 0, 1); // the number of got bytes 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (true) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int j = 0; j < got - ind; j++) { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("read(byte[] b, int off, int len) " 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "returned incorrect data.", result[j], data[ind + j]); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (got == expected) { 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (got > expected) { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("The data returned by " 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "read(byte[] b, int off, int len) " 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "is larger than expected."); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ind = got; 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project got += cis.read(result, 0, 3); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cis.read(result, 0, 1) != -1) { 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("read() should return -1 at the end of the stream."); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * skip(long n) method testing. Tests that the method correctly skips the 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * bytes. 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSkip() throws Exception { 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data = new byte[] { -127, -100, -50, -10, -1, 0, 1, 10, 50, 127 }; 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestInputStream tis = new TestInputStream(data); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CipherInputStream cis = new CipherInputStream(tis, new NullCipher()); 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int expected = data.length; 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] result = new byte[expected]; 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int skipped = (int) cis.skip(2); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int ind = skipped; 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int got = skipped + cis.read(result, 0, 1); // the number of got bytes 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (true) { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int j = 0; j < got - ind; j++) { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (result[j] != data[ind + j]) { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("read(byte[] b, int off, int len) " 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "returned incorrect data: Expected " 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + data[ind + j] + ", got: " + result[j]); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (got == expected) { 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (got > expected) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("The data returned by " 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "read(byte[] b, int off, int len) " 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "is larger than expected."); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ind = got; 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project got += cis.read(result, 0, 1); 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((got = cis.read(result, 0, 1)) != -1) { 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("read() should return -1 at the end of the stream. " 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "Output is: " + got + "."); 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * available() method testing. Tests that the method always return 0. 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testAvailable() throws Exception { 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data = new byte[] { -127, -100, -50, -10, -1, 0, 1, 10, 50, 127 }; 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestInputStream tis = new TestInputStream(data); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CipherInputStream cis = new CipherInputStream(tis, new NullCipher()); 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("The returned by available() method value " 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "should be 0.", cis.available(), 0); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * close() method testing. Tests that the method calls the close() 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method of the underlying input stream. 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testClose() throws Exception { 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data = new byte[] { -127, -100, -50, -10, -1, 0, 1, 10, 50, 127 }; 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestInputStream tis = new TestInputStream(data); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CipherInputStream cis = new CipherInputStream(tis, new NullCipher()); 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cis.close(); 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("The close() method should call the close() method " 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "of its underlying input stream.", tis.wasClosed()); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * markSupported() method testing. Tests that mark is not supported. 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testMarkSupported() { 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] data = new byte[] {-127, -100, -50, -10, -1, 0, 1, 10, 50, 127}; 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestInputStream tis = new TestInputStream(data); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CipherInputStream cis = new CipherInputStream(tis, new NullCipher()); 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("The returned by markSupported() method value " 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "should be false.", cis.markSupported()); 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 251f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public void test_ConstructorLjava_io_InputStreamLjavax_crypto_Cipher () throws 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException { 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ByteArrayInputStream bais = new ByteArrayInputStream(new byte[100]); 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyGenerator kg = KeyGenerator.getInstance("DES"); 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kg.init(56, new SecureRandom()); 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = kg.generateKey(); 258f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Cipher c = Cipher.getInstance("DES/CBC/NoPadding"); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.init(Cipher.ENCRYPT_MODE, key); 261f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CipherInputStream cis = new CipherInputStream(bais, c); 263f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(cis); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 269