vspd/database/feexpub_test.go
jholdstock cab4058710 vspadmin: Add retirexpub command.
The new command opens an existing vspd database and replaces the
currently used xpub with a new one.
2024-06-27 09:20:32 +01:00

118 lines
3.2 KiB
Go

// Copyright (c) 2020-2024 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package database
import (
"testing"
)
func testFeeXPub(t *testing.T) {
// A newly created DB should store the fee xpub it was initialized with.
retrievedXPub, err := db.FeeXPub()
if err != nil {
t.Fatalf("error getting fee xpub: %v", err)
}
if retrievedXPub.Key != feeXPub {
t.Fatalf("expected fee xpub %v, got %v", feeXPub, retrievedXPub.Key)
}
// The ID, last used index and retirement timestamp should all be 0
if retrievedXPub.ID != 0 {
t.Fatalf("expected xpub ID 0, got %d", retrievedXPub.ID)
}
if retrievedXPub.LastUsedIdx != 0 {
t.Fatalf("expected xpub last used 0, got %d", retrievedXPub.LastUsedIdx)
}
if retrievedXPub.Retired != 0 {
t.Fatalf("expected xpub retirement 0, got %d", retrievedXPub.Retired)
}
// Update address index.
idx := uint32(99)
err = db.SetLastAddressIndex(idx)
if err != nil {
t.Fatalf("error setting address index: %v", err)
}
// Check for updated value.
retrievedXPub, err = db.FeeXPub()
if err != nil {
t.Fatalf("error getting fee xpub: %v", err)
}
if retrievedXPub.LastUsedIdx != idx {
t.Fatalf("expected xpub last used %d, got %d", idx, retrievedXPub.LastUsedIdx)
}
// Key, ID and retirement timestamp should be unchanged.
if retrievedXPub.Key != feeXPub {
t.Fatalf("expected fee xpub %v, got %v", feeXPub, retrievedXPub.Key)
}
if retrievedXPub.ID != 0 {
t.Fatalf("expected xpub ID 0, got %d", retrievedXPub.ID)
}
if retrievedXPub.Retired != 0 {
t.Fatalf("expected xpub retirement 0, got %d", retrievedXPub.Retired)
}
}
func testRetireFeeXPub(t *testing.T) {
// Increment the last used index to simulate some usage.
idx := uint32(99)
err := db.SetLastAddressIndex(idx)
if err != nil {
t.Fatalf("error setting address index: %v", err)
}
// Ensure a previously used xpub is rejected.
err = db.RetireXPub(feeXPub)
if err == nil {
t.Fatalf("previous xpub was not rejected")
}
const expectedErr = "provided xpub has already been used"
if err == nil || err.Error() != expectedErr {
t.Fatalf("incorrect error, expected %q, got %q",
expectedErr, err.Error())
}
// An unused xpub should be accepted.
const feeXPub2 = "feexpub2"
err = db.RetireXPub(feeXPub2)
if err != nil {
t.Fatalf("retiring xpub failed: %v", err)
}
// Retrieve the new xpub. Index should be incremented, last addr should be
// reset to 0, key should not be retired.
retrievedXPub, err := db.FeeXPub()
if err != nil {
t.Fatalf("error getting fee xpub: %v", err)
}
if retrievedXPub.Key != feeXPub2 {
t.Fatalf("expected fee xpub %q, got %q", feeXPub2, retrievedXPub.Key)
}
if retrievedXPub.ID != 1 {
t.Fatalf("expected xpub ID 1, got %d", retrievedXPub.ID)
}
if retrievedXPub.LastUsedIdx != 0 {
t.Fatalf("expected xpub last used 0, got %d", retrievedXPub.LastUsedIdx)
}
if retrievedXPub.Retired != 0 {
t.Fatalf("expected xpub retirement 0, got %d", retrievedXPub.Retired)
}
// Old xpub should have retired field set.
xpubs, err := db.AllXPubs()
if err != nil {
t.Fatalf("error getting all fee xpubs: %v", err)
}
if xpubs[0].Retired == 0 {
t.Fatalf("old xpub retired field not set")
}
}