block.go 4.46 KB
Newer Older
1
package tests
2 3 4 5 6 7 8 9 10 11 12 13 14

import (
	"context"
	"io/ioutil"
	"strings"
	"testing"

	coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
	opt "github.com/ipfs/go-ipfs/core/coreapi/interface/options"

	mh "gx/ipfs/QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW/go-multihash"
)

15
func (tp *provider) TestBlock(t *testing.T) {
16 17 18 19 20 21 22
	tp.hasApi(t, func(api coreiface.CoreAPI) error {
		if api.Block() == nil {
			return apiNotImplemented
		}
		return nil
	})

23 24 25 26 27 28
	t.Run("TestBlockPut", tp.TestBlockPut)
	t.Run("TestBlockPutFormat", tp.TestBlockPutFormat)
	t.Run("TestBlockPutHash", tp.TestBlockPutHash)
	t.Run("TestBlockGet", tp.TestBlockGet)
	t.Run("TestBlockRm", tp.TestBlockRm)
	t.Run("TestBlockStat", tp.TestBlockStat)
29 30
}

31
func (tp *provider) TestBlockPut(t *testing.T) {
32 33
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
34
	api, err := tp.makeAPI(ctx)
35
	if err != nil {
36
		t.Fatal(err)
37 38 39 40
	}

	res, err := api.Block().Put(ctx, strings.NewReader(`Hello`))
	if err != nil {
41
		t.Fatal(err)
42 43 44 45 46 47 48
	}

	if res.Path().Cid().String() != "QmPyo15ynbVrSTVdJL9th7JysHaAbXt9dM9tXk1bMHbRtk" {
		t.Errorf("got wrong cid: %s", res.Path().Cid().String())
	}
}

49
func (tp *provider) TestBlockPutFormat(t *testing.T) {
50 51
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
52
	api, err := tp.makeAPI(ctx)
53 54 55 56 57 58
	if err != nil {
		t.Error(err)
	}

	res, err := api.Block().Put(ctx, strings.NewReader(`Hello`), opt.Block.Format("cbor"))
	if err != nil {
59
		t.Fatal(err)
60 61 62 63 64 65 66
	}

	if res.Path().Cid().String() != "zdpuAn4amuLWo8Widi5v6VQpuo2dnpnwbVE3oB6qqs7mDSeoa" {
		t.Errorf("got wrong cid: %s", res.Path().Cid().String())
	}
}

67
func (tp *provider) TestBlockPutHash(t *testing.T) {
68 69
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
70
	api, err := tp.makeAPI(ctx)
71 72 73 74 75 76 77 78 79 80 81 82 83 84
	if err != nil {
		t.Error(err)
	}

	res, err := api.Block().Put(ctx, strings.NewReader(`Hello`), opt.Block.Hash(mh.KECCAK_512, -1))
	if err != nil {
		t.Fatal(err)
	}

	if res.Path().Cid().String() != "zBurKB9YZkcDf6xa53WBE8CFX4ydVqAyf9KPXBFZt5stJzEstaS8Hukkhu4gwpMtc1xHNDbzP7sPtQKyWsP3C8fbhkmrZ" {
		t.Errorf("got wrong cid: %s", res.Path().Cid().String())
	}
}

85
func (tp *provider) TestBlockGet(t *testing.T) {
86 87
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
88
	api, err := tp.makeAPI(ctx)
89 90 91 92 93 94
	if err != nil {
		t.Error(err)
	}

	res, err := api.Block().Put(ctx, strings.NewReader(`Hello`), opt.Block.Hash(mh.KECCAK_512, -1))
	if err != nil {
95
		t.Fatal(err)
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
	}

	r, err := api.Block().Get(ctx, res.Path())
	if err != nil {
		t.Error(err)
	}

	d, err := ioutil.ReadAll(r)
	if err != nil {
		t.Error(err)
	}

	if string(d) != "Hello" {
		t.Error("didn't get correct data back")
	}

	p, err := coreiface.ParsePath("/ipfs/" + res.Path().Cid().String())
	if err != nil {
		t.Error(err)
	}

	rp, err := api.ResolvePath(ctx, p)
	if err != nil {
		t.Fatal(err)
	}
	if rp.Cid().String() != res.Path().Cid().String() {
		t.Error("paths didn't match")
	}
}

126
func (tp *provider) TestBlockRm(t *testing.T) {
127 128
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
129
	api, err := tp.makeAPI(ctx)
130 131 132 133 134 135
	if err != nil {
		t.Error(err)
	}

	res, err := api.Block().Put(ctx, strings.NewReader(`Hello`))
	if err != nil {
136
		t.Fatal(err)
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
	}

	r, err := api.Block().Get(ctx, res.Path())
	if err != nil {
		t.Error(err)
	}

	d, err := ioutil.ReadAll(r)
	if err != nil {
		t.Error(err)
	}

	if string(d) != "Hello" {
		t.Error("didn't get correct data back")
	}

	err = api.Block().Rm(ctx, res.Path())
	if err != nil {
		t.Error(err)
	}

	_, err = api.Block().Get(ctx, res.Path())
	if err == nil {
		t.Error("expected err to exist")
	}
162
	if !strings.Contains(err.Error(), "blockservice: key not found") {
163 164 165 166 167 168 169
		t.Errorf("unexpected error; %s", err.Error())
	}

	err = api.Block().Rm(ctx, res.Path())
	if err == nil {
		t.Error("expected err to exist")
	}
170
	if !strings.Contains(err.Error(), "blockstore: block not found") {
171 172 173 174 175 176 177 178 179
		t.Errorf("unexpected error; %s", err.Error())
	}

	err = api.Block().Rm(ctx, res.Path(), opt.Block.Force(true))
	if err != nil {
		t.Error(err)
	}
}

180
func (tp *provider) TestBlockStat(t *testing.T) {
181 182
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
183
	api, err := tp.makeAPI(ctx)
184 185 186 187 188 189
	if err != nil {
		t.Error(err)
	}

	res, err := api.Block().Put(ctx, strings.NewReader(`Hello`))
	if err != nil {
190
		t.Fatal(err)
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
	}

	stat, err := api.Block().Stat(ctx, res.Path())
	if err != nil {
		t.Error(err)
	}

	if stat.Path().String() != res.Path().String() {
		t.Error("paths don't match")
	}

	if stat.Size() != len("Hello") {
		t.Error("length doesn't match")
	}
}