package org.openamq.framing;
import org.apache.mina.common.ByteBuffer;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import java.io.IOException;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.Reader;
import java.io.InputStreamReader;
import java.util.Properties;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Date;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
public class FieldTableTest
{
@Test
public void dataDump() throws IOException, AMQFrameDecodingException
{
byte[] data = readBase64("content.txt");
System.out.println("Got " + data.length + " bytes of data");
for(int i = 0; i < 100; i++)
{
System.out.print((char) data[i]);
}
System.out.println();
int size = 4194304;
ByteBuffer buffer = ByteBuffer.allocate(data.length);
buffer.put(data);
buffer.flip();
FieldTable table = new FieldTable(buffer, size);
}
/*
@Test
public void case1() throws AMQFrameDecodingException, IOException
{
testEncoding(load("FieldTableTest.properties"));
}
@Test
public void case2() throws AMQFrameDecodingException, IOException
{
testEncoding(load("FieldTableTest2.properties"));
}
*/
void testEncoding(FieldTable table) throws AMQFrameDecodingException
{
assertEquivalent(table, encodeThenDecode(table));
}
public void assertEquivalent(FieldTable table1, FieldTable table2)
{
for(Iterator i = table1.keySet().iterator(); i.hasNext();)
{
String key = (String) i.next();
assertEquals("Values for " + key + " did not match", table1.get(key), table2.get(key));
//System.out.println("Values for " + key + " matched (" + table1.get(key) + ")");
}
}
FieldTable encodeThenDecode(FieldTable table) throws AMQFrameDecodingException
{
ContentHeaderBody header = new ContentHeaderBody();
header.classId = 6;
BasicContentHeaderProperties properties = new BasicContentHeaderProperties();
header.properties = properties;
properties.setHeaders(table);
int size = header.getSize();
//encode
ByteBuffer buffer = ByteBuffer.allocate(size);
header.writePayload(buffer);
//decode
buffer.flip();
header = new ContentHeaderBody();
header.populateFromBuffer(buffer, size);
return ((BasicContentHeaderProperties) header.properties).getHeaders();
}
byte[] readBase64(String name) throws IOException
{
String content = read(new InputStreamReader(getClass().getResourceAsStream(name)));
return Base64.decode(content);
}
public FieldTable load(String name) throws IOException
{
return populate(new FieldTable(), read(name));
}
Properties read(String name) throws IOException
{
Properties p = new Properties();
p.load(getClass().getResourceAsStream(name));
return p;
}
FieldTable populate(FieldTable table, Properties properties)
{
for(Enumeration i = properties.propertyNames(); i.hasMoreElements();)
{
String key = (String) i.nextElement();
String value = properties.getProperty(key);
try{
int ival = Integer.parseInt(value);
table.put(key, new Long(ival));
}
catch(NumberFormatException e)
{
table.put(key, value);
}
}
return table;
}
static String read(Reader in) throws IOException{
return read(in instanceof BufferedReader ? (BufferedReader) in : new BufferedReader(in));
}
static String read(BufferedReader in) throws IOException{
StringBuffer buffer = new StringBuffer();
String line = in.readLine();
while(line != null){
buffer.append(line + " ");
line = in.readLine();
}
return buffer.toString();
}
}