-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmessage_test.go
67 lines (54 loc) · 1.7 KB
/
message_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// SPDX-FileCopyrightText: 2021 The go-metafeed Authors
//
// SPDX-License-Identifier: MIT
package metafeed_test
import (
"encoding/json"
"os"
"testing"
"github.com/ssbc/go-metafeed"
"github.com/ssbc/go-metafeed/internal/vectors"
"github.com/stretchr/testify/require"
)
func TestBadMessagesVector(t *testing.T) {
r := require.New(t)
var tv vectors.Bad
f, err := os.Open("testvector-metafeed-bad-messages.json")
r.NoError(err)
err = json.NewDecoder(f).Decode(&tv)
r.NoError(err)
f.Close()
// make sure each entry is valid bencode data at least
for ci, c := range tv.Cases {
var previous metafeed.Message
for ei, e := range c.Entries {
var msg metafeed.Message
err := msg.UnmarshalBencode(e.EncodedData)
if e.Invalid {
// it decoded fine (valid bencode and not too big)
if err == nil {
verified := msg.Verify(nil)
// all the fields and signature are okay?
if verified {
// it's not the first message
if s := msg.Seq(); s > 1 {
// should increment by 1
seqCorrect := s-previous.Seq() == 1
// should point to the right previous message
prevCorrect := previous.Key().Equal(*msg.Previous())
// since it's not valid, at least one of these has to be wrong
r.True(!seqCorrect || !prevCorrect, "case%d entry%d (%s) validated!", ci, ei, c.Description)
}
} else {
r.False(verified, "case%d entry%d (%s) verified!", ci, ei, c.Description)
}
}
} else {
r.NoError(err, "case%d entry%d passed on %s", ci, ei, c.Description)
r.True(msg.Verify(nil), "case%d entry%d (%s) did not verify!", ci, ei, c.Description)
}
t.Logf("case%d entry%d (%s) checked", ci, ei, c.Description)
previous = msg
}
}
}