master
go 97 lines 2.05 KB
Raw
1 package coreunix
2
3 import (
4 "bytes"
5 "context"
6 "io"
7 "testing"
8
9 bserv "github.com/ipfs/boxo/blockservice"
10 merkledag "github.com/ipfs/boxo/ipld/merkledag"
11 ft "github.com/ipfs/boxo/ipld/unixfs"
12 importer "github.com/ipfs/boxo/ipld/unixfs/importer"
13 uio "github.com/ipfs/boxo/ipld/unixfs/io"
14 core "github.com/ipfs/kubo/core"
15
16 bstore "github.com/ipfs/boxo/blockstore"
17 chunker "github.com/ipfs/boxo/chunker"
18 offline "github.com/ipfs/boxo/exchange/offline"
19 cid "github.com/ipfs/go-cid"
20 ds "github.com/ipfs/go-datastore"
21 dssync "github.com/ipfs/go-datastore/sync"
22 ipld "github.com/ipfs/go-ipld-format"
23 "github.com/ipfs/go-test/random"
24 )
25
26 func getDagserv(t *testing.T) ipld.DAGService {
27 db := dssync.MutexWrap(ds.NewMapDatastore())
28 bs := bstore.NewBlockstore(db)
29 blockserv := bserv.New(bs, offline.Exchange(bs))
30 return merkledag.NewDAGService(blockserv)
31 }
32
33 func TestMetadata(t *testing.T) {
34 ctx := context.Background()
35 // Make some random node
36 ds := getDagserv(t)
37 data := make([]byte, 1000)
38 _, err := io.ReadFull(random.NewRand(), data)
39 if err != nil {
40 t.Fatal(err)
41 }
42 r := bytes.NewReader(data)
43 nd, err := importer.BuildDagFromReader(ds, chunker.DefaultSplitter(r))
44 if err != nil {
45 t.Fatal(err)
46 }
47
48 c := nd.Cid()
49
50 m := new(ft.Metadata)
51 m.MimeType = "THIS IS A TEST"
52
53 // Such effort, many compromise
54 ipfsnode := &core.IpfsNode{DAG: ds}
55
56 mdk, err := AddMetadataTo(ipfsnode, c.String(), m)
57 if err != nil {
58 t.Fatal(err)
59 }
60
61 rec, err := Metadata(ipfsnode, mdk)
62 if err != nil {
63 t.Fatal(err)
64 }
65 if rec.MimeType != m.MimeType {
66 t.Fatalf("something went wrong in conversion: '%s' != '%s'", rec.MimeType, m.MimeType)
67 }
68
69 cdk, err := cid.Decode(mdk)
70 if err != nil {
71 t.Fatal(err)
72 }
73
74 retnode, err := ds.Get(ctx, cdk)
75 if err != nil {
76 t.Fatal(err)
77 }
78
79 rtnpb, ok := retnode.(*merkledag.ProtoNode)
80 if !ok {
81 t.Fatal("expected protobuf node")
82 }
83
84 ndr, err := uio.NewDagReader(ctx, rtnpb, ds)
85 if err != nil {
86 t.Fatal(err)
87 }
88
89 out, err := io.ReadAll(ndr)
90 if err != nil {
91 t.Fatal(err)
92 }
93
94 if !bytes.Equal(out, data) {
95 t.Fatal("read incorrect data")
96 }
97 }