@@ -3,6 +3,7 @@ package builder
3
3
import (
4
4
"bytes"
5
5
"fmt"
6
+ "io"
6
7
"os"
7
8
"path/filepath"
8
9
"testing"
@@ -12,18 +13,15 @@ import (
12
13
dagpb "github.com/ipld/go-codec-dagpb"
13
14
"github.com/ipld/go-ipld-prime"
14
15
cidlink "github.com/ipld/go-ipld-prime/linking/cid"
16
+ "github.com/multiformats/go-multihash"
15
17
"github.com/stretchr/testify/require"
16
18
)
17
19
18
20
func mkEntries (cnt int , ls * ipld.LinkSystem ) ([]dagpb.PBLink , error ) {
19
21
entries := make ([]dagpb.PBLink , 0 , cnt )
20
22
for i := 0 ; i < cnt ; i ++ {
21
23
r := bytes .NewBufferString (fmt .Sprintf ("%d" , i ))
22
- f , s , err := BuildUnixFSFile (r , "" , ls )
23
- if err != nil {
24
- return nil , err
25
- }
26
- e , err := BuildUnixFSDirectoryEntry (fmt .Sprintf ("file %d" , i ), int64 (s ), f )
24
+ e , err := mkEntry (r , fmt .Sprintf ("file %d" , i ), ls )
27
25
if err != nil {
28
26
return nil , err
29
27
}
@@ -32,6 +30,48 @@ func mkEntries(cnt int, ls *ipld.LinkSystem) ([]dagpb.PBLink, error) {
32
30
return entries , nil
33
31
}
34
32
33
+ func mkEntry (r io.Reader , name string , ls * ipld.LinkSystem ) (dagpb.PBLink , error ) {
34
+ f , s , err := BuildUnixFSFile (r , "" , ls )
35
+ if err != nil {
36
+ return nil , err
37
+ }
38
+ return BuildUnixFSDirectoryEntry (name , int64 (s ), f )
39
+ }
40
+
41
+ // Cross-impl reference test: directory of files with single character
42
+ // names, starting from ' ' and ending with '~', but excluding the special
43
+ // characters '/' and '.'. Each file should contain a single byte with the
44
+ // same value as the character in its name. Files are added to a sharded
45
+ // directory with a fanout of 16, using CIDv1 throughout, and should result
46
+ // in the root CID of:
47
+ //
48
+ // bafybeihnipspiyy3dctpcx7lv655qpiuy52d7b2fzs52dtrjqwmvbiux44
49
+ func TestBuildUnixFSDirectoryShardAltFanout_Reference (t * testing.T ) {
50
+ ls := cidlink .DefaultLinkSystem ()
51
+ storage := cidlink.Memory {}
52
+ ls .StorageReadOpener = storage .OpenRead
53
+ ls .StorageWriteOpener = storage .OpenWrite
54
+ entries := make ([]dagpb.PBLink , 0 )
55
+ for ch := ' ' ; ch <= '~' ; ch ++ {
56
+ if ch == '/' || ch == '.' {
57
+ continue
58
+ }
59
+ s := string (ch )
60
+ r := bytes .NewBuffer ([]byte (s ))
61
+ e , err := mkEntry (r , s , & ls )
62
+ require .NoError (t , err )
63
+ entries = append (entries , e )
64
+ }
65
+ lnk , sz , err := BuildUnixFSShardedDirectory (16 , multihash .MURMUR3X64_64 , entries , & ls )
66
+ require .NoError (t , err )
67
+ var totStored int
68
+ for _ , blk := range storage .Bag {
69
+ totStored += len (blk )
70
+ }
71
+ require .Equal (t , totStored , int (sz ))
72
+ require .Equal (t , "bafybeihnipspiyy3dctpcx7lv655qpiuy52d7b2fzs52dtrjqwmvbiux44" , lnk .String ())
73
+ }
74
+
35
75
func TestBuildUnixFSDirectory (t * testing.T ) {
36
76
ls := cidlink .DefaultLinkSystem ()
37
77
storage := cidlink.Memory {}
0 commit comments