itest: split tests into dynamic tranches
This commit is contained in:
parent
891eb0d63d
commit
9bbf134237
@ -6,6 +6,7 @@ import (
|
|||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -53,6 +54,60 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// defaultSplitTranches is the default number of tranches we split the
|
||||||
|
// test cases into.
|
||||||
|
defaultSplitTranches uint = 1
|
||||||
|
|
||||||
|
// defaultRunTranche is the default index of the test cases tranche that
|
||||||
|
// we run.
|
||||||
|
defaultRunTranche uint = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// testCasesSplitParts is the number of tranches the test cases should
|
||||||
|
// be split into. By default this is set to 1, so no splitting happens.
|
||||||
|
// If this value is increased, then the -runtranche flag must be
|
||||||
|
// specified as well to indicate which part should be run in the current
|
||||||
|
// invocation.
|
||||||
|
testCasesSplitTranches = flag.Uint(
|
||||||
|
"splittranches", defaultSplitTranches, "split the test cases "+
|
||||||
|
"in this many tranches and run the tranche at "+
|
||||||
|
"0-based index specified by the -runtranche flag",
|
||||||
|
)
|
||||||
|
|
||||||
|
// testCasesRunTranche is the 0-based index of the split test cases
|
||||||
|
// tranche to run in the current invocation.
|
||||||
|
testCasesRunTranche = flag.Uint(
|
||||||
|
"runtranche", defaultRunTranche, "run the tranche of the "+
|
||||||
|
"split test cases with the given (0-based) index",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
// getTestCaseSplitTranche returns the sub slice of the test cases that should
|
||||||
|
// be run as the current split tranche as well as the index and slice offset of
|
||||||
|
// the tranche.
|
||||||
|
func getTestCaseSplitTranche() ([]*testCase, uint, uint) {
|
||||||
|
numTranches := defaultSplitTranches
|
||||||
|
if testCasesSplitTranches != nil {
|
||||||
|
numTranches = *testCasesSplitTranches
|
||||||
|
}
|
||||||
|
runTranche := defaultRunTranche
|
||||||
|
if testCasesRunTranche != nil {
|
||||||
|
runTranche = *testCasesRunTranche
|
||||||
|
}
|
||||||
|
|
||||||
|
numCases := uint(len(allTestCases))
|
||||||
|
testsPerTranche := numCases / numTranches
|
||||||
|
trancheOffset := runTranche * testsPerTranche
|
||||||
|
trancheEnd := trancheOffset + testsPerTranche
|
||||||
|
if trancheEnd > numCases || runTranche == numTranches-1 {
|
||||||
|
trancheEnd = numCases
|
||||||
|
}
|
||||||
|
|
||||||
|
return allTestCases[trancheOffset:trancheEnd], runTranche, trancheOffset
|
||||||
|
}
|
||||||
|
|
||||||
func rpcPointToWirePoint(t *harnessTest, chanPoint *lnrpc.ChannelPoint) wire.OutPoint {
|
func rpcPointToWirePoint(t *harnessTest, chanPoint *lnrpc.ChannelPoint) wire.OutPoint {
|
||||||
txid, err := lnd.GetChanPointFundingTxid(chanPoint)
|
txid, err := lnd.GetChanPointFundingTxid(chanPoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -14098,10 +14153,14 @@ func getPaymentResult(stream routerrpc.Router_SendPaymentV2Client) (
|
|||||||
// programmatically driven network of lnd nodes.
|
// programmatically driven network of lnd nodes.
|
||||||
func TestLightningNetworkDaemon(t *testing.T) {
|
func TestLightningNetworkDaemon(t *testing.T) {
|
||||||
// If no tests are registered, then we can exit early.
|
// If no tests are registered, then we can exit early.
|
||||||
if len(testsCases) == 0 {
|
if len(allTestCases) == 0 {
|
||||||
t.Skip("integration tests not selected with flag 'rpctest'")
|
t.Skip("integration tests not selected with flag 'rpctest'")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Parse testing flags that influence our test execution.
|
||||||
|
testCases, trancheIndex, trancheOffset := getTestCaseSplitTranche()
|
||||||
|
lntest.ApplyPortOffset(uint32(trancheIndex) * 1000)
|
||||||
|
|
||||||
ht := newHarnessTest(t, nil)
|
ht := newHarnessTest(t, nil)
|
||||||
|
|
||||||
// Declare the network harness here to gain access to its
|
// Declare the network harness here to gain access to its
|
||||||
@ -14149,8 +14208,7 @@ func TestLightningNetworkDaemon(t *testing.T) {
|
|||||||
|
|
||||||
// Connect chainbackend to miner.
|
// Connect chainbackend to miner.
|
||||||
require.NoError(
|
require.NoError(
|
||||||
t, chainBackend.ConnectMiner(),
|
t, chainBackend.ConnectMiner(), "failed to connect to miner",
|
||||||
"failed to connect to miner",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
binary := itestLndBinary
|
binary := itestLndBinary
|
||||||
@ -14187,7 +14245,8 @@ func TestLightningNetworkDaemon(t *testing.T) {
|
|||||||
if !more {
|
if !more {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ht.Logf("lnd finished with error (stderr):\n%v", err)
|
ht.Logf("lnd finished with error (stderr):\n%v",
|
||||||
|
err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@ -14210,8 +14269,9 @@ func TestLightningNetworkDaemon(t *testing.T) {
|
|||||||
ht.Fatalf("unable to set up test lightning network: %v", err)
|
ht.Fatalf("unable to set up test lightning network: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Logf("Running %v integration tests", len(testsCases))
|
// Run the subset of the test cases selected in this tranche.
|
||||||
for _, testCase := range testsCases {
|
for idx, testCase := range testCases {
|
||||||
|
testCase := testCase
|
||||||
logLine := fmt.Sprintf("STARTING ============ %v ============\n",
|
logLine := fmt.Sprintf("STARTING ============ %v ============\n",
|
||||||
testCase.name)
|
testCase.name)
|
||||||
|
|
||||||
@ -14232,7 +14292,10 @@ func TestLightningNetworkDaemon(t *testing.T) {
|
|||||||
// Start every test with the default static fee estimate.
|
// Start every test with the default static fee estimate.
|
||||||
lndHarness.SetFeeEstimate(12500)
|
lndHarness.SetFeeEstimate(12500)
|
||||||
|
|
||||||
success := t.Run(testCase.name, func(t1 *testing.T) {
|
name := fmt.Sprintf("%02d-of-%d/%s/%s",
|
||||||
|
trancheOffset+uint(idx)+1, len(allTestCases),
|
||||||
|
chainBackend.Name(), testCase.name)
|
||||||
|
success := t.Run(name, func(t1 *testing.T) {
|
||||||
ht := newHarnessTest(t1, lndHarness)
|
ht := newHarnessTest(t1, lndHarness)
|
||||||
ht.RunTestCase(testCase)
|
ht.RunTestCase(testCase)
|
||||||
})
|
})
|
||||||
@ -14242,8 +14305,9 @@ func TestLightningNetworkDaemon(t *testing.T) {
|
|||||||
if !success {
|
if !success {
|
||||||
// Log failure time to help relate the lnd logs to the
|
// Log failure time to help relate the lnd logs to the
|
||||||
// failure.
|
// failure.
|
||||||
t.Logf("Failure time: %v",
|
t.Logf("Failure time: %v", time.Now().Format(
|
||||||
time.Now().Format("2006-01-02 15:04:05.000"))
|
"2006-01-02 15:04:05.000",
|
||||||
|
))
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
package itest
|
package itest
|
||||||
|
|
||||||
var testsCases = []*testCase{}
|
var allTestCases = []*testCase{}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
package itest
|
package itest
|
||||||
|
|
||||||
var testsCases = []*testCase{
|
var allTestCases = []*testCase{
|
||||||
{
|
{
|
||||||
name: "sweep coins",
|
name: "sweep coins",
|
||||||
test: testSweepAllCoins,
|
test: testSweepAllCoins,
|
||||||
|
Loading…
Reference in New Issue
Block a user