Ctrl K
ComunidadGuías…

internal/app/wallet/intake_regression_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package wallet

import (
	"bytes"
	"context"
	"errors"
	"path/filepath"
	"telesrv/internal/domain"
	"testing"
	"time"
)

func TestTransactionsRequiresHistorySource(t *testing.T) {
	s := &Service{}
	_, err := s.Transactions(context.Background(), 42, domain.StarsTransactionQuery{})
	if !errors.Is(err, ErrProviderUnavailable) {
		t.Fatalf("missing transaction source = %v", err)
	}
}

func TestWalletCreationReplayDoesNotAcceptImportChallenge(t *testing.T) {
	dir := t.TempDir()
	store, err := NewFileStore(filepath.Join(dir, "wallet"))
	if err != nil {
		t.Fatal(err)
	}
	defer store.Close()
	keys, err := LoadOrCreateKeyCipher(filepath.Join(dir, "keys.key"))
	if err != nil {
		t.Fatal(err)
	}
	service := NewService(store, nil, "wallet.test", WithBalanceSource(&stubBalance{}), WithKeyCipher(keys))
	if _, _, err = bindImportedWallet(t, service); err != nil {
		t.Fatal(err)
	}
	if _, _, err = service.Create(context.Background(), 42, [8]byte{1}, false); !errors.Is(err, domain.ErrWalletProofInvalid) {
		t.Fatalf("import challenge replay as create = %v", err)
	}
}
func TestWalletCustodyKeyRestartAndImportReplacement(t *testing.T) {
	dir := t.TempDir()
	store, err := NewFileStore(filepath.Join(dir, "wallet"))
	if err != nil {
		t.Fatal(err)
	}
	defer store.Close()
	keys, err := LoadOrCreateKeyCipher(filepath.Join(dir, "keys.key"))
	if err != nil {
		t.Fatal(err)
	}
	service := NewService(store, nil, "wallet.test", WithBalanceSource(&stubBalance{}), WithKeyCipher(keys))
	ctx := context.Background()
	key := [8]byte{1}
	if _, err = service.GetProofChallenge(ctx, 42, key); err != nil {
		t.Fatal(err)
	}
	if _, _, err = service.Create(ctx, 42, key, false); err != nil {
		t.Fatal(err)
	}
	if err = store.ValidateKeyCipher(keys); err != nil {
		t.Fatal(err)
	}
	other, err := newKeyCipher(bytes.Repeat([]byte{8}, 32))
	if err != nil {
		t.Fatal(err)
	}
	if err = store.ValidateKeyCipher(other); !errors.Is(err, ErrWalletKeyFile) {
		t.Fatalf("wrong master key = %v", err)
	}
	c, err := service.GetProofChallenge(ctx, 42, key)
	if err != nil {
		t.Fatal(err)
	}
	imported := domain.WalletLink{UserID: 42, Address: "imported", PublicKey: bytes.Repeat([]byte{9}, 32)}
	if err = store.CommitWalletLink(ctx, c, imported, [32]byte{1}, true, time.Now()); err != nil {
		t.Fatal(err)
	}
	record, err := store.read(42)
	if err != nil {
		t.Fatal(err)
	}
	if record.Key != nil {
		t.Fatal("import kept an unrelated custody key")
	}
}