package namesys import ( "context" "crypto/rand" "testing" "time" ci "gx/ipfs/QmTW4SdgBWq9GjsBsHeUx8WuGxzhgzAf88UMH2w62PC8yK/go-libp2p-crypto" ma "gx/ipfs/QmTZBfrPJmjWsCvHEtX5FE6KimVJhsJg5sBbqEFYf4UZtL/go-multiaddr" 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" dshelp "gx/ipfs/QmXSEqXLCzpCByJU4wqbJ37TcBEj77FKMUWUP1qLh56847/go-ipfs-ds-help" peer "gx/ipfs/QmYVXrKrKHDC9FobgmcmshCDyWwdrfwfanNQN4oxJ9Fk3h/go-libp2p-peer" mockrouting "gx/ipfs/QmZ22s3UgNi5vvYNH79jWJ63NPyQGiv4mdNaWCz4WKqMTZ/go-ipfs-routing/mock" ) 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 id, err := peer.IDFromPublicKey(pubKey) if err != nil { t.Fatal(err) } // Value value := []byte("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) entry, err := ipns.Create(privKey, value, seqnum, eol) if err != nil { t.Fatal(err) } err = PutRecordToRouting(ctx, r, pubKey, entry) if err != nil { t.Fatal(err) } // Check for namekey existence in value store namekey := PkKeyForID(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) }