package the8472.test.bencode; import static org.junit.Assert.assertEquals; import static the8472.bencode.Utils.buf2str; import static the8472.bencode.Utils.str2buf; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.junit.Test; import the8472.bencode.BEncoder; public class EncoderTest { @Test public void testBasics() { Map<String, Object> root = new LinkedHashMap<>(); List<Object> l = new ArrayList<>(); l.add(1234L); l.add(str2buf("foo")); root.put("zz", 3L); root.put("xx", 1L); root.put("yy", 1L); root.put("aa", 1L); root.put("bb", 1L); root.put("c", l); BEncoder enc = new BEncoder(); ByteBuffer out = enc.encode(root, 1024); assertEquals(str2buf("d2:aai1e2:bbi1e1:cli1234e3:fooe2:xxi1e2:yyi1e2:zzi3ee"), out); } @Test public void testSorting() { Map<String, Object> root = new LinkedHashMap<>(); String[] keys = new String[256]; Arrays.setAll(keys, (i) -> buf2str(ByteBuffer.wrap(new byte[] {(byte) i}))); // clone to shuffle independently of original order List<String> keyList = Arrays.asList(keys); List<String> shuffledKeys = Arrays.asList(keys.clone()); Collections.shuffle(shuffledKeys); shuffledKeys.forEach(s -> root.put(s, 1L)); BEncoder enc = new BEncoder(); ByteBuffer out = enc.encode(root, 2048); StringBuilder reference = new StringBuilder(); reference.append("d"); keyList.forEach(str -> { reference.append("1:"); reference.append(str); reference.append("i1e"); }); reference.append("e"); assertEquals(str2buf(reference.toString()), out); } }