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
-}