Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

testing(dot/sync): create dot sync unit tests #2261

Merged
merged 89 commits into from
Jun 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
ba782c5
move tests to integeration files / delete empty files
edwardmack Jan 4, 2022
a54cce2
add build integration tag, lint and address PR comments
edwardmack Feb 7, 2022
0df5b1c
address PR comments
edwardmack Mar 11, 2022
ac13dbf
address PR comments, revert code
edwardmack Mar 14, 2022
5b0946d
fix TestDisjointBlockSet test
edwardmack Mar 14, 2022
3d18caa
address PR comments
edwardmack May 4, 2022
fcb573f
move tests to integeration files
edwardmack Nov 16, 2021
cfb6c02
add build integration tag
edwardmack Dec 13, 2021
a1596ed
fix lint issues
edwardmack Dec 16, 2021
11e1d4d
move tests to integeration files
edwardmack Nov 16, 2021
524eb9f
generate unit test stubs
edwardmack Nov 16, 2021
1f1e4d8
add syncer test new service
edwardmack Nov 16, 2021
b527baa
wip
edwardmack Nov 17, 2021
e09afbd
implement TestNewService tests
edwardmack Dec 15, 2021
23a40bf
implement TestService_HandleBlockAnnounce tests
edwardmack Dec 15, 2021
2aea636
implement TestService_HandleBlockAnnounceHandshake tests
edwardmack Dec 15, 2021
cfc2380
implement TestService_IsSynced tests
edwardmack Dec 15, 2021
79bd3ab
add TestService stop/start tests
edwardmack Dec 16, 2021
f15fd65
implement test_bootstrapSyncer_handleNewPeerState
edwardmack Jan 6, 2022
8138f4d
implement bootstrap_syncer unit tests
edwardmack Jan 6, 2022
6a2f9b2
implement test_chainProcessor_handleBlock test
edwardmack Jan 6, 2022
9d47d09
implement chain_processor tests
edwardmack Jan 7, 2022
a6b6088
implement processBlockData tests
edwardmack Jan 18, 2022
6865048
implement chain_processor tests
edwardmack Jan 18, 2022
2aa0fe9
add to tests
edwardmack Jan 18, 2022
4dead5d
trying to fix failing tests
edwardmack Jan 20, 2022
f83c9e6
implement chain_sync_tests
edwardmack Jan 26, 2022
b821563
implement disjoint_block_set tests
edwardmack Jan 28, 2022
bf9d113
implement messages tests
edwardmack Jan 31, 2022
37bdc0b
implement tip syncer tests
edwardmack Feb 1, 2022
f50cda5
fix compilation errors, and tests
edwardmack Feb 2, 2022
40947f4
fix lint issues
edwardmack Feb 2, 2022
f17c139
fix merge conflicts
edwardmack Feb 2, 2022
c075b8b
lint issues
edwardmack Feb 2, 2022
763e6da
address PR comments
edwardmack Feb 2, 2022
f08fba9
rebase, fix conflicts
edwardmack Feb 4, 2022
767f0d9
remove remaining big.NewInt references
edwardmack Mar 15, 2022
e9436f8
refactor mock usage
edwardmack Mar 16, 2022
3dc2713
fix TestChainSync_SetPeerHead mocks
edwardmack Mar 16, 2022
18eb560
fix duplicated mocks
edwardmack Mar 16, 2022
fc15cf3
reploce big.Int with uint
edwardmack Apr 6, 2022
18cbd80
Add to unit tests
edwardmack Apr 6, 2022
1589d38
remove un-needed files
edwardmack Apr 7, 2022
fc77a8f
add to unit tests
edwardmack Apr 7, 2022
eaa1193
Add to unit tests
edwardmack Apr 8, 2022
6060628
Add to unit tests
edwardmack Apr 8, 2022
02d2df6
fix lint issues
edwardmack Apr 8, 2022
a637f3d
Fix mocks expect in tests
edwardmack Apr 11, 2022
b96f3cc
fix integration tests
edwardmack Apr 11, 2022
6bbd192
address PR comments
edwardmack Apr 14, 2022
d32e1a9
WIP - save commit
edwardmack Apr 15, 2022
691fa63
WIP - save commit
edwardmack Apr 15, 2022
68d4544
address PR comments
edwardmack Apr 16, 2022
1e3109b
address PR comments
edwardmack Apr 25, 2022
92d7be1
refactor test helper newTestChainSync
edwardmack Apr 26, 2022
da18726
fix linter complaints re tparallel
edwardmack Apr 26, 2022
0706595
add nolint to address copylocks complaints
edwardmack Apr 26, 2022
23cc9a6
update test to use blockStateBuilder functions
edwardmack Apr 26, 2022
89f9d61
fix integration tests mocks issue
edwardmack Apr 26, 2022
a10b87f
Address PR comments
edwardmack May 2, 2022
9d7349f
address PR comments
edwardmack May 4, 2022
07b7a6e
address PR comments
edwardmack May 5, 2022
0f67d1f
fix linter issues
edwardmack May 5, 2022
6d079bd
lint
edwardmack May 9, 2022
2085ccc
address PR comments
edwardmack May 17, 2022
a2e5811
address lint issues
edwardmack May 17, 2022
4b579d1
fix testing errors
edwardmack May 20, 2022
fca4b4e
add to chainProcessor handleBlock tests
edwardmack May 20, 2022
8ab179d
improve chain processor tests
edwardmack May 23, 2022
f9121d2
fix tests, address comments
edwardmack May 24, 2022
2bc5b97
WIP - save commit
edwardmack Jun 2, 2022
d0cd59f
save commit - WIP - address comments
edwardmack Jun 2, 2022
6042314
address PR comments
edwardmack Jun 3, 2022
be4ed81
add todo comment to fix time.Sleep
edwardmack Jun 3, 2022
d0c9f48
removed sleep timers in tests
edwardmack Jun 6, 2022
8cb0f3d
address PR comments
edwardmack Jun 7, 2022
f8da8f9
fix merge conflicts,
edwardmack Jun 7, 2022
f166f6e
revert polkadotjs test to match package.json version
edwardmack Jun 7, 2022
52c79d8
testing hash for test
edwardmack Jun 8, 2022
dc90c59
test stuff
edwardmack Jun 8, 2022
0313356
add to test coverage
edwardmack Jun 8, 2022
cfb3b53
address PR comments
edwardmack Jun 9, 2022
2d56af6
address PR comments
edwardmack Jun 10, 2022
363c53e
Rework `Test_chainSync_setPeerHead`
qdm12 Jun 10, 2022
2f64578
Fix controller usage in subtests
qdm12 Jun 10, 2022
66fb539
Fix Service Start to not launch goroutines
qdm12 Jun 10, 2022
fcd5eac
remove unused functions
edwardmack Jun 10, 2022
0deee97
start s.chainSync.start as go routine
edwardmack Jun 13, 2022
35962eb
add done channel to test
edwardmack Jun 13, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ linters:
- nolintlint
- revive
- staticcheck
- tparallel
- unconvert
- unparam
- varcheck
Expand Down
1 change: 1 addition & 0 deletions dot/core/service_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ func TestAnnounceBlock(t *testing.T) {
}

func TestService_InsertKey(t *testing.T) {
t.Parallel()
ks := keystore.NewGlobalKeystore()

cfg := &Config{
Expand Down
3 changes: 3 additions & 0 deletions dot/rpc/modules/author_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ func TestAuthorModule_SubmitExtrinsic_AlreadyInPool(t *testing.T) {
}

func TestAuthorModule_InsertKey_Integration(t *testing.T) {
t.Parallel()
integrationTestController := setupStateAndRuntime(t, t.TempDir(), useInstanceFromGenesis)
auth := newAuthorModule(t, integrationTestController)

Expand Down Expand Up @@ -336,6 +337,7 @@ func TestAuthorModule_InsertKey_Integration(t *testing.T) {
}

func TestAuthorModule_HasKey_Integration(t *testing.T) {
t.Parallel()
integrationTestController := setupStateAndRuntime(t, t.TempDir(), useInstanceFromGenesis)

ks := keystore.NewGlobalKeystore()
Expand Down Expand Up @@ -403,6 +405,7 @@ func TestAuthorModule_HasKey_Integration(t *testing.T) {
}

func TestAuthorModule_HasSessionKeys_Integration(t *testing.T) {
t.Parallel()
integrationTestController := setupStateAndRuntime(t, t.TempDir(), useInstanceFromGenesis)
auth := newAuthorModule(t, integrationTestController)

Expand Down
2 changes: 2 additions & 0 deletions dot/sync/benchmark_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ func Test_newSyncBenchmarker(t *testing.T) {
t.Parallel()

t.Run("10 samples to keep", func(t *testing.T) {
t.Parallel()
edwardmack marked this conversation as resolved.
Show resolved Hide resolved
const samplesToKeep = 10
actual := newSyncBenchmarker(samplesToKeep)

Expand All @@ -27,6 +28,7 @@ func Test_newSyncBenchmarker(t *testing.T) {
})

t.Run("panics on 0 sample to keep", func(t *testing.T) {
t.Parallel()
const samplesToKeep = 0
assert.PanicsWithValue(t, "cannot have 0 samples to keep", func() {
newSyncBenchmarker(samplesToKeep)
Expand Down
113 changes: 113 additions & 0 deletions dot/sync/bootstrap_syncer_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
// Copyright 2021 ChainSafe Systems (ON)
// SPDX-License-Identifier: LGPL-3.0-only

package sync

import (
"errors"
"testing"

"github.com/ChainSafe/gossamer/dot/types"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/assert"
)

func Test_bootstrapSyncer_handleWorkerResult(t *testing.T) {
t.Parallel()
mockError := errors.New("mock testing error")

tests := map[string]struct {
blockStateBuilder func(ctrl *gomock.Controller) BlockState
worker *worker
wantWorkerToRetry *worker
err error
}{
"nil worker.err returns nil": {
blockStateBuilder: func(ctrl *gomock.Controller) BlockState {
return NewMockBlockState(ctrl)
},
worker: &worker{},
},
"best block header error": {
blockStateBuilder: func(ctrl *gomock.Controller) BlockState {
mockBlockState := NewMockBlockState(ctrl)
mockBlockState.EXPECT().BestBlockHeader().Return(nil,
mockError)
return mockBlockState
},
worker: &worker{
err: &workerError{},
targetNumber: uintPtr(0),
},
err: mockError,
},
"targetNumber < bestBlockHeader number returns nil": {
blockStateBuilder: func(ctrl *gomock.Controller) BlockState {
mockBlockState := NewMockBlockState(ctrl)
mockBlockState.EXPECT().BestBlockHeader().Return(&types.Header{Number: 2}, nil)
return mockBlockState
},
worker: &worker{
err: &workerError{},
targetNumber: uintPtr(0),
},
},
"targetNumber > bestBlockHeader number worker errUnknownParent, error GetHighestFinalisedHeader": {
blockStateBuilder: func(ctrl *gomock.Controller) BlockState {
mockBlockState := NewMockBlockState(ctrl)
mockBlockState.EXPECT().BestBlockHeader().Return(&types.Header{Number: 2}, nil)
mockBlockState.EXPECT().GetHighestFinalisedHeader().Return(nil, mockError)
return mockBlockState
},
worker: &worker{
err: &workerError{err: errUnknownParent},
targetNumber: uintPtr(3),
},
err: mockError,
},
"targetNumber > bestBlockHeader number worker errUnknownParent returns worker": {
blockStateBuilder: func(ctrl *gomock.Controller) BlockState {
mockBlockState := NewMockBlockState(ctrl)
mockBlockState.EXPECT().BestBlockHeader().Return(&types.Header{Number: 2}, nil)
mockBlockState.EXPECT().GetHighestFinalisedHeader().Return(&types.Header{Number: 1}, nil)
return mockBlockState
},
worker: &worker{
err: &workerError{err: errUnknownParent},
targetNumber: uintPtr(3),
},
wantWorkerToRetry: &worker{
startNumber: uintPtr(1),
targetNumber: uintPtr(3),
},
},
"targetNumber > bestBlockHeader number returns worker": {
blockStateBuilder: func(ctrl *gomock.Controller) BlockState {
mockBlockState := NewMockBlockState(ctrl)
mockBlockState.EXPECT().BestBlockHeader().Return(&types.Header{Number: 2}, nil)
return mockBlockState
},
worker: &worker{
err: &workerError{},
targetNumber: uintPtr(3),
},
wantWorkerToRetry: &worker{
startNumber: uintPtr(3),
targetNumber: uintPtr(3),
},
},
}
for testName, tt := range tests {
tt := tt
t.Run(testName, func(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
s := &bootstrapSyncer{
blockState: tt.blockStateBuilder(ctrl),
qdm12 marked this conversation as resolved.
Show resolved Hide resolved
}
gotWorkerToRetry, err := s.handleWorkerResult(tt.worker)
assert.ErrorIs(t, err, tt.err)
qdm12 marked this conversation as resolved.
Show resolved Hide resolved
assert.Equal(t, tt.wantWorkerToRetry, gotWorkerToRetry)
})
}
}
18 changes: 3 additions & 15 deletions dot/sync/chain_processor.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import (
"github.com/ChainSafe/gossamer/lib/blocktree"
)

//go:generate mockgen -destination=mock_chain_processor_test.go -package=$GOPACKAGE . ChainProcessor

qdm12 marked this conversation as resolved.
Show resolved Hide resolved
// ChainProcessor processes ready blocks.
// it is implemented by *chainProcessor
type ChainProcessor interface {
Expand Down Expand Up @@ -160,7 +162,7 @@ func (s *chainProcessor) processBlockData(bd *types.BlockData) error {
logger.Debugf("processing block data with hash %s", bd.Hash)

if bd.Header != nil && bd.Body != nil {
if err := s.handleHeader(bd.Header); err != nil {
if err := s.babeVerifier.VerifyBlock(bd.Header); err != nil {
return err
}

Expand Down Expand Up @@ -191,16 +193,6 @@ func (s *chainProcessor) processBlockData(bd *types.BlockData) error {
return nil
}

// handleHeader handles headers included in BlockResponses
func (s *chainProcessor) handleHeader(header *types.Header) error {
err := s.babeVerifier.VerifyBlock(header)
if err != nil {
return fmt.Errorf("%w: %s", ErrInvalidBlock, err.Error())
}

return nil
}

// handleHeader handles block bodies included in BlockResponses
func (s *chainProcessor) handleBody(body *types.Body) {
for _, ext := range *body {
Expand All @@ -210,10 +202,6 @@ func (s *chainProcessor) handleBody(body *types.Body) {

// handleHeader handles blocks (header+body) included in BlockResponses
func (s *chainProcessor) handleBlock(block *types.Block) error {
if block == nil || block.Body == nil {
return errors.New("block or body is nil")
}

parent, err := s.blockState.GetHeader(block.Header.ParentHash)
if err != nil {
return fmt.Errorf("%w: %s", errFailedToGetParent, err)
Expand Down
Loading