// ========================================================================
// Copyright (c) 2004-2009 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
package org.eclipse.jetty.io;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import org.eclipse.jetty.io.nio.DirectNIOBuffer;
import org.eclipse.jetty.io.nio.IndirectNIOBuffer;
import org.eclipse.jetty.io.nio.RandomAccessFileBuffer;
import org.eclipse.jetty.util.StringUtil;
import org.junit.Before;
import org.junit.Test;
/**
*
*/
public class BufferTest
{
private Buffer[] buffer;
@Before
public void init() throws Exception
{
File file = File.createTempFile("test",".buf");
file.deleteOnExit();
buffer=new Buffer[]{
new RandomAccessFileBuffer(file,10),
new ByteArrayBuffer(10),
new IndirectNIOBuffer(10),
new DirectNIOBuffer(10)
};
}
@Test
public void testBuffer() throws Exception
{
for (int i=0;i<buffer.length;i++)
{
String t="t"+i;
Buffer b = buffer[i];
assertEquals(t,0,b.length());
assertEquals(t,10,b.capacity());
assertEquals(t,10,b.space());
b.put((byte)0);
b.put((byte)1);
b.put((byte)2);
assertEquals(t,3,b.length());
assertEquals(t,10,b.capacity());
assertEquals(t,7,b.space());
assertEquals(t,0,b.get());
assertEquals(t,1,b.get());
assertEquals(t,1,b.length());
assertEquals(t,10,b.capacity());
assertEquals(t,7,b.space());
b.compact();
assertEquals(t,9,b.space());
byte[] ba = { (byte)-1, (byte)3,(byte)4,(byte)5,(byte)6 };
b.put(ba,1,3);
assertEquals(t,4,b.length());
assertEquals(t,6,b.space());
byte[] bg = new byte[4];
b.get(bg,1,2);
assertEquals(t,2,bg[1]);
assertEquals(t,3,bg[2]);
//test getting 0 bytes returns 0
int count = b.get(bg,0,0);
assertEquals(t,0, count);
//read up to end
count = b.get(bg,0,2);
assertEquals(t, 2, count);
//test reading past end returns -1
count = b.get(bg,0,1);
assertEquals(t, -1, count);
}
}
@Test
public void testHash() throws Exception
{
Buffer[] b=
{
new ByteArrayBuffer("Test1234 "),
new ByteArrayBuffer("tEST1234 "),
new DirectNIOBuffer(4096),
};
b[2].put("TeSt1234 ".getBytes(StringUtil.__UTF8));
for (int i=0;i<b.length;i++)
assertEquals("t"+i,b[0].hashCode(),b[i].hashCode());
}
@Test
public void testGet () throws Exception
{
Buffer buff = new ByteArrayBuffer(new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5});
byte[] readbuff = new byte[2];
int count = buff.get(readbuff, 0, 2);
assertEquals(2, count);
assertEquals(readbuff[0], (byte)0);
assertEquals(readbuff[1], (byte)1);
count = buff.get(readbuff, 0, 2);
assertEquals(2, count);
assertEquals(readbuff[0], (byte)2);
assertEquals(readbuff[1], (byte)3);
count = buff.get(readbuff, 0, 0);
assertEquals(0, count);
readbuff[0]=(byte)9;
readbuff[1]=(byte)9;
count = buff.get(readbuff, 0, 2);
assertEquals(2, count);
count = buff.get(readbuff, 0, 2);
assertEquals(-1, count);
}
@Test
public void testInsensitive()
{
Buffer cs0 = new ByteArrayBuffer("Test 1234");
Buffer cs1 = new ByteArrayBuffer("Test 1234");
Buffer cs2 = new ByteArrayBuffer("tEst 1234");
Buffer cs3 = new ByteArrayBuffer("Other ");
Buffer ci0 = new ByteArrayBuffer.CaseInsensitive("Test 1234");
Buffer ci1 = new ByteArrayBuffer.CaseInsensitive("Test 1234");
Buffer ci2 = new ByteArrayBuffer.CaseInsensitive("tEst 1234");
Buffer ci3 = new ByteArrayBuffer.CaseInsensitive("oTher ");
assertTrue( cs0.equals(cs0));
assertTrue( cs0.equals(cs1));
assertTrue(!cs0.equals(cs2));
assertTrue(!cs0.equals(cs3));
assertTrue( cs0.equals(ci0));
assertTrue( cs0.equals(ci1));
assertTrue( cs0.equals(ci2));
assertTrue(!cs0.equals(ci3));
assertTrue( cs1.equals(cs0));
assertTrue( cs1.equals(cs1));
assertTrue(!cs1.equals(cs2));
assertTrue(!cs1.equals(cs3));
assertTrue( cs1.equals(ci0));
assertTrue( cs1.equals(ci1));
assertTrue( cs1.equals(ci2));
assertTrue(!cs1.equals(ci3));
assertTrue(!cs2.equals(cs0));
assertTrue(!cs2.equals(cs1));
assertTrue( cs2.equals(cs2));
assertTrue(!cs2.equals(cs3));
assertTrue( cs2.equals(ci0));
assertTrue( cs2.equals(ci1));
assertTrue( cs2.equals(ci2));
assertTrue(!cs2.equals(ci3));
assertTrue(!cs3.equals(cs0));
assertTrue(!cs3.equals(cs1));
assertTrue(!cs3.equals(cs2));
assertTrue( cs3.equals(cs3));
assertTrue(!cs3.equals(ci0));
assertTrue(!cs3.equals(ci1));
assertTrue(!cs3.equals(ci2));
assertTrue( cs3.equals(ci3));
assertTrue( ci0.equals(cs0));
assertTrue( ci0.equals(cs1));
assertTrue( ci0.equals(cs2));
assertTrue(!ci0.equals(cs3));
assertTrue( ci0.equals(ci0));
assertTrue( ci0.equals(ci1));
assertTrue( ci0.equals(ci2));
assertTrue(!ci0.equals(ci3));
assertTrue( ci1.equals(cs0));
assertTrue( ci1.equals(cs1));
assertTrue( ci1.equals(cs2));
assertTrue(!ci1.equals(cs3));
assertTrue( ci1.equals(ci0));
assertTrue( ci1.equals(ci1));
assertTrue( ci1.equals(ci2));
assertTrue(!ci1.equals(ci3));
assertTrue( ci2.equals(cs0));
assertTrue( ci2.equals(cs1));
assertTrue( ci2.equals(cs2));
assertTrue(!ci2.equals(cs3));
assertTrue( ci2.equals(ci0));
assertTrue( ci2.equals(ci1));
assertTrue( ci2.equals(ci2));
assertTrue(!ci2.equals(ci3));
assertTrue(!ci3.equals(cs0));
assertTrue(!ci3.equals(cs1));
assertTrue(!ci3.equals(cs2));
assertTrue( ci3.equals(cs3));
assertTrue(!ci3.equals(ci0));
assertTrue(!ci3.equals(ci1));
assertTrue(!ci3.equals(ci2));
assertTrue( ci3.equals(ci3));
}
@Test
public void testView()
{
Buffer b = new ByteArrayBuffer(" Test 1234 ".getBytes());
b.setGetIndex(b.getIndex()+1);
b.setPutIndex(b.putIndex()-1);
View v0 = new View(b);
View v1 = new View(b);
View v2 = new View(v0);
String s=b.toString();
String s0=v0.toString();
String s1=v1.toString();
String s2=v2.toString();
String s3=v0.toString();
String s4=v1.toString();
String s5=v2.toString();
assertEquals(s, s0);
assertEquals(s0, s1);
assertEquals(s1, s2);
assertEquals(s2, s3);
assertEquals(s3, s4);
assertEquals(s4, s5);
}
}