import junit.framework.TestCase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.torrent.basnark.bencode.BEntry; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.util.List; /** * Date: 22.09.2009 * Time: 22:17:48 (Moscow Standard Time) * * @author Vlad Vinichenko (akerigan@gmail.com) */ public class BEntryTest extends TestCase { Log log = LogFactory.getLog(getClass()); public InputStream getInputStream(String value) { return new ByteArrayInputStream(value.getBytes()); } public String serialize(BEntry bEntry) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bEntry.serialize(baos); return new String(baos.toByteArray()); } public void testInt() throws IOException { // log.info("intTest"); String encoded = "i875e"; BEntry entry = BEntry.readEntry(getInputStream(encoded)); log.info(entry); assertEquals(new BigDecimal(875), entry.getNumber()); assertEquals(encoded, serialize(entry)); } public void testString() throws IOException { // log.info("stringTest"); String encoded = "8:encoding"; BEntry entry = BEntry.readEntry(getInputStream(encoded)); log.info(entry); assertEquals("encoding", new String(entry.getByteArray())); assertEquals(encoded, serialize(entry)); } public void testList() throws IOException { // log.info("listTest"); String encoded = "li54e4:testi55ee"; BEntry entry = BEntry.readEntry(getInputStream(encoded)); log.info(entry); assertEquals(new BigDecimal(54), entry.getList().get(0).getNumber()); assertEquals("test", new String(entry.getList().get(1).getByteArray())); assertEquals(new BigDecimal(55), entry.getList().get(2).getNumber()); assertEquals(encoded, serialize(entry)); } public void testDictionary() throws IOException { // log.info("dictTest"); String encoded = "d4:name3:bob3:agei34ee"; BEntry entry = BEntry.readEntry(getInputStream(encoded)); log.info(entry); assertEquals("bob", new String(entry.getMap().get("name").getByteArray())); assertEquals(new BigDecimal(34), entry.getMap().get("age").getNumber()); assertEquals(encoded, serialize(entry)); } public void testBiggerDictionary() throws IOException { // log.info("dictTest"); String encoded = "d4:Name5:James3:Agei22e9:Relativesl3:Bob5:James5:Jennye7:Addressd6:Street5:Smith6:Suburb7:Preston8:Postcodei5425eee"; BEntry entry = BEntry.readEntry(getInputStream(encoded)); log.info(entry); assertEquals("James", new String(entry.getMap().get("Name").getByteArray())); assertEquals(new BigDecimal(22), entry.getMap().get("Age").getNumber()); List<BEntry> relatives = entry.getMap().get("Relatives").getList(); assertEquals("Bob", new String(relatives.get(0).getByteArray())); assertEquals("James", new String(relatives.get(1).getByteArray())); assertEquals("Jenny", new String(relatives.get(2).getByteArray())); BEntry address = entry.getMap().get("Address"); assertEquals("Smith", new String(address.getMap().get("Street").getByteArray())); assertEquals("Preston", new String(address.getMap().get("Suburb").getByteArray())); assertEquals(new BigDecimal(5425), address.getMap().get("Postcode").getNumber()); assertEquals(encoded, serialize(entry)); } }