forked from cerc-io/ipld-eth-server
109 lines
4.5 KiB
Go
109 lines
4.5 KiB
Go
package namesys
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
path "gx/ipfs/QmQAgv6Gaoe2tQpcabqwKXKChp2MZ7i3UXv9DqTTaxCaTR/go-path"
|
|
ci "gx/ipfs/QmTW4SdgBWq9GjsBsHeUx8WuGxzhgzAf88UMH2w62PC8yK/go-libp2p-crypto"
|
|
ds "gx/ipfs/QmUadX5EcvrBmxAV9sE7wUWtWSqxns5K84qKJBixmcT1w9/go-datastore"
|
|
dssync "gx/ipfs/QmUadX5EcvrBmxAV9sE7wUWtWSqxns5K84qKJBixmcT1w9/go-datastore/sync"
|
|
ipns "gx/ipfs/QmUwMnKKjH3JwGKNVZ3TcP37W93xzqNA4ECFFiMo6sXkkc/go-ipns"
|
|
opts "gx/ipfs/QmXLwxifxwfc2bAwq6rdjbYqAsGzWsDE9RM5TWMGtykyj6/interface-go-ipfs-core/options/namesys"
|
|
peer "gx/ipfs/QmYVXrKrKHDC9FobgmcmshCDyWwdrfwfanNQN4oxJ9Fk3h/go-libp2p-peer"
|
|
offroute "gx/ipfs/QmZ22s3UgNi5vvYNH79jWJ63NPyQGiv4mdNaWCz4WKqMTZ/go-ipfs-routing/offline"
|
|
pstoremem "gx/ipfs/QmaCTz9RkrU13bm9kMB54f7atgqM4qkjDZpRwRoJiWXEqs/go-libp2p-peerstore/pstoremem"
|
|
"gx/ipfs/QmcYUTQ7tBZeH1CLsZM2S3xhMEZdvUgXvbjhpMsLDpk3oJ/go-unixfs"
|
|
)
|
|
|
|
type mockResolver struct {
|
|
entries map[string]string
|
|
}
|
|
|
|
func testResolution(t *testing.T, resolver Resolver, name string, depth uint, expected string, expError error) {
|
|
t.Helper()
|
|
p, err := resolver.Resolve(context.Background(), name, opts.Depth(depth))
|
|
if err != expError {
|
|
t.Fatal(fmt.Errorf(
|
|
"expected %s with a depth of %d to have a '%s' error, but got '%s'",
|
|
name, depth, expError, err))
|
|
}
|
|
if p.String() != expected {
|
|
t.Fatal(fmt.Errorf(
|
|
"%s with depth %d resolved to %s != %s",
|
|
name, depth, p.String(), expected))
|
|
}
|
|
}
|
|
|
|
func (r *mockResolver) resolveOnceAsync(ctx context.Context, name string, options opts.ResolveOpts) <-chan onceResult {
|
|
p, err := path.ParsePath(r.entries[name])
|
|
out := make(chan onceResult, 1)
|
|
out <- onceResult{value: p, err: err}
|
|
close(out)
|
|
return out
|
|
}
|
|
|
|
func mockResolverOne() *mockResolver {
|
|
return &mockResolver{
|
|
entries: map[string]string{
|
|
"QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy": "/ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj",
|
|
"QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n": "/ipns/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy",
|
|
"QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD": "/ipns/ipfs.io",
|
|
},
|
|
}
|
|
}
|
|
|
|
func mockResolverTwo() *mockResolver {
|
|
return &mockResolver{
|
|
entries: map[string]string{
|
|
"ipfs.io": "/ipns/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n",
|
|
},
|
|
}
|
|
}
|
|
|
|
func TestNamesysResolution(t *testing.T) {
|
|
r := &mpns{
|
|
ipnsResolver: mockResolverOne(),
|
|
dnsResolver: mockResolverTwo(),
|
|
}
|
|
|
|
testResolution(t, r, "Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj", opts.DefaultDepthLimit, "/ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj", nil)
|
|
testResolution(t, r, "/ipns/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy", opts.DefaultDepthLimit, "/ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj", nil)
|
|
testResolution(t, r, "/ipns/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n", opts.DefaultDepthLimit, "/ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj", nil)
|
|
testResolution(t, r, "/ipns/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n", 1, "/ipns/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy", ErrResolveRecursion)
|
|
testResolution(t, r, "/ipns/ipfs.io", opts.DefaultDepthLimit, "/ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj", nil)
|
|
testResolution(t, r, "/ipns/ipfs.io", 1, "/ipns/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n", ErrResolveRecursion)
|
|
testResolution(t, r, "/ipns/ipfs.io", 2, "/ipns/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy", ErrResolveRecursion)
|
|
testResolution(t, r, "/ipns/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD", opts.DefaultDepthLimit, "/ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj", nil)
|
|
testResolution(t, r, "/ipns/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD", 1, "/ipns/ipfs.io", ErrResolveRecursion)
|
|
testResolution(t, r, "/ipns/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD", 2, "/ipns/QmbCMUZw6JFeZ7Wp9jkzbye3Fzp2GGcPgC3nmeUjfVF87n", ErrResolveRecursion)
|
|
testResolution(t, r, "/ipns/QmY3hE8xgFCjGcz6PHgnvJz5HZi1BaKRfPkn1ghZUcYMjD", 3, "/ipns/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy", ErrResolveRecursion)
|
|
}
|
|
|
|
func TestPublishWithCache0(t *testing.T) {
|
|
dst := dssync.MutexWrap(ds.NewMapDatastore())
|
|
priv, _, err := ci.GenerateKeyPair(ci.RSA, 1024)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
ps := pstoremem.NewPeerstore()
|
|
pid, err := peer.IDFromPrivateKey(priv)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err = ps.AddPrivKey(pid, priv)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
routing := offroute.NewOfflineRouter(dst, ipns.Validator{KeyBook: ps})
|
|
|
|
nsys := NewNameSystem(routing, dst, 0)
|
|
p, err := path.ParsePath(unixfs.EmptyDirNode().Cid().String())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
nsys.Publish(context.Background(), priv, p)
|
|
}
|