tracker

Change-Id: I8f8ac81f9c4d7c7650cd64d2dade701dc6c11dce
diff --git a/ttorrent-master/bencoding/src/test/java/BDecoderTest.java b/ttorrent-master/bencoding/src/test/java/BDecoderTest.java
new file mode 100644
index 0000000..b48ef69
--- /dev/null
+++ b/ttorrent-master/bencoding/src/test/java/BDecoderTest.java
@@ -0,0 +1,56 @@
+import com.turn.ttorrent.bcodec.BDecoder;
+import com.turn.ttorrent.bcodec.InvalidBEncodingException;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.fail;
+
+public class BDecoderTest {
+
+  @Test
+  public void testDecodeNumbers() throws IOException {
+
+    testNumber(0);
+    testNumber(1);
+    testNumber(Integer.MAX_VALUE);
+    testNumber(1234567);
+    testNumber(-1);
+    testNumber(-100);
+    testNumber(Integer.MIN_VALUE);
+    testNumber(Long.MAX_VALUE);
+    testNumber(Long.MIN_VALUE);
+
+    //by specification number with lead zero it's incorrect value
+    testBadNumber("00");
+    testBadNumber("01234");
+    testBadNumber("000");
+    testBadNumber("0001");
+
+  }
+
+  private void testBadNumber(String number) throws IOException {
+    try {
+      BDecoder.bdecode(numberToBEPBytes(number));
+    } catch (InvalidBEncodingException e) {
+      return;
+    }
+    fail("Value " + number + " is incorrect by BEP specification but is was parsed correctly");
+  }
+
+  private void testNumber(long value) throws IOException {
+    assertEquals(BDecoder.bdecode(numberToBEPBytes(value)).getLong(), value);
+  }
+
+  private ByteBuffer numberToBEPBytes(long value) throws UnsupportedEncodingException {
+    return ByteBuffer.wrap(("i" + value + "e").getBytes("ASCII"));
+  }
+
+  private ByteBuffer numberToBEPBytes(String value) throws UnsupportedEncodingException {
+    return ByteBuffer.wrap(("i" + value + "e").getBytes("ASCII"));
+  }
+
+}