fix(bitswap:message) don't use proto internally
Brian Tiger Chow committed
Sep 19, 2014 at 15:25 UTC
800af9ca3a292db3a85a49161781788a4734c71d
2 files changed
+56
-24
exchange/bitswap/message/message.go
+29
-23
@@ -26,45 +26,45 @@ type Exportable interface {
26
27
// message wraps a proto message for convenience
28
type message struct {
29
- pb PBMessage
30
-}
31
-
32
-func newMessageFromProto(pb PBMessage) *message {
33
- return &message{pb: pb}
29
+ wantlist []u.Key
30
+ blocks []blocks.Block
31
}
32
33
func New() *message {
34
return new(message)
35
}
36
37
+func newMessageFromProto(pbm PBMessage) (BitSwapMessage, error) {
38
+ m := New()
39
+ for _, s := range pbm.GetWantlist() {
40
+ m.AppendWanted(u.Key(s))
41
+ }
42
+ for _, d := range pbm.GetBlocks() {
43
+ b, err := blocks.NewBlock(d)
44
+ if err != nil {
45
+ return nil, err
46
+ }
47
+ m.AppendBlock(*b)
48
+ }
49
+ return m, nil
50
+}
51
+
52
// TODO(brian): convert these into keys
53
func (m *message) Wantlist() []u.Key {
42
- wl := make([]u.Key, len(m.pb.Wantlist))
43
- for _, str := range m.pb.Wantlist {
44
- wl = append(wl, u.Key(str))
45
- }
46
- return wl
54
+ return m.wantlist
55
}
56
57
// TODO(brian): convert these into blocks
58
func (m *message) Blocks() []blocks.Block {
51
- bs := make([]blocks.Block, len(m.pb.Blocks))
52
- for _, data := range m.pb.Blocks {
53
- b, err := blocks.NewBlock(data)
54
- if err != nil {
55
- continue
56
- }
57
- bs = append(bs, *b)
58
- }
59
- return bs
59
+ return m.blocks
60
}
61
62
func (m *message) AppendWanted(k u.Key) {
63
- m.pb.Wantlist = append(m.pb.Wantlist, string(k))
63
+ m.wantlist = append(m.wantlist, k)
64
}
65
66
func (m *message) AppendBlock(b blocks.Block) {
67
- m.pb.Blocks = append(m.pb.Blocks, b.Data)
67
+ m.blocks = append(m.blocks, b)
68
}
69
70
func FromNet(nmsg netmsg.NetMessage) (BitSwapMessage, error) {
@@ -72,8 +72,14 @@ func FromNet(nmsg netmsg.NetMessage) (BitSwapMessage, error) {
72
}
73
74
func (m *message) ToProto() *PBMessage {
75
- cp := m.pb
76
- return &cp
75
+ pb := new(PBMessage)
76
+ for _, k := range m.Wantlist() {
77
+ pb.Wantlist = append(pb.Wantlist, string(k))
78
+ }
79
+ for _, b := range m.Blocks() {
80
+ pb.Blocks = append(pb.Blocks, b.Data)
81
+ }
82
+ return pb
83
}
84
85
func (m *message) ToNet(p *peer.Peer) (nm.NetMessage, error) {
exchange/bitswap/message/message_test.go
+27
-1
@@ -25,7 +25,10 @@ func TestNewMessageFromProto(t *testing.T) {
25
if !contains(protoMessage.Wantlist, str) {
26
t.Fail()
27
}
28
- m := newMessageFromProto(*protoMessage)
28
+ m, err := newMessageFromProto(*protoMessage)
29
+ if err != nil {
30
+ t.Fatal(err)
31
+ }
32
if !contains(m.ToProto().GetWantlist(), str) {
33
t.Fail()
34
}
@@ -52,6 +55,29 @@ func TestAppendBlock(t *testing.T) {
55
}
56
}
57
58
+func TestWantlist(t *testing.T) {
59
+ keystrs := []string{"foo", "bar", "baz", "bat"}
60
+ m := New()
61
+ for _, s := range keystrs {
62
+ m.AppendWanted(u.Key(s))
63
+ }
64
+ exported := m.Wantlist()
65
+
66
+ for _, k := range exported {
67
+ present := false
68
+ for _, s := range keystrs {
69
+
70
+ if s == string(k) {
71
+ present = true
72
+ }
73
+ }
74
+ if !present {
75
+ t.Logf("%v isn't in original list", string(k))
76
+ t.Fail()
77
+ }
78
+ }
79
+}
80
+
81
func TestCopyProtoByValue(t *testing.T) {
82
const str = "foo"
83
m := New()