Skip to content

Commit 987a855

Browse files
am1r021holgerd77
andauthored
Rework rlpx-simulator.spec.ts tests / Fix devp2p/genesis/wallet Coverage Reporting (#3760)
* Rework rlpx-simulator.spec.ts tests * Fix twoPeerMsgExchange3 * Fix test * Fix type errors * Restore tests to be more similar to previous format * Increase test timeout * Fix devp2p coverage reporting * Fix genesis codecov reporting * Update wallet codecov reporting command --------- Co-authored-by: Holger Drewes <[email protected]>
1 parent dc7169c commit 987a855

File tree

5 files changed

+86
-68
lines changed

5 files changed

+86
-68
lines changed

packages/devp2p/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"scripts": {
4747
"build": "../../config/cli/ts-build.sh",
4848
"clean": "../../config/cli/clean-package.sh",
49-
"coverage": "../../config/cli/coverage.sh",
49+
"coverage": "DEBUG=ethjs npx vitest run --coverage.enabled --coverage.reporter=lcov",
5050
"docs:build": "typedoc --options typedoc.cjs",
5151
"examples": "tsx ../../scripts/examples-runner.ts -- devp2p",
5252
"examples:build": "npx embedme README.md",

packages/devp2p/test/integration/rlpx-simulator.spec.ts

Lines changed: 69 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,76 +6,63 @@ import { DISCONNECT_REASON } from '../../src/types.js'
66
import * as util from './util.js'
77

88
describe('RLPx simulator tests', () => {
9-
it('RLPX: add working node', () => {
9+
it('RLPX: add working node', async () => {
1010
const basePort = 40404
11-
const rlpxs = util.initTwoPeerRLPXSetup(undefined, undefined, undefined, basePort)
12-
13-
rlpxs[0].events.on('peer:added', async (peer) => {
14-
assert.equal(
15-
peer['_port'],
16-
basePort + 1,
17-
'should have added peer on peer:added after successful handshake',
18-
)
19-
assert.equal(rlpxs[0].getPeers().length, 1, 'peer list length should be 1')
20-
assert.equal(rlpxs[0]._getOpenSlots(), 9, 'should have maxPeers - 1 open slots left')
21-
await util.delay(500)
22-
util.destroyRLPXs(rlpxs)
11+
const { rlpxs, peer } = util.initTwoPeerRLPXSetup(undefined, undefined, undefined, basePort + 1)
12+
rlpxs[0]['_dpt']!.addPeer(peer).catch(() => {
13+
throw new Error('Peering failed')
2314
})
24-
})
25-
26-
it('RLPX: ban node with missing tcp port', () => {
27-
const rlpxs = util.initTwoPeerRLPXSetup(undefined, undefined, undefined, 40444)
28-
29-
rlpxs[0].events.on('peer:added', async () => {
30-
const peer = {
31-
id: hexToBytes('0xabcd'),
32-
address: '127.0.0.1',
33-
udpPort: 30308,
34-
tcpPort: null,
35-
}
36-
assert.notOk(
37-
rlpxs[0]['_dpt']!['_banlist'].has(peer),
38-
'should not be in ban list before bad peer discovered',
39-
)
40-
rlpxs[0]['_dpt']!.events.emit('peer:new', peer)
41-
assert.ok(
42-
rlpxs[0]['_dpt']!['_banlist'].has(peer),
43-
'should be in ban list after bad peer discovered',
44-
)
45-
await util.delay(500)
46-
util.destroyRLPXs(rlpxs)
15+
await new Promise((resolve) => {
16+
rlpxs[0].events.on('peer:added', async (peer) => {
17+
assert.equal(
18+
peer['_port'],
19+
basePort + 1,
20+
'should have added peer on peer:added after successful handshake',
21+
)
22+
assert.equal(rlpxs[0].getPeers().length, 1, 'peer list length should be 1')
23+
assert.equal(rlpxs[0]._getOpenSlots(), 9, 'should have maxPeers - 1 open slots left')
24+
await util.delay(500)
25+
util.destroyRLPXs(rlpxs)
26+
resolve(undefined)
27+
})
4728
})
4829
})
49-
50-
it('RLPX: remove node', () => {
51-
const rlpxs = util.initTwoPeerRLPXSetup(undefined, undefined, undefined, 40504)
52-
53-
try {
54-
rlpxs[0].events.once('peer:added', (peer) => {
55-
rlpxs[0].disconnect(peer['_remoteId'])
56-
})
57-
rlpxs[0].events.once('peer:removed', async (_, reason: any) => {
58-
assert.equal(
59-
reason,
60-
DISCONNECT_REASON.CLIENT_QUITTING,
61-
'should close with CLIENT_QUITTING disconnect reason',
30+
it('RLPX: ban node with missing tcp port', async () => {
31+
const { rlpxs, peer } = util.initTwoPeerRLPXSetup(undefined, undefined, undefined, 40444)
32+
rlpxs[0]['_dpt']!.addPeer(peer).catch(() => {
33+
throw new Error('Peering failed')
34+
})
35+
await new Promise((resolve) => {
36+
rlpxs[0].events.on('peer:added', async () => {
37+
const peer = {
38+
id: hexToBytes('0xabcd'),
39+
address: '127.0.0.1',
40+
udpPort: 30308,
41+
tcpPort: null,
42+
}
43+
assert.notOk(
44+
rlpxs[0]['_dpt']!['_banlist'].has(peer),
45+
'should not be in ban list before bad peer discovered',
46+
)
47+
rlpxs[0]['_dpt']!.events.emit('peer:new', peer)
48+
assert.ok(
49+
rlpxs[0]['_dpt']!['_banlist'].has(peer),
50+
'should be in ban list after bad peer discovered',
6251
)
63-
assert.equal(rlpxs[0]._getOpenSlots(), 10, 'should have maxPeers open slots left')
6452
await util.delay(500)
6553
util.destroyRLPXs(rlpxs)
54+
resolve(undefined)
6655
})
67-
} catch (err) {
68-
assert.fail(`An unexpected error occurred: ${err}`)
69-
}
56+
})
7057
})
71-
72-
it('RLPX: test peer queue / refill connections', () => {
58+
it('RLPX: test peer queue / refill connections', async () => {
7359
const basePort = 60661
7460
const rlpxs = util.getTestRLPXs(3, 1, basePort)
7561
const peer = { address: util.localhost, udpPort: basePort + 1, tcpPort: basePort + 1 }
7662
rlpxs[0]['_dpt']!.addPeer(peer)
77-
try {
63+
await new Promise((resolve) => {
7864
rlpxs[0].events.on('peer:added', async (peer) => {
65+
//@ts-ignore
7966
if ((peer['_socket'] as any)._peername.port === basePort + 1) {
8067
assert.equal(rlpxs[0]['_peersQueue'].length, 0, 'peers queue should contain no peers')
8168
const peer2 = {
@@ -90,10 +77,33 @@ describe('RLPx simulator tests', () => {
9077
if ((peer['_socket'] as any)._peername.port === basePort + 2) {
9178
assert.equal(rlpxs[0]['_peersQueue'].length, 0, 'peers queue should contain no peers')
9279
util.destroyRLPXs(rlpxs)
80+
resolve(undefined)
9381
}
9482
})
95-
} catch (err) {
96-
assert.fail(`An unexpected error occurred: ${err}`)
97-
}
83+
})
84+
}, 30000)
85+
it('RLPX: remove node', async () => {
86+
const { rlpxs, peer } = util.initTwoPeerRLPXSetup(undefined, undefined, undefined, 40504)
87+
rlpxs[0]
88+
['_dpt']!.addPeer(peer)
89+
.then((peer1) => {
90+
rlpxs[0].disconnect(peer1['id']!)
91+
})
92+
.catch((e) => {
93+
throw new Error(`Peering failed: ${e}: ${e.stack}`)
94+
})
95+
await new Promise((resolve) => {
96+
rlpxs[0].events.once('peer:removed', async (_, reason: any) => {
97+
assert.equal(
98+
reason,
99+
DISCONNECT_REASON.CLIENT_QUITTING,
100+
'should close with CLIENT_QUITTING disconnect reason',
101+
)
102+
assert.equal(rlpxs[0]._getOpenSlots(), 10, 'should have maxPeers open slots left')
103+
await util.delay(500)
104+
util.destroyRLPXs(rlpxs)
105+
})
106+
resolve(undefined)
107+
})
98108
})
99109
})

packages/devp2p/test/integration/util.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,23 @@ export function getTestRLPXs(
9797
return rlpxs
9898
}
9999

100+
type TestRLPXs = {
101+
rlpxs: RLPx[]
102+
peer: {
103+
address: string
104+
udpPort: number
105+
tcpPort: number
106+
}
107+
}
100108
export function initTwoPeerRLPXSetup(
101109
maxPeers?: any,
102110
capabilities?: any,
103111
common?: Object | Common,
104112
basePort = 30306,
105-
): RLPx[] {
113+
): TestRLPXs {
106114
const rlpxs = getTestRLPXs(2, maxPeers, basePort, capabilities, common)
107115
const peer = { address: localhost, udpPort: basePort + 1, tcpPort: basePort + 1 }
108-
rlpxs[0]['_dpt']!.addPeer(peer).catch(() => {
109-
/* Silently catch rejections here since not an actual test error */
110-
})
111-
return rlpxs
116+
return { rlpxs, peer }
112117
}
113118

114119
export function destroyRLPXs(rlpxs: any) {
@@ -135,7 +140,10 @@ export function twoPeerMsgExchange3(
135140
common?: Object | Common,
136141
basePort = 30306,
137142
) {
138-
const rlpxs = initTwoPeerRLPXSetup(null, capabilities, common, basePort)
143+
const { rlpxs, peer } = initTwoPeerRLPXSetup(null, capabilities, common, basePort)
144+
rlpxs[0]['_dpt']!.addPeer(peer).catch(() => {
145+
throw new Error('Peering failed')
146+
})
139147
rlpxs[0].events.on('peer:added', function (peer: any) {
140148
const protocol = peer.getProtocols()[0]
141149
opts.sendMessage(rlpxs, protocol)

packages/genesis/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"scripts": {
4646
"build": "../../config/cli/ts-build.sh",
4747
"clean": "../../config/cli/clean-package.sh",
48-
"coverage": "../../config/cli/coverage.sh",
48+
"coverage": "DEBUG=ethjs npx vitest run --coverage.enabled --coverage.reporter=lcov",
4949
"examples": "tsx ../../scripts/examples-runner.ts -- genesis",
5050
"examples:build": "npx embedme README.md",
5151
"docs:build": "typedoc --options typedoc.cjs",

packages/wallet/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
"scripts": {
3535
"build": "../../config/cli/ts-build.sh",
3636
"clean": "../../config/cli/clean-package.sh",
37-
"coverage": "c8 --all --reporter=lcov --reporter=text npm run test:node",
37+
"coverage": "DEBUG=ethjs npx vitest run --coverage.enabled --coverage.reporter=lcov",
3838
"docs:build": "npx typedoc --options typedoc.cjs",
3939
"examples": "tsx ../../scripts/examples-runner.ts -- wallet",
4040
"examples:build": "npx embedme README.md",

0 commit comments

Comments
 (0)