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 ...@@ -2,12 +2,15 @@ package tests
import ( import (
"context" "context"
"errors"
"testing" "testing"
"time" "time"
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface" 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) { func (tp *provider) makeAPI(ctx context.Context) (coreiface.CoreAPI, error) {
api, err := tp.MakeAPISwarm(ctx, false, 1) api, err := tp.MakeAPISwarm(ctx, false, 1)
if err != nil { if err != nil {
...@@ -76,3 +79,16 @@ func TestApi(p Provider) func(t *testing.T) { ...@@ -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 ( ...@@ -13,6 +13,13 @@ import (
) )
func (tp *provider) TestBlock(t *testing.T) { 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("TestBlockPut", tp.TestBlockPut)
t.Run("TestBlockPutFormat", tp.TestBlockPutFormat) t.Run("TestBlockPutFormat", tp.TestBlockPutFormat)
t.Run("TestBlockPutHash", tp.TestBlockPutHash) t.Run("TestBlockPutHash", tp.TestBlockPutHash)
......
...@@ -13,6 +13,13 @@ import ( ...@@ -13,6 +13,13 @@ import (
) )
func (tp *provider) TestDag(t *testing.T) { 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("TestPut", tp.TestPut)
t.Run("TestPutWithHash", tp.TestPutWithHash) t.Run("TestPutWithHash", tp.TestPutWithHash)
t.Run("TestPath", tp.TestDagPath) t.Run("TestPath", tp.TestDagPath)
......
...@@ -5,10 +5,18 @@ import ( ...@@ -5,10 +5,18 @@ import (
"io" "io"
"testing" "testing"
"github.com/ipfs/go-ipfs/core/coreapi/interface"
"github.com/ipfs/go-ipfs/core/coreapi/interface/options" "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
) )
func (tp *provider) TestDht(t *testing.T) { 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("TestDhtFindPeer", tp.TestDhtFindPeer)
t.Run("TestDhtFindProviders", tp.TestDhtFindProviders) t.Run("TestDhtFindProviders", tp.TestDhtFindProviders)
t.Run("TestDhtProvide", tp.TestDhtProvide) t.Run("TestDhtProvide", tp.TestDhtProvide)
......
...@@ -5,10 +5,18 @@ import ( ...@@ -5,10 +5,18 @@ import (
"strings" "strings"
"testing" "testing"
"github.com/ipfs/go-ipfs/core/coreapi/interface"
opt "github.com/ipfs/go-ipfs/core/coreapi/interface/options" opt "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
) )
func (tp *provider) TestKey(t *testing.T) { 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("TestListSelf", tp.TestListSelf)
t.Run("TestRenameSelf", tp.TestRenameSelf) t.Run("TestRenameSelf", tp.TestRenameSelf)
t.Run("TestRemoveSelf", tp.TestRemoveSelf) t.Run("TestRemoveSelf", tp.TestRemoveSelf)
......
...@@ -16,6 +16,13 @@ import ( ...@@ -16,6 +16,13 @@ import (
) )
func (tp *provider) TestName(t *testing.T) { 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("TestPublishResolve", tp.TestPublishResolve)
t.Run("TestBasicPublishResolveKey", tp.TestBasicPublishResolveKey) t.Run("TestBasicPublishResolveKey", tp.TestBasicPublishResolveKey)
t.Run("TestBasicPublishResolveTimeout", tp.TestBasicPublishResolveTimeout) t.Run("TestBasicPublishResolveTimeout", tp.TestBasicPublishResolveTimeout)
......
...@@ -13,6 +13,13 @@ import ( ...@@ -13,6 +13,13 @@ import (
) )
func (tp *provider) TestObject(t *testing.T) { 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("TestNew", tp.TestNew)
t.Run("TestObjectPut", tp.TestObjectPut) t.Run("TestObjectPut", tp.TestObjectPut)
t.Run("TestObjectGet", tp.TestObjectGet) t.Run("TestObjectGet", tp.TestObjectGet)
......
...@@ -26,23 +26,27 @@ func (tp *provider) TestMutablePath(t *testing.T) { ...@@ -26,23 +26,27 @@ func (tp *provider) TestMutablePath(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
// get self /ipns path blk, err := api.Block().Put(ctx, strings.NewReader(`foo`))
keys, err := api.Key().List(ctx)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
if !keys[0].Path().Mutable() { if blk.Path().Mutable() {
t.Error("expected self /ipns path to be 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 { if err != nil {
t.Error(err) t.Fatal(err)
} }
if blk.Path().Mutable() { if !keys[0].Path().Mutable() {
t.Error("expected /ipld path to be immutable") t.Error("expected self /ipns path to be mutable")
} }
} }
...@@ -54,6 +58,10 @@ func (tp *provider) TestPathRemainder(t *testing.T) { ...@@ -54,6 +58,10 @@ func (tp *provider) TestPathRemainder(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if api.Dag() == nil {
t.Fatal(".Dag not implemented")
}
obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"bar": "baz"}}`)) obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"bar": "baz"}}`))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
...@@ -82,6 +90,10 @@ func (tp *provider) TestEmptyPathRemainder(t *testing.T) { ...@@ -82,6 +90,10 @@ func (tp *provider) TestEmptyPathRemainder(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if api.Dag() == nil {
t.Fatal(".Dag not implemented")
}
obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"bar": "baz"}}`)) obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"bar": "baz"}}`))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
...@@ -114,6 +126,10 @@ func (tp *provider) TestInvalidPathRemainder(t *testing.T) { ...@@ -114,6 +126,10 @@ func (tp *provider) TestInvalidPathRemainder(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if api.Dag() == nil {
t.Fatal(".Dag not implemented")
}
obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"bar": "baz"}}`)) obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"bar": "baz"}}`))
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
...@@ -138,9 +154,17 @@ func (tp *provider) TestPathRoot(t *testing.T) { ...@@ -138,9 +154,17 @@ func (tp *provider) TestPathRoot(t *testing.T) {
t.Fatal(err) 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")) blk, err := api.Block().Put(ctx, strings.NewReader(`foo`), options.Block.Format("raw"))
if err != nil { 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()+`"}}`)) obj, err := api.Dag().Put(ctx, strings.NewReader(`{"foo": {"/": "`+blk.Path().Cid().String()+`"}}`))
......
...@@ -2,6 +2,7 @@ package tests ...@@ -2,6 +2,7 @@ package tests
import ( import (
"context" "context"
"github.com/ipfs/go-ipfs/core/coreapi/interface"
"strings" "strings"
"testing" "testing"
...@@ -9,6 +10,13 @@ import ( ...@@ -9,6 +10,13 @@ import (
) )
func (tp *provider) TestPin(t *testing.T) { 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("TestPinAdd", tp.TestPinAdd)
t.Run("TestPinSimple", tp.TestPinSimple) t.Run("TestPinSimple", tp.TestPinSimple)
t.Run("TestPinRecursive", tp.TestPinRecursive) t.Run("TestPinRecursive", tp.TestPinRecursive)
......
...@@ -2,12 +2,20 @@ package tests ...@@ -2,12 +2,20 @@ package tests
import ( import (
"context" "context"
"github.com/ipfs/go-ipfs/core/coreapi/interface"
"github.com/ipfs/go-ipfs/core/coreapi/interface/options" "github.com/ipfs/go-ipfs/core/coreapi/interface/options"
"testing" "testing"
"time" "time"
) )
func (tp *provider) TestPubSub(t *testing.T) { 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) t.Run("TestBasicPubSub", tp.TestBasicPubSub)
} }
......
...@@ -24,6 +24,13 @@ import ( ...@@ -24,6 +24,13 @@ import (
) )
func (tp *provider) TestUnixfs(t *testing.T) { 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("TestAdd", tp.TestAdd)
t.Run("TestAddPinned", tp.TestAddPinned) t.Run("TestAddPinned", tp.TestAddPinned)
t.Run("TestAddHashOnly", tp.TestAddHashOnly) 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