github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/core/coreunix/metadata_test.go (about)

     1  package coreunix
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"testing"
     7  
     8  	ds "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
     9  	dssync "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore/sync"
    10  	context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
    11  
    12  	bstore "github.com/ipfs/go-ipfs/blocks/blockstore"
    13  	key "github.com/ipfs/go-ipfs/blocks/key"
    14  	bserv "github.com/ipfs/go-ipfs/blockservice"
    15  	core "github.com/ipfs/go-ipfs/core"
    16  	offline "github.com/ipfs/go-ipfs/exchange/offline"
    17  	importer "github.com/ipfs/go-ipfs/importer"
    18  	chunk "github.com/ipfs/go-ipfs/importer/chunk"
    19  	merkledag "github.com/ipfs/go-ipfs/merkledag"
    20  	ft "github.com/ipfs/go-ipfs/unixfs"
    21  	uio "github.com/ipfs/go-ipfs/unixfs/io"
    22  	u "github.com/ipfs/go-ipfs/util"
    23  )
    24  
    25  func getDagserv(t *testing.T) merkledag.DAGService {
    26  	db := dssync.MutexWrap(ds.NewMapDatastore())
    27  	bs := bstore.NewBlockstore(db)
    28  	blockserv := bserv.New(bs, offline.Exchange(bs))
    29  	return merkledag.NewDAGService(blockserv)
    30  }
    31  
    32  func TestMetadata(t *testing.T) {
    33  	ctx := context.Background()
    34  	// Make some random node
    35  	ds := getDagserv(t)
    36  	data := make([]byte, 1000)
    37  	u.NewTimeSeededRand().Read(data)
    38  	r := bytes.NewReader(data)
    39  	nd, err := importer.BuildDagFromReader(ds, chunk.DefaultSplitter(r), nil)
    40  	if err != nil {
    41  		t.Fatal(err)
    42  	}
    43  
    44  	k, err := nd.Key()
    45  	if err != nil {
    46  		t.Fatal(err)
    47  	}
    48  
    49  	m := new(ft.Metadata)
    50  	m.MimeType = "THIS IS A TEST"
    51  
    52  	// Such effort, many compromise
    53  	ipfsnode := &core.IpfsNode{DAG: ds}
    54  
    55  	mdk, err := AddMetadataTo(ipfsnode, k.B58String(), m)
    56  	if err != nil {
    57  		t.Fatal(err)
    58  	}
    59  
    60  	rec, err := Metadata(ipfsnode, mdk)
    61  	if err != nil {
    62  		t.Fatal(err)
    63  	}
    64  	if rec.MimeType != m.MimeType {
    65  		t.Fatalf("something went wrong in conversion: '%s' != '%s'", rec.MimeType, m.MimeType)
    66  	}
    67  
    68  	retnode, err := ds.Get(ctx, key.B58KeyDecode(mdk))
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  
    73  	ndr, err := uio.NewDagReader(ctx, retnode, ds)
    74  	if err != nil {
    75  		t.Fatal(err)
    76  	}
    77  
    78  	out, err := ioutil.ReadAll(ndr)
    79  	if err != nil {
    80  		t.Fatal(err)
    81  	}
    82  
    83  	if !bytes.Equal(out, data) {
    84  		t.Fatal("read incorrect data")
    85  	}
    86  }