mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 18:37:45 +08:00
124 lines
3.2 KiB
Go
124 lines
3.2 KiB
Go
package namesys
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
|
|
ds "github.com/ipfs/go-datastore"
|
|
dssync "github.com/ipfs/go-datastore/sync"
|
|
mockrouting "github.com/ipfs/go-ipfs-routing/mock"
|
|
ipns "github.com/ipfs/go-ipns"
|
|
path "github.com/ipfs/go-path"
|
|
testutil "github.com/libp2p/go-libp2p-testing/net"
|
|
tnet "github.com/libp2p/go-libp2p-testing/net"
|
|
)
|
|
|
|
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)
|
|
|
|
identity := tnet.RandIdentityOrFatal(t)
|
|
|
|
h := path.FromString("/ipfs/QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN")
|
|
err := publisher.Publish(context.Background(), identity.PrivateKey(), h)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
res, err := resolver.Resolve(context.Background(), identity.ID().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)
|
|
|
|
identity := tnet.RandIdentityOrFatal(t)
|
|
|
|
// 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(identity.PrivateKey(), []byte(h), 0, eol)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err = PutRecordToRouting(context.Background(), d, identity.PublicKey(), 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(), identity.PrivateKey(), h)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = verifyCanResolve(resolver, identity.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)
|
|
|
|
identity := tnet.RandIdentityOrFatal(t)
|
|
|
|
// 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(identity.PrivateKey(), []byte(h), 0, eol)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err = PutRecordToRouting(context.Background(), d, identity.PublicKey(), 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(), identity.PrivateKey(), h)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = verifyCanResolve(resolver, identity.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
|
|
}
|