1d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// Copyright 2016 Google Inc. All rights reserved. 2d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// 3d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// Licensed under the Apache License, Version 2.0 (the "License"); 4d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// you may not use this file except in compliance with the License. 5d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// You may obtain a copy of the License at 6d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// 7d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// http://www.apache.org/licenses/LICENSE-2.0 8d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// 9d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// Unless required by applicable law or agreed to in writing, software 10d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// distributed under the License is distributed on an "AS IS" BASIS, 11d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// See the License for the specific language governing permissions and 13d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden// limitations under the License. 14d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden 15d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenpackage com.google.archivepatcher.shared; 16d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden 17d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenimport org.junit.After; 18d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenimport org.junit.Assert; 19d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenimport org.junit.Before; 20d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenimport org.junit.Test; 21d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenimport org.junit.runner.RunWith; 22d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenimport org.junit.runners.JUnit4; 23d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden 24d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenimport java.io.File; 25d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenimport java.io.FileOutputStream; 26d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenimport java.io.IOException; 27d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden 28d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden/** 29d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden * Tests for {@link RandomAccessFileInputStreamFactory}. 30d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden */ 31d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden@RunWith(JUnit4.class) 32d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden@SuppressWarnings("javadoc") 33d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Haydenpublic class RandomAccessFileInputStreamFactoryTest { 34d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden /** 35d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden * The object under test. 36d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden */ 37d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden private RandomAccessFileInputStreamFactory factory = null; 38d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden 39d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden /** 40d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden * Test data written to the file. 41d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden */ 42d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden private byte[] testData = null; 43d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden 44d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden /** 45d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden * The temp file. 46d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden */ 47d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden private File tempFile = null; 48d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden 49d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden @Before 50d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden public void setup() throws IOException { 51d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden testData = new byte[128]; 52d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden for (int x = 0; x < 128; x++) { 53d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden testData[x] = (byte) x; 54d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } 55d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden tempFile = File.createTempFile("ra-fist", "tmp"); 56d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden FileOutputStream out = new FileOutputStream(tempFile); 57d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden out.write(testData); 58d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden out.flush(); 59d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden out.close(); 60d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden tempFile.deleteOnExit(); 61d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden factory = new RandomAccessFileInputStreamFactory(tempFile, 0, testData.length); 62d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } 63d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden 64d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden @After 65d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden public void tearDown() { 66d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden try { 67d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden tempFile.delete(); 68d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } catch (Exception ignored) { 69d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden // Nothing to do 70d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } 71d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } 72d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden 73d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden @Test 74d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden public void testNewStream_MakesIdenticalStreams() throws IOException { 75d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden RandomAccessFileInputStream rafis1 = factory.newStream(); 76d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden RandomAccessFileInputStream rafis2 = factory.newStream(); 77d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden try { 78d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden Assert.assertNotSame(rafis1, rafis2); 79d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden for (int x = 0; x < testData.length; x++) { 80d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden Assert.assertEquals(x, rafis1.read()); 81d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden Assert.assertEquals(x, rafis2.read()); 82d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } 83d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden Assert.assertEquals(-1, rafis1.read()); 84d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden Assert.assertEquals(-1, rafis2.read()); 85d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } finally { 86d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden try { 87d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden rafis1.close(); 88d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } catch (Exception ignored) { 89d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden // Nothing 90d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } 91d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden try { 92d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden rafis2.close(); 93d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } catch (Exception ignored) { 94d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden // Nothing 95d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } 96d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } 97d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden } 98d84e46c30d0ea027d047ee4c75c040a173ec9ffcAndrew Hayden} 99