Feature/study application memory #70
2
.github/workflows/generic-testing.yml
vendored
2
.github/workflows/generic-testing.yml
vendored
@ -66,7 +66,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
until $(docker compose -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-ipld-eth-beacon-indexer.yml" --env-file ./config.sh cp ipld-eth-beacon-indexer:/root/HEALTH ./HEALTH) ; do sleep 10; done
|
until $(docker compose -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-ipld-eth-beacon-indexer.yml" --env-file ./config.sh cp ipld-eth-beacon-indexer:/root/HEALTH ./HEALTH) ; do sleep 10; done
|
||||||
cat ./HEALTH
|
cat ./HEALTH
|
||||||
if [[ "$(cat ./HEALTH)" -eq "0" ]]; then echo "Application boot successful" && (exit 0); else docker compose -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-ipld-eth-beacon-indexer.yml" cp ipld-eth-beacon-indexer:/root/ipld-eth-beacon-indexer.log . && cat ipld-eth-beacon-indexer.log && (exit 1); fi
|
if [[ "$(cat ./HEALTH)" -eq "0" ]]; then echo "Application boot successful" && (exit 0); else docker compose -f "$GITHUB_WORKSPACE/stack-orchestrator/docker/local/docker-compose-ipld-eth-beacon-indexer.yml" --env-file ./config.sh cp ipld-eth-beacon-indexer:/root/ipld-eth-beacon-indexer.log . && cat ipld-eth-beacon-indexer.log && (exit 1); fi
|
||||||
|
|
||||||
unit-test:
|
unit-test:
|
||||||
name: Run Unit Tests
|
name: Run Unit Tests
|
||||||
|
@ -271,7 +271,11 @@ var _ = Describe("Capturehead", Label("head"), func() {
|
|||||||
defer httpmock.DeactivateAndReset()
|
defer httpmock.DeactivateAndReset()
|
||||||
bc := setUpTest(BeaconNodeTester.TestConfig, "99")
|
bc := setUpTest(BeaconNodeTester.TestConfig, "99")
|
||||||
|
|
||||||
BeaconNodeTester.testProcessBlock(bc, 3, maxRetry, 1, 0, 0, BeaconNodeTester.TestEvents["100"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 1, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["100"].HeadMessage,
|
||||||
|
expectedEpoch: 3,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
validateSignedBeaconBlock(bc, BeaconNodeTester.TestEvents["100"].HeadMessage, BeaconNodeTester.TestEvents["100"].CorrectParentRoot, BeaconNodeTester.TestEvents["100"].CorrectEth1BlockHash, BeaconNodeTester.TestEvents["100"].CorrectSignedBeaconBlockMhKey)
|
validateSignedBeaconBlock(bc, BeaconNodeTester.TestEvents["100"].HeadMessage, BeaconNodeTester.TestEvents["100"].CorrectParentRoot, BeaconNodeTester.TestEvents["100"].CorrectEth1BlockHash, BeaconNodeTester.TestEvents["100"].CorrectSignedBeaconBlockMhKey)
|
||||||
validateBeaconState(bc, BeaconNodeTester.TestEvents["100"].HeadMessage, BeaconNodeTester.TestEvents["100"].CorrectBeaconStateMhKey)
|
validateBeaconState(bc, BeaconNodeTester.TestEvents["100"].HeadMessage, BeaconNodeTester.TestEvents["100"].CorrectBeaconStateMhKey)
|
||||||
|
|
||||||
@ -284,7 +288,11 @@ var _ = Describe("Capturehead", Label("head"), func() {
|
|||||||
defer httpmock.DeactivateAndReset()
|
defer httpmock.DeactivateAndReset()
|
||||||
|
|
||||||
bc := setUpTest(BeaconNodeTester.TestConfig, "2375702")
|
bc := setUpTest(BeaconNodeTester.TestConfig, "2375702")
|
||||||
BeaconNodeTester.testProcessBlock(bc, 74240, maxRetry, 1, 0, 0, BeaconNodeTester.TestEvents["2375703"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 1, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["2375703"].HeadMessage,
|
||||||
|
expectedEpoch: 74240,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
validateSignedBeaconBlock(bc, BeaconNodeTester.TestEvents["2375703"].HeadMessage, BeaconNodeTester.TestEvents["2375703"].CorrectParentRoot, BeaconNodeTester.TestEvents["2375703"].CorrectEth1BlockHash, BeaconNodeTester.TestEvents["2375703"].CorrectSignedBeaconBlockMhKey)
|
validateSignedBeaconBlock(bc, BeaconNodeTester.TestEvents["2375703"].HeadMessage, BeaconNodeTester.TestEvents["2375703"].CorrectParentRoot, BeaconNodeTester.TestEvents["2375703"].CorrectEth1BlockHash, BeaconNodeTester.TestEvents["2375703"].CorrectSignedBeaconBlockMhKey)
|
||||||
validateBeaconState(bc, BeaconNodeTester.TestEvents["2375703"].HeadMessage, BeaconNodeTester.TestEvents["2375703"].CorrectBeaconStateMhKey)
|
validateBeaconState(bc, BeaconNodeTester.TestEvents["2375703"].HeadMessage, BeaconNodeTester.TestEvents["2375703"].CorrectBeaconStateMhKey)
|
||||||
})
|
})
|
||||||
@ -295,10 +303,18 @@ var _ = Describe("Capturehead", Label("head"), func() {
|
|||||||
defer httpmock.DeactivateAndReset()
|
defer httpmock.DeactivateAndReset()
|
||||||
|
|
||||||
bc := setUpTest(BeaconNodeTester.TestConfig, "2375702")
|
bc := setUpTest(BeaconNodeTester.TestConfig, "2375702")
|
||||||
BeaconNodeTester.testProcessBlock(bc, 74240, maxRetry, 1, 0, 0, BeaconNodeTester.TestEvents["2375703-dummy"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 1, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["2375703-dummy"].HeadMessage,
|
||||||
|
expectedEpoch: 74240,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
bc = setUpTest(BeaconNodeTester.TestConfig, "2375702")
|
bc = setUpTest(BeaconNodeTester.TestConfig, "2375702")
|
||||||
BeaconNodeTester.testProcessBlock(bc, 74240, maxRetry, 1, 0, 0, BeaconNodeTester.TestEvents["2375703-dummy-2"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 1, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["2375703-dummy-2"].HeadMessage,
|
||||||
|
expectedEpoch: 74240,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -308,10 +324,18 @@ var _ = Describe("Capturehead", Label("head"), func() {
|
|||||||
defer httpmock.DeactivateAndReset()
|
defer httpmock.DeactivateAndReset()
|
||||||
|
|
||||||
bc := setUpTest(BeaconNodeTester.TestConfig, "99")
|
bc := setUpTest(BeaconNodeTester.TestConfig, "99")
|
||||||
BeaconNodeTester.testProcessBlock(bc, 3, maxRetry, 1, 0, 0, BeaconNodeTester.TestEvents["100-dummy"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 1, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["100-dummy"].HeadMessage,
|
||||||
|
expectedEpoch: 3,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
bc = setUpTest(BeaconNodeTester.TestConfig, "99")
|
bc = setUpTest(BeaconNodeTester.TestConfig, "99")
|
||||||
BeaconNodeTester.testProcessBlock(bc, 3, maxRetry, 1, 0, 0, BeaconNodeTester.TestEvents["100-dummy-2"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 1, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["100-dummy-2"].HeadMessage,
|
||||||
|
expectedEpoch: 3,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
//bc = setUpTest(BeaconNodeTester.TestConfig, "99")
|
//bc = setUpTest(BeaconNodeTester.TestConfig, "99")
|
||||||
//BeaconNodeTester.SetupBeaconNodeMock(BeaconNodeTester.TestEvents, BeaconNodeTester.TestConfig.protocol, BeaconNodeTester.TestConfig.address, BeaconNodeTester.TestConfig.port, BeaconNodeTester.TestConfig.dummyParentRoot)
|
//BeaconNodeTester.SetupBeaconNodeMock(BeaconNodeTester.TestEvents, BeaconNodeTester.TestConfig.protocol, BeaconNodeTester.TestConfig.address, BeaconNodeTester.TestConfig.port, BeaconNodeTester.TestConfig.dummyParentRoot)
|
||||||
@ -327,17 +351,35 @@ var _ = Describe("Capturehead", Label("head"), func() {
|
|||||||
defer httpmock.DeactivateAndReset()
|
defer httpmock.DeactivateAndReset()
|
||||||
|
|
||||||
bc := setUpTest(BeaconNodeTester.TestConfig, "99")
|
bc := setUpTest(BeaconNodeTester.TestConfig, "99")
|
||||||
BeaconNodeTester.testProcessBlock(bc, 3, maxRetry, 2, 0, 0, BeaconNodeTester.TestEvents["100"].HeadMessage, BeaconNodeTester.TestEvents["101"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 2, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["100"].HeadMessage,
|
||||||
|
expectedEpoch: 3,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
}, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["101"].HeadMessage,
|
||||||
|
expectedEpoch: 3,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
Context("Two consecutive blocks with a bad parent", func() {
|
Context("Two consecutive blocks with a bad parent", Label("bad-parent"), func() {
|
||||||
It("Should add the previous block to the knownGaps table.", func() {
|
It("Should add the previous block to the knownGaps table.", func() {
|
||||||
BeaconNodeTester.SetupBeaconNodeMock(BeaconNodeTester.TestEvents, BeaconNodeTester.TestConfig.protocol, BeaconNodeTester.TestConfig.address, BeaconNodeTester.TestConfig.port, BeaconNodeTester.TestConfig.dummyParentRoot)
|
BeaconNodeTester.SetupBeaconNodeMock(BeaconNodeTester.TestEvents, BeaconNodeTester.TestConfig.protocol, BeaconNodeTester.TestConfig.address, BeaconNodeTester.TestConfig.port, BeaconNodeTester.TestConfig.dummyParentRoot)
|
||||||
defer httpmock.DeactivateAndReset()
|
defer httpmock.DeactivateAndReset()
|
||||||
|
|
||||||
bc := setUpTest(BeaconNodeTester.TestConfig, "99")
|
bc := setUpTest(BeaconNodeTester.TestConfig, "99")
|
||||||
BeaconNodeTester.testProcessBlock(bc, 3, maxRetry, 2, 1, 1, BeaconNodeTester.TestEvents["100-dummy"].HeadMessage, BeaconNodeTester.TestEvents["101"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 2, 1, 1,
|
||||||
|
headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["100-dummy"].HeadMessage,
|
||||||
|
expectedEpoch: 3,
|
||||||
|
expectStatus: "forked",
|
||||||
|
},
|
||||||
|
headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["101"].HeadMessage,
|
||||||
|
expectedEpoch: 3,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -362,7 +404,11 @@ var _ = Describe("Capturehead", Label("head"), func() {
|
|||||||
defer httpmock.DeactivateAndReset()
|
defer httpmock.DeactivateAndReset()
|
||||||
|
|
||||||
bc := setUpTest(BeaconNodeTester.TestConfig, "101")
|
bc := setUpTest(BeaconNodeTester.TestConfig, "101")
|
||||||
BeaconNodeTester.testProcessBlock(bc, 3, maxRetry, 0, 1, 0, BeaconNodeTester.TestEvents["102-wrong-ssz-1"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 0, 1, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["102-wrong-ssz-1"].HeadMessage,
|
||||||
|
expectedEpoch: 3,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
knownGapCount := countKnownGapsTable(bc.Db)
|
knownGapCount := countKnownGapsTable(bc.Db)
|
||||||
Expect(knownGapCount).To(Equal(1))
|
Expect(knownGapCount).To(Equal(1))
|
||||||
@ -921,13 +967,17 @@ func (tbc TestBeaconNode) testMultipleReorgs(bc *beaconclient.BeaconClient, firs
|
|||||||
}
|
}
|
||||||
|
|
||||||
// A test to validate a single block was processed correctly
|
// A test to validate a single block was processed correctly
|
||||||
func (tbc TestBeaconNode) testProcessBlock(bc *beaconclient.BeaconClient, epoch int, maxRetry int, expectedSuccessInsert uint64, expectedKnownGaps uint64, expectedReorgs uint64, head ...beaconclient.Head) {
|
func (tbc TestBeaconNode) testProcessBlock(bc *beaconclient.BeaconClient, maxRetry int, expectedSuccessInsert uint64, expectedKnownGaps uint64, expectedReorgs uint64, head ...headBlocksSent) {
|
||||||
//pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
|
//pprof.Lookup("goroutine").WriteTo(os.Stdout, 1)
|
||||||
startGoRoutines := runtime.NumGoroutine()
|
startGoRoutines := runtime.NumGoroutine()
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
go bc.CaptureHead(ctx, 2, true)
|
go bc.CaptureHead(ctx, 2, true)
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
sendHeadMessage(bc, maxRetry, expectedSuccessInsert, head...)
|
heads := make([]beaconclient.Head, 0)
|
||||||
|
for _, msgs := range head {
|
||||||
|
heads = append(heads, msgs.head)
|
||||||
|
}
|
||||||
|
sendHeadMessage(bc, maxRetry, expectedSuccessInsert, heads...)
|
||||||
|
|
||||||
curRetry := 0
|
curRetry := 0
|
||||||
for atomic.LoadUint64(&bc.Metrics.KnownGapsInserts) != expectedKnownGaps {
|
for atomic.LoadUint64(&bc.Metrics.KnownGapsInserts) != expectedKnownGaps {
|
||||||
@ -949,7 +999,7 @@ func (tbc TestBeaconNode) testProcessBlock(bc *beaconclient.BeaconClient, epoch
|
|||||||
|
|
||||||
if expectedSuccessInsert > 0 {
|
if expectedSuccessInsert > 0 {
|
||||||
for _, msg := range head {
|
for _, msg := range head {
|
||||||
validateSlot(bc, msg, epoch, "proposed")
|
validateSlot(bc, msg.head, msg.expectedEpoch, msg.expectStatus)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cancel()
|
cancel()
|
||||||
@ -1046,3 +1096,9 @@ func testStopHeadTracking(ctx context.Context, bc *beaconclient.BeaconClient, st
|
|||||||
//Expect(endNum <= startGoRoutines).To(BeTrue())
|
//Expect(endNum <= startGoRoutines).To(BeTrue())
|
||||||
Expect(endNum).To(Equal(startGoRoutines))
|
Expect(endNum).To(Equal(startGoRoutines))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type headBlocksSent struct {
|
||||||
|
head beaconclient.Head
|
||||||
|
expectedEpoch int
|
||||||
|
expectStatus string
|
||||||
|
}
|
||||||
|
@ -118,7 +118,11 @@ var _ = Describe("Capturehistoric", func() {
|
|||||||
|
|
||||||
bc := setUpTest(BeaconNodeTester.TestConfig, "2375702")
|
bc := setUpTest(BeaconNodeTester.TestConfig, "2375702")
|
||||||
// Head
|
// Head
|
||||||
BeaconNodeTester.testProcessBlock(bc, 74240, maxRetry, 1, 0, 0, BeaconNodeTester.TestEvents["2375703"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 1, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["2375703"].HeadMessage,
|
||||||
|
expectedEpoch: 74240,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
// Historical
|
// Historical
|
||||||
BeaconNodeTester.writeEventToHistoricProcess(bc, 100, 100, 10)
|
BeaconNodeTester.writeEventToHistoricProcess(bc, 100, 100, 10)
|
||||||
@ -144,7 +148,11 @@ var _ = Describe("Capturehistoric", func() {
|
|||||||
BeaconNodeTester.runHistoricalProcess(bc, 2, 1, 0, 0, 0)
|
BeaconNodeTester.runHistoricalProcess(bc, 2, 1, 0, 0, 0)
|
||||||
|
|
||||||
// Head
|
// Head
|
||||||
BeaconNodeTester.testProcessBlock(bc, 74240, maxRetry, 1, 0, 0, BeaconNodeTester.TestEvents["2375703"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 1, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["2375703"].HeadMessage,
|
||||||
|
expectedEpoch: 74240,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
// Known Gaps
|
// Known Gaps
|
||||||
BeaconNodeTester.writeEventToKnownGaps(bc, 101, 101)
|
BeaconNodeTester.writeEventToKnownGaps(bc, 101, 101)
|
||||||
@ -169,7 +177,11 @@ var _ = Describe("Capturehistoric", func() {
|
|||||||
BeaconNodeTester.runHistoricalProcess(bc, 2, 2, 0, 0, 0)
|
BeaconNodeTester.runHistoricalProcess(bc, 2, 2, 0, 0, 0)
|
||||||
|
|
||||||
// Head
|
// Head
|
||||||
BeaconNodeTester.testProcessBlock(bc, 74240, maxRetry, 1, 0, 0, BeaconNodeTester.TestEvents["2375703"].HeadMessage)
|
BeaconNodeTester.testProcessBlock(bc, maxRetry, 1, 0, 0, headBlocksSent{
|
||||||
|
head: BeaconNodeTester.TestEvents["2375703"].HeadMessage,
|
||||||
|
expectedEpoch: 74240,
|
||||||
|
expectStatus: "proposed",
|
||||||
|
})
|
||||||
|
|
||||||
time.Sleep(2 * time.Second)
|
time.Sleep(2 * time.Second)
|
||||||
validatePopularBatchBlocks(bc)
|
validatePopularBatchBlocks(bc)
|
||||||
|
Loading…
Reference in New Issue
Block a user