@cryptotaxi247 / kubo / commits / 800af9ca3

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()