1
- package builder
1
+ package builder_test
2
2
3
3
import (
4
4
"bytes"
5
5
"context"
6
+ "fmt"
7
+ "io"
8
+ "math/rand"
6
9
"testing"
7
10
11
+ "github.com/ipfs/go-unixfsnode/data/builder"
12
+ "github.com/multiformats/go-multicodec"
13
+ multihash "github.com/multiformats/go-multihash/core"
14
+
8
15
"github.com/ipfs/go-cid"
9
16
u "github.com/ipfs/go-ipfs-util"
10
17
"github.com/ipfs/go-unixfsnode/file"
18
+ carv1 "github.com/ipld/go-car"
19
+ "github.com/ipld/go-car/v2"
11
20
dagpb "github.com/ipld/go-codec-dagpb"
12
21
"github.com/ipld/go-ipld-prime"
22
+ "github.com/ipld/go-ipld-prime/linking"
13
23
cidlink "github.com/ipld/go-ipld-prime/linking/cid"
24
+ selectorparse "github.com/ipld/go-ipld-prime/traversal/selector/parse"
14
25
)
15
26
16
27
func TestBuildUnixFSFile (t * testing.T ) {
@@ -23,7 +34,7 @@ func TestBuildUnixFSFile(t *testing.T) {
23
34
ls .StorageReadOpener = storage .OpenRead
24
35
ls .StorageWriteOpener = storage .OpenWrite
25
36
26
- f , _ , err := BuildUnixFSFile (r , "" , & ls )
37
+ f , _ , err := builder . BuildUnixFSFile (r , "" , & ls )
27
38
if err != nil {
28
39
t .Fatal (err )
29
40
}
@@ -43,6 +54,61 @@ func TestBuildUnixFSFile(t *testing.T) {
43
54
}
44
55
}
45
56
57
+ func TestEstimateUnixFSFileDefaultChunking (t * testing.T ) {
58
+ for i := 100 ; i < 1000000000 ; i *= 10 {
59
+ b := make ([]byte , i )
60
+ rand .Read (b )
61
+
62
+ ls := cidlink .DefaultLinkSystem ()
63
+ storage := cidlink.Memory {}
64
+ ls .StorageReadOpener = storage .OpenRead
65
+ nPB := 0
66
+
67
+ ls .StorageWriteOpener = func (lc linking.LinkContext ) (io.Writer , linking.BlockWriteCommitter , error ) {
68
+ w , bwc , err := storage .OpenWrite (lc )
69
+ return w , func (lnk ipld.Link ) error {
70
+ if lnk .(cidlink.Link ).Cid .Prefix ().Codec == uint64 (multicodec .DagPb ) {
71
+ nPB ++
72
+ }
73
+ return bwc (lnk )
74
+ }, err
75
+ }
76
+ rt , _ , err := builder .BuildUnixFSFile (bytes .NewReader (b ), "" , & ls )
77
+ if err != nil {
78
+ t .Fatal (err )
79
+ }
80
+
81
+ ob := bytes .NewBuffer (nil )
82
+ _ , err = car .TraverseV1 (context .Background (), & ls , rt .(cidlink.Link ).Cid , selectorparse .CommonSelector_ExploreAllRecursively , ob )
83
+ if err != nil {
84
+ t .Fatal (err )
85
+ }
86
+ fileLen := len (ob .Bytes ())
87
+
88
+ estimate := builder .EstimateUnixFSFileDefaultChunking (uint64 (i ))
89
+ if estimate != uint64 (fileLen ) {
90
+ fmt .Printf ("%d intermediate nodes.\n " , nPB )
91
+ t .Fatalf ("estimate for file length %d was %d. should be %d" , i , estimate , fileLen )
92
+ }
93
+ }
94
+ }
95
+
96
+ func TestS (t * testing.T ) {
97
+ p := cid.Prefix {
98
+ Version : 1 ,
99
+ Codec : uint64 (multicodec .DagPb ),
100
+ MhType : multihash .SHA2_256 ,
101
+ MhLength : 32 ,
102
+ }
103
+ rt , _ := p .Sum ([]byte {0 })
104
+ ch := carv1.CarHeader {
105
+ Roots : []cid.Cid {rt },
106
+ Version : 1 ,
107
+ }
108
+ s , _ := carv1 .HeaderSize (& ch )
109
+ t .Fatalf ("hs: %d\n " , s )
110
+ }
111
+
46
112
func TestUnixFSFileRoundtrip (t * testing.T ) {
47
113
buf := make ([]byte , 10 * 1024 * 1024 )
48
114
u .NewSeededRand (0xdeadbeef ).Read (buf )
@@ -53,7 +119,7 @@ func TestUnixFSFileRoundtrip(t *testing.T) {
53
119
ls .StorageReadOpener = storage .OpenRead
54
120
ls .StorageWriteOpener = storage .OpenWrite
55
121
56
- f , _ , err := BuildUnixFSFile (r , "" , & ls )
122
+ f , _ , err := builder . BuildUnixFSFile (r , "" , & ls )
57
123
if err != nil {
58
124
t .Fatal (err )
59
125
}
0 commit comments