From 590d898ba0fdbc2f1c4b27a94d434ce7ec2a3207 Mon Sep 17 00:00:00 2001 From: Carla Kirk-Cohen Date: Wed, 12 Jul 2023 15:55:46 -0400 Subject: [PATCH] invoices/test: fix data race in TestMppPaymentWithOverpayment Details of race: - A global testInvoice is used in various invoice related tests. - All tests are running with t.Parallel. - TestMppPaymentWithOverpayment passes a reference to the testInvoice to AddInvoice which writes the AddIndex. - TestMultipleSetHeightExpiry reads the testInvoice to make a copy. --- invoices/invoiceregistry_test.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/invoices/invoiceregistry_test.go b/invoices/invoiceregistry_test.go index 586ceb240..1edd753cd 100644 --- a/invoices/invoiceregistry_test.go +++ b/invoices/invoiceregistry_test.go @@ -936,8 +936,9 @@ func TestMppPaymentWithOverpayment(t *testing.T) { ctx := newTestContext(t, nil) // Add the invoice. + invoice := *testInvoice _, err := ctx.registry.AddInvoice( - testInvoice, testInvoicePaymentHash, + &invoice, testInvoicePaymentHash, ) if err != nil { t.Fatal(err) @@ -953,7 +954,7 @@ func TestMppPaymentWithOverpayment(t *testing.T) { // Send htlc 1. hodlChan1 := make(chan interface{}, 1) resolution, err := ctx.registry.NotifyExitHopHtlc( - testInvoicePaymentHash, testInvoice.Terms.Value/2, + testInvoicePaymentHash, invoice.Terms.Value/2, testHtlcExpiry, testCurrentHeight, getCircuitKey(11), hodlChan1, mppPayload, ) @@ -968,7 +969,7 @@ func TestMppPaymentWithOverpayment(t *testing.T) { hodlChan2 := make(chan interface{}, 1) resolution, err = ctx.registry.NotifyExitHopHtlc( testInvoicePaymentHash, - testInvoice.Terms.Value/2+overpayment, testHtlcExpiry, + invoice.Terms.Value/2+overpayment, testHtlcExpiry, testCurrentHeight, getCircuitKey(12), hodlChan2, mppPayload, ) @@ -996,7 +997,7 @@ func TestMppPaymentWithOverpayment(t *testing.T) { t.Fatal("expected invoice to be settled") } - return inv.AmtPaid == testInvoice.Terms.Value+overpayment + return inv.AmtPaid == invoice.Terms.Value+overpayment } if err := quick.Check(f, nil); err != nil { t.Fatalf("amount incorrect: %v", err)