@cryptotaxi247 / kubo / commits / 6e0cfb327

removed error from return type of blocks.NewBlock()

Jeromy committed Oct 7, 2014 at 20:46 UTC 6e0cfb327309266c156aae497625d90048ffdec8
16 files changed +64 -103
blocks/blocks.go
+2 -2
@@ -12,8 +12,8 @@ type Block struct {
12 }
13
14 // NewBlock creates a Block object from opaque data. It will hash the data.
15 -func NewBlock(data []byte) (*Block, error) {
16 - return &Block{Data: data, Multihash: u.Hash(data)}, nil
15 +func NewBlock(data []byte) *Block {
16 + return &Block{Data: data, Multihash: u.Hash(data)}
17 }
18
19 // Key returns the block's Multihash as a Key value.
blocks/blocks_test.go
+3 -12
@@ -6,20 +6,11 @@ func TestBlocksBasic(t *testing.T) {
6
7 // Test empty data
8 empty := []byte{}
9 - _, err := NewBlock(empty)
10 - if err != nil {
11 - t.Fatal(err)
12 - }
9 + NewBlock(empty)
10
11 // Test nil case
15 - _, err = NewBlock(nil)
16 - if err != nil {
17 - t.Fatal(err)
18 - }
12 + NewBlock(nil)
13
14 // Test some data
21 - _, err = NewBlock([]byte("Hello world!"))
22 - if err != nil {
23 - t.Fatal(err)
24 - }
15 + NewBlock([]byte("Hello world!"))
16 }
blockstore/blockstore.go
+1 -1
@@ -35,7 +35,7 @@ func (bs *blockstore) Get(k u.Key) (*blocks.Block, error) {
35 if !ok {
36 return nil, ValueTypeMismatch
37 }
38 - return blocks.NewBlock(bdata)
38 + return blocks.NewBlock(bdata), nil
39 }
40
41 func (bs *blockstore) Put(block blocks.Block) error {
blockstore/blockstore_test.go
+3 -3
@@ -5,8 +5,8 @@ import (
5 "testing"
6
7 ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
8 + blocks "github.com/jbenet/go-ipfs/blocks"
9 u "github.com/jbenet/go-ipfs/util"
9 - testutil "github.com/jbenet/go-ipfs/util/testutil"
10 )
11
12 // TODO(brian): TestGetReturnsNil
@@ -24,7 +24,7 @@ func TestGetWhenKeyNotPresent(t *testing.T) {
24
25 func TestPutThenGetBlock(t *testing.T) {
26 bs := NewBlockstore(ds.NewMapDatastore())
27 - block := testutil.NewBlockOrFail(t, "some data")
27 + block := blocks.NewBlock("some data")
28
29 err := bs.Put(block)
30 if err != nil {
@@ -41,7 +41,7 @@ func TestPutThenGetBlock(t *testing.T) {
41 }
42
43 func TestValueTypeMismatch(t *testing.T) {
44 - block := testutil.NewBlockOrFail(t, "some data")
44 + block := blocks.NewBlock("some data")
45
46 datastore := ds.NewMapDatastore()
47 datastore.Put(block.Key().DsKey(), "data that isn't a block!")
exchange/bitswap/bitswap_test.go
+12 -16
@@ -9,7 +9,7 @@ import (
9 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
10
11 ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
12 - "github.com/jbenet/go-ipfs/blocks"
12 + blocks "github.com/jbenet/go-ipfs/blocks"
13 bstore "github.com/jbenet/go-ipfs/blockstore"
14 exchange "github.com/jbenet/go-ipfs/exchange"
15 notifications "github.com/jbenet/go-ipfs/exchange/bitswap/notifications"
@@ -18,7 +18,6 @@ import (
18 peer "github.com/jbenet/go-ipfs/peer"
19 mock "github.com/jbenet/go-ipfs/routing/mock"
20 util "github.com/jbenet/go-ipfs/util"
21 - testutil "github.com/jbenet/go-ipfs/util/testutil"
21 )
22
23 func TestGetBlockTimeout(t *testing.T) {
@@ -30,7 +29,7 @@ func TestGetBlockTimeout(t *testing.T) {
29 self := g.Next()
30
31 ctx, _ := context.WithTimeout(context.Background(), time.Nanosecond)
33 - block := testutil.NewBlockOrFail(t, "block")
32 + block := blocks.NewBlock([]byte("block"))
33 _, err := self.exchange.Block(ctx, block.Key())
34
35 if err != context.DeadlineExceeded {
@@ -44,7 +43,7 @@ func TestProviderForKeyButNetworkCannotFind(t *testing.T) {
43 rs := mock.VirtualRoutingServer()
44 g := NewSessionGenerator(net, rs)
45
47 - block := testutil.NewBlockOrFail(t, "block")
46 + block := blocks.NewBlock([]byte("block"))
47 rs.Announce(&peer.Peer{}, block.Key()) // but not on network
48
49 solo := g.Next()
@@ -63,15 +62,15 @@ func TestGetBlockFromPeerAfterPeerAnnounces(t *testing.T) {
62
63 net := tn.VirtualNetwork()
64 rs := mock.VirtualRoutingServer()
66 - block := testutil.NewBlockOrFail(t, "block")
65 + block := blocks.NewBlock([]byte("block"))
66 g := NewSessionGenerator(net, rs)
67
68 hasBlock := g.Next()
69
71 - if err := hasBlock.blockstore.Put(block); err != nil {
70 + if err := hasBlock.blockstore.Put(*block); err != nil {
71 t.Fatal(err)
72 }
74 - if err := hasBlock.exchange.HasBlock(context.Background(), block); err != nil {
73 + if err := hasBlock.exchange.HasBlock(context.Background(), *block); err != nil {
74 t.Fatal(err)
75 }
76
@@ -93,7 +92,7 @@ func TestSwarm(t *testing.T) {
92 net := tn.VirtualNetwork()
93 rs := mock.VirtualRoutingServer()
94 sg := NewSessionGenerator(net, rs)
96 - bg := NewBlockGenerator(t)
95 + bg := NewBlockGenerator()
96
97 t.Log("Create a ton of instances, and just a few blocks")
98
@@ -154,7 +153,7 @@ func TestSendToWantingPeer(t *testing.T) {
153 net := tn.VirtualNetwork()
154 rs := mock.VirtualRoutingServer()
155 sg := NewSessionGenerator(net, rs)
157 - bg := NewBlockGenerator(t)
156 + bg := NewBlockGenerator()
157
158 me := sg.Next()
159 w := sg.Next()
@@ -212,20 +211,17 @@ func TestSendToWantingPeer(t *testing.T) {
211 }
212 }
213
215 -func NewBlockGenerator(t *testing.T) BlockGenerator {
216 - return BlockGenerator{
217 - T: t,
218 - }
214 +func NewBlockGenerator() BlockGenerator {
215 + return BlockGenerator{}
216 }
217
218 type BlockGenerator struct {
222 - *testing.T // b/c block generation can fail
223 - seq int
219 + seq int
220 }
221
222 func (bg *BlockGenerator) Next() blocks.Block {
223 bg.seq++
228 - return testutil.NewBlockOrFail(bg.T, string(bg.seq))
224 + return *blocks.NewBlock([]byte(string(bg.seq)))
225 }
226
227 func (bg *BlockGenerator) Blocks(n int) []*blocks.Block {
exchange/bitswap/message/message.go
+4 -10
@@ -32,19 +32,16 @@ func New() *message {
32 return new(message)
33 }
34
35 -func newMessageFromProto(pbm PBMessage) (BitSwapMessage, error) {
35 +func newMessageFromProto(pbm PBMessage) BitSwapMessage {
36 m := New()
37 for _, s := range pbm.GetWantlist() {
38 m.AppendWanted(u.Key(s))
39 }
40 for _, d := range pbm.GetBlocks() {
41 - b, err := blocks.NewBlock(d)
42 - if err != nil {
43 - return nil, err
44 - }
41 + b := blocks.NewBlock(d)
42 m.AppendBlock(*b)
43 }
47 - return m, nil
44 + return m
45 }
46
47 // TODO(brian): convert these into keys
@@ -70,10 +67,7 @@ func FromNet(nmsg netmsg.NetMessage) (BitSwapMessage, error) {
67 if err := proto.Unmarshal(nmsg.Data(), pb); err != nil {
68 return nil, err
69 }
73 - m, err := newMessageFromProto(*pb)
74 - if err != nil {
75 - return nil, err
76 - }
70 + m := newMessageFromProto(*pb)
71 return m, nil
72 }
73
exchange/bitswap/message/message_test.go
+8 -11
@@ -4,9 +4,9 @@ import (
4 "bytes"
5 "testing"
6
7 + "github.com/jbenet/go-ipfs/blocks"
8 peer "github.com/jbenet/go-ipfs/peer"
9 u "github.com/jbenet/go-ipfs/util"
9 - testutil "github.com/jbenet/go-ipfs/util/testutil"
10 )
11
12 func TestAppendWanted(t *testing.T) {
@@ -26,10 +26,7 @@ func TestNewMessageFromProto(t *testing.T) {
26 if !contains(protoMessage.Wantlist, str) {
27 t.Fail()
28 }
29 - m, err := newMessageFromProto(*protoMessage)
30 - if err != nil {
31 - t.Fatal(err)
32 - }
29 + m := newMessageFromProto(*protoMessage)
30 if !contains(m.ToProto().GetWantlist(), str) {
31 t.Fail()
32 }
@@ -43,8 +40,8 @@ func TestAppendBlock(t *testing.T) {
40
41 m := New()
42 for _, str := range strs {
46 - block := testutil.NewBlockOrFail(t, str)
47 - m.AppendBlock(block)
43 + block := blocks.NewBlock([]byte(str))
44 + m.AppendBlock(*block)
45 }
46
47 // assert strings are in proto message
@@ -134,10 +131,10 @@ func TestToNetFromNetPreservesWantList(t *testing.T) {
131 func TestToAndFromNetMessage(t *testing.T) {
132
133 original := New()
137 - original.AppendBlock(testutil.NewBlockOrFail(t, "W"))
138 - original.AppendBlock(testutil.NewBlockOrFail(t, "E"))
139 - original.AppendBlock(testutil.NewBlockOrFail(t, "F"))
140 - original.AppendBlock(testutil.NewBlockOrFail(t, "M"))
134 + original.AppendBlock(*blocks.NewBlock([]byte("W")))
135 + original.AppendBlock(*blocks.NewBlock([]byte("E")))
136 + original.AppendBlock(*blocks.NewBlock([]byte("F")))
137 + original.AppendBlock(*blocks.NewBlock([]byte("M")))
138
139 p := &peer.Peer{ID: []byte("X")}
140 netmsg, err := original.ToNet(p)
exchange/bitswap/notifications/notifications_test.go
+4 -6
@@ -6,25 +6,23 @@ import (
6 "time"
7
8 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
9 - testutil "github.com/jbenet/go-ipfs/util/testutil"
10 -
9 blocks "github.com/jbenet/go-ipfs/blocks"
10 )
11
12 func TestPublishSubscribe(t *testing.T) {
15 - blockSent := testutil.NewBlockOrFail(t, "Greetings from The Interval")
13 + blockSent := blocks.NewBlock([]byte("Greetings from The Interval"))
14
15 n := New()
16 defer n.Shutdown()
17 ch := n.Subscribe(context.Background(), blockSent.Key())
18
21 - n.Publish(blockSent)
19 + n.Publish(*blockSent)
20 blockRecvd, ok := <-ch
21 if !ok {
22 t.Fail()
23 }
24
27 - assertBlocksEqual(t, blockRecvd, blockSent)
25 + assertBlocksEqual(t, blockRecvd, *blockSent)
26
27 }
28
@@ -35,7 +33,7 @@ func TestCarryOnWhenDeadlineExpires(t *testing.T) {
33
34 n := New()
35 defer n.Shutdown()
38 - block := testutil.NewBlockOrFail(t, "A Missed Connection")
36 + block := blocks.NewBlock([]byte("A Missed Connection"))
37 blockChannel := n.Subscribe(fastExpiringCtx, block.Key())
38
39 assertBlockChannelNil(t, blockChannel)
exchange/bitswap/strategy/strategy_test.go
+3 -3
@@ -4,9 +4,9 @@ import (
4 "strings"
5 "testing"
6
7 + blocks "github.com/jbenet/go-ipfs/blocks"
8 message "github.com/jbenet/go-ipfs/exchange/bitswap/message"
9 peer "github.com/jbenet/go-ipfs/peer"
9 - testutil "github.com/jbenet/go-ipfs/util/testutil"
10 )
11
12 type peerAndStrategist struct {
@@ -30,7 +30,7 @@ func TestConsistentAccounting(t *testing.T) {
30
31 m := message.New()
32 content := []string{"this", "is", "message", "i"}
33 - m.AppendBlock(testutil.NewBlockOrFail(t, strings.Join(content, " ")))
33 + m.AppendBlock(*blocks.NewBlock([]byte(strings.Join(content, " "))))
34
35 sender.MessageSent(receiver.Peer, m)
36 receiver.MessageReceived(sender.Peer, m)
@@ -57,7 +57,7 @@ func TestBlockRecordedAsWantedAfterMessageReceived(t *testing.T) {
57 beggar := newPeerAndStrategist("can't be chooser")
58 chooser := newPeerAndStrategist("chooses JIF")
59
60 - block := testutil.NewBlockOrFail(t, "data wanted by beggar")
60 + block := blocks.NewBlock([]byte("data wanted by beggar"))
61
62 messageFromBeggarToChooser := message.New()
63 messageFromBeggarToChooser.AppendWanted(block.Key())
exchange/bitswap/testnet/network_test.go
+5 -5
@@ -5,10 +5,10 @@ import (
5 "testing"
6
7 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
8 + blocks "github.com/jbenet/go-ipfs/blocks"
9 bsmsg "github.com/jbenet/go-ipfs/exchange/bitswap/message"
10 bsnet "github.com/jbenet/go-ipfs/exchange/bitswap/network"
11 peer "github.com/jbenet/go-ipfs/peer"
11 - testutil "github.com/jbenet/go-ipfs/util/testutil"
12 )
13
14 func TestSendRequestToCooperativePeer(t *testing.T) {
@@ -33,7 +33,7 @@ func TestSendRequestToCooperativePeer(t *testing.T) {
33 // TODO test contents of incoming message
34
35 m := bsmsg.New()
36 - m.AppendBlock(testutil.NewBlockOrFail(t, expectedStr))
36 + m.AppendBlock(*blocks.NewBlock([]byte(expectedStr)))
37
38 return from, m
39 }))
@@ -41,7 +41,7 @@ func TestSendRequestToCooperativePeer(t *testing.T) {
41 t.Log("Build a message and send a synchronous request to recipient")
42
43 message := bsmsg.New()
44 - message.AppendBlock(testutil.NewBlockOrFail(t, "data"))
44 + message.AppendBlock(*blocks.NewBlock([]byte("data")))
45 response, err := initiator.SendRequest(
46 context.Background(), &peer.Peer{ID: idOfRecipient}, message)
47 if err != nil {
@@ -77,7 +77,7 @@ func TestSendMessageAsyncButWaitForResponse(t *testing.T) {
77 *peer.Peer, bsmsg.BitSwapMessage) {
78
79 msgToWaiter := bsmsg.New()
80 - msgToWaiter.AppendBlock(testutil.NewBlockOrFail(t, expectedStr))
80 + msgToWaiter.AppendBlock(*blocks.NewBlock([]byte(expectedStr)))
81
82 return fromWaiter, msgToWaiter
83 }))
@@ -105,7 +105,7 @@ func TestSendMessageAsyncButWaitForResponse(t *testing.T) {
105 }))
106
107 messageSentAsync := bsmsg.New()
108 - messageSentAsync.AppendBlock(testutil.NewBlockOrFail(t, "data"))
108 + messageSentAsync.AppendBlock(*blocks.NewBlock([]byte("data")))
109 errSending := waiter.SendMessage(
110 context.Background(), &peer.Peer{ID: idOfResponder}, messageSentAsync)
111 if errSending != nil {
exchange/offline/offline_test.go
+3 -3
@@ -5,8 +5,8 @@ import (
5
6 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
7
8 + blocks "github.com/jbenet/go-ipfs/blocks"
9 u "github.com/jbenet/go-ipfs/util"
9 - testutil "github.com/jbenet/go-ipfs/util/testutil"
10 )
11
12 func TestBlockReturnsErr(t *testing.T) {
@@ -20,8 +20,8 @@ func TestBlockReturnsErr(t *testing.T) {
20
21 func TestHasBlockReturnsNil(t *testing.T) {
22 off := NewOfflineExchange()
23 - block := testutil.NewBlockOrFail(t, "data")
24 - err := off.HasBlock(context.Background(), block)
23 + block := blocks.NewBlock([]byte("data"))
24 + err := off.HasBlock(context.Background(), *block)
25 if err != nil {
26 t.Fatal("")
27 }
importer/dagwriter/dagmodifier.go
+5 -5
@@ -46,14 +46,14 @@ func (dm *DagModifier) WriteAt(b []byte, offset uint64) (int, error) {
46 return 0, errors.New("Attempted to perform write starting past end of file")
47 }
48
49 + // First need to find where we are writing at
50 + end := uint64(len(b)) + offset
51 +
52 // This shouldnt be necessary if we do subblocks sizes properly
53 newsize := dm.pbdata.GetFilesize()
51 - if uint64(len(b))+offset > dm.pbdata.GetFilesize() {
52 - newsize = uint64(len(b)) + offset
54 + if end > dm.pbdata.GetFilesize() {
55 + newsize = end
56 }
54 -
55 - // First need to find where we are writing at
56 - end := uint64(len(b)) + offset
57 zeroblocklen := uint64(len(dm.pbdata.Data))
58 origlen := len(b)
59
importer/dagwriter/dagwriter_test.go
+1 -1
@@ -110,7 +110,7 @@ func BenchmarkDagWriter(b *testing.B) {
110 dag := &mdag.DAGService{bserv}
111
112 b.ResetTimer()
113 - nbytes := int64(b.N)
113 + nbytes := int64(100000)
114 for i := 0; i < b.N; i++ {
115 b.SetBytes(nbytes)
116 dw := NewDagWriter(dag, &imp.SizeSplitter{4096})
merkledag/coding.go
+3
@@ -3,6 +3,8 @@ package merkledag
3 import (
4 "fmt"
5
6 + u "github.com/jbenet/go-ipfs/util"
7 +
8 mh "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash"
9 )
10
@@ -76,6 +78,7 @@ func (n *Node) Encoded(force bool) ([]byte, error) {
78 if err != nil {
79 return []byte{}, err
80 }
81 + n.cached = u.Hash(n.encoded)
82 }
83
84 return n.encoded, nil
merkledag/merkledag.go
+7 -3
@@ -24,6 +24,8 @@ type Node struct {
24
25 // cache encoded/marshaled value
26 encoded []byte
27 +
28 + cached mh.Multihash
29 }
30
31 // Link represents an IPFS Merkle DAG Link between Nodes.
@@ -122,12 +124,12 @@ func (n *Node) Size() (uint64, error) {
124
125 // Multihash hashes the encoded data of this node.
126 func (n *Node) Multihash() (mh.Multihash, error) {
125 - b, err := n.Encoded(false)
127 + _, err := n.Encoded(false)
128 if err != nil {
129 return nil, err
130 }
131
130 - return u.Hash(b), nil
132 + return n.cached, nil
133 }
134
135 // Key returns the Multihash as a key, for maps.
@@ -183,7 +185,9 @@ func (n *DAGService) Add(nd *Node) (u.Key, error) {
185 return "", err
186 }
187
186 - b, err := blocks.NewBlock(d)
188 + b := new(blocks.Block)
189 + b.Data = d
190 + b.Multihash, err = nd.Multihash()
191 if err != nil {
192 return "", err
193 }
util/testutil/blocks.go deleted
-22
@@ -1,22 +0,0 @@
1 -package testutil
2 -
3 -import (
4 - "testing"
5 -
6 - blocks "github.com/jbenet/go-ipfs/blocks"
7 -)
8 -
9 -// NewBlockOrFail returns a block created from msgData. Signals test failure if
10 -// creation fails.
11 -//
12 -// NB: NewBlockOrFail accepts a msgData parameter to avoid non-determinism in
13 -// tests. Generating random block data could potentially result in unexpected
14 -// behavior in tests. Thus, it is left up to the caller to select the msgData
15 -// that will determine the blocks key.
16 -func NewBlockOrFail(t *testing.T, msgData string) blocks.Block {
17 - block, blockCreationErr := blocks.NewBlock([]byte(msgData))
18 - if blockCreationErr != nil {
19 - t.Fatal(blockCreationErr)
20 - }
21 - return *block
22 -}