From baf389aa8cb91d7da82adc1f33633d01b3bf83d7 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Sun, 23 Aug 2015 16:13:30 +1000 Subject: [PATCH] bencode: Add tests for Unmarshalling trailing bytes, and extraneous 'e' --- bencode/decode_test.go | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/bencode/decode_test.go b/bencode/decode_test.go index b0714a74..3102820e 100644 --- a/bencode/decode_test.go +++ b/bencode/decode_test.go @@ -1,7 +1,13 @@ package bencode -import "testing" -import "reflect" +import ( + "bytes" + "io" + "reflect" + "testing" + + "github.com/stretchr/testify/require" +) type random_decode_test struct { data string @@ -25,7 +31,7 @@ func TestRandomDecode(t *testing.T) { var value interface{} err := Unmarshal([]byte(test.data), &value) if err != nil { - t.Error(err) + t.Error(err, test.data) continue } if !reflect.DeepEqual(test.expected, value) { @@ -35,6 +41,32 @@ func TestRandomDecode(t *testing.T) { } } +func TestLoneE(t *testing.T) { + var v int + err := Unmarshal([]byte("e"), &v) + se := err.(*SyntaxError) + require.EqualValues(t, 0, se.Offset) +} + +func TestTrailingBytes(t *testing.T) { + var i int + err := Unmarshal([]byte("i6ei6e"), &i) + se := err.(*SyntaxError) + require.EqualValues(t, 3, se.Offset) + err = Unmarshal([]byte("i6ee"), &i) + require.EqualValues(t, 3, se.Offset) + se = err.(*SyntaxError) + d := NewDecoder(bytes.NewReader([]byte("i1ei2e"))) + err = d.Decode(&i) + require.NoError(t, err) + require.EqualValues(t, 1, i) + err = d.Decode(&i) + require.NoError(t, err) + require.EqualValues(t, 2, i) + err = d.Decode(&i) + require.Equal(t, io.EOF, err) +} + func check_error(t *testing.T, err error) { if err != nil { t.Error(err) -- 2.48.1