Skip to content

Commit 13ea46d

Browse files
fix: inconsistent failures (#866)
Signed-off-by: Jeromy Cannon <[email protected]>
1 parent 5378e8f commit 13ea46d

25 files changed

+417
-237
lines changed

.github/workflows/flow-build-application.yaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,11 @@ jobs:
8282
- { name: "Node PEM Kill", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-pem-kill-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-pem-kill-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-pem-kill-coverage-report }}" }
8383
- { name: "Node Local Hedera", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-local-hedera-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-local-hedera-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-local-hedera-coverage-report }}" }
8484
- { name: "Node Local PTT", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-local-ptt-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-local-ptt-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-local-ptt-coverage-report }}" }
85-
- { name: "Node Add", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-add-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-add-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-add-coverage-report }}" }
86-
- { name: "Node Add Local", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-add-local-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-add-local-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-add-local-coverage-report }}" }
87-
- { name: "Node Add - Separate commands", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-add-separate-commands-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-add-separate-commands-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-add-separate-commands-coverage-report }}" }
85+
# Node Add tests are disabled and are not viable for the amount of memory available. The teacher crashes during
86+
# the reconnect attempt.
87+
# - { name: "Node Add", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-add-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-add-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-add-coverage-report }}" }
88+
# - { name: "Node Add Local", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-add-local-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-add-local-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-add-local-coverage-report }}" }
89+
# - { name: "Node Add - Separate commands", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-add-separate-commands-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-add-separate-commands-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-add-separate-commands-coverage-report }}" }
8890
- { name: "Node Update", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-update-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-update-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-update-coverage-report }}" }
8991
- { name: "Node Update - Separate commands", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-update-separate-commands-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-update-separate-commands-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-update-separate-commands-coverage-report }}" }
9092
- { name: "Node Delete", npm-test-script: "test-${{ needs.env-vars.outputs.e2e-node-delete-test-subdir }}", coverage-subdirectory: "${{ needs.env-vars.outputs.e2e-node-delete-test-subdir }}", coverage-report-name: "${{ needs.env-vars.outputs.e2e-node-delete-coverage-report }}" }

.github/workflows/zxc-code-analysis.yaml

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -314,26 +314,28 @@ jobs:
314314
name: ${{ inputs.e2e-node-local-ptt-coverage-report }}
315315
path: 'coverage/${{ inputs.e2e-node-local-ptt-test-subdir }}'
316316

317-
- name: Download E2E Node Add Coverage Report
318-
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
319-
if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
320-
with:
321-
name: ${{ inputs.e2e-node-add-coverage-report }}
322-
path: 'coverage/${{ inputs.e2e-node-add-test-subdir }}'
323-
324-
- name: Download E2E Node Add Local Coverage Report
325-
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
326-
if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
327-
with:
328-
name: ${{ inputs.e2e-node-add-local-coverage-report }}
329-
path: 'coverage/${{ inputs.e2e-node-add-local-test-subdir }}'
330-
331-
- name: Download E2E Node Add - Separate commands Coverage Report
332-
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
333-
if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
334-
with:
335-
name: ${{ inputs.e2e-node-add-separate-commands-coverage-report }}
336-
path: 'coverage/${{ inputs.e2e-node-add-separate-commands-test-subdir }}'
317+
# Node Add tests are disabled and are not viable for the amount of memory available. The teacher crashes during
318+
# the reconnect attempt.
319+
# - name: Download E2E Node Add Coverage Report
320+
# uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
321+
# if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
322+
# with:
323+
# name: ${{ inputs.e2e-node-add-coverage-report }}
324+
# path: 'coverage/${{ inputs.e2e-node-add-test-subdir }}'
325+
#
326+
# - name: Download E2E Node Add Local Coverage Report
327+
# uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
328+
# if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
329+
# with:
330+
# name: ${{ inputs.e2e-node-add-local-coverage-report }}
331+
# path: 'coverage/${{ inputs.e2e-node-add-local-test-subdir }}'
332+
#
333+
# - name: Download E2E Node Add - Separate commands Coverage Report
334+
# uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
335+
# if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
336+
# with:
337+
# name: ${{ inputs.e2e-node-add-separate-commands-coverage-report }}
338+
# path: 'coverage/${{ inputs.e2e-node-add-separate-commands-test-subdir }}'
337339

338340
- name: Download E2E Node Update Coverage Report
339341
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8

eslint.config.mjs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ export default [
2828
{
2929
ignores: ['docs/**/*', 'dist/*'],
3030
},
31-
{
32-
files: ['test/**/*.ts', 'src/**/*.ts'],
31+
{ // all ts files
32+
files: ['**/*.ts'],
3333
plugins: {
3434
headers: headers,
3535
tsdoc: tsdoc,
@@ -69,6 +69,13 @@ export default [
6969
'space-before-function-paren': 'error',
7070
'@typescript-eslint/no-empty-function': 'off',
7171
'@typescript-eslint/class-literal-property-style': 'off',
72+
'no-invalid-this': [ 'error', { capIsConstructor : false } ],
73+
}
74+
},
75+
{ // test ts files
76+
files: ['test/**/*.ts'],
77+
rules: {
78+
'no-invalid-this': [ 'off', { } ],
7279
}
7380
},
7481
{

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"check": "remark . --quiet --frail && eslint . --ignore-pattern 'docs/*' --ignore-pattern 'dist/*'; cd docs; jsdoc -c jsdoc.conf.json && tsc",
3636
"format": "remark . --quiet --frail --output && eslint --fix . --ignore-pattern 'docs/*' --ignore-pattern 'dist/*' && tsc",
3737
"test-setup": "./test/e2e/setup-e2e.sh",
38-
"build": "tsc && node resources/post-build-script.js"
38+
"build": "rm -Rf dist && tsc && node resources/post-build-script.js"
3939
},
4040
"keywords": [
4141
"solo",

resources/post-build-script.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,23 @@ function copyResources(srcDir, targetDir) {
2020
fs.cpSync(srcDir, targetDir, {recursive: true})
2121
}
2222

23+
async function recursiveChmod(dir, mode) {
24+
const files = await fs.promises.readdir(dir);
25+
for (const file of files) {
26+
const filePath = `${dir}/${file}`;
27+
const stats = await fs.promises.stat(filePath);
28+
if (stats.isDirectory()) {
29+
await recursiveChmod(filePath, mode);
30+
} else {
31+
await fs.promises.chmod(filePath, mode);
32+
}
33+
}
34+
}
35+
36+
// Usage
2337
console.time('Copy package.json')
2438
copyPackageJson(srcPackageJsonFilePath, targetPackageJsonFilePath)
2539
console.time('Copy resources')
2640
copyResources(srcResourcesDir, targetResourcesDir)
41+
console.time('Update permissions')
42+
await recursiveChmod(distDir, 0o755);

src/commands/flags.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,17 @@ export const grpcWebTlsKeyPath: CommandFlag = {
802802
}
803803
}
804804

805+
export const stakeAmounts: CommandFlag = {
806+
constName: 'stakeAmounts',
807+
name: 'stake-amounts',
808+
definition: {
809+
describe:
810+
'The amount to be staked in the same order you list the node aliases with multiple node staked values comma seperated',
811+
defaultValue: '',
812+
type: 'string'
813+
}
814+
}
815+
805816
export const allFlags: CommandFlag[] = [
806817
accountId,
807818
amount,
@@ -862,6 +873,7 @@ export const allFlags: CommandFlag[] = [
862873
replicaCount,
863874
setAlias,
864875
settingTxt,
876+
stakeAmounts,
865877
tlsClusterIssuerType,
866878
tlsPrivateKey,
867879
tlsPublicKey,

src/commands/network.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,8 @@ export class NetworkCommand extends BaseCommand {
335335
title: `Check Node: ${chalk.yellow(nodeAlias)}`,
336336
task: async () =>
337337
await self.k8.waitForPods([constants.POD_PHASE_RUNNING], [
338-
'solo.hedera.com/type=network-node',
339-
`solo.hedera.com/node-name=${nodeAlias}`
338+
`solo.hedera.com/node-name=${nodeAlias}`,
339+
'solo.hedera.com/type=network-node'
340340
], 1, constants.PODS_RUNNING_MAX_ATTEMPTS, constants.PODS_RUNNING_DELAY)
341341
})
342342
}

src/commands/node/configs.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* limitations under the License.
1515
*
1616
*/
17+
/* eslint-disable no-invalid-this */
1718
import { FREEZE_ADMIN_ACCOUNT } from '../../core/constants.js'
1819
import { constants, Templates } from '../../core/index.js'
1920
import { PrivateKey } from '@hashgraph/sdk'

src/commands/node/flags.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,15 +230,16 @@ export const STOP_FLAGS = {
230230
export const START_FLAGS = {
231231
requiredFlags: [
232232
flags.namespace,
233-
flags.releaseTag
233+
flags.releaseTag,
234234
],
235235
requiredFlagsWithDisabledPrompt: [
236236
flags.app,
237237
],
238238
optionalFlags: [
239239
flags.quiet,
240240
flags.nodeAliasesUnparsed,
241-
flags.debugNodeAlias
241+
flags.debugNodeAlias,
242+
flags.stakeAmounts,
242243
]
243244
}
244245

src/commands/node/handlers.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import type { SoloLogger } from '../../core/logging.js'
3535
import type { NodeCommand } from './index.js'
3636
import type { NodeCommandTasks } from './tasks.js'
3737
import { type Lease } from '../../core/lease/lease.js'
38+
import { NodeSubcommandType } from '../../core/enumerations.js'
3839

3940
export class NodeCommandHandlers {
4041
private readonly accountManager: AccountManager
@@ -108,14 +109,13 @@ export class NodeCommandHandlers {
108109

109110
deleteExecuteTaskList (argv: any) {
110111
return [
112+
this.tasks.checkAllNodesAreFrozen('existingNodeAliases'),
111113
this.tasks.downloadNodeGeneratedFiles(),
112114
this.tasks.prepareStagingDirectory('existingNodeAliases'),
113-
this.tasks.copyNodeKeysToSecrets(),
114115
this.tasks.refreshNodeList(),
115116
this.tasks.copyNodeKeysToSecrets(),
116-
this.tasks.checkAllNodesAreFrozen('existingNodeAliases'),
117117
this.tasks.getNodeLogsAndConfigs(),
118-
this.tasks.updateChartWithConfigMap('Update chart to use new configMap'),
118+
this.tasks.updateChartWithConfigMap('Delete network node', NodeSubcommandType.DELETE),
119119
this.tasks.killNodes(),
120120
this.tasks.sleep('Give time for pods to come up after being killed', 20000),
121121
this.tasks.checkNodePodsAreRunning(),
@@ -126,7 +126,7 @@ export class NodeCommandHandlers {
126126
this.tasks.enablePortForwarding(),
127127
this.tasks.checkAllNodesAreActive('allNodeAliases'),
128128
this.tasks.checkAllNodeProxiesAreActive(),
129-
this.tasks.triggerStakeWeightCalculate(),
129+
this.tasks.triggerStakeWeightCalculate(NodeSubcommandType.DELETE),
130130
this.tasks.finalize()
131131
]
132132
}
@@ -159,12 +159,12 @@ export class NodeCommandHandlers {
159159

160160
addExecuteTasks (argv: any) {
161161
return [
162+
this.tasks.checkAllNodesAreFrozen('existingNodeAliases'),
162163
this.tasks.downloadNodeGeneratedFiles(),
163164
this.tasks.prepareStagingDirectory('allNodeAliases'),
164165
this.tasks.copyNodeKeysToSecrets(),
165-
this.tasks.checkAllNodesAreFrozen('existingNodeAliases'),
166166
this.tasks.getNodeLogsAndConfigs(),
167-
this.tasks.updateChartWithConfigMap('Deploy new network node'),
167+
this.tasks.updateChartWithConfigMap('Deploy new network node', NodeSubcommandType.ADD),
168168
this.tasks.killNodes(),
169169
this.tasks.checkNodePodsAreRunning(),
170170
this.tasks.populateServiceMap(),
@@ -177,7 +177,7 @@ export class NodeCommandHandlers {
177177
this.tasks.checkAllNodesAreActive('allNodeAliases'),
178178
this.tasks.checkAllNodeProxiesAreActive(),
179179
this.tasks.stakeNewNode(),
180-
this.tasks.triggerStakeWeightCalculate(),
180+
this.tasks.triggerStakeWeightCalculate(NodeSubcommandType.ADD),
181181
this.tasks.finalize()
182182
]
183183
}
@@ -202,13 +202,13 @@ export class NodeCommandHandlers {
202202

203203
updateExecuteTasks (argv) {
204204
return [
205+
this.tasks.checkAllNodesAreFrozen('existingNodeAliases'),
205206
this.tasks.downloadNodeGeneratedFiles(),
206207
this.tasks.prepareStagingDirectory('allNodeAliases'),
207208
this.tasks.copyNodeKeysToSecrets(),
208-
this.tasks.checkAllNodesAreFrozen('existingNodeAliases'),
209209
this.tasks.getNodeLogsAndConfigs(),
210210
this.tasks.updateChartWithConfigMap(
211-
'Update chart to use new configMap due to account number change',
211+
'Update chart to use new configMap due to account number change', NodeSubcommandType.UPDATE,
212212
(ctx: any) => !ctx.config.newAccountNumber && !ctx.config.debugNodeAlias
213213
),
214214
this.tasks.killNodesAndUpdateConfigMap(),
@@ -219,7 +219,7 @@ export class NodeCommandHandlers {
219219
this.tasks.enablePortForwarding(),
220220
this.tasks.checkAllNodesAreActive('allNodeAliases'),
221221
this.tasks.checkAllNodeProxiesAreActive(),
222-
this.tasks.triggerStakeWeightCalculate(),
222+
this.tasks.triggerStakeWeightCalculate(NodeSubcommandType.UPDATE),
223223
this.tasks.finalize()
224224
]
225225
}

0 commit comments

Comments
 (0)