mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-11 11:19:05 +08:00
This extracts the routing package to its own repository (https://github.com/ipfs/go-ipfs-routing). History has been preserved. The new module has been gx'ed and published. Imports have been rewritten and re-ordered accordingly. An internal dependency to go-ipfs/repo has been removed by substituting it with the go-datastore.Batching interface. License: MIT Signed-off-by: Hector Sanjuan <hector@protocol.ai>
116 lines
2.6 KiB
Go
116 lines
2.6 KiB
Go
package namesys
|
|
|
|
import (
|
|
"context"
|
|
"crypto/rand"
|
|
"testing"
|
|
"time"
|
|
|
|
path "github.com/ipfs/go-ipfs/path"
|
|
|
|
ds "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
|
dssync "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore/sync"
|
|
testutil "gx/ipfs/QmVvkK7s5imCiq3JVbL3pGfnhcCnf3LrFJPF4GE2sAoGZf/go-testutil"
|
|
ma "gx/ipfs/QmWWQ2Txc2c6tqjsBpzg5Ar652cHPGNsQQp2SejkNmkUMb/go-multiaddr"
|
|
mockrouting "gx/ipfs/QmZRcGYvxdauCd7hHnMYLYqcZRaDjv24c7eUNyJojAcdBb/go-ipfs-routing/mock"
|
|
peer "gx/ipfs/QmZoWKhxUmZ2seW4BzX6fJkNR8hh9PsGModr7q171yq2SS/go-libp2p-peer"
|
|
ci "gx/ipfs/QmaPbCnUMBohSGo3KnxEa2bHqyJVVeEEcwtqJAYxerieBo/go-libp2p-crypto"
|
|
dshelp "gx/ipfs/QmdQTPWduSeyveSxeCAte33M592isSW5Z979g81aJphrgn/go-ipfs-ds-help"
|
|
)
|
|
|
|
type identity struct {
|
|
testutil.PeerNetParams
|
|
}
|
|
|
|
func (p *identity) ID() peer.ID {
|
|
return p.PeerNetParams.ID
|
|
}
|
|
|
|
func (p *identity) Address() ma.Multiaddr {
|
|
return p.Addr
|
|
}
|
|
|
|
func (p *identity) PrivateKey() ci.PrivKey {
|
|
return p.PrivKey
|
|
}
|
|
|
|
func (p *identity) PublicKey() ci.PubKey {
|
|
return p.PubKey
|
|
}
|
|
|
|
func testNamekeyPublisher(t *testing.T, keyType int, expectedErr error, expectedExistence bool) {
|
|
// Context
|
|
ctx := context.Background()
|
|
|
|
// Private key
|
|
privKey, pubKey, err := ci.GenerateKeyPairWithReader(keyType, 2048, rand.Reader)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// ID
|
|
var id peer.ID
|
|
switch keyType {
|
|
case ci.Ed25519:
|
|
id, err = peer.IDFromEd25519PublicKey(pubKey)
|
|
default:
|
|
id, err = peer.IDFromPublicKey(pubKey)
|
|
}
|
|
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Value
|
|
value := path.Path("ipfs/TESTING")
|
|
|
|
// Seqnum
|
|
seqnum := uint64(0)
|
|
|
|
// Eol
|
|
eol := time.Now().Add(24 * time.Hour)
|
|
|
|
// Routing value store
|
|
p := testutil.PeerNetParams{
|
|
ID: id,
|
|
PrivKey: privKey,
|
|
PubKey: pubKey,
|
|
Addr: testutil.ZeroLocalTCPAddress,
|
|
}
|
|
|
|
dstore := dssync.MutexWrap(ds.NewMapDatastore())
|
|
serv := mockrouting.NewServer()
|
|
r := serv.ClientWithDatastore(context.Background(), &identity{p}, dstore)
|
|
|
|
err = PutRecordToRouting(ctx, privKey, value, seqnum, eol, r, id)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Check for namekey existence in value store
|
|
namekey, _ := IpnsKeysForID(id)
|
|
_, err = r.GetValue(ctx, namekey)
|
|
if err != expectedErr {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Also check datastore for completeness
|
|
key := dshelp.NewKeyFromBinary([]byte(namekey))
|
|
exists, err := dstore.Has(key)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if exists != expectedExistence {
|
|
t.Fatal("Unexpected key existence in datastore")
|
|
}
|
|
}
|
|
|
|
func TestRSAPublisher(t *testing.T) {
|
|
testNamekeyPublisher(t, ci.RSA, nil, true)
|
|
}
|
|
|
|
func TestEd22519Publisher(t *testing.T) {
|
|
testNamekeyPublisher(t, ci.Ed25519, ds.ErrNotFound, false)
|
|
}
|