forked from cerc-io/ipld-eth-server
148 lines
3.7 KiB
Go
148 lines
3.7 KiB
Go
package namesys
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
|
|
path "gx/ipfs/QmQAgv6Gaoe2tQpcabqwKXKChp2MZ7i3UXv9DqTTaxCaTR/go-path"
|
|
ds "gx/ipfs/QmUadX5EcvrBmxAV9sE7wUWtWSqxns5K84qKJBixmcT1w9/go-datastore"
|
|
dssync "gx/ipfs/QmUadX5EcvrBmxAV9sE7wUWtWSqxns5K84qKJBixmcT1w9/go-datastore/sync"
|
|
ipns "gx/ipfs/QmUwMnKKjH3JwGKNVZ3TcP37W93xzqNA4ECFFiMo6sXkkc/go-ipns"
|
|
testutil "gx/ipfs/QmWapVoHjtKhn4MhvKNoPTkJKADFGACfXPFnt7combwp5W/go-testutil"
|
|
peer "gx/ipfs/QmYVXrKrKHDC9FobgmcmshCDyWwdrfwfanNQN4oxJ9Fk3h/go-libp2p-peer"
|
|
mockrouting "gx/ipfs/QmZ22s3UgNi5vvYNH79jWJ63NPyQGiv4mdNaWCz4WKqMTZ/go-ipfs-routing/mock"
|
|
)
|
|
|
|
func TestRoutingResolve(t *testing.T) {
|
|
dstore := dssync.MutexWrap(ds.NewMapDatastore())
|
|
serv := mockrouting.NewServer()
|
|
id := testutil.RandIdentityOrFatal(t)
|
|
d := serv.ClientWithDatastore(context.Background(), id, dstore)
|
|
|
|
resolver := NewIpnsResolver(d)
|
|
publisher := NewIpnsPublisher(d, dstore)
|
|
|
|
privk, pubk, err := testutil.RandTestKeyPair(512)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
h := path.FromString("/ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN")
|
|
err = publisher.Publish(context.Background(), privk, h)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
pid, err := peer.IDFromPublicKey(pubk)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := resolver.Resolve(context.Background(), pid.Pretty())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if res != h {
|
|
t.Fatal("Got back incorrect value.")
|
|
}
|
|
}
|
|
|
|
func TestPrexistingExpiredRecord(t *testing.T) {
|
|
dstore := dssync.MutexWrap(ds.NewMapDatastore())
|
|
d := mockrouting.NewServer().ClientWithDatastore(context.Background(), testutil.RandIdentityOrFatal(t), dstore)
|
|
|
|
resolver := NewIpnsResolver(d)
|
|
publisher := NewIpnsPublisher(d, dstore)
|
|
|
|
privk, pubk, err := testutil.RandTestKeyPair(512)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
id, err := peer.IDFromPublicKey(pubk)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Make an expired record and put it in the datastore
|
|
h := path.FromString("/ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN")
|
|
eol := time.Now().Add(time.Hour * -1)
|
|
|
|
entry, err := ipns.Create(privk, []byte(h), 0, eol)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err = PutRecordToRouting(context.Background(), d, pubk, entry)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Now, with an old record in the system already, try and publish a new one
|
|
err = publisher.Publish(context.Background(), privk, h)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = verifyCanResolve(resolver, id.Pretty(), h)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestPrexistingRecord(t *testing.T) {
|
|
dstore := dssync.MutexWrap(ds.NewMapDatastore())
|
|
d := mockrouting.NewServer().ClientWithDatastore(context.Background(), testutil.RandIdentityOrFatal(t), dstore)
|
|
|
|
resolver := NewIpnsResolver(d)
|
|
publisher := NewIpnsPublisher(d, dstore)
|
|
|
|
privk, pubk, err := testutil.RandTestKeyPair(512)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
id, err := peer.IDFromPublicKey(pubk)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Make a good record and put it in the datastore
|
|
h := path.FromString("/ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN")
|
|
eol := time.Now().Add(time.Hour)
|
|
entry, err := ipns.Create(privk, []byte(h), 0, eol)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err = PutRecordToRouting(context.Background(), d, pubk, entry)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Now, with an old record in the system already, try and publish a new one
|
|
err = publisher.Publish(context.Background(), privk, h)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = verifyCanResolve(resolver, id.Pretty(), h)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func verifyCanResolve(r Resolver, name string, exp path.Path) error {
|
|
res, err := r.Resolve(context.Background(), name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if res != exp {
|
|
return errors.New("got back wrong record")
|
|
}
|
|
|
|
return nil
|
|
}
|