/* * ------------------------------------------------------------------------------ * Hermes FTP Server * Copyright (c) 2005-2014 Lars Behnke * ------------------------------------------------------------------------------ * * This file is part of Hermes FTP Server. * * Hermes FTP Server is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Hermes FTP Server is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Hermes FTP Server; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ------------------------------------------------------------------------------ */ package com.apporiented.hermesftp.streams; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import static org.junit.Assert.*; import org.junit.Test; // CHECKSTYLE:OFF /** * Test cases for record stream classes. * * @author Lars Behnke */ public class RecordStreamTest { /** * Test case: reading a record stream. */ @Test public void testReadRecordStream() { try { byte[] data = createRecordData(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream bais = new ByteArrayInputStream(data); RecordInputStream ris = new RecordInputStream(bais, new byte[] { 10, 13 }); int b; while ((b = ris.read()) != -1) { baos.write(b); } ris.close(); baos.close(); byte[] resultBytes = baos.toByteArray(); assertEquals(13, resultBytes.length); assertEquals(65, resultBytes[0]); assertEquals(66, resultBytes[1]); assertEquals(67, resultBytes[2]); assertEquals(10, resultBytes[3]); assertEquals(13, resultBytes[4]); assertEquals(68, resultBytes[5]); assertEquals(69, resultBytes[6]); assertEquals(70, resultBytes[7]); assertEquals(10, resultBytes[8]); assertEquals(13, resultBytes[9]); assertEquals(255, resultBytes[10] & 255); assertEquals(10, resultBytes[11]); assertEquals(13, resultBytes[12]); } catch (IOException e) { fail(e.toString()); } try { byte[] data = createRecordData(); InputStream bais = new ByteArrayInputStream(data); RecordInputStream ris = new RecordInputStream(bais, new byte[] { 10, 13 }); byte[] record; record = ris.readRecord(); assertEquals("ABC", new String(record, "ASCII")); record = ris.readRecord(); assertEquals("DEF", new String(record, "ASCII")); record = ris.readRecord(); assertEquals(255, record[0] & 255); record = ris.readRecord(); assertNull(record); } catch (IOException e) { fail(e.toString()); } } /** * Test case: writing records. */ @Test public void testWriteRecordStream() { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); RecordOutputStream ros = new RecordOutputStream(baos); ros.write("ABC".getBytes("ASCII")); ros.finalizeRecord(false); ros.write("DEF".getBytes("ASCII")); ros.finalizeRecord(false); ros.write(255); ros.finalizeRecord(true); ros.close(); byte[] resultBytes = baos.toByteArray(); assertEquals(14, resultBytes.length); assertEquals(65, resultBytes[0]); assertEquals(66, resultBytes[1]); assertEquals(67, resultBytes[2]); assertEquals(255, resultBytes[3] & 255); assertEquals(1, resultBytes[4]); assertEquals(68, resultBytes[5]); assertEquals(69, resultBytes[6]); assertEquals(70, resultBytes[7]); assertEquals(255, resultBytes[8] & 255); assertEquals(1, resultBytes[9]); assertEquals(255, resultBytes[10] & 255); assertEquals(255, resultBytes[11] & 255); assertEquals(255, resultBytes[12] & 255); assertEquals(3, resultBytes[13]); } catch (IOException e) { fail(e.toString()); } try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); RecordOutputStream ros = new RecordOutputStream(baos); ros.writeRecord("ABC".getBytes("ASCII"), false); ros.writeRecord("DEF".getBytes("ASCII"), false); ros.writeRecord(new byte[] { (byte) 255 }, true); ros.close(); byte[] resultBytes = baos.toByteArray(); assertEquals(14, resultBytes.length); assertEquals(65, resultBytes[0]); assertEquals(66, resultBytes[1]); assertEquals(67, resultBytes[2]); assertEquals(255, resultBytes[3] & 255); assertEquals(1, resultBytes[4]); assertEquals(68, resultBytes[5]); assertEquals(69, resultBytes[6]); assertEquals(70, resultBytes[7]); assertEquals(255, resultBytes[8] & 255); assertEquals(1, resultBytes[9]); assertEquals(255, resultBytes[10] & 255); assertEquals(255, resultBytes[11] & 255); assertEquals(255, resultBytes[12] & 255); assertEquals(3, resultBytes[13]); } catch (IOException e) { fail(e.toString()); } } private byte[] createRecordData() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.write(65); baos.write(66); baos.write(67); baos.write(255); baos.write(1); baos.write(68); baos.write(69); baos.write(70); baos.write(255); baos.write(1); baos.write(255); baos.write(255); baos.write(255); baos.write(3); return baos.toByteArray(); } } // CHECKSTYLE:ON