Skip to content

Commit

Permalink
wallet - some tests against nutshell mint
Browse files Browse the repository at this point in the history
  • Loading branch information
elnosh committed Aug 16, 2024
1 parent 71bf544 commit 22dd85f
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 38 deletions.
6 changes: 4 additions & 2 deletions testutils/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"fmt"
"os"
"path/filepath"
"strconv"
"time"

"github.com/btcsuite/btcd/btcec/v2"
Expand Down Expand Up @@ -567,9 +568,9 @@ type NutshellMintContainer struct {
Host string
}

func CreateNutshellMintContainer(ctx context.Context) (*NutshellMintContainer, error) {
func CreateNutshellMintContainer(ctx context.Context, inputFeePpk int) (*NutshellMintContainer, error) {
req := testcontainers.ContainerRequest{
Image: "cashubtc/nutshell:0.15.3",
Image: "cashubtc/nutshell:0.16.0",
ExposedPorts: []string{"3338"},
Cmd: []string{
"poetry",
Expand All @@ -581,6 +582,7 @@ func CreateNutshellMintContainer(ctx context.Context) (*NutshellMintContainer, e
"MINT_LISTEN_PORT": "3338",
"MINT_BACKEND_BOLT11_SAT": "FakeWallet",
"MINT_PRIVATE_KEY": "secretkey",
"MINT_INPUT_FEE_PPK": strconv.Itoa(inputFeePpk),
},
WaitingFor: wait.ForListeningPort("3338"),
}
Expand Down
126 changes: 90 additions & 36 deletions wallet/wallet_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -630,41 +630,6 @@ func TestSendToPubkey(t *testing.T) {
testP2PK(t, testWallet, testWallet2, false)
}

func TestSendToPubkeyNutshell(t *testing.T) {
nutshellMint, err := testutils.CreateNutshellMintContainer(ctx)
if err != nil {
t.Fatalf("error starting nutshell mint: %v", err)
}
defer nutshellMint.Terminate(ctx)
nutshellURL := nutshellMint.Host

nutshellMint2, err := testutils.CreateNutshellMintContainer(ctx)
if err != nil {
t.Fatalf("error starting nutshell mint: %v", err)
}
defer nutshellMint2.Terminate(ctx)

testWalletPath := filepath.Join(".", "/testwalletp2pk")
testWallet, err := testutils.CreateTestWallet(testWalletPath, nutshellURL)
if err != nil {
t.Fatal(err)
}
defer func() {
os.RemoveAll(testWalletPath)
}()

testWalletPath2 := filepath.Join(".", "/testwalletp2pk2")
testWallet2, err := testutils.CreateTestWallet(testWalletPath2, nutshellMint2.Host)
if err != nil {
t.Fatal(err)
}
defer func() {
os.RemoveAll(testWalletPath2)
}()

testP2PK(t, testWallet, testWallet2, true)
}

func testP2PK(
t *testing.T,
testWallet *wallet.Wallet,
Expand Down Expand Up @@ -737,8 +702,97 @@ func testP2PK(
}
}

// TESTS AGAINST NUTSHELL MINT

// test regular wallet ops against Nutshell
func TestNutshell(t *testing.T) {
nutshellMint, err := testutils.CreateNutshellMintContainer(ctx, 100)
if err != nil {
t.Fatalf("error starting nutshell mint: %v", err)
}
defer nutshellMint.Terminate(ctx)
nutshellURL := nutshellMint.Host

// test mint with fees
testWalletPath := filepath.Join(".", "/nutshellWallet")
testWallet, err := testutils.CreateTestWallet(testWalletPath, nutshellURL)
if err != nil {
t.Fatal(err)
}
defer func() {
os.RemoveAll(testWalletPath)
}()

mintRes, err := testWallet.RequestMint(10000)
if err != nil {
t.Fatalf("unexpected error requesting mint: %v", err)
}

_, err = testWallet.MintTokens(mintRes.Quote)
if err != nil {
t.Fatalf("unexpected error minting tokens: %v", err)
}

var sendAmount uint64 = 2000
token, err := testWallet.Send(sendAmount, nutshellURL, true)
if err != nil {
t.Fatalf("got unexpected error: %v", err)
}

fees, _ := testutils.Fees(token.Token[0].Proofs, nutshellURL)
if token.TotalAmount() != sendAmount+uint64(fees) {
t.Fatalf("expected token amount of '%v' but got '%v' instead", sendAmount+uint64(fees), token.TotalAmount())
}

amountReceived, err := testWallet.Receive(*token, false)
if err != nil {
t.Fatalf("unexpected error receiving: %v", err)
}

fees, _ = testutils.Fees(token.Token[0].Proofs, nutshellURL)
if amountReceived != token.TotalAmount()-uint64(fees) {
t.Fatalf("expected received amount of '%v' but got '%v' instead", token.TotalAmount()-uint64(fees), amountReceived)
}

}

func TestSendToPubkeyNutshell(t *testing.T) {
nutshellMint, err := testutils.CreateNutshellMintContainer(ctx, 0)
if err != nil {
t.Fatalf("error starting nutshell mint: %v", err)
}
defer nutshellMint.Terminate(ctx)
nutshellURL := nutshellMint.Host

nutshellMint2, err := testutils.CreateNutshellMintContainer(ctx, 0)
if err != nil {
t.Fatalf("error starting nutshell mint: %v", err)
}
defer nutshellMint2.Terminate(ctx)

testWalletPath := filepath.Join(".", "/testwalletp2pk")
testWallet, err := testutils.CreateTestWallet(testWalletPath, nutshellURL)
if err != nil {
t.Fatal(err)
}
defer func() {
os.RemoveAll(testWalletPath)
}()

testWalletPath2 := filepath.Join(".", "/testwalletp2pk2")
testWallet2, err := testutils.CreateTestWallet(testWalletPath2, nutshellMint2.Host)
if err != nil {
t.Fatal(err)
}
defer func() {
os.RemoveAll(testWalletPath2)
}()

testP2PK(t, testWallet, testWallet2, true)
}

func TestWalletRestore(t *testing.T) {
nutshellMint, err := testutils.CreateNutshellMintContainer(ctx)
nutshellMint, err := testutils.CreateNutshellMintContainer(ctx, 0)
if err != nil {
t.Fatalf("error starting nutshell mint: %v", err)
}
Expand Down

0 comments on commit 22dd85f

Please sign in to comment.