Commit d7a89ddb authored by Łukasz Magiera's avatar Łukasz Magiera Committed by Steven Allen

CoreAPI: Don't panic when testing incomplete implementions

License: MIT
Signed-off-by: default avatarŁukasz Magiera <magik6k@gmail.com>
parent 6800f567
......@@ -2,12 +2,15 @@ package tests
import (
"context"
"errors"
"testing"
"time"
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
)
var apiNotImplemented = errors.New("api not implemented")
func (tp *provider) makeAPI(ctx context.Context) (coreiface.CoreAPI, error) {
api, err := tp.MakeAPISwarm(ctx, false, 1)
if err != nil {
......@@ -76,3 +79,16 @@ func TestApi(p Provider) func(t *testing.T) {
})
}
}
func (tp *provider) hasApi(t *testing.T, tf func(coreiface.CoreAPI) error) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
api, err := tp.makeAPI(ctx)
if err != nil {
t.Fatal(err)
}
if err := tf(api); err != nil {
t.Fatal(api)
}
}
......@@ -13,6 +13,13 @@ import (
)
func (tp *provider) TestBlock(t *testing.T) {
tp.hasApi(t, func(api coreiface.CoreAPI) error {
if api.Block() == nil {
return apiNotImplemented
}
return nil
})
t.Run("TestBlockPut", tp.TestBlockPut)
t.Run("TestBlockPutFormat", tp.TestBlockPutFormat)
t.Run("TestBlockPutHash", tp.TestBlockPutHash)
......
......@@ -13,6 +13,13 @@ import (
)
func (tp *provider) TestDag(t *testing.T) {
tp.hasApi(t, func(api coreiface.CoreAPI) error {
if api.Dag() == nil {
return apiNotImplemented
}
return nil
})
t.Run("TestPut", tp.TestPut)
t.Run("TestPutWithHash", tp.TestPutWithHash)
t.Run("TestPath", tp.TestDagPath)
......
......@@ -5,10 +5,18 @@ import (
"io"
"testing"
"github.com/ipfs/go-ipfs/core/coreapi/interface"
"github.com/ipfs/go-ipfs/core/coreapi/interface/options"
)
func (tp *provider) TestDht(t *testing.T) {
tp.hasApi(t, func(api iface.CoreAPI) error {
if api.Dht() == nil {
return apiNotImplemented
}
return nil
})
t.Run("TestDhtFindPeer", tp.TestDhtFindPeer)
t.Run("TestDhtFindProviders", tp.TestDhtFindProviders)
t.Run("TestDhtProvide", tp.TestDhtProvide)
......
......@@ -5,10 +5,18 @@ import (
"strings"
"testing"
"github.com/ipfs/go-ipfs/core/coreapi/interface"
opt "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
)
func (tp *provider) TestKey(t *testing.T) {
tp.hasApi(t, func(api iface.CoreAPI) error {
if api.Key() == nil {
return apiNotImplemented
}
return nil
})
t.Run("TestListSelf", tp.TestListSelf)
t.Run("TestRenameSelf", tp.TestRenameSelf)
t.Run("TestRemoveSelf", tp.TestRemoveSelf)
......
......@@ -16,6 +16,13 @@ import (
)
func (tp *provider) TestName(t *testing.T) {
tp.hasApi(t, func(api coreiface.CoreAPI) error {
if api.Name() == nil {
return apiNotImplemented
}
return nil
})
t.Run("TestPublishResolve", tp.TestPublishResolve)
t.Run("TestBasicPublishResolveKey", tp.TestBasicPublishResolveKey)
t.Run("TestBasicPublishResolveTimeout", tp.TestBasicPublishResolveTimeout)
......
......@@ -13,6 +13,13 @@ import (
)
func (tp *provider) TestObject(t *testing.T) {
tp.hasApi(t, func(api iface.CoreAPI) error {
if api.Object() == nil {
return apiNotImplemented
}
return nil
})
t.Run("TestNew", tp.TestNew)
t.Run("TestObjectPut", tp.TestObjectPut)
t.Run("TestObjectGet", tp.TestObjectGet)
......
......@@ -26,23 +26,27 @@ func (tp *provider) TestMutablePath(t *testing.T) {
t.Fatal(err)
}
// get self /ipns path
keys, err := api.Key().List(ctx)
blk, err := api.Block().Put(ctx, strings.NewReader(`foo`))
if err != nil {
t.Fatal(err)
}
if !keys[0].Path().Mutable() {
t.Error("expected self /ipns path to be mutable")
if blk.Path().Mutable() {
t.Error("expected /ipld path to be immutable")
}
blk, err := api.Block().Put(ctx, strings.NewReader(`foo`))
// get self /ipns path
if api.Key() == nil {
t.Fatal(".Key not implemented")
}
keys, err := api.Key().List(ctx)
if err != nil {
t.Error(err)
t.Fatal(err)
}
if blk.Path().Mutable() {
t.Error("expected /ipld path to be immutable")
if !keys[0].Path().Mutable() {
t.Error("expected self /ipns path to be mutable")
}
}
......@@ -54,6 +58,10 @@ func (tp *provider) TestPathRemainder(t *testing.T) {
t.Fatal(err)
}
if api.Dag() == nil {
t.Fatal(".Dag not implemented")
}
obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"bar": "baz"}}`))
if err != nil {
t.Fatal(err)
......@@ -82,6 +90,10 @@ func (tp *provider) TestEmptyPathRemainder(t *testing.T) {
t.Fatal(err)
}
if api.Dag() == nil {
t.Fatal(".Dag not implemented")
}
obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"bar": "baz"}}`))
if err != nil {
t.Fatal(err)
......@@ -114,6 +126,10 @@ func (tp *provider) TestInvalidPathRemainder(t *testing.T) {
t.Fatal(err)
}
if api.Dag() == nil {
t.Fatal(".Dag not implemented")
}
obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"bar": "baz"}}`))
if err != nil {
t.Fatal(err)
......@@ -138,9 +154,17 @@ func (tp *provider) TestPathRoot(t *testing.T) {
t.Fatal(err)
}
if api.Block() == nil {
t.Fatal(".Block not implemented")
}
blk, err := api.Block().Put(ctx, strings.NewReader(`foo`), options.Block.Format("raw"))
if err != nil {
t.Error(err)
t.Fatal(err)
}
if api.Dag() == nil {
t.Fatal(".Dag not implemented")
}
obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"/": "`+blk.Path().Cid().String()+`"}}`))
......
......@@ -2,6 +2,7 @@ package tests
import (
"context"
"github.com/ipfs/go-ipfs/core/coreapi/interface"
"strings"
"testing"
......@@ -9,6 +10,13 @@ import (
)
func (tp *provider) TestPin(t *testing.T) {
tp.hasApi(t, func(api iface.CoreAPI) error {
if api.Pin() == nil {
return apiNotImplemented
}
return nil
})
t.Run("TestPinAdd", tp.TestPinAdd)
t.Run("TestPinSimple", tp.TestPinSimple)
t.Run("TestPinRecursive", tp.TestPinRecursive)
......
......@@ -2,12 +2,20 @@ package tests
import (
"context"
"github.com/ipfs/go-ipfs/core/coreapi/interface"
"github.com/ipfs/go-ipfs/core/coreapi/interface/options"
"testing"
"time"
)
func (tp *provider) TestPubSub(t *testing.T) {
tp.hasApi(t, func(api iface.CoreAPI) error {
if api.PubSub() == nil {
return apiNotImplemented
}
return nil
})
t.Run("TestBasicPubSub", tp.TestBasicPubSub)
}
......
......@@ -24,6 +24,13 @@ import (
)
func (tp *provider) TestUnixfs(t *testing.T) {
tp.hasApi(t, func(api coreiface.CoreAPI) error {
if api.Unixfs() == nil {
return apiNotImplemented
}
return nil
})
t.Run("TestAdd", tp.TestAdd)
t.Run("TestAddPinned", tp.TestAddPinned)
t.Run("TestAddHashOnly", tp.TestAddHashOnly)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment