Skip to content

Commit

Permalink
test: add node-upgrade e2e test CI
Browse files Browse the repository at this point in the history
Signed-off-by: Ivo Yankov <[email protected]>
  • Loading branch information
Ivo-Yankov committed Sep 27, 2024
1 parent 1fe8ff7 commit 6253def
Show file tree
Hide file tree
Showing 7 changed files with 148 additions and 24 deletions.
16 changes: 16 additions & 0 deletions .github/workflows/flow-build-application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,19 @@ jobs:
coverage-subdirectory: ${{ needs.env-vars.outputs.e2e-node-delete-test-subdir }}
coverage-report-name: ${{ needs.env-vars.outputs.e2e-node-delete-coverage-report }}

e2e-node-upgrade-tests:
name: E2E Tests
if: ${{ github.event_name == 'push' || github.event.inputs.enable-e2e-tests == 'true' }}
uses: ./.github/workflows/zxc-e2e-test.yaml
needs:
- env-vars
- code-style
with:
custom-job-label: Node Upgrade
npm-test-script: test-${{ needs.env-vars.outputs.e2e-node-upgrade-test-subdir }}
coverage-subdirectory: ${{ needs.env-vars.outputs.e2e-node-upgrade-test-subdir }}
coverage-report-name: ${{ needs.env-vars.outputs.e2e-node-upgrade-coverage-report }}

e2e-relay-tests:
name: E2E Tests
if: ${{ github.event_name == 'push' || github.event.inputs.enable-e2e-tests == 'true' }}
Expand Down Expand Up @@ -209,6 +222,7 @@ jobs:
- e2e-node-add-separate-commands-tests
- e2e-node-update-tests
- e2e-node-delete-tests
- e2e-node-upgrade-tests
- e2e-relay-tests
if: ${{ (github.event_name == 'push' || github.event.inputs.enable-unit-tests == 'true' || github.event.inputs.enable-e2e-tests == 'true') && !failure() && !cancelled() }}
with:
Expand All @@ -226,6 +240,7 @@ jobs:
e2e-node-add-separate-commands-test-subdir: ${{ needs.env-vars.outputs.e2e-node-add-separate-commands-test-subdir }}
e2e-node-update-test-subdir: ${{ needs.env-vars.outputs.e2e-node-update-test-subdir }}
e2e-node-delete-test-subdir: ${{ needs.env-vars.outputs.e2e-node-delete-test-subdir }}
e2e-node-upgrade-test-subdir: ${{ needs.env-vars.outputs.e2e-node-upgrade-test-subdir }}
e2e-relay-test-subdir: ${{ needs.env-vars.outputs.e2e-relay-test-subdir }}
e2e-standard-coverage-report: ${{ needs.env-vars.outputs.e2e-standard-coverage-report }}
e2e-mirror-node-coverage-report: ${{ needs.env-vars.outputs.e2e-mirror-node-coverage-report }}
Expand All @@ -236,6 +251,7 @@ jobs:
e2e-node-add-separate-commands-coverage-report: ${{ needs.env-vars.outputs.e2e-node-add-separate-commands-coverage-report }}
e2e-node-update-coverage-report: ${{ needs.env-vars.outputs.e2e-node-update-coverage-report }}
e2e-node-delete-coverage-report: ${{ needs.env-vars.outputs.e2e-node-delete-coverage-report }}
e2e-node-upgrade-coverage-report: ${{ needs.env-vars.outputs.e2e-node-upgrade-coverage-report }}
e2e-relay-coverage-report: ${{ needs.env-vars.outputs.e2e-relay-coverage-report }}
secrets:
snyk-token: ${{ secrets.SNYK_TOKEN }}
Expand Down
29 changes: 19 additions & 10 deletions .github/workflows/flow-pull-request-checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,6 @@ jobs:
with:
custom-job-label: Standard

update-readme:
name: "Update README.md"
uses: ./.github/workflows/flow-update-readme.yaml
with:
commit-changes: false
secrets:
GH_ACCESS_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
GH_ACCESS_GPG_KEY: ${{ secrets.GH_ACCESS_GPG_KEY }}
GH_ACCESS_PASSPHRASE: ${{ secrets.GH_ACCESS_PASSPHRASE }}

e2e-standard-tests:
name: E2E Tests
if: ${{ !cancelled() && always() }}
Expand Down Expand Up @@ -179,6 +169,19 @@ jobs:
coverage-subdirectory: ${{ needs.env-vars.outputs.e2e-node-delete-test-subdir }}
coverage-report-name: ${{ needs.env-vars.outputs.e2e-node-delete-coverage-report }}

e2e-node-upgrade-tests:
name: E2E Tests
if: ${{ !cancelled() && always() }}
uses: ./.github/workflows/zxc-e2e-test.yaml
needs:
- env-vars
- code-style
with:
custom-job-label: Node Upgrade
npm-test-script: test-${{ needs.env-vars.outputs.e2e-node-upgrade-test-subdir }}
coverage-subdirectory: ${{ needs.env-vars.outputs.e2e-node-upgrade-test-subdir }}
coverage-report-name: ${{ needs.env-vars.outputs.e2e-node-upgrade-coverage-report }}

e2e-relay-tests:
name: E2E Tests
if: ${{ !cancelled() && always() }}
Expand Down Expand Up @@ -207,6 +210,7 @@ jobs:
- e2e-node-add-separate-commands-tests
- e2e-node-update-tests
- e2e-node-delete-tests
- e2e-node-upgrade-tests
- e2e-relay-tests
if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}
with:
Expand All @@ -222,6 +226,7 @@ jobs:
e2e-node-add-separate-commands-test-subdir: ${{ needs.env-vars.outputs.e2e-node-add-separate-commands-test-subdir }}
e2e-node-update-test-subdir: ${{ needs.env-vars.outputs.e2e-node-update-test-subdir }}
e2e-node-delete-test-subdir: ${{ needs.env-vars.outputs.e2e-node-delete-test-subdir }}
e2e-node-upgrade-test-subdir: ${{ needs.env-vars.outputs.e2e-node-upgrade-test-subdir }}
e2e-relay-test-subdir: ${{ needs.env-vars.outputs.e2e-relay-test-subdir }}
e2e-standard-coverage-report: ${{ needs.env-vars.outputs.e2e-standard-coverage-report }}
e2e-mirror-node-coverage-report: ${{ needs.env-vars.outputs.e2e-mirror-node-coverage-report }}
Expand All @@ -232,6 +237,7 @@ jobs:
e2e-node-add-separate-commands-coverage-report: ${{ needs.env-vars.outputs.e2e-node-add-separate-commands-coverage-report }}
e2e-node-update-coverage-report: ${{ needs.env-vars.outputs.e2e-node-update-coverage-report }}
e2e-node-delete-coverage-report: ${{ needs.env-vars.outputs.e2e-node-delete-coverage-report }}
e2e-node-upgrade-coverage-report: ${{ needs.env-vars.outputs.e2e-node-upgrade-coverage-report }}
e2e-relay-coverage-report: ${{ needs.env-vars.outputs.e2e-relay-coverage-report }}
secrets:
codecov-token: ${{ secrets.CODECOV_TOKEN }}
Expand All @@ -251,6 +257,7 @@ jobs:
- e2e-node-add-separate-commands-tests
- e2e-node-update-tests
- e2e-node-delete-tests
- e2e-node-upgrade-tests
- e2e-relay-tests
if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }}
with:
Expand All @@ -266,6 +273,7 @@ jobs:
e2e-node-add-separate-commands-test-subdir: ${{ needs.env-vars.outputs.e2e-node-add-separate-commands-test-subdir }}
e2e-node-update-test-subdir: ${{ needs.env-vars.outputs.e2e-node-update-test-subdir }}
e2e-node-delete-test-subdir: ${{ needs.env-vars.outputs.e2e-node-delete-test-subdir }}
e2e-node-upgrade-test-subdir: ${{ needs.env-vars.outputs.e2e-node-upgrade-test-subdir }}
e2e-relay-test-subdir: ${{ needs.env-vars.outputs.e2e-relay-test-subdir }}
e2e-standard-coverage-report: ${{ needs.env-vars.outputs.e2e-standard-coverage-report }}
e2e-mirror-node-coverage-report: ${{ needs.env-vars.outputs.e2e-mirror-node-coverage-report }}
Expand All @@ -276,6 +284,7 @@ jobs:
e2e-node-add-separate-commands-coverage-report: ${{ needs.env-vars.outputs.e2e-node-add-separate-commands-coverage-report }}
e2e-node-update-coverage-report: ${{ needs.env-vars.outputs.e2e-node-update-coverage-report }}
e2e-node-delete-coverage-report: ${{ needs.env-vars.outputs.e2e-node-delete-coverage-report }}
e2e-node-upgrade-coverage-report: ${{ needs.env-vars.outputs.e2e-node-upgrade-coverage-report }}
e2e-relay-coverage-report: ${{ needs.env-vars.outputs.e2e-relay-coverage-report }}
secrets:
codacy-project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
2 changes: 2 additions & 0 deletions .github/workflows/templates/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,7 @@ tests:
jestPostfix: --testRegex=\".*\\/e2e\\/commands\\/node_update.*\\.test\\.mjs\"
- name: Node Delete
jestPostfix: --testRegex=\".*\\/e2e\\/commands\\/node_delete.*\\.test\\.mjs\"
- name: Node Upgrade
jestPostfix: --testRegex=\".*\\/e2e\\/commands\\/node_upgrade.*\\.test\\.mjs\"
- name: Relay
jestPostfix: --testRegex=\".*\\/e2e\\/commands\\/relay\\.test\\.mjs\"
31 changes: 17 additions & 14 deletions .github/workflows/zxc-code-analysis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,11 @@ on:
type: string
required: false
default: "e2e-node-delete"
e2e-node-upgrade-test-subdir:
description: "E2E Node Upgrade Test Subdirectory:"
type: string
required: false
default: "e2e-node-upgrade"
e2e-relay-test-subdir:
description: "E2E Relay Test Subdirectory:"
type: string
Expand Down Expand Up @@ -150,6 +155,11 @@ on:
type: string
required: false
default: "E2E Node Delete Tests Coverage Report"
e2e-node-upgrade-coverage-report:
description: "E2E Node Upgrade Coverage Report:"
type: string
required: false
default: "E2E Node Upgrade Tests Coverage Report"
e2e-relay-coverage-report:
description: "E2E Relay Coverage Report:"
type: string
Expand Down Expand Up @@ -183,7 +193,7 @@ jobs:
runs-on: solo-linux-medium
steps:
- name: Checkout Code
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
ref: ${{ github.event.workflow_run.head_branch }}
fetch-depth: ${{ inputs.enable-sonar-analysis && '0' || '' }}
Expand Down Expand Up @@ -268,26 +278,19 @@ jobs:
name: ${{ inputs.e2e-node-delete-coverage-report }}
path: 'coverage/${{ inputs.e2e-node-delete-test-subdir }}'

- name: Download E2E Relay Coverage Report
- name: Download E2E Node Upgrade Coverage Report
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
with:
name: ${{ inputs.e2e-relay-coverage-report }}
path: 'coverage/${{ inputs.e2e-relay-test-subdir }}'
name: ${{ inputs.e2e-node-upgrade-coverage-report }}
path: 'coverage/${{ inputs.e2e-node-upgrade-test-subdir }}'

- name: Download E2E Test Report
- name: Download E2E Relay Coverage Report
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
with:
pattern: "e2e_test_report_*"
path: "e2e_test_report"

- name: Publish E2E Test Report
uses: EnricoMi/publish-unit-test-result-action@82082dac68ad6a19d980f8ce817e108b9f496c2a # v2.17.1
if: ${{ (inputs.enable-codecov-analysis || inputs.enable-codacy-coverage) && inputs.enable-e2e-coverage-report && !cancelled() && !failure() }}
with:
check_name: "E2E Test Report"
files: "e2e_test_report/**/*.xml"
name: ${{ inputs.e2e-relay-coverage-report }}
path: 'coverage/${{ inputs.e2e-relay-test-subdir }}'

- name: Publish To Codecov
uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/zxc-env-vars.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ on:
e2e-node-delete-test-subdir:
description: "E2E Node Delete Test Subdirectory"
value: ${{ jobs.env-vars.outputs.e2e_node_delete_test_subdir }}
e2e-node-upgrade-test-subdir:
description: "E2E Node Upgrade Test Subdirectory"
value: ${{ jobs.env-vars.outputs.e2e_node_upgrade_test_subdir }}
e2e-relay-test-subdir:
description: "E2E Relay Test Subdirectory"
value: ${{ jobs.env-vars.outputs.e2e_relay_test_subdir }}
Expand Down Expand Up @@ -83,6 +86,9 @@ on:
e2e-node-delete-coverage-report:
description: "E2E Node Delete Tests Coverage Report"
value: ${{ jobs.env-vars.outputs.e2e_node_delete_coverage_report }}
e2e-node-upgrade-coverage-report:
description: "E2E Node Upgrade Tests Coverage Report"
value: ${{ jobs.env-vars.outputs.e2e_node_upgrade_coverage_report }}
e2e-relay-coverage-report:
description: "E2E Relay Tests Coverage Report"
value: ${{ jobs.env-vars.outputs.e2e_relay_coverage_report }}
Expand All @@ -105,6 +111,7 @@ jobs:
e2e_node_add_separate_commands_test_subdir: e2e-node-add-separate-commands
e2e_node_update_test_subdir: e2e-node-update
e2e_node_delete_test_subdir: e2e-node-delete
e2e_node_upgrade_test_subdir: e2e-node-upgrade
e2e_relay_test_subdir: e2e-relay
e2e_standard_coverage_report: "E2E Standard Tests Coverage Report"
e2e_mirror_node_coverage_report: "E2E Mirror Node Tests Coverage Report"
Expand All @@ -115,6 +122,7 @@ jobs:
e2e_node_add_separate_commands_coverage_report: "E2E Node Add - Separate commands Tests Coverage Report"
e2e_node_update_coverage_report: "E2E Node Update Tests Coverage Report"
e2e_node_delete_coverage_report: "E2E Node Delete Tests Coverage Report"
e2e_node_upgrade_coverage_report: "E2E Node Upgrade Tests Coverage Report"
e2e_relay_coverage_report: "E2E Relay Tests Coverage Report"
steps:
- run: echo "Exposing environment variables to reusable workflows"
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"test-e2e-node-add-separate-commands": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Node Add - Separate commands Tests' JEST_JUNIT_OUTPUT_NAME='junit-e2e-node-add-separate-commands.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-node-add-separate-commands' --testRegex=\".*\\/e2e\\/commands\\/separate_node_add.*\\.test\\.mjs\"",
"test-e2e-node-update": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Node Update Tests' JEST_JUNIT_OUTPUT_NAME='junit-e2e-node-update.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-node-update' --testRegex=\".*\\/e2e\\/commands\\/node_update.*\\.test\\.mjs\"",
"test-e2e-node-delete": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Node Delete Tests' JEST_JUNIT_OUTPUT_NAME='junit-e2e-node-delete.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-node-delete' --testRegex=\".*\\/e2e\\/commands\\/node_delete.*\\.test\\.mjs\"",
"test-e2e-node-upgrade": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Node Upgrade Tests' JEST_JUNIT_OUTPUT_NAME='junit-e2e-node-upgrade.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-node-upgrade' --testRegex=\".*\\/e2e\\/commands\\/node_upgrade.*\\.test\\.mjs\"",
"test-e2e-relay": "NODE_OPTIONS=--experimental-vm-modules JEST_SUITE_NAME='Jest E2E Relay Tests' JEST_JUNIT_OUTPUT_NAME='junit-e2e-relay.xml' jest --runInBand --detectOpenHandles --forceExit --coverage --coverageDirectory='coverage/e2e-relay' --testRegex=\".*\\/e2e\\/commands\\/relay\\.test\\.mjs\"",
"merge-clean": "rm -rf .nyc_output && mkdir .nyc_output && rm -rf coverage/lcov-report && rm -rf coverage/solo && rm coverage/*.*",
"merge-e2e": "nyc merge ./coverage/e2e/ .nyc_output/coverage.json",
Expand Down
85 changes: 85 additions & 0 deletions test/e2e/commands/node_upgrade.test.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/**
* Copyright (C) 2024 Hedera Hashgraph, LLC
*
* Licensed under the Apache License, Version 2.0 (the ""License"");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an ""AS IS"" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @jest-environment steps
*/
import { afterAll, describe, expect, it } from '@jest/globals'
import { flags } from '../../../src/commands/index.mjs'
import {
accountCreationShouldSucceed,
balanceQueryShouldSucceed,
bootstrapNetwork,
getDefaultArgv,
HEDERA_PLATFORM_VERSION_TAG
} from '../../test_util.js'
import { getNodeLogs, getTmpDir } from '../../../src/core/helpers.mjs'
import { NodeCommand } from '../../../src/commands/node.mjs'
import { HEDERA_HAPI_PATH, ROOT_CONTAINER } from '../../../src/core/constants.mjs'
import fs from 'fs'

describe('Node upgrade', () => {
const namespace = 'node-upgrade'
const argv = getDefaultArgv()
argv[flags.nodeIDs.name] = 'node1,node2,node3'
argv[flags.generateGossipKeys.name] = true
argv[flags.generateTlsKeys.name] = true
argv[flags.persistentVolumeClaims.name] = true
// set the env variable SOLO_FST_CHARTS_DIR if developer wants to use local FST charts
argv[flags.chartDirectory.name] = process.env.SOLO_FST_CHARTS_DIR ? process.env.SOLO_FST_CHARTS_DIR : undefined
argv[flags.releaseTag.name] = HEDERA_PLATFORM_VERSION_TAG
argv[flags.namespace.name] = namespace
const bootstrapResp = bootstrapNetwork(namespace, argv)
const nodeCmd = bootstrapResp.cmd.nodeCmd
const accountCmd = bootstrapResp.cmd.accountCmd
const k8 = bootstrapResp.opts.k8

afterAll(async () => {
await getNodeLogs(k8, namespace)
await k8.deleteNamespace(namespace)
}, 600000)

it('should succeed with init command', async () => {
const status = await accountCmd.init(argv)
expect(status).toBeTruthy()
}, 450000)

it('should upgrade all nodes on the network successfully', async () => {
await nodeCmd.prepareUpgrade()
await nodeCmd.downloadGeneratedFiles()
await nodeCmd.freezeUpgrade()

expect(nodeCmd.getUnusedConfigs(NodeCommand.DELETE_CONFIGS_NAME)).toEqual([
flags.app.constName,
flags.devMode.constName,
flags.endpointType.constName
])

await nodeCmd.accountManager.close()
}, 600000)

balanceQueryShouldSucceed(nodeCmd.accountManager, nodeCmd, namespace)

accountCreationShouldSucceed(nodeCmd.accountManager, nodeCmd, namespace)

it('config.txt should no longer contain removed nodeid', async () => {
// read config.txt file from first node, read config.txt line by line, it should not contain value of nodeId
const pods = await k8.getPodsByLabel(['fullstack.hedera.com/type=network-node'])
const podName = pods[0].metadata.name
const tmpDir = getTmpDir()
await k8.copyFrom(podName, ROOT_CONTAINER, `${HEDERA_HAPI_PATH}/config.txt`, tmpDir)
const configTxt = fs.readFileSync(`${tmpDir}/config.txt`, 'utf8')

Check warning on line 82 in test/e2e/commands/node_upgrade.test.mjs

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

test/e2e/commands/node_upgrade.test.mjs#L82

The application dynamically constructs file or path information.
console.log('config.txt:', configTxt)
}, 600000)
})

0 comments on commit 6253def

Please sign in to comment.