From baff6f49995fee7808540289af125a26b1e1eecd Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 8 May 2024 15:02:09 -0400 Subject: [PATCH 01/21] test skeleton Signed-off-by: MarkAckert --- .github/workflows/zwe-integration-tests.yml | 475 + tests/sanity/test/ssh-helper.d.ts | 10 + tests/system-integration/.eslintrc.js | 150 + tests/system-integration/.gitignore | 1 + tests/system-integration/.prettierrc.json | 10 + tests/system-integration/README.md | 49 + tests/system-integration/jest.config.ts | 36 + .../lib/src/ZoweYamlType.d.ts | 1184 ++ .../lib/src/ZoweYamlType.js | 18 + .../lib/src/__tests__/RemoteTestRunner.d.ts | 16 + .../lib/src/__tests__/RemoteTestRunner.js | 82 + .../lib/src/__tests__/ZoweYaml.d.ts | 4 + .../lib/src/__tests__/ZoweYaml.js | 49 + .../lib/src/__tests__/init/apfauth.tests.d.ts | 0 .../lib/src/__tests__/init/apfauth.tests.js | 9 + .../src/__tests__/init/certificate.tests.d.ts | 0 .../src/__tests__/init/certificate.tests.js | 9 + .../src/__tests__/init/composite.tests.d.ts | 0 .../lib/src/__tests__/init/composite.tests.js | 9 + .../src/__tests__/init/generate.tests.d.ts | 0 .../lib/src/__tests__/init/generate.tests.js | 9 + .../lib/src/__tests__/init/mvs.tests.d.ts | 0 .../lib/src/__tests__/init/mvs.tests.js | 9 + .../src/__tests__/init/security.tests.d.ts | 0 .../lib/src/__tests__/init/security.tests.js | 9 + .../lib/src/__tests__/init/stc.tests.d.ts | 0 .../lib/src/__tests__/init/stc.tests.js | 9 + .../lib/src/__tests__/init/vsam.test.d.ts | 1 + .../lib/src/__tests__/init/vsam.test.js | 38 + .../system-integration/lib/src/constants.d.ts | 18 + tests/system-integration/lib/src/constants.js | 67 + .../lib/src/globalSetup.d.ts | 1 + .../system-integration/lib/src/globalSetup.js | 75 + .../lib/src/globalTeardown.d.ts | 1 + .../lib/src/globalTeardown.js | 61 + tests/system-integration/lib/src/uss.d.ts | 4 + tests/system-integration/lib/src/uss.js | 44 + tests/system-integration/lib/src/utils.d.ts | 17 + tests/system-integration/lib/src/utils.js | 69 + tests/system-integration/lib/src/zowe.d.ts | 2 + tests/system-integration/lib/src/zowe.js | 35 + .../lib/tsconfig.tsbuildinfo | 1 + tests/system-integration/package-lock.json | 9966 +++++++++++++++++ tests/system-integration/package.json | 53 + tests/system-integration/reports/junit.xml | 9 + tests/system-integration/src/ZoweYamlType.ts | 1083 ++ .../src/__tests__/RemoteTestRunner.ts | 70 + .../src/__tests__/ZoweYaml.ts | 28 + .../init/__snapshots__/vsam.test.ts.snap | 87 + .../src/__tests__/init/apfauth.tests.ts | 10 + .../src/__tests__/init/certificate.tests.ts | 10 + .../src/__tests__/init/composite.tests.ts | 10 + .../src/__tests__/init/generate.tests.ts | 9 + .../src/__tests__/init/mvs.tests.ts | 10 + .../src/__tests__/init/security.tests.ts | 9 + .../src/__tests__/init/stc.tests.ts | 10 + .../src/__tests__/init/vsam.test.ts | 51 + tests/system-integration/src/constants.ts | 46 + tests/system-integration/src/globalSetup.ts | 53 + .../system-integration/src/globalTeardown.ts | 32 + tests/system-integration/src/uss.ts | 32 + tests/system-integration/src/utils.ts | 44 + tests/system-integration/src/zowe.ts | 34 + tests/system-integration/tsconfig.json | 112 + 64 files changed, 14349 insertions(+) create mode 100644 .github/workflows/zwe-integration-tests.yml create mode 100644 tests/sanity/test/ssh-helper.d.ts create mode 100644 tests/system-integration/.eslintrc.js create mode 100644 tests/system-integration/.gitignore create mode 100644 tests/system-integration/.prettierrc.json create mode 100644 tests/system-integration/README.md create mode 100644 tests/system-integration/jest.config.ts create mode 100644 tests/system-integration/lib/src/ZoweYamlType.d.ts create mode 100644 tests/system-integration/lib/src/ZoweYamlType.js create mode 100644 tests/system-integration/lib/src/__tests__/RemoteTestRunner.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/RemoteTestRunner.js create mode 100644 tests/system-integration/lib/src/__tests__/ZoweYaml.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/ZoweYaml.js create mode 100644 tests/system-integration/lib/src/__tests__/init/apfauth.tests.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/init/apfauth.tests.js create mode 100644 tests/system-integration/lib/src/__tests__/init/certificate.tests.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/init/certificate.tests.js create mode 100644 tests/system-integration/lib/src/__tests__/init/composite.tests.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/init/composite.tests.js create mode 100644 tests/system-integration/lib/src/__tests__/init/generate.tests.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/init/generate.tests.js create mode 100644 tests/system-integration/lib/src/__tests__/init/mvs.tests.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/init/mvs.tests.js create mode 100644 tests/system-integration/lib/src/__tests__/init/security.tests.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/init/security.tests.js create mode 100644 tests/system-integration/lib/src/__tests__/init/stc.tests.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/init/stc.tests.js create mode 100644 tests/system-integration/lib/src/__tests__/init/vsam.test.d.ts create mode 100644 tests/system-integration/lib/src/__tests__/init/vsam.test.js create mode 100644 tests/system-integration/lib/src/constants.d.ts create mode 100644 tests/system-integration/lib/src/constants.js create mode 100644 tests/system-integration/lib/src/globalSetup.d.ts create mode 100644 tests/system-integration/lib/src/globalSetup.js create mode 100644 tests/system-integration/lib/src/globalTeardown.d.ts create mode 100644 tests/system-integration/lib/src/globalTeardown.js create mode 100644 tests/system-integration/lib/src/uss.d.ts create mode 100644 tests/system-integration/lib/src/uss.js create mode 100644 tests/system-integration/lib/src/utils.d.ts create mode 100644 tests/system-integration/lib/src/utils.js create mode 100644 tests/system-integration/lib/src/zowe.d.ts create mode 100644 tests/system-integration/lib/src/zowe.js create mode 100644 tests/system-integration/lib/tsconfig.tsbuildinfo create mode 100644 tests/system-integration/package-lock.json create mode 100644 tests/system-integration/package.json create mode 100644 tests/system-integration/reports/junit.xml create mode 100644 tests/system-integration/src/ZoweYamlType.ts create mode 100644 tests/system-integration/src/__tests__/RemoteTestRunner.ts create mode 100644 tests/system-integration/src/__tests__/ZoweYaml.ts create mode 100644 tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap create mode 100644 tests/system-integration/src/__tests__/init/apfauth.tests.ts create mode 100644 tests/system-integration/src/__tests__/init/certificate.tests.ts create mode 100644 tests/system-integration/src/__tests__/init/composite.tests.ts create mode 100644 tests/system-integration/src/__tests__/init/generate.tests.ts create mode 100644 tests/system-integration/src/__tests__/init/mvs.tests.ts create mode 100644 tests/system-integration/src/__tests__/init/security.tests.ts create mode 100644 tests/system-integration/src/__tests__/init/stc.tests.ts create mode 100644 tests/system-integration/src/__tests__/init/vsam.test.ts create mode 100644 tests/system-integration/src/constants.ts create mode 100644 tests/system-integration/src/globalSetup.ts create mode 100644 tests/system-integration/src/globalTeardown.ts create mode 100644 tests/system-integration/src/uss.ts create mode 100644 tests/system-integration/src/utils.ts create mode 100644 tests/system-integration/src/zowe.ts create mode 100644 tests/system-integration/tsconfig.json diff --git a/.github/workflows/zwe-integration-tests.yml b/.github/workflows/zwe-integration-tests.yml new file mode 100644 index 0000000000..4176c175dd --- /dev/null +++ b/.github/workflows/zwe-integration-tests.yml @@ -0,0 +1,475 @@ +name: Zowe CICD Integration Tests +on: + workflow_dispatch: + inputs: + test-server: + description: 'Choose Test Server' + type: choice + required: true + default: 'Any zzow servers' + options: + - Any zzow servers + - zzow06 + - zzow07 + - zzow08 + - zzow06,zzow07,zzow08 + install-test: + description: 'Choose Zwe Test' + type: choice + required: true + default: Convenience Pax + options: + - Convenience Pax + - SMPE FMID + - SMPE PTF + - Extensions + - Keyring + - z/OS node v18 + - Non-strict Verify External Certificate + - Install PTF Twice + - VSAM Caching Storage Method + - Infinispan Caching Storage Method + - Config Manager + - Generate API Documentation + - Zowe Nightly Tests + - Zowe Release Tests + custom-zowe-artifactory-pattern-or-build-number: + description: 'Custom Zowe Artifactory Pattern or Build Number:' + required: false + custom-extension-list: + description: 'Custom Extension List:' + required: false + # FIXME: too slow to test 2, temporarily only test 1 + # default: 'sample-node-api;sample-trial-app' + default: 'sample-node-api' + RANDOM_DISPATCH_EVENT_ID: + description: 'random dispatch event id' + required: false + type: string + +# create a new branch to overwrite following defaults if necessary +env: + # constants + INSTALL_TEST_PATH: tests/installation + SANITY_TEST_PATH: tests/sanity + DEFAULT_ZOWE_PAX_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/*zowe*{branch-name}*.pax + DEFAULT_ZOWE_SMPE_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/*zowe-smpe*{branch-name}*.zip + DEFAULT_ZOWE_CLI_ARTIFACTORY_PATTERN: PLACE_HOLDER/org/zowe/cli/zowe-cli-package/*zowe-cli-package-2*.zip + DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/{ext-name}/*/{ext-name}-*.pax + + # below block can be overwritten, adjusted by DevOps only + # ZOS_NODE_VERSION more to choose from: v16.20.1, v18.16.0 + ZOS_NODE_VERSION: v16.20.1 + CLIENT_NODE_VERSION: v12.18.3 + INSTALL_TEST_DEBUG_INFORMATION: zowe-install-test:* + SANITY_TEST_DEBUG_INFORMATION: zowe-sanity-test:* + + # catalogue of files associated with install test configurations + CONVENIENCE_PAX_TESTFILE: basic/install.ts + SMPE_FMID_TESTFILE: basic/install-fmid.ts + SMPE_PTF_TESTFILE: basic/install-ptf.ts + EXTENSIONS_TESTFILE: basic/install-ext.ts + KEYRING_TESTFILE: extended/keyring.ts + ZOS_NODE_V18_TESTFILE: extended/node-versions/node-v18.ts + NON_STRICT_VERIFY_EXTERNAL_CERTIFICATE_TESTFILE: extended/certificates/nonstrict-verify-external-certificate.ts + INSTALL_PTF_TWICE_TESTFILE: extended/install-ptf-two-times.ts + VSAM_CACHING_STORAGE_METHOD_TESTFILE: extended/caching-storages/vsam-storage.ts + INFINISPAN_CACHING_STORAGE_METHOD_TESTFILE: extended/caching-storages/infinispan-storage.ts + CONFIG_MANAGER_TESTFILE: extended/config-manager/enable-config-manager.ts + GENERAL_API_DOCUMENTATION_TESTFILE: basic/install-api-gen.ts + ZOWE_NIGHTLY_TESTS_FULL: basic/install.ts(all);basic/install-ptf.ts(all) + ZOWE_RELEASE_TESTS_FULL: basic/install.ts(all);basic/install-ptf.ts(all);basic/install-ext.ts(any);extended/keyring.ts(all);extended/node-versions/node-v18.ts(zzow08):extended/certificates/nonstrict-verify-external-certificate.ts(any);extended/caching-storages/infinispan-storage.ts(any);extended/config-manager/enable-config-manager.ts(any) + +jobs: + display-dispatch-event-id: + if: github.event.inputs.RANDOM_DISPATCH_EVENT_ID != '' + runs-on: ubuntu-latest + steps: + - name: RANDOM_DISPATCH_EVENT_ID is ${{ github.event.inputs.RANDOM_DISPATCH_EVENT_ID }} + run: echo "prints random dispatch event id sent from workflow dispatch event" + + check-permission: + runs-on: ubuntu-latest + steps: + # this action will fail the whole workflow if permission check fails + - name: check permission + uses: zowe-actions/shared-actions/permission-check@main + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + + make-matrix: + runs-on: ubuntu-latest + needs: check-permission + steps: + - name: '[Prep 1] Checkout' + uses: actions/checkout@v2 + + - name: Make matrix + id: set-matrix + run: | + cd .github/scripts/cicd_test + chmod +x make_matrix.sh + source make_matrix.sh + env: + test_server: ${{ github.event.inputs.test-server }} + install_test_choice: ${{ github.event.inputs.install-test }} + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + + cicd-test: + runs-on: ubuntu-latest + needs: make-matrix + strategy: + matrix: ${{ fromJson(needs.make-matrix.outputs.matrix) }} + fail-fast: false + environment: ${{ matrix.server }} + steps: + - name: '[Prep 1] Checkout' + uses: actions/checkout@v2 + + - name: '[Prep 2] Setup Node' + uses: actions/setup-node@v3 + with: + node-version: '18' + + - name: '[Prep 3] Cache node modules' + uses: actions/cache@v2 + with: + # npm cache files are stored in `~/.npm` on Linux/macOS + path: | + ~/.npm + ~/.nvm/.cache + ~/.nvm/versions + key: ${{ runner.os }}-build-cache-node-modules-${{ hashFiles('tests/installation/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-cache-node-modules- + + - name: '[Prep 4] Setup jFrog CLI' + uses: jfrog/setup-jfrog-cli@v2 + env: + JF_ENV_1: ${{ secrets.JF_ARTIFACTORY_TOKEN }} + + - name: '[Prep 5] Validate package.json' + uses: zowe-actions/shared-actions/validate-package-json@main + + - name: '[Prep 6] Prepare workflow' + uses: zowe-actions/shared-actions/prepare-workflow@main + + - name: '[Prep 7] Additional Prep work' + id: more-test-prep + run: | + cd .github/scripts/cicd_test/prep7_more_test_prep + chmod +x *.sh + source 00_init.sh + source 01_helper_functions.sh + source 02_process_zowe_art_pattern.sh + source 03_process_test_server.sh + source 04_process_cli_art_pattern.sh + source 05_process_ext_list.sh + source 06_process_outputs.sh + env: + CURRENT_BRANCH: ${{ env.CURRENT_BRANCH }} + MATRIX_TEST: ${{ matrix.test }} + MATRIX_SERVER: ${{ matrix.server }} + INPUT_CUSTOM_ZOWE_ART_PAT_OR_BLDNUM: ${{ github.event.inputs.custom-zowe-artifactory-pattern-or-build-number }} + CUSTOM_ZOWE_CLI_ARTIFACTORY_PATTERN: ${{ github.event.inputs.custom-zowe-cli-artifactory-pattern }} + CUSTOM_EXTENSION_LIST: ${{ github.event.inputs.custom-extension-list }} + + - name: '[Setup 1] Project Setup 1' + working-directory: ${{ env.INSTALL_TEST_PATH }} + run: | + npm ci + npm run build + + - name: '[Setup 2] Project Setup 2' + working-directory: ${{ env.SANITY_TEST_PATH }} + run: | + npm ci + + - name: '[Lint 1] Lint 1' + timeout-minutes: 2 + working-directory: ${{ env.INSTALL_TEST_PATH }} + run: | + npm run lint + + - name: '[Lint 2] Lint 2' + timeout-minutes: 2 + working-directory: ${{ env.SANITY_TEST_PATH }} + run: | + npm run lint + + - name: '[Download 1] Download zowe.pax or smpe-zowe.zip' + uses: zowe-actions/shared-actions/jfrog-download@main + with: + source-path-or-pattern: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} + default-target-path: ${{ runner.temp }}/zowe/ + extra-options: --flat=true + expected-count: 1 + + - name: '[Download 2] Download cli package' + uses: zowe-actions/shared-actions/jfrog-download@main + with: + source-path-or-pattern: ${{ steps.more-test-prep.outputs.ZOWE_CLI_ARTIFACTORY_FINAL }} + default-target-path: ${{ runner.temp }}/cli/ + extra-options: --flat=true --explode=true + expected-count: 1 + + - name: '[Install] Install CLI' + timeout-minutes: 10 + working-directory: ${{ runner.temp }}/cli + run: npm install -g zowe-cli*.tgz + + - name: '[Comment] Post comments on PR about what tests are gonna be run' + uses: actions/github-script@v5 + id: create-comment + if: startsWith(env.CURRENT_BRANCH, 'PR-') + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + var installTest = "${{ github.event.inputs.install-test }}" + if (installTest == '') { + // if null, this is very likely to be triggered by pr auto test + installTest = 'Convenience Pax' + } + + var prNum='${{ env.CURRENT_BRANCH }}'.split('-')[1] + + var body=`Test workflow ${context.runNumber} is started.\n` + body += `Running install test: ${installTest} \n` + body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` + body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` + body += `Acquiring the test server lock first, please wait... \n ` + body += `ETA: unknown (This ETA will get updated once the machine lock is acquired) \n` + body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` + + const { data: comment } = await github.rest.issues.createComment({ + issue_number: prNum, + owner: context.repo.owner, + repo: context.repo.repo, + body: body + }); + + return comment.id; + + - name: '[LOCK] Lock marist servers' + uses: zowe-actions/shared-actions/lock-resource@main + with: + lock-repository: ${{ github.repository }} + github-token: ${{ secrets.GITHUB_TOKEN }} + lock-resource-name: zowe-zwe-system-test-${{ steps.more-test-prep.outputs.TEST_SERVER }}-lock + lock-avg-retry-interval: 60 + + - name: '[Comment] Update comment after lock is acquired' + uses: actions/github-script@v5 + if: steps.create-comment.outputs.result != '' + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + var installTest = "${{ github.event.inputs.install-test }}" + var eta + if (installTest == '') { + // if null, this is very likely to be triggered by pr auto test + installTest = 'Convenience Pax' + } + + // get ETA for each test run + switch(installTest) { + case 'Convenience Pax': + eta = 53 + break; + case 'SMPE PTF': + eta = 68 + break; + case 'Extensions': + eta = 67 + break; + case 'Keyring': + eta = 53 + break; + case 'z/OS node v18': + eta = 45 + break; + case 'Infinispan Caching Storage Method': + eta = 51 + break; + case 'VSAM Caching Storage Method': + eta = 51 + break; + case 'Non-strict Verify External Certificate': + eta = 51 + break; + case 'Zowe Release Tests': + eta = 376 + break; + default: + } + + var expectedTimeString + if (eta != '') { + const finish_time = new Date(new Date().getTime() + eta*60*1000); + const finish_time_EST = finish_time.toLocaleString('en-CA', { timeZone: 'Canada/Eastern' }).split(', ')[1] + " EST" + const finish_time_CET = finish_time.toLocaleString('en-EU', { timeZone: 'Europe/Prague' }).split(', ')[1] + " CET" + const finish_time_UTC = finish_time.toLocaleString('en-GB', { timeZone: 'Europe/London' }).split(', ')[1] + " GMT" + const finish_time_PST = finish_time.toLocaleString('en-US', { timeZone: 'America/Los_Angeles' }).split(', ')[1] + " PST" + expectedTimeString = `Check back around: \n ${finish_time_EST} | ${finish_time_CET} | ${finish_time_UTC} | ${finish_time_PST} \n` + } + else { + eta = 'unknown' + } + + var body=`Test workflow ${context.runNumber} is started.\n` + body += `Running install test: ${installTest} \n` + body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` + body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` + body += `Lock acquired, start the test now, please wait... \n ` + body += `ETA: ${eta} mins \n` + if (expectedTimeString != '') { + body += `${expectedTimeString} \n` + } + body += `Result: (will get updated once test is finished) \n` + body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` + + github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: ${{ steps.create-comment.outputs.result }}, + body: body + }); + + - name: '[Test] Test starts from here' + timeout-minutes: 180 + working-directory: ${{ env.INSTALL_TEST_PATH }} + run: npm test -- --testPathPattern --detectOpenHandles dist/__tests__/$(echo "${{ matrix.test }}" | sed "s/.ts/.js/g") + env: + ANSIBLE_FORCE_COLOR: true + TEST_SERVER: ${{ steps.more-test-prep.outputs.TEST_SERVER_NICKNAME }} + ZOWE_BUILD_LOCAL: "${{ runner.temp }}/zowe/${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL_FILENAME }}" + ZOWE_DOCKER_URL: ${{ steps.more-test-prep.outputs.ZOWE_TP_DOCKER_ARTIFACTORY_URL }} + EXTENSIONS_LIST: ${{ steps.more-test-prep.outputs.EXTENSION_LIST }} + SANITY_TEST_DEBUG: ${{ env.SANITY_TEST_DEBUG_INFORMATION }} + DEBUG: ${{ env.INSTALL_TEST_DEBUG_INFORMATION }} + SSH_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT }} + SSH_USER: ${{ secrets.SSH_USER }} + SSH_PASSWORD: ${{ secrets.SSH_PASSWORD }} + OKTA_HOSTNAME: ${{ secrets.OKTA_HOSTNAME }} + OKTA_CLIENT_ID: ${{ secrets.OKTA_CLIENT_ID }} + OKTA_CLIENT_SECRET: ${{ secrets.OKTA_CLIENT_SECRET }} + OKTA_USER: ${{ secrets.OKTA_USER }} + OKTA_PASSWORD: ${{ secrets.OKTA_PASSWORD }} + OIDC_REGISTRY: ${{ secrets.OIDC_REGISTRY }} + ZOS_NODE_HOME: ${{ steps.more-test-prep.outputs.NODE_HOME_PATTERN }} + # # ANSIBLE_VERBOSE: -vvv + + - name: '[After Test 1] Prepare to upload test report' + if: always() + working-directory: ${{ env.INSTALL_TEST_PATH }} + run: | + echo CURRENT_TIME=$(date +%s) >> $GITHUB_ENV + echo TEST_NAME=$(echo "${{ matrix.test }}" | sed 's#.*\/##g') >> $GITHUB_ENV + + - name: '[After Test 2] Upload test report' + if: always() + uses: actions/upload-artifact@v3 + with: + name: InstallTestReports-${{ env.TEST_NAME }}-${{ steps.more-test-prep.outputs.TEST_SERVER_NICKNAME }}-${{ github.run_id }}-${{ env.CURRENT_TIME }} + path: ${{ env.INSTALL_TEST_PATH }}/reports/ + + - name: '[Comment] Update PR comment to indicate test succeeded' + uses: actions/github-script@v5 + if: steps.create-comment.outputs.result != '' && success() + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + var installTest = "${{ github.event.inputs.install-test }}" + var eta + if (installTest == '') { + // if null, this is very likely to be triggered by pr auto test + installTest = 'Convenience Pax' + } + + var body=`Test workflow ${context.runNumber} is started.\n` + body += `Running install test: ${installTest} \n` + body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` + body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` + body += `Result: SUCCESS \n` + body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` + + github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: ${{ steps.create-comment.outputs.result }}, + body: body + }); + + - name: '[Comment] Update PR comment to indicate test failed' + uses: actions/github-script@v5 + if: steps.create-comment.outputs.result != '' && failure() + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + var installTest = "${{ github.event.inputs.install-test }}" + var eta + if (installTest == '') { + // if null, this is very likely to be triggered by pr auto test + installTest = 'Convenience Pax' + } + + var body=`Test workflow ${context.runNumber} is started.\n` + body += `Running install test: ${installTest} \n` + body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` + body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` + body += `Result: FAILURE \n` + body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` + + github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: ${{ steps.create-comment.outputs.result }}, + body: body + }); + + - name: '[Comment] Update PR comment to indicate test cancelled' + uses: actions/github-script@v5 + if: steps.create-comment.outputs.result != '' && cancelled() + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + var installTest = "${{ github.event.inputs.install-test }}" + var eta + if (installTest == '') { + // if null, this is very likely to be triggered by pr auto test + installTest = 'Convenience Pax' + } + + var body=`Test workflow ${context.runNumber} is started.\n` + body += `Running install test: ${installTest} \n` + body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` + body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` + body += `Result: CANCELLED \n` + body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` + + github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: ${{ steps.create-comment.outputs.result }}, + body: body + }); + + # keep-curl: + # runs-on: ubuntu-latest + # needs: make-matrix + # strategy: + # matrix: ${{ fromJson(needs.make-matrix.outputs.matrix) }} + # fail-fast: false + # environment: ${{ matrix.server }} + # steps: + # - name: curl gateway + # timeout-minutes: 180 + # run: | + # sleep 30m + + # while sleep 5; + # do + # curl -k -s -S https://${{ secrets.SSH_HOST }}:7554 1>/dev/null || true; + # done diff --git a/tests/sanity/test/ssh-helper.d.ts b/tests/sanity/test/ssh-helper.d.ts new file mode 100644 index 0000000000..f9ca1715a4 --- /dev/null +++ b/tests/sanity/test/ssh-helper.d.ts @@ -0,0 +1,10 @@ +export function prepareConnection(): any; +export function cleanUpConnection(): void; +export function executeCommand(command: any, context?: {}): Promise<{ + rc: any; + stdout: any; + stderr: any; +}>; +export function executeCommandWithNoError(command: any, context?: {}): Promise; +export function testCommand(command: any, context?: {}, expected?: {}, exact_match?: boolean): Promise; +export function getTmpDir(): Promise; diff --git a/tests/system-integration/.eslintrc.js b/tests/system-integration/.eslintrc.js new file mode 100644 index 0000000000..f0147f7849 --- /dev/null +++ b/tests/system-integration/.eslintrc.js @@ -0,0 +1,150 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +module.exports = { + env: { + browser: false, + node: true, + es6: true, + jest: true, + }, + root: true, + plugins: ['node', 'prettier', 'header'], + extends: ['eslint:recommended', 'plugin:node/recommended', 'prettier'], + ignorePatterns: ['.github/**/*.yml', '**/.build', '**/build', '**/dist', '**/node_modules', '**/release', '**/lib'], + rules: { + 'header/header': [ + 2, + 'block', + [ + '\n * This program and the accompanying materials are made available under the terms of the' + + '\n * Eclipse Public License v2.0 which accompanies this distribution, and is available at' + + '\n * https://www.eclipse.org/legal/epl-v20.html' + + '\n *' + + '\n * SPDX-License-Identifier: EPL-2.0' + + '\n *' + + '\n * Copyright Contributors to the Zowe Project.' + + '\n ', + ], + 2, + ], + // eslint-disable-next-line node/no-unsupported-features/es-syntax + 'prettier/prettier': ['error', { ...require('./.prettierrc.json') }], + 'block-scoped-var': 'error', + eqeqeq: ['error', 'always', { null: 'ignore' }], + 'no-var': 'error', + 'prefer-const': 'error', + 'eol-last': 'error', + 'prefer-arrow-callback': 'error', + 'no-trailing-spaces': 'error', + quotes: ['warn', 'single', { avoidEscape: true }], + 'no-restricted-properties': [ + 'error', + { + object: 'describe', + property: 'only', + }, + { + object: 'it', + property: 'only', + }, + ], + }, + overrides: [ + { + files: ['**/*.ts', '**/*.tsx'], + parser: '@typescript-eslint/parser', + extends: ['plugin:@typescript-eslint/recommended', 'google'], + rules: { + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/no-warning-comments': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/camelcase': 'off', + indent: [ + 'error', + 2, + { + CallExpression: { + arguments: 1, + }, + FunctionDeclaration: { + body: 1, + parameters: 1, + }, + FunctionExpression: { + body: 1, + parameters: 1, + }, + MemberExpression: 1, + ObjectExpression: 1, + SwitchCase: 1, + ignoredNodes: ['ConditionalExpression'], + }, + ], + 'max-len': [ + 'error', + { + code: 140, + comments: 160, + tabWidth: 2, + ignoreUrls: true, + ignoreTemplateLiterals: true, + }, + ], + 'operator-linebreak': ['error', 'after'], + 'object-curly-spacing': ['error', 'always'], + 'node/no-missing-import': 'off', + 'node/no-extraneous-import': 'off', + 'node/no-empty-function': 'off', + 'node/no-unsupported-features/es-syntax': 'off', + 'node/no-unpublished-import': 'off', + 'node/no-missing-require': 'off', + 'node/shebang': 'off', + 'no-dupe-class-members': 'off', + 'require-atomic-updates': 'off', + 'require-jsdoc': [ + 'off', + { + require: { + FunctionDeclaration: true, + MethodDefinition: true, + ClassDeclaration: true, + }, + }, + ], + 'valid-jsdoc': [ + 'off', + { + requireParamDescription: false, + requireReturnDescription: false, + requireReturn: false, + prefer: { returns: 'return' }, + }, + ], + }, + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + }, + }, + { + files: [' *.test.ts', '*.test.tsx'], + rules: { + 'node/no-unpublished-import': 'off', + '@typescript-eslint/ban-ts-comment': 'warn', + }, + }, + ], +}; diff --git a/tests/system-integration/.gitignore b/tests/system-integration/.gitignore new file mode 100644 index 0000000000..bb56973d79 --- /dev/null +++ b/tests/system-integration/.gitignore @@ -0,0 +1 @@ +.build/* diff --git a/tests/system-integration/.prettierrc.json b/tests/system-integration/.prettierrc.json new file mode 100644 index 0000000000..8a8fdb373d --- /dev/null +++ b/tests/system-integration/.prettierrc.json @@ -0,0 +1,10 @@ +{ + "bracketSpacing": true, + "singleQuote": true, + "trailingComma": "all", + "arrowParens": "always", + "semi": true, + "tabWidth": 2, + "printWidth": 135, + "useTabs": false +} diff --git a/tests/system-integration/README.md b/tests/system-integration/README.md new file mode 100644 index 0000000000..d9ba4ebc1c --- /dev/null +++ b/tests/system-integration/README.md @@ -0,0 +1,49 @@ +# Zowe System-Integration Test + +Runs integration tests for components in the zowe-install-packaging repository which require a backend system to execute. + +## Programming Language And Main Testing Method + +- Node.js, with recommended [v20.x LTS](https://nodejs.org/docs/latest-v20.x/api/index.html) +- [Jest](https://jestjs.io/) + +## Testing Behaviors & Limitations + +These tests currently work by uploading the `zwe` command line tool as it currently exists in this repo; i.e. not from a PAX file. This means that certain capabilities which require compiled java files in the `/bin/utils` dir will not work. + +These tests expect a valid configmgr PAX file to exist under a `.build` directory in the test directory (`tests/system-integration/.build/cfgmgr*pax`). The automated workflow will download configmgr using the `manifest.json.template`` in the root directory. + + +## Run Test Cases On Your Local + +### Prepare NPM Packages + +Run `npm install` to install dependencies. + +### Build the test cases + +Run `npm run-script build` to build the test cases. + +### Prepare a configmgr PAX + +Download and place a valid config manager PAX file under the `.build` directory in this project. + +### Start Test + +Example command: + +``` +TEST_SERVER=my-server \ + SSH_HOST=test-server-host-name \ + SSH_PORT=22 \ + ZOSMF_PORT = 10443 \ + SSH_USER=********* \ + SSH_PASSWORD=********* \ + REMOTE_TEST_ROOT_DIR=/some/dir \ + DEBUG=zowe-system-integration-test:* \ + npm test +``` + +**Notes**: +- `my-server` should be a valid host defined in [Ansible hosts file](../../playbooks/hosts). +- Default Ansible verbose mode is `-v`. You can change by assign environment variable `ANSIBLE_VERBOSE`. diff --git a/tests/system-integration/jest.config.ts b/tests/system-integration/jest.config.ts new file mode 100644 index 0000000000..d2a3af3759 --- /dev/null +++ b/tests/system-integration/jest.config.ts @@ -0,0 +1,36 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import type { Config } from 'jest'; + +const config: Config = { + // runner: "./dist/worker-group-runner.js", + globalSetup: '/src/globalSetup.ts', + globalTeardown: '/src/globalTeardown.ts', + preset: 'ts-jest', + testRegex: '__tests__.*\\.*?\\.(spec|test)\\.ts$', + reporters: [ + 'default', + [ + 'jest-junit', + { + suiteName: 'Zowe System Integration Test', + outputDirectory: './reports', + classNameTemplate: '{filepath}', + titleTemplate: '{classname} - {title}', + }, + ], + ], + testTimeout: 3600000, + verbose: false, + silent: false, +}; + +export default config; diff --git a/tests/system-integration/lib/src/ZoweYamlType.d.ts b/tests/system-integration/lib/src/ZoweYamlType.d.ts new file mode 100644 index 0000000000..8c518a6674 --- /dev/null +++ b/tests/system-integration/lib/src/ZoweYamlType.d.ts @@ -0,0 +1,1184 @@ +import { FromSchema } from 'json-schema-to-ts'; +declare const serverCommonSchema: { + $schema: 'https://json-schema.org/draft/2019-09/schema'; + $id: 'schemas/v2/server-common'; + title: 'Common types'; + description: 'Configuration types that are common in Zowe and may be referenced by multiple components'; + $defs: { + semverVersion: { + $anchor: 'zoweSemverVersion'; + type: 'string'; + description: 'A semantic version, see https://semver.org/'; + pattern: '^[0-9]*\\.[0-9]*\\.[0-9]*(-*[a-zA-Z][0-9a-zA-Z\\-\\.]*)?(\\+[0-9a-zA-Z\\-\\.]*)?$'; + }; + semverRange: { + $anchor: 'zoweSemverRange'; + type: 'string'; + description: 'A semantic version, see https://semver.org/'; + pattern: '^(([\\^\\~\\>\\<]?)|(>=?)|(<=?))[0-9]*\\.[0-9]*\\.[0-9]*(-*[a-zA-Z][0-9a-zA-Z\\-\\.]*)?(\\+[0-9a-zA-Z\\-\\.]*)?$'; + }; + dataset: { + $anchor: 'zoweDataset'; + type: 'string'; + description: 'A 44-char all caps dotted ZOS name'; + pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$'; + minLength: 3; + maxLength: 44; + }; + datasetMember: { + $anchor: 'zoweDatasetMember'; + type: 'string'; + description: 'A 1-8-char all caps dataset member name'; + pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$'; + minLength: 1; + maxLength: 8; + }; + jobname: { + $anchor: 'zoweJobname'; + type: 'string'; + pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$'; + minLength: 3; + maxLength: 8; + }; + user: { + $anchor: 'zoweUser'; + type: 'string'; + pattern: '^([A-Z0-9$#@]){1,8}$'; + minLength: 1; + maxLength: 8; + }; + token: { + $anchor: 'zoweToken'; + type: 'string'; + pattern: '^([A-Z0-9$#@.]){1,32}$'; + minLength: 1; + maxLength: 32; + }; + path: { + $anchor: 'zowePath'; + type: 'string'; + minLength: 1; + maxLength: 1024; + }; + file: { + $anchor: 'zoweFile'; + type: 'string'; + minLength: 1; + maxLength: 256; + }; + reverseDomainNotation: { + $anchor: 'zoweReverseDomainNotation'; + type: 'string'; + pattern: '^[A-Za-z]{2,6}(\\.[A-Za-z0-9-]{1,62}[A-Za-z0-9])+$'; + }; + ipv4: { + $anchor: 'zoweIpv4'; + type: 'string'; + pattern: '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'; + }; + tcpPort: { + $anchor: 'zoweTcpPort'; + type: 'integer'; + description: 'TCP network port'; + minimum: 1024; + maximum: 65535; + }; + reservedTcpPort: { + $anchor: 'zoweReservedTcpPort'; + type: 'integer'; + description: 'Reserved TCP network ports. Can be used but discouraged due to their standardized use by common programs'; + deprecated: true; + minimum: 1; + maximum: 1023; + }; + }; +}; +declare const zoweSchema: { + $schema: 'https://json-schema.org/draft/2019-09/schema'; + $id: 'https://zowe.orgschemas/v2/server-base'; + title: 'Zowe configuration file'; + description: 'Configuration file for Zowe (zowe.org) version 2.'; + type: 'object'; + additionalProperties: false; + properties: { + zowe: { + type: 'object'; + additionalProperties: false; + properties: { + setup: { + type: 'object'; + additionalProperties: false; + description: 'Zowe setup configurations used by "zwe install" and "zwe init" commands.'; + properties: { + dataset: { + type: 'object'; + additionalProperties: false; + description: 'MVS data set related configurations'; + properties: { + prefix: { + type: 'string'; + description: 'Where Zowe MVS data sets will be installed'; + }; + proclib: { + type: 'string'; + description: 'PROCLIB where Zowe STCs will be copied over'; + }; + parmlib: { + type: 'string'; + description: 'Zowe PARMLIB'; + }; + parmlibMembers: { + type: 'object'; + additionalProperties: false; + description: 'Holds Zowe PARMLIB members for plugins'; + properties: { + zis: { + $ref: 'schemas/v2/server-common#zoweDatasetMember'; + description: 'PARMLIB member used by ZIS'; + }; + }; + }; + jcllib: { + type: 'string'; + description: 'JCL library where Zowe will store temporary JCLs during initialization'; + }; + loadlib: { + type: 'string'; + description: 'States the dataset where Zowe executable utilities are located'; + default: '.SZWELOAD'; + }; + authLoadlib: { + type: 'string'; + description: 'The dataset that contains any Zowe core code that needs to run APF-authorized, such as ZIS'; + default: '.SZWEAUTH'; + }; + authPluginLib: { + type: 'string'; + description: 'APF authorized LOADLIB for Zowe ZIS Plugins'; + }; + }; + }; + zis: { + type: 'object'; + additionalProperties: false; + description: 'ZIS related configurations. This setup is optional.'; + properties: { + parmlib: { + type: 'object'; + additionalProperties: false; + description: 'ZIS related PARMLIB configurations. This setup is optional.'; + properties: { + keys: { + type: 'object'; + additionalProperties: true; + description: 'Used to specify special ZIS key types with key-value pairs'; + examples: [ + 'key.sample.1: list', + 'key.sample.2: list' + ]; + }; + }; + }; + }; + }; + security: { + type: 'object'; + additionalProperties: false; + description: 'Security related configurations. This setup is optional.'; + properties: { + product: { + type: 'string'; + description: 'Security product name. Can be RACF, ACF2 or TSS'; + enum: [ + 'RACF', + 'ACF2', + 'TSS' + ]; + default: 'RACF'; + }; + groups: { + type: 'object'; + additionalProperties: false; + description: 'security group name'; + properties: { + admin: { + type: 'string'; + description: 'Zowe admin user group'; + default: 'ZWEADMIN'; + }; + stc: { + type: 'string'; + description: 'Zowe STC group'; + default: 'ZWEADMIN'; + }; + sysProg: { + type: 'string'; + description: 'Zowe SysProg group'; + default: 'ZWEADMIN'; + }; + }; + }; + users: { + type: 'object'; + additionalProperties: false; + description: 'security user name'; + properties: { + zowe: { + type: 'string'; + description: 'Zowe runtime user name of main service'; + default: 'ZWESVUSR'; + }; + zis: { + type: 'string'; + description: 'Zowe runtime user name of ZIS'; + default: 'ZWESIUSR'; + }; + }; + }; + stcs: { + type: 'object'; + additionalProperties: false; + description: 'STC names'; + properties: { + zowe: { + type: 'string'; + description: 'STC name of main service'; + default: 'ZWESLSTC'; + }; + zis: { + type: 'string'; + description: 'STC name of ZIS'; + default: 'ZWESISTC'; + }; + aux: { + type: 'string'; + description: 'STC name of Auxiliary Service'; + default: 'ZWESASTC'; + }; + }; + }; + }; + }; + certificate: { + type: 'object'; + additionalProperties: false; + if: { + properties: { + type: { + const: 'PKCS12'; + }; + }; + }; + then: { + required: [ + 'pkcs12' + ]; + }; + else: { + required: [ + 'keyring' + ]; + }; + description: 'Certificate related configurations'; + properties: { + type: { + type: 'string'; + description: 'Type of certificate storage method.'; + enum: [ + 'PKCS12', + 'JCEKS', + 'JCECCAKS', + 'JCERACFKS', + 'JCECCARACFKS', + 'JCEHYBRIDRACFKS' + ]; + default: 'PKCS12'; + }; + pkcs12: { + type: 'object'; + additionalProperties: false; + description: 'PKCS#12 keystore settings'; + properties: { + directory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Keystore directory'; + }; + name: { + type: 'string'; + description: 'Certificate alias name. Note: please use all lower cases as alias.'; + default: 'localhost'; + }; + password: { + type: 'string'; + description: 'Keystore password'; + default: 'password'; + }; + caAlias: { + type: 'string'; + description: 'Alias name of self-signed certificate authority. Note: please use all lower cases as alias.'; + default: 'local_ca'; + }; + caPassword: { + type: 'string'; + description: 'Password of keystore stored self-signed certificate authority.'; + default: 'local_ca_password'; + }; + lock: { + type: 'boolean'; + description: 'Whether to restrict the permissions of the keystore after creation'; + }; + import: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to import certificate from another PKCS#12 keystore.'; + properties: { + keystore: { + type: 'string'; + description: 'Existing PKCS#12 keystore which holds the certificate issued by external CA.'; + }; + password: { + type: 'string'; + description: 'Password of the above keystore'; + }; + alias: { + type: 'string'; + description: 'Certificate alias will be imported. Note: please use all lower cases as alias.'; + }; + }; + }; + }; + }; + keyring: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you are using z/OS keyring'; + properties: { + owner: { + type: 'string'; + description: 'keyring owner. If this is empty, Zowe will use the user ID defined as zowe.setup.security.users.zowe.'; + }; + name: { + type: 'string'; + description: 'keyring name'; + }; + label: { + type: 'string'; + description: 'Label of Zowe certificate.'; + default: 'localhost'; + }; + caLabel: { + type: 'string'; + description: 'label of Zowe CA certificate.'; + default: 'localca'; + }; + connect: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to connect existing certificate in keyring to Zowe.'; + properties: { + user: { + type: 'string'; + description: 'Current owner of the existing certificate, can be SITE or an user ID.'; + }; + label: { + type: 'string'; + description: 'Label of the existing certificate will be connected to Zowe keyring.'; + }; + }; + }; + import: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to import existing certificate stored in data set to Zowe.'; + properties: { + dsName: { + type: 'string'; + description: 'Name of the data set holds the certificate issued by other CA. This data set should be in PKCS12 format and contain private key.'; + }; + password: { + type: 'string'; + description: 'Password for the PKCS12 data set.'; + }; + }; + }; + zOSMF: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to trust z/OSMF certificate authority in Zowe keyring.'; + properties: { + ca: { + type: 'string'; + description: 'z/OSMF certificate authority alias'; + }; + user: { + type: 'string'; + description: 'z/OSMF user. Zowe initialization utility can detect alias of z/OSMF CA for RACF security system. The automated detection requires this z/OSMF user as input.'; + }; + }; + }; + }; + }; + dname: { + type: 'object'; + additionalProperties: false; + description: 'Certificate distinguish name'; + properties: { + caCommonName: { + type: 'string'; + description: 'Common name of certificate authority generated by Zowe.'; + }; + commonName: { + type: 'string'; + description: 'Common name of certificate generated by Zowe.'; + }; + orgUnit: { + type: 'string'; + description: 'Organization unit of certificate generated by Zowe.'; + }; + org: { + type: 'string'; + description: 'Organization of certificate generated by Zowe.'; + }; + locality: { + type: 'string'; + description: 'Locality of certificate generated by Zowe. This is usually the city name.'; + }; + state: { + type: 'string'; + description: 'State of certificate generated by Zowe. You can also put province name here.'; + }; + country: { + type: 'string'; + description: '2 letters country code of certificate generated by Zowe.'; + }; + }; + }; + validity: { + type: 'integer'; + description: 'Validity days for Zowe generated certificates'; + default: 3650; + }; + san: { + type: 'array'; + description: 'Domain names and IPs should be added into certificate SAN. If this field is not defined, `zwe init` command will use `zowe.externalDomains`.'; + items: { + type: 'string'; + }; + }; + importCertificateAuthorities: { + type: 'array'; + description: 'PEM format certificate authorities will also be imported and trusted. If you have other certificate authorities want to be trusted in Zowe keyring, list the certificate labels here. **NOTE**, due to the limitation of RACDCERT command, this field should contain maximum 2 entries.'; + items: { + type: 'string'; + }; + }; + }; + }; + vsam: { + type: 'object'; + additionalProperties: false; + description: 'VSAM configurations if you are using VSAM as Caching Service storage'; + properties: { + mode: { + type: 'string'; + description: 'VSAM data set with Record-Level-Sharing enabled or not'; + enum: [ + 'NONRLS', + 'RLS' + ]; + default: 'NONRLS'; + }; + volume: { + type: 'string'; + description: 'Volume name if you are using VSAM in NONRLS mode'; + }; + storageClass: { + type: 'string'; + description: 'Storage class name if you are using VSAM in RLS mode'; + }; + }; + }; + }; + }; + runtimeDirectory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to where you installed Zowe.'; + }; + logDirectory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to where you want to store Zowe log files.'; + }; + workspaceDirectory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to where you want to store Zowe workspace files. Zowe workspace are used by Zowe component runtime to store temporary files.'; + }; + extensionDirectory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to where you want to store Zowe extensions. "zwe components install" will install new extensions into this directory.'; + }; + job: { + type: 'object'; + additionalProperties: false; + description: 'Customize your Zowe z/OS JES job.'; + properties: { + name: { + type: 'string'; + description: 'Job name of Zowe primary ZWESLSTC started task.'; + }; + prefix: { + type: 'string'; + description: 'A short prefix to customize address spaces created by Zowe job.'; + }; + }; + }; + network: { + $ref: '#/$defs/networkSettings'; + }; + extensionRegistry: { + type: 'object'; + description: 'Defines optional configuration for downloading extensions from an online or offline registry'; + required: [ + 'defaultHandler', + 'handlers' + ]; + properties: { + defaultHandler: { + type: 'string'; + description: 'The name of a handler specified in the handlers section. Will be used as the default for \'zwe components\' commands'; + }; + handlers: { + type: 'object'; + patternProperties: { + '^.*$': { + $ref: '#/$defs/registryHandler'; + }; + }; + }; + }; + }; + launcher: { + type: 'object'; + description: 'Set default behaviors of how the Zowe launcher will handle components'; + additionalProperties: false; + properties: { + restartIntervals: { + type: 'array'; + description: 'Intervals of seconds to wait before restarting a component if it fails before the minUptime value.'; + items: { + type: 'integer'; + }; + }; + minUptime: { + type: 'integer'; + default: 90; + description: 'The minimum amount of seconds before a component is considered running and the restart counter is reset.'; + }; + shareAs: { + type: 'string'; + description: 'Determines which SHAREAS mode should be used when starting a component'; + enum: [ + 'no', + 'yes', + 'must', + '' + ]; + default: 'yes'; + }; + unsafeDisableZosVersionCheck: { + type: 'boolean'; + description: 'Used to allow Zowe to warn, instead of error, when running on a version of z/OS that this version of Zowe hasn\'t been verified as working with'; + default: false; + }; + }; + }; + rbacProfileIdentifier: { + type: 'string'; + description: 'An ID used for determining resource names used in RBAC authorization checks'; + }; + cookieIdentifier: { + type: 'string'; + description: 'An ID that can be used by servers that distinguish their cookies from unrelated Zowe installs'; + }; + externalDomains: { + type: 'array'; + description: 'List of domain names of how you access Zowe from your local computer.'; + minItems: 1; + uniqueItems: true; + items: { + type: [ + 'string' + ]; + }; + }; + externalPort: { + $ref: '#/$defs/port'; + description: 'Port number of how you access Zowe APIML Gateway from your local computer.'; + }; + environments: { + type: 'object'; + description: 'Global environment variables can be applied to all Zowe high availability instances.'; + }; + launchScript: { + type: 'object'; + description: 'Customize Zowe launch scripts (zwe commands) behavior.'; + properties: { + logLevel: { + type: 'string'; + description: 'Log level for Zowe launch scripts.'; + enum: [ + '', + 'info', + 'debug', + 'trace' + ]; + }; + onComponentConfigureFail: { + type: 'string'; + description: 'Chooses how \'zwe start\' behaves if a component configure script fails'; + enum: [ + 'warn', + 'exit' + ]; + default: 'warn'; + }; + }; + }; + certificate: { + $ref: '#/$defs/certificate'; + description: 'Zowe certificate setup.'; + }; + verifyCertificates: { + type: 'string'; + description: 'Customize how Zowe should validate certificates used by components or other services.'; + enum: [ + 'STRICT', + 'NONSTRICT', + 'DISABLED' + ]; + }; + sysMessages: { + type: 'array'; + description: 'List of Zowe message portions when matched will be additionally logged into the system\'s log (such as syslog on z/OS). Note: Some messages extremely early in the Zowe lifecycle may not be added to the system\'s log'; + uniqueItems: true; + items: { + type: 'string'; + }; + }; + useConfigmgr: { + type: 'boolean'; + default: false; + description: 'Determines whether or not to use the features of configmgr such as multi-config, parmlib config, config templates, and schema validation. This effects the zwe command.'; + }; + configmgr: { + type: 'object'; + description: 'Controls how configmgr will be used by zwe'; + required: [ + 'validation' + ]; + properties: { + validation: { + type: 'string'; + enum: [ + 'STRICT', + 'COMPONENT-COMPAT' + ]; + description: 'States how configmgr will do validation: Will it quit on any error (STRICT) or quit on any error except the case of a component not having a schema file (COMPONENT-COMPAT)'; + }; + }; + }; + }; + }; + java: { + type: 'object'; + properties: { + home: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to Java home directory.'; + }; + }; + }; + node: { + type: 'object'; + properties: { + home: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to node.js home directory.'; + }; + }; + }; + zOSMF: { + type: 'object'; + additionalProperties: false; + properties: { + host: { + type: 'string'; + description: 'Host or domain name of your z/OSMF instance.'; + }; + port: { + $ref: '#/$defs/port'; + description: 'Port number of your z/OSMF instance.'; + }; + scheme: { + $ref: '#/$defs/scheme'; + description: 'Scheme used to connect to z/OSMF instance. Optional for outbout AT-TLS, defaults to https'; + }; + applId: { + type: 'string'; + description: 'Appl ID of your z/OSMF instance.'; + }; + }; + }; + components: { + type: 'object'; + patternProperties: { + '^.*$': { + $ref: '#/$defs/component'; + }; + }; + }; + haInstances: { + type: 'object'; + patternProperties: { + '^.*$': { + type: 'object'; + description: 'Configuration of Zowe high availability instance.'; + required: [ + 'hostname', + 'sysname' + ]; + properties: { + hostname: { + type: 'string'; + description: 'Host name of the Zowe high availability instance. This is hostname for internal communications.'; + }; + sysname: { + type: 'string'; + description: 'z/OS system name of the Zowe high availability instance. Some JES command will be routed to this system name.'; + }; + components: { + type: 'object'; + patternProperties: { + '^.*$': { + $ref: '#/$defs/component'; + }; + }; + }; + }; + }; + }; + }; + }; + $defs: { + port: { + type: 'integer'; + minimum: 0; + maximum: 65535; + }; + scheme: { + type: 'string'; + enum: [ + 'http', + 'https' + ]; + default: 'https'; + }; + certificate: { + oneOf: [ + { + $ref: '#/$defs/pkcs12-certificate'; + }, + { + $ref: '#/$defs/keyring-certificate'; + } + ]; + }; + 'pkcs12-certificate': { + type: 'object'; + additionalProperties: false; + required: [ + 'keystore', + 'truststore', + 'pem' + ]; + properties: { + keystore: { + type: 'object'; + additionalProperties: false; + description: 'Certificate keystore.'; + required: [ + 'type', + 'file', + 'alias' + ]; + properties: { + type: { + type: 'string'; + description: 'Keystore type.'; + const: 'PKCS12'; + }; + file: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to your PKCS#12 keystore.'; + }; + password: { + type: 'string'; + description: 'Password of your PKCS#12 keystore.'; + }; + alias: { + type: 'string'; + description: 'Certificate alias name of defined in your PKCS#12 keystore'; + }; + }; + }; + truststore: { + type: 'object'; + additionalProperties: false; + description: 'Certificate truststore.'; + required: [ + 'type', + 'file' + ]; + properties: { + type: { + type: 'string'; + description: 'Truststore type.'; + const: 'PKCS12'; + }; + file: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to your PKCS#12 keystore.'; + }; + password: { + type: 'string'; + description: 'Password of your PKCS#12 keystore.'; + }; + }; + }; + pem: { + type: 'object'; + additionalProperties: false; + description: 'Certificate in PEM format.'; + required: [ + 'key', + 'certificate' + ]; + properties: { + key: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to the certificate private key stored in PEM format.'; + }; + certificate: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to the certificate stored in PEM format.'; + }; + certificateAuthorities: { + description: 'List of paths to the certificate authorities stored in PEM format.'; + oneOf: [ + { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Paths to the certificate authorities stored in PEM format. You can separate multiple certificate authorities by comma.'; + }, + { + type: 'array'; + description: 'Path to the certificate authority stored in PEM format.'; + items: { + $ref: 'schemas/v2/server-common#zowePath'; + }; + } + ]; + }; + }; + }; + }; + }; + 'keyring-certificate': { + type: 'object'; + additionalProperties: false; + required: [ + 'keystore', + 'truststore' + ]; + properties: { + keystore: { + type: 'object'; + additionalProperties: false; + description: 'Certificate keystore.'; + required: [ + 'type', + 'file', + 'alias' + ]; + properties: { + type: { + type: 'string'; + description: 'Keystore type.'; + enum: [ + 'JCEKS', + 'JCECCAKS', + 'JCERACFKS', + 'JCECCARACFKS', + 'JCEHYBRIDRACFKS' + ]; + }; + file: { + type: 'string'; + description: 'Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.'; + pattern: '^safkeyring://.*'; + }; + password: { + type: 'string'; + description: 'Literally \'password\' may be needed when using keyrings for compatibility with java servers.'; + enum: [ + '', + 'password' + ]; + }; + alias: { + type: 'string'; + description: 'Certificate label of z/OS keyring. Case sensitivity and spaces matter.'; + }; + }; + }; + truststore: { + type: 'object'; + additionalProperties: false; + description: 'Certificate truststore.'; + required: [ + 'type', + 'file' + ]; + properties: { + type: { + type: 'string'; + description: 'Truststore type.'; + enum: [ + 'JCEKS', + 'JCECCAKS', + 'JCERACFKS', + 'JCECCARACFKS', + 'JCEHYBRIDRACFKS' + ]; + }; + file: { + type: 'string'; + description: 'Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.'; + pattern: '^safkeyring://.*'; + }; + password: { + type: 'string'; + description: 'Literally \'password\' may be needed when using keyrings for compatibility with java servers.'; + enum: [ + '', + 'password' + ]; + }; + }; + }; + pem: { + type: 'object'; + additionalProperties: false; + description: 'Certificate in PEM format.'; + properties: { + key: { + type: 'string'; + description: 'Path to the certificate private key stored in PEM format.'; + }; + certificate: { + type: 'string'; + description: 'Path to the certificate stored in PEM format.'; + }; + certificateAuthorities: { + description: 'List of paths to the certificate authorities stored in PEM format.'; + oneOf: [ + { + type: 'string'; + description: 'Paths to the certificate authorities stored in PEM format. You can separate multiple certificate authorities by comma.'; + }, + { + type: 'array'; + description: 'Path to the certificate authority stored in PEM format.'; + items: { + type: 'string'; + }; + } + ]; + }; + }; + }; + }; + }; + component: { + $anchor: 'zoweComponent'; + type: 'object'; + properties: { + enabled: { + type: 'boolean'; + description: 'Whether to enable or disable this component'; + default: false; + }; + certificate: { + $ref: '#/$defs/certificate'; + description: 'Certificate for current component.'; + }; + launcher: { + type: 'object'; + description: 'Set behavior of how the Zowe launcher will handle this particular component'; + additionalProperties: true; + properties: { + restartIntervals: { + type: 'array'; + description: 'Intervals of seconds to wait before restarting a component if it fails before the minUptime value.'; + items: { + type: 'integer'; + }; + }; + minUptime: { + type: 'integer'; + default: 90; + description: 'The minimum amount of seconds before a component is considered running and the restart counter is reset.'; + }; + shareAs: { + type: 'string'; + description: 'Determines which SHAREAS mode should be used when starting a component'; + enum: [ + 'no', + 'yes', + 'must', + '' + ]; + default: 'yes'; + }; + }; + }; + zowe: { + type: 'object'; + description: 'Component level overrides for top level Zowe network configuration.'; + additionalProperties: true; + properties: { + network: { + $ref: '#/$defs/networkSettings'; + }; + job: { + $ref: '#/$defs/componentJobSettings'; + }; + }; + }; + }; + }; + componentJobSettings: { + $anchor: 'componentJobSettings'; + type: 'object'; + description: 'Component level overrides for job execution behavior'; + properties: { + suffix: { + type: 'string'; + description: 'Can be used by components to declare a jobname suffix to append to their job. This is not currently used by Zowe itself, it is up to components to use this value if desired. Zowe may use this value in the future.'; + }; + }; + }; + tlsSettings: { + $anchor: 'tlsSettings'; + type: 'object'; + properties: { + ciphers: { + type: 'array'; + description: 'Acceptable TLS cipher suites for network connections, in IANA format.'; + items: { + type: 'string'; + }; + }; + curves: { + type: 'array'; + description: 'Acceptable key exchange elliptic curves for network connections.'; + items: { + type: 'string'; + }; + }; + maxTls: { + type: 'string'; + enum: [ + 'TLSv1.2', + 'TLSv1.3' + ]; + default: 'TLSv1.3'; + description: 'Maximum TLS version allowed for network connections.'; + }; + minTls: { + type: 'string'; + enum: [ + 'TLSv1.2', + 'TLSv1.3' + ]; + default: 'TLSv1.2'; + description: 'Minimum TLS version allowed for network connections, and less than or equal to network.maxTls.'; + }; + }; + }; + networkSettings: { + type: 'object'; + $anchor: 'networkSettings'; + additionalProperties: false; + description: 'Optional, advanced network configuration parameters'; + properties: { + server: { + type: 'object'; + additionalProperties: false; + description: 'Optional, advanced network configuration parameters for Zowe servers'; + properties: { + tls: { + $ref: '#/$defs/tlsSettings'; + }; + listenAddresses: { + type: 'array'; + description: 'The IP addresses which all of the Zowe servers will be binding on and listening to. Some servers may only support listening on the first element.'; + items: { + $ref: 'schemas/v2/server-common#zoweIpv4'; + }; + }; + vipaIp: { + type: 'string'; + description: 'The IP address which all of the Zowe servers will be binding to. If you are using multiple DIPVA addresses, do not use this option.'; + }; + validatePortFree: { + type: 'boolean'; + default: true; + description: 'Whether or not to ensure that the port a server is about to use is available. Usually, servers will know this when they attempt to bind to a port, so this option allows you to disable the additional verification step.'; + }; + }; + }; + client: { + type: 'object'; + additionalProperties: false; + description: 'Optional, advanced network configuration parameters for Zowe servers when sending requests as clients.'; + properties: { + tls: { + $ref: '#/$defs/tlsSettings'; + }; + }; + }; + }; + }; + registryHandler: { + $anchor: 'registryHandler'; + type: 'object'; + required: [ + 'registry', + 'path' + ]; + properties: { + registry: { + type: 'string'; + description: 'The location of the default registry for this handler. It could be a URL, path, dataset, whatever this handler supports'; + }; + path: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Unix file path to the configmgr-compatible JS file which implements the handler API'; + }; + }; + }; + }; +}; +type ZoweYamlType = FromSchema; +export default ZoweYamlType; diff --git a/tests/system-integration/lib/src/ZoweYamlType.js b/tests/system-integration/lib/src/ZoweYamlType.js new file mode 100644 index 0000000000..3673057b90 --- /dev/null +++ b/tests/system-integration/lib/src/ZoweYamlType.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const zowe_yaml_schema_json_1 = __importDefault(require("../../../schemas/zowe-yaml-schema.json")); +const server_common_json_1 = __importDefault(require("../../../schemas/server-common.json")); +const serverCommonSchema = server_common_json_1.default; +const zoweSchema = zowe_yaml_schema_json_1.default; diff --git a/tests/system-integration/lib/src/__tests__/RemoteTestRunner.d.ts b/tests/system-integration/lib/src/__tests__/RemoteTestRunner.d.ts new file mode 100644 index 0000000000..bdf2543456 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/RemoteTestRunner.d.ts @@ -0,0 +1,16 @@ +import ZoweYamlType from '../ZoweYamlType'; +export declare class RemoteTestRunner { + private session; + RemoteTestRunner(): void; + /** + * + * @param zoweYaml + * @param zweCommand + * @param cwd + */ + runTest(zoweYaml: ZoweYamlType, zweCommand: string, cwd?: string): Promise; +} +export type TestOutput = { + stdout: string; + rc: number; +}; diff --git a/tests/system-integration/lib/src/__tests__/RemoteTestRunner.js b/tests/system-integration/lib/src/__tests__/RemoteTestRunner.js new file mode 100644 index 0000000000..cb7c81bff5 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/RemoteTestRunner.js @@ -0,0 +1,82 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RemoteTestRunner = void 0; +const zowe_1 = require("../zowe"); +const uss = __importStar(require("../uss")); +const constants_1 = require("../constants"); +const files = __importStar(require("@zowe/zos-files-for-zowe-sdk")); +const fs = __importStar(require("fs-extra")); +const YAML = __importStar(require("yaml")); +class RemoteTestRunner { + RemoteTestRunner() { + console.log('init'); + this.session = (0, zowe_1.getZosmfSession)(); + } + /** + * + * @param zoweYaml + * @param zweCommand + * @param cwd + */ + runTest(zoweYaml_1, zweCommand_1) { + return __awaiter(this, arguments, void 0, function* (zoweYaml, zweCommand, cwd = constants_1.REMOTE_TEST_DIR) { + let command = zweCommand.trim(); + if (command.startsWith('zwe')) { + command = command.replace(/zwe/, ''); + } + const testName = expect.getState().currentTestName; + const stringZoweYaml = YAML.stringify(zoweYaml); + fs.writeFileSync(`${constants_1.TEST_YAML_DIR}/zowe.yaml.${testName}`, stringZoweYaml); + yield files.Upload.bufferToUssFile(this.session, `${constants_1.REMOTE_TEST_DIR}/zowe.test.yaml`, Buffer.from(stringZoweYaml), { + binary: false, + }); + const output = yield uss.runCommand(`./bin/zwe ${command} --config ${constants_1.REMOTE_TEST_DIR}/zowe.test.yaml`, cwd); + return { + stdout: output.data, + rc: output.rc, + }; + }); + } +} +exports.RemoteTestRunner = RemoteTestRunner; diff --git a/tests/system-integration/lib/src/__tests__/ZoweYaml.d.ts b/tests/system-integration/lib/src/__tests__/ZoweYaml.d.ts new file mode 100644 index 0000000000..e804f3a8f6 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/ZoweYaml.d.ts @@ -0,0 +1,4 @@ +import ZoweYamlType from '../ZoweYamlType'; +export declare class ZoweYaml { + static basicZoweYaml(): ZoweYamlType; +} diff --git a/tests/system-integration/lib/src/__tests__/ZoweYaml.js b/tests/system-integration/lib/src/__tests__/ZoweYaml.js new file mode 100644 index 0000000000..0603f031a9 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/ZoweYaml.js @@ -0,0 +1,49 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ZoweYaml = void 0; +const yaml = __importStar(require("yaml")); +const constants_1 = require("../constants"); +const fs = __importStar(require("fs-extra")); +class ZoweYaml { + /* public updateField(field: string, value: string) { + // this.zoweYaml[field] = value; + }*/ + static basicZoweYaml() { + const fileContents = fs.readFileSync(constants_1.THIS_TEST_BASE_YAML, 'utf8'); + const zoweYaml = yaml.parse(fileContents); + return zoweYaml; + } +} +exports.ZoweYaml = ZoweYaml; diff --git a/tests/system-integration/lib/src/__tests__/init/apfauth.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/apfauth.tests.d.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/system-integration/lib/src/__tests__/init/apfauth.tests.js b/tests/system-integration/lib/src/__tests__/init/apfauth.tests.js new file mode 100644 index 0000000000..567479c4b2 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/init/apfauth.tests.js @@ -0,0 +1,9 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ diff --git a/tests/system-integration/lib/src/__tests__/init/certificate.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/certificate.tests.d.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/system-integration/lib/src/__tests__/init/certificate.tests.js b/tests/system-integration/lib/src/__tests__/init/certificate.tests.js new file mode 100644 index 0000000000..567479c4b2 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/init/certificate.tests.js @@ -0,0 +1,9 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ diff --git a/tests/system-integration/lib/src/__tests__/init/composite.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/composite.tests.d.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/system-integration/lib/src/__tests__/init/composite.tests.js b/tests/system-integration/lib/src/__tests__/init/composite.tests.js new file mode 100644 index 0000000000..567479c4b2 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/init/composite.tests.js @@ -0,0 +1,9 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ diff --git a/tests/system-integration/lib/src/__tests__/init/generate.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/generate.tests.d.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/system-integration/lib/src/__tests__/init/generate.tests.js b/tests/system-integration/lib/src/__tests__/init/generate.tests.js new file mode 100644 index 0000000000..567479c4b2 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/init/generate.tests.js @@ -0,0 +1,9 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ diff --git a/tests/system-integration/lib/src/__tests__/init/mvs.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/mvs.tests.d.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/system-integration/lib/src/__tests__/init/mvs.tests.js b/tests/system-integration/lib/src/__tests__/init/mvs.tests.js new file mode 100644 index 0000000000..567479c4b2 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/init/mvs.tests.js @@ -0,0 +1,9 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ diff --git a/tests/system-integration/lib/src/__tests__/init/security.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/security.tests.d.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/system-integration/lib/src/__tests__/init/security.tests.js b/tests/system-integration/lib/src/__tests__/init/security.tests.js new file mode 100644 index 0000000000..567479c4b2 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/init/security.tests.js @@ -0,0 +1,9 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ diff --git a/tests/system-integration/lib/src/__tests__/init/stc.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/stc.tests.d.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/system-integration/lib/src/__tests__/init/stc.tests.js b/tests/system-integration/lib/src/__tests__/init/stc.tests.js new file mode 100644 index 0000000000..567479c4b2 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/init/stc.tests.js @@ -0,0 +1,9 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ diff --git a/tests/system-integration/lib/src/__tests__/init/vsam.test.d.ts b/tests/system-integration/lib/src/__tests__/init/vsam.test.d.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/init/vsam.test.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/tests/system-integration/lib/src/__tests__/init/vsam.test.js b/tests/system-integration/lib/src/__tests__/init/vsam.test.js new file mode 100644 index 0000000000..25f1937c21 --- /dev/null +++ b/tests/system-integration/lib/src/__tests__/init/vsam.test.js @@ -0,0 +1,38 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const RemoteTestRunner_1 = require("../RemoteTestRunner"); +const ZoweYaml_1 = require("../ZoweYaml"); +const testSuiteName = 'Dummy tests'; +describe(testSuiteName, () => { + let testRunner; + beforeEach(() => { + testRunner = new RemoteTestRunner_1.RemoteTestRunner(); + }); + it('a test', () => __awaiter(void 0, void 0, void 0, function* () { + console.log('heres a log'); + const cfgYaml = ZoweYaml_1.ZoweYaml.basicZoweYaml(); + cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; + const result = yield testRunner.runTest(cfgYaml, '--help'); + expect(result.rc).toBe(0); + expect(result.stdout).not.toBeNull(); + expect(result.stdout).toMatchSnapshot(); + })); +}); diff --git a/tests/system-integration/lib/src/constants.d.ts b/tests/system-integration/lib/src/constants.d.ts new file mode 100644 index 0000000000..9ae78443a2 --- /dev/null +++ b/tests/system-integration/lib/src/constants.d.ts @@ -0,0 +1,18 @@ +export declare const ZOWE_FMID = "AZWE002"; +export declare const REPO_ROOT_DIR: string; +export declare const THIS_TEST_ROOT_DIR: string; +export declare const THIS_TEST_BASE_YAML: string; +export declare const INSTALL_TEST_ROOT_DIR: string; +export declare const TEST_YAML_DIR: string; +export declare const TEST_DATASETS_HLQ: string; +export declare const TEST_JOBS_RUN_FILE: string; +export declare const CLEANUP_AFTER_TESTS: boolean; +export declare const REMOTE_TEST_DIR: string; +export declare const REMOTE_CONNECTION: { + host: string; + ssh_port: number; + zosmf_port: string; + user: string; + password: string; + zosmf_reject_unauthorized: boolean; +}; diff --git a/tests/system-integration/lib/src/constants.js b/tests/system-integration/lib/src/constants.js new file mode 100644 index 0000000000..69bf8a65c5 --- /dev/null +++ b/tests/system-integration/lib/src/constants.js @@ -0,0 +1,67 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.REMOTE_CONNECTION = exports.REMOTE_TEST_DIR = exports.CLEANUP_AFTER_TESTS = exports.TEST_JOBS_RUN_FILE = exports.TEST_DATASETS_HLQ = exports.TEST_YAML_DIR = exports.INSTALL_TEST_ROOT_DIR = exports.THIS_TEST_BASE_YAML = exports.THIS_TEST_ROOT_DIR = exports.REPO_ROOT_DIR = exports.ZOWE_FMID = void 0; +const path = __importStar(require("path")); +const util = __importStar(require("./utils")); +const yn_1 = __importDefault(require("yn")); +// import Debug from 'debug'; +// const debug = Debug('zowe-install-test:constants'); +// the FMID we will use to test PTF +exports.ZOWE_FMID = 'AZWE002'; +exports.REPO_ROOT_DIR = path.resolve(__dirname, '../../../'); +exports.THIS_TEST_ROOT_DIR = path.resolve(__dirname, '../'); // JEST runs in the src dir +exports.THIS_TEST_BASE_YAML = path.resolve(exports.THIS_TEST_ROOT_DIR, '.build/zowe.yaml.base'); +exports.INSTALL_TEST_ROOT_DIR = path.resolve(__dirname, '../'); +exports.TEST_YAML_DIR = path.resolve(exports.THIS_TEST_ROOT_DIR, '.build', 'zowe_yaml_tests'); +exports.TEST_DATASETS_HLQ = process.env['TEST_DS_HLQ'] || 'ZWETESTS'; +exports.TEST_JOBS_RUN_FILE = path.resolve(exports.THIS_TEST_ROOT_DIR, '.build', 'jobs-run.txt'); +const cleanup = (0, yn_1.default)(process.env['CLEANUP_AFTER_TESTS']); +exports.CLEANUP_AFTER_TESTS = cleanup != null ? cleanup : true; +const envVars = ['SSH_HOST', 'SSH_PORT', 'SSH_USER', 'SSH_PASSWORD', 'ZOSMF_PORT', 'REMOTE_TEST_ROOT_DIR']; +util.checkMandatoryEnvironmentVariables(envVars); +exports.REMOTE_TEST_DIR = process.env['REMOTE_TEST_ROOT_DIR'] || '/ZOWE/zwe-system-test'; +const ru = (0, yn_1.default)(process.env['ZOSMF_REJECT_UNAUTHORIZED']); +exports.REMOTE_CONNECTION = { + host: process.env['SSH_HOST'], + ssh_port: Number(process.env['SSH_PORT']), + zosmf_port: process.env['ZOSMF_PORT'], + user: process.env['SSH_USER'], + password: process.env['SSH_PASSWORD'], + zosmf_reject_unauthorized: ru != null ? ru : false, +}; +// debug(`process.env >>>>>>>>>>>>>>>>>>>>>>>>>>\n${JSON.stringify(process.env)}\n<<<<<<<<<<<<<<<<<<<<<<<`); diff --git a/tests/system-integration/lib/src/globalSetup.d.ts b/tests/system-integration/lib/src/globalSetup.d.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/tests/system-integration/lib/src/globalSetup.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/tests/system-integration/lib/src/globalSetup.js b/tests/system-integration/lib/src/globalSetup.js new file mode 100644 index 0000000000..6fa115a346 --- /dev/null +++ b/tests/system-integration/lib/src/globalSetup.js @@ -0,0 +1,75 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const uss = __importStar(require("./uss")); +const files = __importStar(require("@zowe/zos-files-for-zowe-sdk")); +const constants_1 = require("./constants"); +const fs = __importStar(require("fs-extra")); +const zowe_1 = require("./zowe"); +module.exports = () => __awaiter(void 0, void 0, void 0, function* () { + // check directories and configmgr look OK + console.log(`${constants_1.REPO_ROOT_DIR}`); + if (!fs.existsSync(`${constants_1.REPO_ROOT_DIR}/bin/zwe`)) { + throw new Error('Could not locate the zwe tool locally. Ensure you are running tests from the test project root'); + } + const configmgrPax = fs.readdirSync(`${constants_1.THIS_TEST_ROOT_DIR}/.build`).find((item) => /configmgr.*\.pax/g.test(item)); + if (configmgrPax == null) { + throw new Error('Could not locate a configmgr pax in the .build directory'); + } + console.log(`Using example-zowe.yaml as base for future zowe.yaml modifications...`); + fs.copyFileSync(`${constants_1.REPO_ROOT_DIR}/example-zowe.yaml`, constants_1.THIS_TEST_BASE_YAML); + fs.mkdirpSync(`${constants_1.THIS_TEST_ROOT_DIR}/.build/zowe`); + fs.mkdirpSync(`${constants_1.TEST_YAML_DIR}`); + console.log('Setting up remote server...'); + yield uss.runCommand(`mkdir -p ${constants_1.REMOTE_TEST_DIR}`); + console.log(`Uploading ${configmgrPax} to ${constants_1.REMOTE_TEST_DIR}/configmgr.pax ...`); + yield files.Upload.fileToUssFile((0, zowe_1.getZosmfSession)(), `${constants_1.THIS_TEST_ROOT_DIR}/.build/${configmgrPax}`, `${constants_1.REMOTE_TEST_DIR}/configmgr.pax`, { binary: true }); + console.log(`Uploading ${constants_1.REPO_ROOT_DIR}/bin to ${constants_1.REMOTE_TEST_DIR}/bin...`); + yield files.Upload.dirToUSSDirRecursive((0, zowe_1.getZosmfSession)(), `${constants_1.REPO_ROOT_DIR}/bin`, `${constants_1.REMOTE_TEST_DIR}/bin/`, { + binary: false, + includeHidden: true, + }); + console.log(`Unpacking configmgr and placing it in bin/utils ...`); + yield uss.runCommand(`pax -ppx -rf configmgr.pax && mv configmgr bin/utils/`, `${constants_1.REMOTE_TEST_DIR}`); + console.log('Remote server setup complete'); +}); diff --git a/tests/system-integration/lib/src/globalTeardown.d.ts b/tests/system-integration/lib/src/globalTeardown.d.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/tests/system-integration/lib/src/globalTeardown.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/tests/system-integration/lib/src/globalTeardown.js b/tests/system-integration/lib/src/globalTeardown.js new file mode 100644 index 0000000000..55eb2ba4c0 --- /dev/null +++ b/tests/system-integration/lib/src/globalTeardown.js @@ -0,0 +1,61 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const constants_1 = require("./constants"); +const uss = __importStar(require("./uss")); +const fs = __importStar(require("fs-extra")); +module.exports = () => __awaiter(void 0, void 0, void 0, function* () { + if (!constants_1.CLEANUP_AFTER_TESTS) { + return; + } + yield uss.runCommand(`rm -rf ${constants_1.REMOTE_TEST_DIR}`); + if (fs.existsSync(`${constants_1.TEST_JOBS_RUN_FILE}`)) { + fs.readFileSync(`${constants_1.TEST_JOBS_RUN_FILE}`, 'utf8') + .split('\n') + .forEach((job) => { + // + console.log('Purge ' + job); + }); + } + fs.rmdirSync(constants_1.TEST_YAML_DIR); +}); diff --git a/tests/system-integration/lib/src/uss.d.ts b/tests/system-integration/lib/src/uss.d.ts new file mode 100644 index 0000000000..512ac227c9 --- /dev/null +++ b/tests/system-integration/lib/src/uss.d.ts @@ -0,0 +1,4 @@ +export declare function runCommand(command: string, cwd?: string): Promise<{ + data: string; + rc: any; +}>; diff --git a/tests/system-integration/lib/src/uss.js b/tests/system-integration/lib/src/uss.js new file mode 100644 index 0000000000..aeab6533da --- /dev/null +++ b/tests/system-integration/lib/src/uss.js @@ -0,0 +1,44 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.runCommand = void 0; +const constants_1 = require("./constants"); +const zos_uss_for_zowe_sdk_1 = require("@zowe/zos-uss-for-zowe-sdk"); +function getSession() { + return new zos_uss_for_zowe_sdk_1.SshSession({ + hostname: constants_1.REMOTE_CONNECTION.host, + port: constants_1.REMOTE_CONNECTION.ssh_port, + user: constants_1.REMOTE_CONNECTION.user, + password: constants_1.REMOTE_CONNECTION.password, + }); +} +function runCommand(command_1) { + return __awaiter(this, arguments, void 0, function* (command, cwd = '~') { + const session = getSession(); + let stdout = ''; + const rc = yield zos_uss_for_zowe_sdk_1.Shell.executeSshCwd(session, command, cwd, (data) => { + if (data.trim()) { + stdout += data; + } + }); + return { data: stdout, rc: rc }; + }); +} +exports.runCommand = runCommand; diff --git a/tests/system-integration/lib/src/utils.d.ts b/tests/system-integration/lib/src/utils.d.ts new file mode 100644 index 0000000000..e67e85c358 --- /dev/null +++ b/tests/system-integration/lib/src/utils.d.ts @@ -0,0 +1,17 @@ +/** + * Sleep for certain time + * @param {Integer} ms + */ +export declare function sleep(ms: number): Promise; +/** + * Check if there are any mandatory environment variable is missing. + * + * @param {Array} vars list of env variable names + */ +export declare function checkMandatoryEnvironmentVariables(vars: string[]): void; +/** + * Generate MD5 hash of a variable + * + * @param {Any} obj any object + */ +export declare function calculateHash(obj: unknown): string; diff --git a/tests/system-integration/lib/src/utils.js b/tests/system-integration/lib/src/utils.js new file mode 100644 index 0000000000..887f62372c --- /dev/null +++ b/tests/system-integration/lib/src/utils.js @@ -0,0 +1,69 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.calculateHash = exports.checkMandatoryEnvironmentVariables = exports.sleep = void 0; +const util = __importStar(require("util")); +const crypto = __importStar(require("crypto")); +/** + * Sleep for certain time + * @param {Integer} ms + */ +function sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} +exports.sleep = sleep; +/** + * Check if there are any mandatory environment variable is missing. + * + * @param {Array} vars list of env variable names + */ +function checkMandatoryEnvironmentVariables(vars) { + for (const v of vars) { + if (!Object.keys(process.env).includes(v)) { + throw new Error(`Expected to find a value for ${v} in process.env`); + } + } +} +exports.checkMandatoryEnvironmentVariables = checkMandatoryEnvironmentVariables; +/** + * Generate MD5 hash of a variable + * + * @param {Any} obj any object + */ +function calculateHash(obj) { + return crypto.createHash('md5').update(util.format('%j', obj)).digest('hex'); +} +exports.calculateHash = calculateHash; diff --git a/tests/system-integration/lib/src/zowe.d.ts b/tests/system-integration/lib/src/zowe.d.ts new file mode 100644 index 0000000000..0c2e6d77ab --- /dev/null +++ b/tests/system-integration/lib/src/zowe.d.ts @@ -0,0 +1,2 @@ +import { Session } from '@zowe/imperative'; +export declare function getZosmfSession(): Session; diff --git a/tests/system-integration/lib/src/zowe.js b/tests/system-integration/lib/src/zowe.js new file mode 100644 index 0000000000..9910f4c0ad --- /dev/null +++ b/tests/system-integration/lib/src/zowe.js @@ -0,0 +1,35 @@ +"use strict"; +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getZosmfSession = void 0; +const imperative_1 = require("@zowe/imperative"); +const constants_1 = require("./constants"); +let cachedZosmfSession; +function getZosmfSession() { + console.log('called get zosmf'); + if (cachedZosmfSession != null) { + console.log('returning cached 1' + cachedZosmfSession); + return cachedZosmfSession; + } + const sessCfg = { + hostname: constants_1.REMOTE_CONNECTION.host, + port: constants_1.REMOTE_CONNECTION.zosmf_port, + user: constants_1.REMOTE_CONNECTION.user, + password: constants_1.REMOTE_CONNECTION.password, + rejectUnauthorized: constants_1.REMOTE_CONNECTION.zosmf_reject_unauthorized, + protocol: 'https', + }; + imperative_1.ConnectionPropsForSessCfg.resolveSessCfgProps(sessCfg, { $0: '', _: [] }, {}); + cachedZosmfSession = new imperative_1.Session(sessCfg); + console.log('returning not cached ' + cachedZosmfSession); + return cachedZosmfSession; +} +exports.getZosmfSession = getZosmfSession; diff --git a/tests/system-integration/lib/tsconfig.tsbuildinfo b/tests/system-integration/lib/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..002d804c3a --- /dev/null +++ b/tests/system-integration/lib/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../node_modules/typescript/lib/lib.es6.d.ts","../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/ts-algebra/lib/utils/and.d.ts","../node_modules/ts-algebra/lib/utils/extends.d.ts","../node_modules/ts-algebra/lib/utils/if.d.ts","../node_modules/ts-algebra/lib/utils/intersectunion.d.ts","../node_modules/ts-algebra/lib/utils/isnever.d.ts","../node_modules/ts-algebra/lib/utils/merge.d.ts","../node_modules/ts-algebra/lib/utils/not.d.ts","../node_modules/ts-algebra/lib/utils/or.d.ts","../node_modules/ts-algebra/lib/utils/prettify.d.ts","../node_modules/ts-algebra/lib/utils/tail.d.ts","../node_modules/ts-algebra/lib/utils/unionlast.d.ts","../node_modules/ts-algebra/lib/utils/unionpop.d.ts","../node_modules/ts-algebra/lib/utils/index.d.ts","../node_modules/ts-algebra/lib/meta-types/never.d.ts","../node_modules/ts-algebra/lib/meta-types/utils.d.ts","../node_modules/ts-algebra/lib/meta-types/const.d.ts","../node_modules/ts-algebra/lib/meta-types/enum.d.ts","../node_modules/ts-algebra/lib/meta-types/object.d.ts","../node_modules/ts-algebra/lib/meta-types/primitive.d.ts","../node_modules/ts-algebra/lib/meta-types/tuple.d.ts","../node_modules/ts-algebra/lib/meta-types/union.d.ts","../node_modules/ts-algebra/lib/meta-types/type.d.ts","../node_modules/ts-algebra/lib/meta-types/array.d.ts","../node_modules/ts-algebra/lib/meta-types/resolve.d.ts","../node_modules/ts-algebra/lib/meta-types/any.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/union.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/utils.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/const.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/enum.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/tuple.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/array.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/object.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/primitive.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/any.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/index.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/union.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/any.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/array.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/const.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/enum.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/utils.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/object.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/primitive.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/tuple.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/index.d.ts","../node_modules/ts-algebra/lib/meta-types/index.d.ts","../node_modules/ts-algebra/lib/index.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/deserializationpattern.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/jsonschema.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/extendedjsonschema.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/fromschemaoptions.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/index.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-options.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/and.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/extends.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/get.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/if.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/key.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/join.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/narrow.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/not.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/pop.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/split.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/tail.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/writable.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/index.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/utils.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/allof.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/anyof.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/const.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/deserialize.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/enum.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/ifthenelse.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/multipletypes.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/not.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/nullable.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/oneof.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/references/utils.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/references/external.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/references/internal.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/references/index.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/array.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/object.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/singletype.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/index.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/type-guards/compiler.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/type-guards/validator.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/type-guards/index.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/asconst.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/index.d.ts","../node_modules/json-schema-to-ts/lib/types/index.d.ts","../../../schemas/zowe-yaml-schema.json","../../../schemas/server-common.json","../src/zoweyamltype.ts","../src/utils.ts","../node_modules/yn/index.d.ts","../src/constants.ts","../node_modules/@zowe/imperative/lib/profiles/src/constants/profilesconstants.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/iprofileproperty.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/iprofileschema.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/iprofiledependency.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/config/iprofiletypeconfiguration.d.ts","../node_modules/@zowe/imperative/lib/logger/src/doc/ilog4jslayout.d.ts","../node_modules/@zowe/imperative/lib/logger/src/doc/ilog4jsappender.d.ts","../node_modules/@zowe/imperative/lib/logger/src/doc/ilog4jsconfig.d.ts","../node_modules/@zowe/imperative/lib/logger/src/doc/iconfiglogging.d.ts","../node_modules/@zowe/imperative/lib/error/src/doc/iimperativeerror.d.ts","../node_modules/@zowe/imperative/lib/error/src/doc/iimperativeerrorparms.d.ts","../node_modules/@zowe/imperative/lib/error/src/imperativeerror.d.ts","../node_modules/log4js/types/log4js.d.ts","../node_modules/@zowe/imperative/lib/console/src/doc/iconsole.d.ts","../node_modules/@zowe/imperative/lib/console/src/console.d.ts","../node_modules/@zowe/imperative/lib/logger/src/logger.d.ts","../node_modules/@zowe/imperative/lib/logger/src/loggerconfigbuilder.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@zowe/imperative/node_modules/@types/yargs/index.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/icommandexampledefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/option/icommandoptionallowablevalues.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/option/icommandoptionvalueimplications.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/option/icommandoptiondefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/ipartialcommanddefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofileauthconfig.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofiletypeconfiguration.d.ts","../node_modules/@zowe/imperative/lib/logger/src/loggerutils.d.ts","../node_modules/@zowe/imperative/lib/logger/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/abstract/abstractprofilemanager.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/api/iprofilemanagerfactory.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/imetaprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/iprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/ideleteprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iloadallprofiles.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iloadprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iprofilemanager.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iprofilemanagerinit.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/isaveprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/isaveprofilefromcliargs.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/isetdefaultprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iupdateprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iupdateprofilefromcliargs.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/ivalidateprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/ivalidateprofilewithschema.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/ivalidateprofileforcli.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofiledeleted.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofileinitialized.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofileloaded.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofilesaved.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofileupdated.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofilevalidated.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/utils/profileio.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/utils/profileutils.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/utils/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/doc/iprofilevalidationtask.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/doc/iprofilevalidationtaskresult.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/doc/iprofilevalidationreport.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/doc/iprofilevalidationplan.d.ts","../node_modules/@zowe/imperative/lib/operations/src/taskstage.d.ts","../node_modules/@zowe/imperative/lib/operations/src/doc/itaskwithstatus.d.ts","../node_modules/@zowe/imperative/lib/operations/src/operation.d.ts","../node_modules/@zowe/imperative/lib/operations/src/doc/ioperationresult.d.ts","../node_modules/@zowe/imperative/lib/operations/src/operations.d.ts","../node_modules/@zowe/imperative/lib/operations/src/taskprogress.d.ts","../node_modules/@zowe/imperative/lib/operations/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/api/profilevalidator.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/basicprofilemanager.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/abstract/abstractprofilemanagerfactory.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/basicprofilemanagerfactory.d.ts","../node_modules/@zowe/imperative/lib/profiles/index.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofileproperty.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofileschema.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/ichainedhandlerargumentmapping.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/ichainedhandlerentry.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/option/icommandpositionaldefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/icommanddefinitionpasson.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofile.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/icommanddefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/profiles/commandprofiles.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ipromptoptions.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerresponseconsoleapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerresponsedataapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/parms/iprogressbarparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerprogressapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/response/icommandoutputformat.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerformatoutputapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerresponseapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/args/icommandarguments.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/ihandlerparameters.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/icommandhandler.d.ts","../node_modules/@zowe/imperative/lib/error/index.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/response/icommandresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/processor/icommandresponseapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/parms/icommandresponseparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/response/commandresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/icommandhandlerresponsechecker.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/icommandhandlerresponsevalidator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/response/icommandvalidatorerror.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/response/icommandvalidatorresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/handlers/failedcommandhandler.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/ihelpgeneratorparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/ihelpgeneratorfactoryparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/ihelpgenerator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/abstract/abstracthelpgenerator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/ihelpgeneratorfactory.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/abstract/abstracthelpgeneratorfactory.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/defaulthelpgenerator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/helpconstants.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/helpgeneratorfactory.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativelogsconfig.d.ts","../node_modules/@zowe/imperative/lib/security/src/abstract/abstractcredentialmanager.d.ts","../node_modules/@zowe/imperative/lib/security/src/doc/icredentialmanagerinit.d.ts","../node_modules/@zowe/imperative/lib/security/src/credentialmanagerfactory.d.ts","../node_modules/@zowe/imperative/lib/security/src/defaultcredentialmanager.d.ts","../node_modules/@zowe/imperative/lib/security/src/doc/icredentialmanagernamemap.d.ts","../node_modules/@zowe/imperative/lib/security/src/credentialmanageroverride.d.ts","../node_modules/@zowe/imperative/lib/security/src/doc/icredentialmanagerconstructor.d.ts","../node_modules/@zowe/imperative/lib/security/src/errors/badcredentialmanagererror.d.ts","../node_modules/@zowe/imperative/lib/security/index.d.ts","../node_modules/@zowe/imperative/lib/interfaces/src/types/imperativereject.d.ts","../node_modules/@zowe/imperative/lib/interfaces/src/doc/iconstructor.d.ts","../node_modules/@zowe/imperative/lib/interfaces/index.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeoverrides.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeauthgroupconfig.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iapimlsvcattrs.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofileautoinitconfig.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeconfig.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/doc/idaemonrequest.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/doc/idaemonresponse.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/daemonrequest.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/executils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/jsonutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/jsutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/nextverfeatures.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/doc/isysteminfo.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/processutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/textutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/doc/ioptionformat.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/cliutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/envfileutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/diff/doc/idiffnameoptions.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/diff/doc/idiffoptions.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/diff/diffutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/index.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/idaemoncontext.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigprofile.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfig.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfiglayer.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigvault.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configapi.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configlayers.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configplugins.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configprofiles.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configsecure.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/index.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigschema.d.ts","../node_modules/@zowe/imperative/lib/config/src/config.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/types/httpverb.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/iheadercontent.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/ihttpsoptions.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/types/abstractrestclientproperties.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/ioptionsfullresponse.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/irestclienterror.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/sessconstants.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/doc/isession.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/abstractsession.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/session.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/irestclientresponse.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/irestoptions.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/headers.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/abstractrestclient.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/compressionutils.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/restclient.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/restconstants.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/reststandaloneutils.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/restclienterror.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/doc/ioverridepromptconnprops.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/doc/ioptionsforaddconnprops.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/connectionpropsforsesscfg.d.ts","../node_modules/@zowe/imperative/lib/rest/index.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/auth/doc/iauthhandlerapi.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/auth/handlers/abstractauthhandler.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigautostoreopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/configautostore.d.ts","../node_modules/@zowe/imperative/lib/config/src/configconstants.d.ts","../node_modules/@zowe/imperative/lib/config/src/configschema.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeenvironmentalvariablesetting.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeenvironmentalvariablesettings.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/env/environmentalvariablesettings.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeloggingconfig.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/configurationloader.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/configurationvalidator.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/definitiontreeresolver.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/api/doc/iimperativeapi.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/api/imperativeapi.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/imperative.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/loggingconfigurer.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/plugins/abstractpluginlifecycle.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/plugins/doc/ipluginpeerdepends.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/plugins/doc/iplugincfgprops.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/plugins/pluginmanagementfacility.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/auth/handlers/baseauthhandler.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/config/cmd/auto-init/handlers/baseautoinithandler.d.ts","../node_modules/@zowe/imperative/lib/imperative/index.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigbuilderopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigconvertresult.d.ts","../node_modules/@zowe/imperative/lib/config/src/configbuilder.d.ts","../node_modules/@zowe/imperative/lib/config/src/configutils.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofloc.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofargattrs.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofattrs.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofmergeargopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofmergedarg.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofinfoupdatepropopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofinfoprops.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofinforemoveknownpropopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iextenderopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/profileinfo.d.ts","../node_modules/@zowe/imperative/lib/config/src/profilecredentials.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofinfoerrparms.d.ts","../node_modules/@zowe/imperative/lib/config/src/profinfoerr.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigsecure.d.ts","../node_modules/@zowe/imperative/lib/config/index.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/imperativeconfig.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/webhelpgenerator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/iwebhelpmanager.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/webhelpmanager.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/parms/icliloadprofile.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/parms/icliloadallprofiles.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/profiles/cliprofilemanager.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/syntax/syntaxvalidator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/utils/commandutils.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/utils/sharedoptions.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/doc/iyargsresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/abstractcommandyargs.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/groupcommandyargs.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/doc/iyargsparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/commandyargs.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/yargsconfigurer.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/yargsdefiner.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/commandpreparer.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/parms/iinvokecommandparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/processor/icommandprocessorparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/commandprocessor.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/response/handlerresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/index.d.ts","../node_modules/@zowe/imperative/lib/console/index.d.ts","../node_modules/@zowe/imperative/lib/constants/src/constants.d.ts","../node_modules/@zowe/imperative/lib/constants/index.d.ts","../node_modules/@zowe/imperative/lib/expect/src/imperativeexpect.d.ts","../node_modules/@zowe/imperative/lib/expect/index.d.ts","../node_modules/@zowe/imperative/lib/io/src/io.d.ts","../node_modules/@zowe/imperative/lib/io/index.d.ts","../node_modules/@zowe/imperative/lib/messages/src/doc/imessagedefinition.d.ts","../node_modules/@zowe/imperative/lib/messages/src/coremessages.d.ts","../node_modules/@zowe/imperative/lib/messages/index.d.ts","../node_modules/@zowe/imperative/lib/settings/src/doc/isettingsfile.d.ts","../node_modules/@zowe/imperative/lib/settings/src/persistance/isettingsfilepersistence.d.ts","../node_modules/@zowe/imperative/lib/settings/src/appsettings.d.ts","../node_modules/@zowe/imperative/lib/settings/index.d.ts","../node_modules/@zowe/imperative/lib/index.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/doc/isshsession.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/sshsession.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/shell.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/sshbasehandler.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/constants/zosuss.messages.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/constants/zosuss.profile.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/index.d.ts","../src/uss.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/constants/zosfiles.constants.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/constants/zosfiles.messages.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/types/zosmfmigratedrecalloptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/types/zosmfrestclientproperties.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/idataset.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/izosfilesoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/ioptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/ioptionsfullresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/irestclientresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/iussfilelistresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/izosfilesresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/copy/doc/icopydatasetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/get/doc/igetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/copy/doc/icrosslparcopydatasetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/copy/copy.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/copy/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/doc/icreatedatasetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/doc/icreateussoption.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/doc/icreatevsamoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/doc/icreatezfsoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/createdatasettype.enum.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/create.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/create.defaults.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/doc/ideletedatasetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/doc/ideletevsamoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/doc/ideletevsamresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/delete.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/utils/zosfilesattributes.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/doc/idownloadoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/doc/idownloaddsmresult.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/doc/idownloadussdirresult.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/izosmflistresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/idsmlistoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/ifsoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/ilistoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/iusslistoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/list.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/download.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/get/get.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/get/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hmigrate/doc/imigrateoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hmigrate/hmigrate.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hmigrate/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hdelete/doc/ideleteoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hdelete/hdelete.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hdelete/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hrecall/doc/irecalloptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hrecall/hrecall.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hrecall/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/invoke/invoke.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/invoke/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/mount/doc/imountfsmode.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/mount/doc/imountfsoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/mount/mount.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/mount/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/rename/rename.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/rename/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/unmount/unmount.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/unmount/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploaddir.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploadfile.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploadmap.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploadoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploadresult.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/upload.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/utilities/doc/tag.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/utilities/utilities.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/utilities/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/utils/zosfilesutils.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/index.d.ts","../node_modules/@types/jsonfile/index.d.ts","../node_modules/@types/jsonfile/utils.d.ts","../node_modules/@types/fs-extra/index.d.ts","../src/zowe.ts","../src/globalsetup.ts","../src/globalteardown.ts","../node_modules/yaml/dist/parse/line-counter.d.ts","../node_modules/yaml/dist/errors.d.ts","../node_modules/yaml/dist/doc/applyreviver.d.ts","../node_modules/yaml/dist/log.d.ts","../node_modules/yaml/dist/nodes/tojs.d.ts","../node_modules/yaml/dist/nodes/scalar.d.ts","../node_modules/yaml/dist/stringify/stringify.d.ts","../node_modules/yaml/dist/nodes/collection.d.ts","../node_modules/yaml/dist/nodes/yamlseq.d.ts","../node_modules/yaml/dist/schema/types.d.ts","../node_modules/yaml/dist/schema/common/map.d.ts","../node_modules/yaml/dist/schema/common/seq.d.ts","../node_modules/yaml/dist/schema/common/string.d.ts","../node_modules/yaml/dist/stringify/foldflowlines.d.ts","../node_modules/yaml/dist/stringify/stringifynumber.d.ts","../node_modules/yaml/dist/stringify/stringifystring.d.ts","../node_modules/yaml/dist/util.d.ts","../node_modules/yaml/dist/nodes/yamlmap.d.ts","../node_modules/yaml/dist/nodes/identity.d.ts","../node_modules/yaml/dist/schema/schema.d.ts","../node_modules/yaml/dist/doc/createnode.d.ts","../node_modules/yaml/dist/nodes/addpairtojsmap.d.ts","../node_modules/yaml/dist/nodes/pair.d.ts","../node_modules/yaml/dist/schema/tags.d.ts","../node_modules/yaml/dist/options.d.ts","../node_modules/yaml/dist/nodes/node.d.ts","../node_modules/yaml/dist/parse/cst-scalar.d.ts","../node_modules/yaml/dist/parse/cst-stringify.d.ts","../node_modules/yaml/dist/parse/cst-visit.d.ts","../node_modules/yaml/dist/parse/cst.d.ts","../node_modules/yaml/dist/nodes/alias.d.ts","../node_modules/yaml/dist/doc/document.d.ts","../node_modules/yaml/dist/doc/directives.d.ts","../node_modules/yaml/dist/compose/composer.d.ts","../node_modules/yaml/dist/parse/lexer.d.ts","../node_modules/yaml/dist/parse/parser.d.ts","../node_modules/yaml/dist/public-api.d.ts","../node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts","../node_modules/yaml/dist/schema/yaml-1.1/set.d.ts","../node_modules/yaml/dist/visit.d.ts","../node_modules/yaml/dist/index.d.ts","../src/__tests__/remotetestrunner.ts","../node_modules/@types/lodash/common/common.d.ts","../node_modules/@types/lodash/common/array.d.ts","../node_modules/@types/lodash/common/collection.d.ts","../node_modules/@types/lodash/common/date.d.ts","../node_modules/@types/lodash/common/function.d.ts","../node_modules/@types/lodash/common/lang.d.ts","../node_modules/@types/lodash/common/math.d.ts","../node_modules/@types/lodash/common/number.d.ts","../node_modules/@types/lodash/common/object.d.ts","../node_modules/@types/lodash/common/seq.d.ts","../node_modules/@types/lodash/common/string.d.ts","../node_modules/@types/lodash/common/util.d.ts","../node_modules/@types/lodash/index.d.ts","../src/__tests__/zoweyaml.ts","../src/__tests__/init/apfauth.tests.ts","../src/__tests__/init/certificate.tests.ts","../src/__tests__/init/composite.tests.ts","../src/__tests__/init/generate.tests.ts","../src/__tests__/init/mvs.tests.ts","../src/__tests__/init/security.tests.ts","../src/__tests__/init/stc.tests.ts","../src/__tests__/init/vsam.test.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/ms/index.d.ts","../node_modules/@types/debug/index.d.ts","../node_modules/@types/exit/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/@jest/expect-utils/build/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/@sinclair/typebox/typebox.d.ts","../node_modules/@jest/schemas/build/index.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/expect/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/xml2js/lib/processors.d.ts","../node_modules/@types/xml2js/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileInfos":["df039a67536fe2acc3affdcbfb645892f842db36fe599e8e652e2f0c640a90d1",{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"76f838d5d49b65de83bc345c04aa54c62a3cfdb72a477dc0c0fce89a30596c30","affectsGlobalScope":true},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"be50d415c7cd0b7ccf407afb39001cb794b78b4cedb9c80b4f67b4206e081a41","b95868450d71cfa9ad87bcb8a31f6b723988d692e89aaed03690f5c907aa0550","70b8f8b4d363639a9aa2bd0af7f3be9b6b46dc4612243e4af76c63a65353507f","8fe3a50bbafa00b28431bf07caf1b78a9e69033c1175e83f09aee5b8adc67fbd","0f63227d67b6c41811524b4953ffe2c06272fd396f52bfbe3a1f3b04fcf32c07","5b6b2404605b4a02b04d65ec20cc45eb604cbd6fb5624836331eaae78499ab56","d7c0b206b541896ebf7f37da32559b75c7452e0d43a567d3307726060498381c","64f7fafdd826b9726b960fc6c6bfc00e41086f9f62bdeb3afd1b1fe142bb5363","3543fe72044d2665132be330e2c03ae4de319e8c594f733d60826a12357fc30a","babc71234fd5a58461c5b9d669c5ebf883c3e2d820bed5b2251995e03d29cef5","a3b300ee383bc871006ea9f17f9a3dd1b3b9c7d3e2032c2b9d69a9bf708d9d24","913f363f49d710887c8ad61c1f0e102eea1e2d891acc63ffc0fa066e80599d14","2892f0b65fb2df5bc5db568a6cbb080c8cdbd1f3f4ca391a5854a58d6a84f6e1","5b5ae1073d30857ac5f8955a8b63c068f1840736b57e5da3ed2e1e3f7b8ed6c3","9be835e15d2273281bad24317ff2bd5a7f6bebbec34cd8a96f73ab46b3efe24a","ec382f858ab8e57dd1757ed185291ec351c9033942055630d198ff0bfc508d36","2ebef6d74ca6edf4c45decfa9d015aac88575b63a126ad417617adfa83514830","43371e0d43e95d7645f6b8cdd7df17026ea573c8de64333fa4b71eaa7872b5a0","df1a920d89fcd403a350314ebe1240805fd67cd510d3443306babe99c5f4d7b1","62468b0711d2733dfcdca6aeb649ed98a92ae856b5337efe9b68bf2dc606e27c","35db5f59706b4bffadc3b6bb82d58825faf6e23aacf81a44a3ebf2c1955f47c1","637fe6cfcfdd045adf2b78278509c9adee2645997ce798f613f3188d906c5d74","37527068a4d6704a052746260bc6612cf16a0758794d2dee400939f58c3b246d","dec9bc581155ab60af59039769381367ef993c8725b92610caccbbc056aeebec","88469ffbb48d651630cf6d1c8c786cb6e78d73acc6ba2cda826459a8d2f859ea","5a44fc0c3ce0fb083bba9343aa67777c5f51bd0ba67e633656c704c31d732b64","80963fa6320b6ac2326f3a3dcba72a3c2a7f41079252489f6f43132b72b33634","3931eb5a462ff5133383aa00d8a2d36fede7d9de67f04cc99f9a9f2e2d5eab4e","e0b7e4ca93392468feaf2abd445d3ab8313b794b5373dc226f51d1379615b85a","765c0e600ad4c48f79e7603f95de84609e5ed25cd84b22aa27d86fceb22af41c","90f689a9f7f5829bec97c2390efb2e0654d48fdfb1aeaf90c99d2aaec257f088","297ab6f3f1a47f24af54f7ae61aac5e2b8c3c58db6719ed004a78c1b7739dfa8","d670cbe492cd3baafcd084f374dbf45a838b982e863d7385fb39acfeda506d8c","b96e6b23f9a66de57d6ef4ce69e9d5aa32a699cd997433cbb970e9ff92684eec","da4710ec87a36f423ac598fe5eccdecbe801c06b55ebe7066a7334ac673bf8e7","a65b0643c322acf323e913e8b8797c87e3460ccaa06640555cc1acc1b07b04a7","63d56cc0d0242dfdd096140c85e733704a571d23162e1964729d5a079cdb4561","4123efa64088870de40eeed37cbe55ec7a5e7b1d90a23a978097ce4bcba156d6","453afe9af8903372c88e6d325fa190abc139b02f7b9a424cc2e395da05f0d9d5","21f3bdfa2ec15e61c2cd4bc617d5cbf6d5bdf4fe399446551e4de620567f40ae","5ac8b9d5ce1356f339937a3ad1b83c145d11b84d02434435afbfbf3726a1ac72","0b4122e881c08ca34ea3b346f79ad35863288ad0a484e7748f3ccc72688b8a4a","0486506ec74a74b7f9e48b029c24b902df9915e074d21f66064aa3e0d50fb3a0","5db914a921d4215b8fae0b0c4a4aa131c8ffacbcba867361c8474f981fd102be","9db728206382d7b19568292ceb6e05e3b541ebc2f228209b5e42ff09882caee9","c0bfd91ece96433a98ed4a783b8f42ac161f9c838f8602ee2c57459906fe3726","2f3d1c08413e7715bda820fd283f19b56d9fa131371e2b7cf3b8016621d133b4","81dddc6f65e0f33cc06255880a7aac26ea920e47236050de6f79265ed1ef5381","8a835ce6138ba2d63c4ee51a6231e99b372293d2d0879a249a6c249f9df8ae91","5d3abe1f304ea20cf0c54a9eed8d3505e51610ff546b799a2503642af2be8a0f","b2e0dde797b45b298cc77d0336da5f22eeb515fa95721e5397129e0582f7cf7b","c034d194506f3e113b5b3b09eeba042b4438748fe5ed712f81295e0683570ad7","58b9580f8c83947617b15dbc5636f92984826f1aa88fcebb9165544858cb7b0d","f5d119be7ddba4e71c4c14cfc597726065364f5131aa3b456d38d54bc2c9b80e","02dee89e39447084501af3c13047a74216e62d506b5606691fff0fe3d09e9f8c","1b56d883cdeaa45e91d22a2bc063b2abf16e0d106b78355caed92a85a8f93e80","9ba6ac2653d0a674f6280024799f13c9aeb1b9dab7de5acc2ff598c1982f7bf0","631207e0e921dd9d08af73171bc297b589b15b31912c044aefeacadd694d687a","dcf204392d153eae8368f1d4c9cc9088e925d7f7e852d4ef84730e96ce2805ef","bf03537a0300b3c27e6a958a4e5fc862309ad2bc698be2fd9b792c2a9614297d","b9b7457690e699bad56a463f8e8d92e123b92257b04cc6f7612bd11db2155fc8","71c0f26c787d2514dceac24fc29f704a4e3a3d5d7b59308aac07c3a0481447df","7544c17f8e9906288f17698f06ba2d8950fd383b8e100594a433a372ba9166e9","77efed03e0ff1c1730437400f7db0f08a052f39856a19ac44dc97d6366c1ec73","f98795592d7e1074378abe109454b7353517b612cf8e2df276e817082e8a9db5","ceaa59fed54a207310047265d611e2601f5aaff4b56b7086c33850e828355919","a50faffdce515e97b64aa365dc81bac64b0f26be3bb0c03f8d7f95e1e8797038","3bc16e18d77625cebb8fdf93e525dc51cfd3db57ec0eead43cb254c0af05eb09","a870bd3a05df7c51ef0b5afa6e4c4cb9ee4fad7a92acae0e8374b168e95666a4","37fb1464c6d4cd4c5caa90381ece59352327f52751914d70eb17d9918cd31cc9","de9e9aceb10128bf45ee66779066dcf36db7bc614417b28693e22f39af7a56f2","e98324a43e2a71153912f8a9e624e258a866d1432626488b68ad38506d8ffca2","de90a66267bd025d30c6623276a2ae4091bb47af211d6b47bb7508f50ddf54b6","b481eb7dfc437a72c3b6964d8fc98a01ed7298b763513f7cc64af992f2a66023","b8e915c10920bbb765319f19067e3754c6113a2f78c66c5b92e1c4b0d0bda5e5","e2bcf0aa809b3d8c0af97deaa988f61f299368b41ad61bfb95d4685ed2013785","4bb29133da3e3befb6f82094d6ec72ae2cfb2c785df327732ca5717f311ee8ee","4f07e219ce111d2a7b8551a68993cf80a96dba3c07fafa55cbc0b375579198ae","02e6fbcccf57b970406fc4f7319d92314739983820d0a7474c7f296d0bcad422","372c034127bd8edf8fb1cd96ad84e7bdd9fe23931d2c063c001d00fa417e9adf","f25275d39e7ee47370e5b020c0a8ad6f89b394cc3a622c64694c867cf3385f82","7de2511e71e948a58a4ec5f9ebc87fce9ae59392f76c2f71ba67a5354c8aaa50","a06b127b31087aa5bd5b53595072deeedc3d978e914204f896a02465982b9a6c","a7dd33cccdec774c39e53590fcb93418d0675376f4786a938498cd0e8c03a895","c023c25d1f19bc3160a868610e0c9788ede82c54cdcbcac5208a73ece09860be","b7cd5b76b7f5a7d723ab5a3795ad21d9048a604cc9a239ffd6126a2c05fc4877","aa0bfdb515b3889524c8545d0863b3bc8b71463696778d5f7a9f5b55fe044e17","5dac5621fc59d4a10ac4b67dd3ba1966b185f9527ccca8d5fcfa490a5b835bc8","39cca18567e0202924247b62a7846c1410d38f59a15bf91f7e8c5d1b3bd93eab","ba1d0b7814659778be83c3e79bcb8028cdb521fa623ba4e844f97b4a3f9c5645","fd584c0aad6a373d3f2c3fbf8e03b655fe06479a14104906c1ca6669dd1569f8",{"version":"5d77cea05bb9db1a3dab8585d43317059af625f9addbc9d0adb511124f891330","signature":"71ab773143db98e2a8c86a04f6c59ff5f52710d873ef6e51bda7f0f93d86a77d"},{"version":"8afb311999a3f1a8cd74d6f75dfef15bde1e97d90c9a0e2e9d6e317525a1be8b","signature":"940ca6175f8ae57cf5077564bb4ed4f7bbcc1ea26db5c02f6f513302d6a380d5"},{"version":"4961598d611185798a8911d15a28d55fc217513562ac0a12309484ca432d4808","signature":"537e40f2d9c1138123744cb30cbde8d3681c34103229910dd5e02c3a4d7601e5"},{"version":"487864819b2e187ceac2281d77352ea61c43e5f72991765b78962c3719e6316a","signature":"67c6c22aff458f5381116308164636f44049ffb983e5fa48479e1ab072b74bb0"},"9fde1428c828c9ff281394035f9ef77ac35886fcd0729bea8fe3bb8b2354946a",{"version":"15f37bc42c444e7037c6018604aa8498e56226de6edee9beda8d77fab0a0d837","signature":"e42de158eea28e8bcc6c9fa6bc18e981eb85fb36af8bbeb495a8dc918a468530"},"fde311c1e27f31ba2a6cb4076659f1737df2aa1b0553428d58a0f63043f24e9e","ff1d36fa5920bc7163e14beb616cecf12b5fcd1bbe38b0d54905814bedd8ceb5","844400ee78cced1dfc82302ad36c8578bdc8a33969d5e5ae3428b4a1fa0b3e2e","9a9511516915fe38cf625d06058ba0159a6a8a2cb5ac2ab7de1f308f4b96f9aa","b918e73c9ea0321ff1ec79b7431029f037729a1148966fb28c6092dff448ced7","a299a575f7df0b332ad1e74549b0c34f1ba40c79dadd9b9843018e712042d8f3","d8e2b89aff76c7804cb74c99bbe66605338c36fcff10b7e670c6f95db2ba3e71","1f1f0d8922fb4c8d83263d71594d15004fd4a687d38fb61cb621bee662535b59","fcbfc6d2122831683ce1e3fbbd38cb5fed2f94776d282aae25be1e4e462b355e","876debc1830896caaef2cae23f00eed412012eedae341a4bd905cf5c2d74d289","718aa30e042ae459d4184e6b29accc78146cddf54c384065d534ce1d42e3b083","9f241522d7618b910f71b96edae694866601ce31d6ba50ee8724769fc9ad1ed2","3edb1e79062d36d838bb826440303cacf1acca1589df5afc0be011e5354b125c","85bb9ec11cf2eaba421fde94d43ad6c9006ff94db2d32cdba368222332f0a1a3","442bab679dfa816ef6f92dacc8ea8889a6e1e48f021579c264cb4fb7a6baf2c9","ed2d06a4373122a568bddf7d98a87d7e98c9a64afb0c13b58e63eb69ff0bb546","3a26cc363c0b7bacd0e865f57de7a5a9ed03f4b3866d223faecec750cd499c77","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","989ea8e89ef2d6a07a1872fcee14be6b9e1920b04f19a4ab149d673f89af67e6","207e2c650349c308784c7bafa97c179a06be8c712e0dea5d110168ba2a738d9e","7be83e775564d83ac430e925b8c6e1eff23ebd5b7a0113cc045b31961c94fe42","d166081dc75f4fe8997a1fdc06d2dea03d0e7dc6ec29d52aa90df2018fdd3e93","4a90fac407e7b784b3936a3f997b1dc65773c6bcf7e46473e37931c4566b3ae3","830798bef0a6f5e74c0f755609af254408be5b2e81b757fd8b665919e9c10437","9571e7149d5254bd0805e83d9533f810f441e20fc44709825f40fc2597da9e60","202a6fc1d742067fcb038cc206cfd67e36e70b487543a190b13fcd4417947483","0629ba58f0a8caab0550e2ee52c4e2fce77e2a77d55a2698c1db9925d7628b59","374c3065e6d64d2dc99f5b6b636b35d040da0ef102378aeefecfd3980159abbb","613ddd0a577793d1ab426f46bd9421cdec0c3f4629c790ea7fe75dbb81b455b6","d4dc0ff08a7eb798e2cc14b78ee7fe1eb8467ee42237cfcdacda2a417db5ee55","0b99a6cca2c8b4df64ef01c2b48274d1519111319a47593ad497f8b16e5939fc","0f00c17c5ee290326dc950fcc14af1b830a4aafdbc4f783419df3a97a0478b97","e58359514396db81a868598cfdec16ed43e653b58b6a4ffa25f066c53034f9b1","63d06974f5ce3bf12c798f2d145a88f0122dddc6455f4e527c58e66faf62e038","92a94dc4b6631e695359d1370da40ce0411ddb7b0ce0f54ba161d8db0c4255e8","aba29d8cb9c780728cbe0d167d561414df7f3bcaec7d72a93331f31206d23536","154b7a4a5fe25c0700335f9d4c6123ffb02574e44c3d0a18a9fefb3c277ef213","07f6c2ca27e73adacd98d72946d03cc243334d3493c2056231df9e75177e11ec","2712c8a1250fd303c53c6cdb7189871400ccd62976d92534a61dc1490ec9ecff","9a17bccb0f8f88216ced437ca35e0b0fe33b3c95bf28b5e529a51723d6f82db9","da4621763e2cfc1ad9ca313fc924e4158f4fc1cdd9c0f1447624749fc6fe309a","cc126583c6681d567df9c4c977294eb6383610ed97e33c1ad51903110dad8f2d","557cad762351c249d9314db3e3d1de670d216c8fc8fac867c5e367424120a6f0","8dc596da06d7c50b53053c0507ff12cfef85e4b78bfc2bd7a0acb2537dbe07ff","5954d5a5a8598155bb83929d277777413607d80c7c5082c256df289faff6e714","a2f8174b988b95c69c1adbe677a3eb93337a28fd46521b023ec010dde73a01a0","a4424279d0bb550fbe49e0cd7b81a0b14518521caf7c5478e07c064ad19c1a3d","1b24f71ccbded4b59b48b4d524dd3036d76d477ed6a5daf4649b3a3d0435088e","81a5dc9f640013927f0b1b0024a940040708eb1e0cfefe241ba1f94a4866ed93","c94422e1f9588632341bbdd98ec05ec2b0dbaf55b6af56904394ce3eec513781","0d95d1a119ff36cac80ac9251596eda4cc94bd700249d6fdf653ea3fec1245eb","0717a222288982b39b7f77e60f0fe27d4fafe56beee61a200506a97fa23f76b0","3add72ef4e006f7ad1b36284fe85f1134f045bf8941518704f83367883ab9ac0","5940038f4f1e6d15d07a96af074a5f6dd250ef7a2d694f5d0a26aafed3067bf1","f0d947a69ce4d2425aaab02a88d572053b79e4a8edb7f2439c1631debb31703f","b389170624a78c8145512e8b7c53b267b885ed5d00de644c6d2a1a2901c7a1f5","f091fd39db8b972fbbd27d8b1fc23f5c56117ceef43fb7f668e9c2a246f558e6","53c51846e5e77e8f98c7776e73005255a92eecb8314a91c0382ae65e12b61562","08a52df2864a931d5321c22d5770c503d398e5f68890075f1a02b10f3f314749","1708b53bc1679c5cc33d6a21fff3c7a8d08f170c995e55a58ad15c3b799b9157","aa8722730c55b09e73b0a748a9bfb29cc335eb617cdb56e8d257deeffbe4056e","a89b970fa0374112ece68f2d40196b4849f4eaf2af737e41faba0302aeb2cf80","c2bf7b18df2d7725a4c2db5bed6b268b2ff3a5e8143432cd16905dbc33400c9e","f471b464e3a55276d1106ba602a221c7e9c476be0eb80820dca7e9ef04f5e3e1","30383ecd870ae5642cfcaaed21ebb58a33b990bff3c5aebfee700b74f6cbcd4a","5996c19247652d34684c13874481339ebeb634b988eeb09a4b5756f74428a9a7","a8d1572719d4b270e3346ccdf174151ebeec231e3a60aa1250d771049b24912e","51bedfb8884eeee18a5ea1cc513450395c9781c0671a14ffb1be62a041431a4a","783646b589b52db11b1fbd4c3f4ce6f390e8430f453c1ae6884f2b700137f7c9","e9c3b0a949e90db58aed5b2dbff9cf6f0dfc139b62aec385688fc9d5f956e517","ef0d062de7b4c3afc8f06437f16d08a542a8b7b1a95d98c5e554ce76692a24bf","4f6ed3ca540074e860b4e477660a75ec7d565c6dfeaf6cde5b477d5fde35b955","e34541f1051a90a5252c946aadecca070e3b63aa6605857efb2650b8e1bea1f6","6d1cca4a90053f132f915a3df12f7d293932694274b49764a424ee766e599ba2","635c57d6eb2401f9fad98450092c663e14e7e9006d78b843614c8be85720532b","d417414d45ba13d672a3715ecfe832e0cc633b895ee9e074ccd734d0b88a47d5","acdc9fb9638a235a69bd270003d8db4d6153ada2b7ccbea741ade36b295e431e","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"a14ed46fa3f5ffc7a8336b497cd07b45c2084213aaca933a22443fcb2eef0d07","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"7fd7fcbf021a5845bdd9397d4649fcf2fe17152d2098140fc723099a215d19ad","affectsGlobalScope":true},"df3389f71a71a38bc931aaf1ef97a65fada98f0a27f19dd12f8b8de2b0f4e461","d69a3298a197fe5d59edba0ec23b4abf2c8e7b8c6718eac97833633cd664e4c9",{"version":"a9544f6f8af0d046565e8dde585502698ebc99eef28b715bad7c2bded62e4a32","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"8b809082dfeffc8cc4f3b9c59f55c0ff52ba12f5ae0766cb5c35deee83b8552e","affectsGlobalScope":true},"bd3f5d05b6b5e4bfcea7739a45f3ffb4a7f4a3442ba7baf93e0200799285b8f1","4c775c2fccabf49483c03cd5e3673f87c1ffb6079d98e7b81089c3def79e29c6","d4f9d3ae2fe1ae199e1c832cca2c44f45e0b305dfa2808afdd51249b6f4a5163","7525257b4aa35efc7a1bbc00f205a9a96c4e4ab791da90db41b77938c4e0c18e","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"9c611eff81287837680c1f4496daf9e737d6f3a1ff17752207814b8f8e1265af","affectsGlobalScope":true},"fe1fd6afdfe77976d4c702f3746c05fb05a7e566845c890e0e970fe9376d6a90","b5d4e3e524f2eead4519c8e819eaf7fa44a27c22418eff1b7b2d0ebc5fdc510d","afb1701fd4be413a8a5a88df6befdd4510c30a31372c07a4138facf61594c66d","9bd8e5984676cf28ebffcc65620b4ab5cb38ab2ec0aac0825df8568856895653","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","5e8dc64e7e68b2b3ea52ed685cf85239e0d5fb9df31aabc94370c6bc7e19077b",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"c07146dbbbd8b347241b5df250a51e48f2d7bef19b1e187b1a3f20c849988ff1","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"ae5507fc333d637dec9f37c6b3f4d423105421ea2820a64818de55db85214d66","affectsGlobalScope":true},{"version":"46755a4afc53df75f0bfce72259fb971daac826b0cdd8c4eaccad2755a817403","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","54e854615c4eafbdd3fd7688bd02a3aafd0ccf0e87c98f79d3e9109f047ce6b8","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","8221b00f271cf7f535a8eeec03b0f80f0929c7a16116e2d2df089b41066de69b","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","7fa32887f8a97909fca35ebba3740f8caf8df146618d8fff957a3f89f67a2f6a","9a9634296cca836c3308923ba7aa094fa6ed76bb1e366d8ddcf5c65888ab1024",{"version":"bddce945d552a963c9733db106b17a25474eefcab7fc990157a2134ef55d4954","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","4b55240c2a03b2c71e98a7fc528b16136faa762211c92e781a01c37821915ea6","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"94c086dff8dbc5998749326bc69b520e8e4273fb5b7b58b50e0210e0885dfcde","affectsGlobalScope":true},{"version":"f5b5dc128973498b75f52b1b8c2d5f8629869104899733ae485100c2309b4c12","affectsGlobalScope":true},"ebe5facd12fd7745cda5f4bc3319f91fb29dc1f96e57e9c6f8b260a7cc5b67ee","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","21c56c6e8eeacef15f63f373a29fab6a2b36e4705be7a528aae8c51469e2737b",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","f7dc3e993645c18af9071c7861c74b13775e108f7e25719f1832502749f3f3ab","4c89d1e817ed5662f32f73281908c35300225f86ee9615ea7284b3a3ba7e8e73","4d45b087ac6232c4b691d7af7b005853b3c34d6669f8a0adeb852621d0ca6487","6d1d6e2b7174f994c8d1a12a0c9840e791193f9b19f7978cc728b6017506fb81","71b5fb5ab34deff2c438ca9e699165576d086a597f78f36cd0e8f31d3b813a50","f9a628585dc8d9973cce3968f05f8f9cac16388b114fe35a72dc27eddd3b5ed7","6614bdbdab15e2bc6d1140dad22cfca6618a79ebb2ddca1e10e979628d04b465","102a0246574a7b1fbddc4c10c5e9e28043b91a563c989dcf6cdab036566f2a8f","65137d9bb0feb8773c6c8b0febf0df482c56736a5a343f8a8f1793ec57f60821","ad6373332491e34ef1e4e045f45dcbde93429680b9793b2ccedc1aeb104ab89f","e0233e4856dd75848de95008aa78d01ce1620e8ab2b1cb517071d0642be5bdbc","6183a56473c639c67bae727efff3b4d4fa5e0836ef9170a6a863fd5da100ad6f","c87f68de7be11c5e5fdc61daf4b82817e304509bf6628b7e535dcde3a52cc03e","394cc7861c820ae8cfbb70fefe4810e38d0df90fcff4963896417d2cf391272f","a6b2eefcee7bf0eb3442f3af088e0a0e30fbe29bd85d9e829434a3e4b7ac911d","56d8f5f610511b6c25511f9628cc3718a6d296aa2937d6fdf9dead1e46947023","03037d76ff0005f6893b57f0778d80547d01bfad6906a2fc145e1d65843b12cf","14b7c2b93e9e61d7d9ae0a15ec53e13b907d86e41d941f923181b35fc3c91667","e68d09210bfbc6c91a50f25dc588ddaf5596cc98859c890d0d75823a95e0fb9b","0d7b8162bce11d4e3ecc779b960894742b96530ed4ce97bcc98294414ec67fdd","7c20f2dfd5737c6be51a430296b3a6e4d343609bb960194538e278fedcf1d2c1","3d5b9ec4c3545b98ca8a4c6ec7d2611729e8735acf8eba9a38aec0673fd04514","3e2be2beb52cd6ddcf118b4eca5d714e20af00abf78ca29a22a1142ae4e9e15f","68f9dc7f3ed068b7fee91ef3a58e2ea5b24da3c750edb16c36b90f9d37bdac27","c8c183e6fb6a34dba9daca07f5739c7185d6f46f45cc6052b474599563126d49","eec0b2333c5d5dc4970368f6b451f73d4ae2b7c63984f628c0f1c734be8a334f","770022d3a791df2084bd29548ce96af5938d464dfdbce9970c2ea626ed78434b","4183b4fffd2c031fdf59b9f10e4605301f6136efc459a635edeafd143853286d","785db2d9303f6e5e95770f53ae01bd11aff56e2f1d30765e34ef54f61d684fd6","e5479df8689f85ce437b87ee86fac83a4a2f766dc8a728a28c4efb66d05d9a34","255933b7a2d8f2151547c08e0d0d23252b2b31c96d936dd5fbb9843c9e74b334","9524b9280458375efe0709fdb562c8194b4efd868c4c666f681145bf6a7a1c28","2032d6ec452e4a7d33a87c2e97c37f6db35215b604b30e2495a2a2247f60c082","f5d55bec32087015056cc3fc0a052169878dac611246087120f25a70a285c647","42243bd3897b138dbfdd66afee6ef4224983e6e3dfb8b433710fbd7cfab40f08","ab0b91ba544d64392aef15007e3eff72a7823580399d302458e2140d4fd3579d","4235519a2b8121ffb75328f2822773f0122da6be80336b463a01af5fb48d7b0e","24f169a9c97740ee80b8755dd2ff4fa38678ec4d3aedeb180c293692f6c2361a","be58586a82f316c49d0cb290070f24c4eb703868b50c3fc2cdfaae56631c0fa2","5b19c632c9500022939b1d2770a1e9ec601b32d1fb018d6994097db9001a4d8c","2ac14fb4bb514ddea63664aaec47060d0488a5e646d75a16c398bbb206f8985f","dd4f00785ed0577caccbb1173caa10676964241bae5d804f1e1f7d7bc5593d53","ee4c5fbc985c57953bbc0827bea95e8b0ea2b71831fa216cd8b0e4632c66301c","c858050d3d96d500b5d06096956a8137167e60e063fae37a67d6353583fcc63d","20db6b2113a0890afc714e2107f4219df8f246c35de0a0d346edc342b3a59b76","b2e95d0efc2054fa9ca967a01e82a02a1fd6a911ebe8a7f7bc2583795f9dd881","1c5ce6a202398223afcd7f8927d99463f941237767466d53b23a61ea157846bb","3d005136f19a117184eddcc51811c015533ab4bd79adf7e88bd616c3d67650c0","b2f0cc01cfd06dd34c4d49363c3ff9c4036eb04f96e524f44b1c971eb40f27be","015a461f5bb209f9efe2a00e40e6c606d8d900f52ff7d07f6fee2430d8f20284","be875211e8e00b6a4541bc363877119d3d80a9a8640011e3c97d0d7e65534a9e","1662c3668c06b90e17ea51c1932961184426652e89a4a9e8ef1a4b8101955a97","62996658cffc51e88e36cb4195616d9a1a7cbfad45275e482c0b9dd5b0e7f344","763e5e7e2b50ffb424b84fec434c2283ff9b1c105cc91f8563c67247e39d8aec","be4ace7b0a5bf878e11fb560cde13ce6d165b39e9d684502b07a06e335d1097f","116391d567472ae8adb81282652b4f369d4bd6bbb13aa01b124d0358ee42bab0","0a62399600cf30c53fab181f40af7c88bb024537fb6f305bcc250434ec554c89","c479ed59e0cc6ecd56c4d47bbb06eb00f8bd08c6ea03607e270afded90cb3470","b36887df57f77679299481cbd0c791d9832dfd575d6fcc5591ffdc3b90b4ceb4","20db4c97ffe62cb8a09904558bdab88cea9d7c295a5de916f76c61457dec2867","c118897e00f131381cf6573bc540d3435106c76895e58a55b76b1e19de644e6c","3f511408ea5106b322b0cb490c8ce49ebe1ebdbb0b9f0f25808e1f07867d5757","3bf7b1fba3f92de778e4473c0f03c1b05d31e98b5a45b0a79fbceb106684a68e","613a94f6b698e86cd2baa6209c78ac9131dfd6a3587df12ff98041afdcf76f9d","d81cebf9e57d0eb9ffa1eda702e2bd09f4c50014f2f3c53e0a609290beefe662","d91d51f9e48a48e812b935c5d9fef6168f1d0559de7c0863b61c414c3b605455","e19d256779d8279deab657f22cad490121240fbbfedcd0527933084284192933","2198c5ace2839aa913a1d652aa652ae2052bc0d80e3a9a257e8e30a8e160aeb3","6326939154a02aacb3261f3739e3dea4554085dfceb2d26dbd82468a450f8e1b","d27fa9313bff4d88fec18d395c04123f0714a44fdd6de5ac7c30a7429ef0c4e1","f4bc8eff98d872e004049464f8d86751fecaac7417840e8cecbaa6e55b3b1d57","7663c18abd2e3ed19c9d12581b45134e2d514490891f4f860a792811cc24d2c2","ef27d2813b1fcb6b1bcdc8e9c332d9b36e71de2e7ebbe3262b3318a4d7bf3560","643307ae04aee6d0a28effc4ac9fabb8eb040be596be9f6020d52c5b62be5ae2","13203589974b7751bfeeb3055c4c0199a60fe582adc898a65a5d79375614dd47","1ed686cccce5a27be1f3141d173e8a820c88ad687a495882726d20b682ed817e","c9b2ae1d29936d28fec9d468c2fe35d77a5d550f7f2ef42e1048135f35765778","b383aeb5ab94070a1c24dcf4f95ce6ac1a351c563e37a2de0058d8d1259d49c9","7d5414c872fef983b214f8f1e66edf7652becd6d9da52a5cdbcb88c7c5ed0aac","5c5f9edf4f848449142a867fcfd02b035e102eeb32a04b84e7b54525c2dd26c6","ac8ac236717f7f84690ef26bff8744cd2f28a8db1167048b84fc52c69634e263","9a8000bd3e203ca941f4f52ceef2686946800bc1418ddca9aa1b29cb2af5319d","c60210772fa691168b8c1ef11d86bde50abdbc9772fc811190c95e56c5ed1ff7","9618f852ead3126916ecf12541e1040f62cd97375b669e673acf6a29f7fcc03b","387b04be5d19e57edd81c7f03f48a32f426b43ffd6533688de48c8eee941c60b","78f2ea8e5e5264ea21c5468b4872e8560564ae654a8d4b72a4a9e571230ea536","20bd128b1900dfc8ad9e6968a2141a2d0ce3a47b9f6c6c37d2f72dd7db3139e3","e7f325977f5952a7458467ed482e1903fa9ac90d9cd48d595033dce448e2ceb6","b50362e95e904b3f62389c8b7474e58bf1d6ad5cb9ee793a1fbd830c48a9b130","97f6a71ad8733b651e1168571649ef7c1f2da3a2a645f3b554529019f3278b44","37a0a590bc79312fde1117df5c85f59fe0aaa8023cf05932800badea10ee5ff9","3ba66eb4df84e3c942328529490bb3098eaaebadcd475b9dafa50a791d07a615","53f213a384bf10d9554a4b765fb689c5652a6207654b45175588ad9ced7646d9","d276fbf95f7a55fcb1071861e19f1cfc64573b85d82d5fc16685d794b7a1a6be","acb673766fafe44805916b7268e7f9eb8a533857bba96c491b9822ef96344840","d140fb0a1532b1305f6896d14abad20f89aced0297dc8de1c91e48c5722d04dc","b0af76354e4b9cd0a21a7b5fe88fcb967c1cef5cc802de6d0750583751856558","3fb1e27086f0aa3de2f0e7e5a7785143a688e4632e3815bdced89b1eb47db5da","0d77de3ab21a79ba6b045b6e090b554bf781b0479bf4e612fa3e37a294e4cd48","c803c7a019d167d414e842a993bef5da33f8684468581add5ae079ba4bd9f9d9","2fb74550f7bde961e30e85d54e98e95f24529832ed258da29af243c16b946e8d","1faf898cfa002f866766e350c443d345078aca64513ee734edd52859c2ebe519","a82983282c6519cdc8c66d81a07e034454af9df1a8b0d600e27608dc67887e6b","6a82da485abc23e1f63f65d14698451dc0a3f153810bc1208ff328cfbc91d17a","0e28ebe5133db119d2e6e52dd7f7ade6092152e85b14b6c23aaef938b368da53","66d72a9904812bb7f17cdd284889d3c1b37961e5722e20e248d2c4d887afed5c","ceb3e4ab38154b897f6008c78a1632c416b78a3d980b2a6e1b4420cfd2335f1c","b5408bc8c0429418457e538dc66320c8d0a3781e3aa6f3784a391e890ce0ba08","7d58aed1a0f3537d9bcb95641b83957a60c43edbcbd572e60125c4c2ce134fbc","55814b6d90ac9df7d387e2dd83d10b85cb5521870ebe86d9fa3a1e93ecabb3c7","3d69b81fd329ddb25cd59c5f3f0a12e6236a1c93d6acb67dae495f7346b8b68a","36b3fc1e11ff5ef0af78c9eac67bf0f0566828223b82b562b9394b5884b9b977","261ad905d3763ef75d887260e79913ab33938dc80bf5c247263e7d3a6e56261f","b062c20df544eedc8903d047cb6ec7b12ef730c27bf1bbc52459a0976247e386","f8e9c0ede647b155f6f23ef46e97986f9d4bea5cec92a86ffb10a4b18a011dc6","9541a134946e40b71ff41770484698337169da237658c5e12d749b4eb874595a","c079324b927b081e8785280e0efbd33ba228ebebb2425a93cf9bc41b01398a0b","43d03180c19e11ac277e4b7c4d8f4d65654211e8b0ddcd0cef5ab4e85600a2e0","45b9ab524a41523754211490fde86ceb4919c7f33891f905158794badd37092a","207e6271d7cc0a519a8f024dd5f09823bbb3978e733fa69b3ff23dcde9a11269","c25393e12204b3d7fb64f30b1162d9dc99b24cfc38533eb0ffd86cb1eeb6a294","f10103a4a9cd8f96e06f7e1c78424d3cadce5b0956e94f5e2c65a49d29f5a7d4","0524f5e4a4743166af011984619e634d3b81bfff649837643ae0467199809467","b647906423e2f95be4258f5e6b3a170782928cbfad310a9be31062a27e100858","deb833983eab5c95ce61751f07bfd2b2618b013b182021eaaaeb6cfb8a071e88","088853f4d3b115a3f05a3561c09513a2652472eb45e162a8c263dfb8d84a210e","0984b6e8a2eb2451ec1cb49e51f6c0c9bb2b1f8cebb850a7c49ffe4dd4fe7a27","982e0717cdc99894e25fb6d87b0218cd221d99a440ab8f32f66388309ee8ece2","75eac5e76c0214e789afb921009201d750cb67033789bc75cac71dd7fba3c035","9e237c0e4743ac170786019d80f25c56d7341db9bb191116fb8939d66523ba62","fd111f97dce2e421cc1bee9dba82bbcbebe6ff1b6842c03a9f98418ce0350b42","353f7144721b2748ef6ebfe38a4b0981097fa598ea35457e629b27b961dab07b","7a28c877fc6fcec1579988cd8eb48c0442040c70be663fe09c1d1429e0423a9a","7d43bdaf780517dcaa029ff8cafb7464ad8d4cd3186cc6d60ca3911f6b75925f","864ddc2a7850329bbd857f4ff97ea8df2a4f6ec30ecda45fdac02096c6567df0","dc87959b5eaa6530139bf9b136c3c0f5b552d19d1e659066c820435b043b2eb9","195680be8390d611254573187da6c50d3a679be81021abf1b49baa6a8d6dab56","79c04ddfb432b75ac99f3ced497c24cd026b2810d656b007dd7783f219478e51","fb5e2197d79c2a9e36556075477b459bc1cba96a49577d8ee0d963a20b488d8f","520525246cf40d9f7da18774069a0d3a521fe92f1f282499c2fed30193f44291","36a364aa3535becb3f69bff0044643a3c02c1b5d809f16bcd04e726024cebafd","f79a32de1dace313c819fb562099b16d97bc290f2532836ea16f2ad9bdd86a66","0d467454e25ef5862f3d054ac3adb7713aabd482bb53b79dd2c89c376f8e84a4","cfa54ffe6efb22b8feaaf2e36c681a084c3ce505bf2890c503f4cbb519337e63","00fae336db44552739ebe7c172187d8d667d49ec1aa0739d0408dad1334c54b4","216a57f3e0a22a5dabeb20f7e70197849c2e89163f6025ce014eb704e47c937b","02d3038759d3e967c121fb058732c531ef867b913e1004069ca8ae291c47ec62","39973c3424992a00f6a10246c17b31e2de83109dd4891fb03ecbb44998cb9144","4748840d90c6ab3818e65c686e5c9bc89eb8861bec693606a0aa1e52bad39552","acc9c371832ce828a998571b8ded4239728c427786389d54721c8faa14f38836","28fa5115b7e713a349499ef2f7496e8ed46400f7fc4f674a14093d4a9fd13f7c","d878fae306447b55cb7de1d2d9560a6f5f92aaef306a17f294fb157b98763e41","110eb84825d6c46c600ef1f1f8518d63cce6cdd4c29f4028a11585296a587f51","75d8eba72b08a5618a68ef80bab10aa089126d6d6980288f71a67c18a1ebf9cf","9da72bc274a751ac3ba0b5932e029b0f744fb685a73878edae2dbd5d8d299bd8","b123ca2df88e0b4a452edbb83f02515b37a76cbd754859d88513415be0497e05","2fd32aec6f5df41b1fec54294b317bfbbf616a811dab4ffdc1fc3dad672689bb","d6d3cca0b5e6dcaa22b638361f3731d61d970551ae1dd94edc50fc1644c06a04","285c939d8e4cdbd36d01d25e749a33dd87f773b00f3dc723f6379965f1f3e57b","f0eeec252b0b1352d89d1c00b1b4de86aac0ce60ef50efe68fabf6d7ef94ab9b","1670b85b5476061ada746b1666605ffc74fdde6fe2507ea4fd4aea03afc71f34","0753c1a9e5282f7d474fd1322aca12858b57703baa03ccab28901499fb4b52b2","a92b2ae227c03340ddd4c38ee20f54ddf9b239b53d36b6de2442be8b4d56d970","135762c9d7d771c78cafdf36ffc1785b8d37f7e60b0bf9581e2de83296ca89a8","6f5ea90a20a125640c6acfd5dbc04086512465bcde781e80114a000b5262ff1e","26c93ece8e57b05e555d0d899401c2aa8638f1c5b9b1f7debbe00c9dbf582d68","62010289494665b1f59e6a192403c2be5db4462daa8a9b2122b6a7f3dd0037a3","dc6b39c63f4c9debf861f584760f98a2cbd6c3cd8ea155a5c9b50f7457576399","25d3fa4d471fcc47c43f0c3f432fd0d549b90ff177c8cccf8c4ecc8212d4bb2c","fe2bde75b894c5e06a04c1293238bd07d459f8be15d4bf0fb0398ae96d93f7da","8a9d182357187d43e618a2af5c446142c9b54a61fbd54fd34380dd249f4726da","059d57361af574f7bfbc92611b18d0cd0e86096b3f02347bfbd5946da23d7409","fcd6c5c9464e4746d12c42e52effd1be2fb3365bc9b352af00163ff2e462bc35","8ab72b32c9d583c2bf3f6ed7def7d4d192fe861dac6a3936638b966c76efdafb","2a42d270d9157ecac790cb4262a03a1f573a22e8393c74190a313601decd7a20","57b358e53474d48f596ff3f50ac1c16771ba6f960d67bf5ff52cad244686c78c","5db80aaed904b53df8bb56b6ad11bfbd7bd95cbae495551dd3d23c2a2e920551","3e6ecb32fe77a3d1ceb886ffc52a9ac172d1be9f1f95578742f966ecf1894832","7cedb55fe7533bd1489d0bb90a4cd5f64e20f903dd1da79346087dd521ac8127","ea48005eeee9696b61331fdbe3dcce5145401f453bbc2b3335037920a5f326b2","140b5b26ae62c6c4415d9c68b0239a145feb01269c452344cddcb590ba3dbbdf","5c364fbe017dd7555ad9c0ccce84700b74acfea1c393db4d3c8f943c000e953c","846da1ea9c55a62faf0e46d358224d3fe89cf90868a46d4660eb717a1b392469","62ac525d09ffae20519efcb84a5c0361ba1f971864ba61633b7b61bc5a37b27f","222df6dc8b2cb057ace9914c462f26c0cae287b8c6cb9382529040ddeb3b360c","3396d28c0c94ae860858c9c401c1d4ae74670c1b772ba4ba5619183719c03bf4","be5fa2c70cda236fce28c90bdde9ff41889320c15cc17df730baa2f645543df6","f92829ffe2ade262426e69653d6c5a43849d59fbac413de4816cf6ae008e356c","db5b0c25e6af09ca0bebae5026aa7cd79a92eaa43f9af2ab8cd5789b7aebd5b5","d3939fd3e84233dd9a5a9a0c4afbd63189b501833e6cd7dc2596d0ec83f15e78","46ef1c0f9df1ed2ae35422bc9ca9a6a1f7df7daf576b13af2dfdff2a48701320","d74870f9928a6fc1bf1bac428d17e93002febe88664f5f5a1ac00c596102f7d6","897efa5342971257e68de7f417b872f47a1c53613a42042572d7c97359a9d526","b666ad2298db2e67478951783dc5d7d5d0fe869a72461e2fedf0f027e5a54d41","3474d8ae839c1f9e9af541f2f6559457960080828ce365b1d178d14b981bb3f8","ac475370ed23b1c2c8ab48c0d0f95e4e65601e92fb0b13aebc8f1d6d381d003d","399905f8e11e068ef73cffd1868345345d79694c14b894d5894abb689618ad2f","35cfb5cfc9d3cf7136794f110372d5807db47f5643c0646363ccc1023a98fa9d",{"version":"1e1c96ae510e13ac6388d0428f59c94bc2ff283c0ccbba3f9ee965f19c495e23","signature":"bd075613ebe9ad6c9b3adb67195fc969f20e5e9c36298096c451d429f2ba2d28"},"19fd329349eb6a93a8f69af375efa88dc0dc5a9175c00b99fe30ece766cf0fec","eb243f5468506aa75b53515edd95e3f2bf047d2cea58925f5a314b08d698bfef","9548aabaeedbcfd4ff769c361f38b75a888ffd69c22da57fca5f63d9187fca5d","bf8d10553c34182dfffe8b790f014b7e79213c6e98e214485ccf9478f23f991f","755eea84a87ef7d132d354ed014c50ab75d4a34e9559ccc6fa030fedd4f3d1ea","f63cd77d7492ba22602757706f0c69eb3347a37dc699c613172d5b2a21490b5a","927ebd59c4d038b77a586979c833487e0f042abcdad43d8dbd8efd5dee594444","e96b066eb9fd84ff95919871e253bdfe89f69f693342629ce6682129af520234","c2622f3a8436b191e615420ca9bf253f6dfcf94c48a97c9d6f0aeada696f231d","476d655f8be276ff54c3b9f759e726b413974d2e9477d71ef5a822eb5c9f23eb","b51f16b5c1c0bb0cab5b769210337937a24ec746163c2a4ec19a375f038b5ac0","a23fbd2e709a483a1ad8e0eefa60f6e3ec805ccda39dc03a62b4fc5850e48355","e4ea9ef628f408110525a1cdd18ec5028bfdd329a8ddfdbf894a0fbecad4bae0","7f33d0d260ab2f1cf48bb1b1964d0f1a28382839b68d8e37234e7c9c741b721e","0763d47189f3f6abf9bf554abe26356cc031e4ddf63160daf9655feca6733510","1bc68827231a09e0c64d069b3b36edb1bc4a913cdedd0e250b0b9b311e70d5d4","f78997ac43db231a4a5457672ce28b603ac942401162f771f24c7fe81ab217d9","e66c4c9c4b957a88d81e34ea61b4dcd3b7ff020794cff90e3075999bbc315c9c","d7621fa8a764a3d4b35007ab695aa96b3733fe08806a95e878244ee30ed2641e","038dc83d6ffc3e609096c955f998fa48d9b0527a8953567ce6202aad511fbfa0","ad644527b82e0b65d2220159fe8f029832248edab936079b99db63919b80816e","5cef169a9675bf5a8252a02dfa7d5cfb901df3cb3ef830b422748a30eb7bf45b","e47834c1aaff5768c14992ce1b38674d15656e4eda26de6908fa6a8c1f7284ca","6fca3f1df1fde448c93fd2a8d5e5323a08eac12d28bf8cbb0e775bd31c5db153","b81fcb81cb82487d098ade46123e71cdc894618748607edbd78680b7c269328c","3d532a056100f5961e4490bba47dd4cd6681776c73aac1f47d15cc4e1421a25b","8262a9115176246c1d02183a7d7edac9f7e524ce3898bd83c1a62f7cbade5b98","0d538a01457b940a52af80d3579e12d6d2d591264b9c6794e6f336ca9d96f456","54e0fe5e5219a0a0d79f70c712920f83c25e7093997c875e363e35bdb9fd9390","ec7def9da2afb3c422614b127dd3e480181895f350f3eaea9907c40b95539d68","b14584f31222777bf2d335870c8f38a8664de5bc96f6e60c3fc640f979bd1148","403f9be983da13e54d42d4f1d58b9bac8351fcbc2b55f91b3c9ee084669a0fef","12aa0cf428fd73f175cd5bab0b52b990d573aeef3057180a9b25ce4600a78657","bca09e69981babb046aea598ab847d45569b80f2ea2c2f699f33f3b0eca68201","a96325bc6f6d21f0610fd8a6c9ab009ef10cc497a6e377a064ea7f624cfcda03","caee8217716916831b30db6d01e60de2767fb047a6e04416daa4f3977a0d0af6","5268bdb9bb193927e7a076eea6f61f36d36ef5f206f0ac96d75db9e081a9ae0f","9d26892d46573c93b42e27596f69a94640adcc8636bebc731206bb9b1517c2ac","ece182f166b0196560bcccb70112027ceb7bd4e3bf1a3d6578fce9c913409263","f75102825bc6df71aa3098ca43e0abc183392a0f07bfbf46d9d346fc2d58787e","eca3d39118a685a87ee0f5d939c4c907f5cd419cac7b10f67e5c28e0a339ed5b","057b45b9e0a1a04d5f0e6c4bc1006eee655156b87d4e34c442b8fef1b01c403e","96c82a2e425ce2849dbef7cb0344cd40847381c92d5adff8bd4ba7ef41e6ac85","2121d3bb13ec2ef6524180c94fca7afe1794257ad549ed8ac8705ce5ec76b928","0c10b810c8716953aaa93843fe8458e177fbc0431891065b362986d3e4db712d","7984ae4dc5cedfd63df1904661c3a62fd97101e8d58958826304875c1fe737aa","286841e5060ec0b17279a78e0e8170bddea9e79f1566fbdc03390c503f513635","58c026e95b287df30a7aa5665f5733d63a59a79c2d2591ca09f608eb28ea9d94","b1cad415e5a6f80234fae799d5f48d903cfe0339a860cf2592b104420eeeb226","57a8cc1ab2a96371ae2a641edc52d9849bbb11b5139499840cb7e9a2aad63bab","224ff6a7684920ee91a4483933a276705474c0b95e47bfdb06bcf8f1cc4d6ac6","b8ef333131aed1ba5e4ee5764474fe2bb1d7743d45182d57444fe5e47aaff3f8","c54dd58d735800d7ae1b5ad11a37c03c8524f6870d337b2e9b204a5556464b87","d55620fa0008ce6868a85ffccdd2f415d538b926d1694b96a74edbce584eb928","120ebbe6a3360a02dabed49f2c258707c7d48b2cdfe83461eccda88580fddf54","8114e4e4da23c7c72b835423ce3bd51d8f2c991f54e1e13c2d784a2789f84566","84765fb546f0535b27caf5578d8f903090c51526e8c21f30551271d9bfa8a900","67da206ebd319b5c872384e3818933de12178676443be3bb9239566e4ec6eca0","1545316ba58d5261f32d4f80e19bb8202c010f399aa13c7194662e49c2d2e7c4","8adeb00e49b6a9366d20add121183cf55b434d50efc8f0d5dae254ffa0f46877","596eeeb32d27bd2684a87367f90f27380277e0957d00bce4c1363c9f7e157e74","12ecc994acb2478ada23ba2f23f6351b1ac4374ebbbbe18fe13946edd8ae7d21","e45ba6064065038ba650f869fc5bc48cfe8279316230eb53a5a097a6855f0c7b","c1cc3ae2b370b3e61ef8c35e4d7959e8b1b75b198e838b8810a6c4afea21d572","978c6ce33ec7fe1b8b60ec3e3174a948fd80edbb3360e86b3c108bdcb8912069","9aaea3879bfeec5688c649633ba93fd4152573b8e01e869a0983eb2011df913b","60f8e47994e36de18407c8a7b4e285689eae7f08848107bebb52346fbb28d164","222fafe15e3b263369f584397b815bc046d36a401f06d9234fbcee2cc0e75dd2","6b56a4681133c98ad44c7a46bcc52cd6ebad88c4ff2da9b6ed732e71bb40bf07","1d4fc2ca00f621bd668d410888244e79ff24378a0f77716a1a39848478dff500","b7b0efbdceecacd0bdda5d17504979eaa591f6c6ca9e0bed3072ae0aaf6e5c09","179d1edac2f9c09f5fdc9ecfc09336347018f50e3ca94438d5689a3231c3bca0","2ddcbfecfaebfd5edb8f624dac815308b50b778e6c5e6b87cc9191f082cad095","14b83d6e337d6697d69038aa8d384096ebbe983d75e596e180d6483586d68051","07d9bf6c83ca7e8b1cf9d577dff43c6ccb91af6ce3fd6db7135e21e66ac3411f","211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32",{"version":"852317b7af371da8a5ac77ccb09c186f1400aa64f8fa6233511d6261c8655b19","signature":"e40fd8c7edb424642e8e62b71c3064a01c84bf99eb9c07aaf285ae6bee3d28e6"},{"version":"4635b038bd5840d62d7c56dc22c59742fa391d7b76ba37dad65eb0a8031008be","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"5e74b3b56d6fa38e27c08553e5664abce45e76ff355f696e77554a22c515e28a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"3dfcd0a3bfa70b53135db3cf2e4ddcb7eccc3e4418ce833ae24eecd06928328f","5c0948b942f2e4d15bf7425e927967bf7b7013060b39286d01789d748e3df721","bc41a8e33caf4d193b0c49ec70d1e8db5ce3312eafe5447c6c1d5a2084fece12","7c33f11a56ba4e79efc4ddae85f8a4a888e216d2bf66c863f344d403437ffc74","d147404d24705b7dfcc196012d20d9622ed042c04a160d641baf2af0f462ed77","fc9d4e784c9e7569911d8a6a01e1de90617942639c7c260beffdef1548b1ce06","f3acf8cff186f71a3a9b2da63f1378de6fe68a8578cb47d097776143cc84cd7d","c6029ce69540fcc6b659b90e1c1164bffc0d68f8db05f9ba5dca0919255c05af","5743243334c97d149ebb6093de9060ddaff7158ea093e99062737cbcfc8e5ca5","aa9456d4df880022cac314c906f232cd3911052e114aa77c41dae2ce42e4bcf0","585b6a3e27da0624e1d7d370aa56de47405f63443557d05fc1628a65684f2db6","d2bce192bfd015f614ed990644618ca6d9d58e1d17eaf427f943d03d823be7a3","c2be5af341b5c92d4c26e1d4451394c7ac3d7db081d9e08d99ba4abf67fed2e1","e27605c8932e75b14e742558a4c3101d9f4fdd32e7e9a056b2ca83f37f973945","3771cb36b62e2fa4a9e381816c75bad9595ba12a1b513d8ccdca05d8b9a6f081","f3daf1c3dccf7f6f6611cfc327526735a747a28a4a86f1c9e75a7d89ac406cad","4d56463740ea85ab77709af57f97c8a412c6ceac031c7de6b08b183bd924fb60","dc6b37790a3e06a31d2bfec7d926f472da80c212df13d668d2c1335c757357e0","3fcfbc27efa7d3302b4ddce48126c5a0e28253070c6342fd4e889501809d80e9","3f5d5691e167b4df74f8e700d79facf33d6054178d5902fb4311943b7ba14dd3","4965752112e0dd55f695c547b2ec8beb9ecc4b98962ef19b6302c330c35d2f42","394b4927dcc6eda44eb759f395da17b6e07f4daf272216b5cfc92eb32239f561","171c555cae7fb14e62a760eac187e74381c4b1a7e1e6e0834a0ace1f434dfb66","66c57d7932ffcfb7ab9573825e45029c0a7f39c94b742b283f19f8bf301ce7d9","3956f34170e48abf902bc81055fb35a7e8b87109dbf3ca272d096d6d42cf7b84","7777a3f34cef7a7cabd0fa03a662cb6968cccadb111af18098d7eb302c892253","960923ce078ecfef6e5c34468cdba5c552b064c0db7cb0fdd3eafd1bb9d3d7e9","42f034630b3a866d4a88b37cf0f8357b36af2f7298b319d536b7413ba99f979b","33d1d46d7789bebdf9b78cd54f39022aad5d7d1d03a58bdad4fe98658acfef06","b5a4f434a23873c13037973bb7072f28d5438e0d0bcb6fefd15ffcb44592891e","0b2b568e213ec5b02f35ee84ebf4c3218ff66fd4dad8acb1ac19001ca96e34f2","b19ff018419b54a2da6d73e289995ee46d6124de0beaf0d0b9b49e072efc6f46","325994b6f6c7598c73bbd0294bf1e3f1e229772669b3c8a08fe3170442f600b8","6710a28c1184ef61c21173c7cbf64cdc07d7cecd5982e9c8469052a2d7380b6c","843563f951d16e850a0be806010f630a4a71f0a55810bb9aced67c6d7774bf2f","9af1c478e5403b39b922df9132d779bc6e1ef88cafec17fcecf26356d90ecbd6","454e856b3762d7b57bfb0fd8f321b5a95c4f369a3506f631bddba5c186d70eb1","2d92dab66d4e9228e477063ba55f073507a2f3451a3cef146347a41d6bd062ab","02b1caff09358768da68691fd5bdb7c60b6682371ef987cfcfb329e860996673","b932682e049f41e294a3429aca3b0adb4d2eed8047b4c22f91565e9353d6940c","989b451e0ad386e24883d8939e1ba39f3446c91dd2bfac0862d76e5e73711da4",{"version":"5fe0bfee6f4c755d85e40d499314e5796e91c56555b713d5a9c30931dd30295a","signature":"e5aa6f9f174b70dc81759b46d31b8dbcf35273bd1760dd6f42b88d258960cb4f"},"b8442e9db28157344d1bc5d8a5a256f1692de213f0c0ddeb84359834015a008c","458111fc89d11d2151277c822dfdc1a28fa5b6b2493cf942e37d4cd0a6ee5f22","da2b6356b84a40111aaecb18304ea4e4fcb43d70efb1c13ca7d7a906445ee0d3","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","febf0b2de54781102b00f61653b21377390a048fbf5262718c91860d11ff34a6","6f294731b495c65ecf46a5694f0082954b961cf05463bea823f8014098eaffa0","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","68a0d0c508e1b6d8d23a519a8a0a3303dc5baa4849ca049f21e5bad41945e3fc","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","b03afe4bec768ae333582915146f48b161e567a81b5ebc31c4d78af089770ac9","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd",{"version":"ef6a775dedc33618f6d3690582ebbe5ad52fd28ae757d6a9a7ef22f3e8bf2753","signature":"be2d8b749756dfc9e59182e975a575fc544849d1977c1b8222df8ea6d6f7f5df"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"233a21773fce7bb4d66d98fc26224da295302dacdae4c151c1e0ffafd178339a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"233a21773fce7bb4d66d98fc26224da295302dacdae4c151c1e0ffafd178339a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"8cb5ca4275ed1fb2d193b2ded33f72d891d367b44f357adfe7afd8aadfa98b6c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"55584873eae27c5607725f0a9b2123cdea9100fd47cd4bfd582b567a7c363877","2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","8041cfce439ff29d339742389de04c136e3029d6b1817f07b2d7fcbfb7534990","670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","9d38964b57191567a14b396422c87488cecd48f405c642daa734159875ee81d9","069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","53de0abfdd3b44213e7c3884e1aaceaf390a16a8494429864c57ddaaa43dd1e7","afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec",{"version":"5ab630d466ac55baa6d32820378098404fc18ba9da6f7bc5df30c5dbb1cffae8","affectsGlobalScope":true},"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","c0288f54de6f544706a3150c8b579b1a975870695c4be866f727ece6a16f3976","f8636a916949481bc363ae24cbeb8451fa98fd2d07329e0664a46567278c9adb","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e"],"root":[144,145,147,510,[589,591],633,[647,655]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":1,"newLine":1,"noImplicitAny":true,"outDir":"./","preserveConstEnums":true,"skipLibCheck":true,"target":2},"fileIdsList":[[656],[671],[656,657,658,659,660],[656,658],[662],[311],[274,311,586,587],[274,311],[666],[667],[673,676],[274,303,311],[634,636,637,638,639,640,641,642,643,644,645,646],[634,635,637,638,639,640,641,642,643,644,645,646],[635,636,637,638,639,640,641,642,643,644,645,646],[634,635,636,638,639,640,641,642,643,644,645,646],[634,635,636,637,639,640,641,642,643,644,645,646],[634,635,636,637,638,640,641,642,643,644,645,646],[634,635,636,637,638,639,641,642,643,644,645,646],[634,635,636,637,638,639,640,642,643,644,645,646],[634,635,636,637,638,639,640,641,643,644,645,646],[634,635,636,637,638,639,640,641,642,644,645,646],[634,635,636,637,638,639,640,641,642,643,645,646],[634,635,636,637,638,639,640,641,642,643,644,646],[634,635,636,637,638,639,640,641,642,643,644,645],[224],[260],[261,266,295],[262,273,274,281,292,303],[262,263,273,281],[264,304],[265,266,274,282],[266,292,300],[267,269,273,281],[260,268],[269,270],[273],[271,273],[260,273],[273,274,275,292,303],[273,274,275,288,292,295],[258,261,308],[269,273,276,281,292,303],[273,274,276,277,281,292,300,303],[276,278,292,300,303],[224,225,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],[273,279],[280,303,308],[269,273,281,292],[282],[283],[260,284],[285,302,308],[286],[287],[273,288,289],[288,290,304,306],[261,273,292,293,294,295],[261,292,294],[292,293],[295],[296],[260,292],[273,298,299],[298,299],[266,281,292,300],[301],[281,302],[261,276,287,303],[266,304],[292,305],[280,306],[307],[261,266,273,275,284,292,303,306,308],[292,309],[679,718],[679,703,718],[718],[679],[679,704,718],[679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717],[704,718],[273,311,720],[165],[167,168,169,170,171,173,222,223,312,313,314,315,316,317,318,320,321,323,324,325,326,327,328,329,331,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,466,468,471,472,473,474,475,476,477,478,479,480,481,482,485,486],[173,317],[173,221,317,327,331,334,338,342,397,483,484],[312],[328],[334],[331,334],[292,311,317,318,326,327],[167,170,313,314,315,316],[317],[167,170],[168,169],[170],[166,332],[173,221,317,342,384,464],[171],[170,221],[221,222],[167,172,223,502],[221],[324],[322],[320,321,323,325],[311,319],[330,331],[166,332,487],[216,311],[311,330],[328,329],[163,170,317,340,341,342],[340,341,342,344],[317,340,341,343],[340,342],[326],[340,345,346],[317,326,465],[317,326,467],[173,202,221,469,470],[311,320,321,323,325,330,331,332,333],[320,321,323,325,326,334],[317,327,334,338],[166,170,317,327],[166,311,317,334],[166,175,221,317,331,333,344,475,477,478],[166,170,476],[166,221,317,333,344,477],[331],[476],[173,221,317,333,344],[166,173,221,317,333,344,476],[385,386,387,388,389,396,397,423,424,425,426,445,446,447,448,449,450,451,452,453,454,455,456,457,459,460,461,462,463],[397],[386,387,390],[390],[385,390],[388,390],[391,392,393,394],[386,387,389,395,396],[422,423,487],[386,444,445,446,487],[221,386,396],[330,487],[385],[327,328,397],[386],[388],[387,397],[450],[158],[450,454],[450,451,454],[451],[311,358],[311,358,449,459],[221,389,396,397,420,449,450,451,452,453,454,455,456,457,458,464],[330,461],[161,162],[161],[489],[157,159],[175],[157,158],[491],[330],[364,366,384,421,422,427,428,429,430,431,432,433,436,437,438,441,442,443],[175,366,434,487],[420,487],[420,421,487],[420,421,422,487],[420,464,487],[366],[175,487],[281,292,311,383],[487],[349,362,363,364,365,487],[427],[502],[358,361],[428],[163,173,317,340,342,366,384,435],[156,366],[366,439],[362,440,487],[175,216,221,330,358,361,383,420,444,464,487,488,490,492,494,497,501],[359,360],[493],[292,311],[153,154,155,156,163,164,174],[155],[153],[154],[156,159,160,162],[156],[150,166,173],[495,496],[495],[210,211,212,213,214,215],[212],[210],[175,210,211,213],[212,213],[148,149,150,151,177,178,179,181,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,202,203,204,205,206,207,208,209,217,218,219,220],[175,202],[152,176,177],[176,202],[152,218,219],[152,176],[150,151],[152],[149,150,151,178,179],[149],[152,177,180,194,201],[181,182,183,184,185,186,187,188,189,190,191,192,193],[152,175],[179],[166,186],[166,189],[192],[150,191],[195,196,197,198,199,200],[203,204],[152,178,179],[152,197],[179,206,208,209,216,487],[206],[179,206,207],[207],[398,399,400,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419],[175,216,292,311,330,361,398,406,407,409,410],[292,311,410],[276,311,398],[216,292,311,401],[175,311,407],[216,292,311,398],[399],[216,292,311,402,406,408,411],[158,330,403],[405],[405,418,487],[404,417,420,487],[404],[303,311,405,406],[350,351,352,353,354,355,356,357],[350,351],[354],[350],[358],[362],[500],[498,499],[498],[367,368,369,370,371,372,373,374,375,376,378,379,380,381,382,465],[166,319,327,377,487],[367],[380,381],[380],[262,311],[366,384,464,487],[262,311,374],[502,516],[292,311,502,514],[311,502],[511,512,513,514,515,516,517,518,519,520,521,526,534,539,540,550,552,554,557,560,563,565,569,571,573,580,583,584],[502,515,521,522,523,524],[515,516],[522],[522,524,525],[502,516,521,527,529,530,531],[516],[527,528,529,530,531,532,533],[502,516,521,535,536,537],[521],[535,536,537,538],[292,311,523,540],[502,521,541,544,550],[541,542,543,551],[517],[311,502,523],[523,553],[557],[502,521,558],[558,559],[502,521,555],[555,556],[502,521,561],[561,562],[564],[502,516,521],[513,516],[544,545,546,547,548,549],[502,521,545,546,547,548],[516,566],[566,567,568],[502,521,567],[570],[572],[517,540,576],[574,575,576,577,578,579],[292,311,502,521,577],[581,582],[311,502,517,521,581],[311,502,515,517,521,560],[503,504,505,506,507,508],[504],[502,504],[502,503],[669,675],[673],[670,674],[99],[98,100,102],[98,99,100,101],[97,102,103,135,140],[102],[97,102,117,135],[97,102,116,135],[97,102,135],[97,102,116,118,119,120,121,122,123,124,125,126,127,131,134],[97,102,116,128,131,135],[102,113,129,130,135],[128,131,135],[97,102,116,117,135],[97,102,132,133,135],[104,105,106,107,108,109,110,111,112,113,114,115],[112],[116],[138,139],[141],[136,137],[672],[96],[63,65,74],[63,64,65,72,74,75],[63,64,65,74],[64,66,67,68,69,70,71,72,73,75,86],[63,64,66,67,68,69,70,71,72,73,75,86,95],[63,64,66,67,68,69,70,71,72,73,74,75,86,95],[61,64,66,67,68,69,70,71,72,73,75,85,86,95],[64,66,67,68,69,70,71,72,73,75,86,87,88,89,90,92,93,94],[63,64,65,66,67,68,69,70,71,72,73,75,86,90,91,95],[63,71,85,95],[63,64,72,95],[64,66,67,68,69,70,71,72,73,74,75,85,95],[64,66,67,68,69,70,71,72,73,75,76,77,78,79,80,81,82,83],[64,66,67,68,69,70,71,72,73,75,76,77,78,79,80,85],[63,64,66,67,68,69,70,71,72,73,74,75,76,77,85],[64,66,67,68,69,70,71,72,73,75,76,77,78,85],[64,66,67,68,69,70,71,72,73,75,76,78,79,80,81,82,83,84],[63,64,66,67,68,69,70,71,72,73,75,76,77,78,79,85],[63,64,66,67,68,69,70,71,72,73,75,76,77,78,79],[64,66,67,68,69,70,71,72,73,75,76,77,78,79,85],[64,66,67,68,69,70,71,72,73,75,85],[63,65,72],[64,66,67,68,69,70,71,72,73,75],[63,64,65,72,74],[64,66,67,68,69,70,71,73,75],[63,64,72,74],[72],[51,52,53,54,55,56,57,58,59,60,61,62],[52],[54],[61],[235,239,303],[235,292,303],[230],[232,235,300,303],[281,300],[230,311],[232,235,281,303],[227,228,231,234,261,273,292,303],[227,233],[231,235,261,295,303,311],[261,311],[251,261,311],[229,230,311],[235],[229,230,231,232,233,234,235,236,237,239,240,241,242,243,244,245,246,247,248,249,250,252,253,254,255,256,257],[235,242,243],[233,235,243,244],[234],[227,230,235],[235,239,243,244],[239],[233,235,238,303],[227,232,233,235,239,242],[261,292],[230,235,251,261,308,311],[593,616,617,621,623,624],[601,611,617,623],[623],[593,597,600,609,610,611,614,616,617,622,624],[592],[592,593,597,600,601,609,610,611,614,615,616,617,621,622,623,625,626,627,628,629,630,631],[596,609,614],[596,597,598,600,609,617,621,623],[610,611,617],[597,600,609,614,617,622,623],[597,598,600,609,610,616,621,622,623],[596,597,598,600,609,610,611,612,613,617,621,622],[596,617,621],[617,623],[596,597,598,599,608,611,614,617,621],[596,597,598,599,611,612,614,617,621],[592,594,595,597,601,611,614,615,617,624],[593,597,617,621],[621],[618,619,620],[594,616,617,623,625],[601],[601,610,614,616],[601,616],[597,598,600,609,611,612,616,617],[596,600,601,608,611,632],[596,597,598,601,608,609,611,614],[616,622,623],[597],[597,598],[595,596,598,602,603,604,605,606,607,609,612,614],[633,647],[144,147,502,510,585,588,589,632],[144,147,585,588,632,646],[145,146,283],[147,510,585,588,589],[147,510,588],[147,509],[147,502],[141,142,143],[144]],"referencedMap":[[658,1],[672,2],[661,3],[657,1],[659,4],[660,1],[663,5],[664,6],[588,7],[665,8],[667,9],[668,10],[677,11],[586,12],[635,13],[636,14],[634,15],[637,16],[638,17],[639,18],[640,19],[641,20],[642,21],[643,22],[644,23],[645,24],[646,25],[224,26],[225,26],[260,27],[261,28],[262,29],[263,30],[264,31],[265,32],[266,33],[267,34],[268,35],[269,36],[270,36],[272,37],[271,38],[273,39],[274,40],[275,41],[259,42],[276,43],[277,44],[278,45],[311,46],[279,47],[280,48],[281,49],[282,50],[283,51],[284,52],[285,53],[286,54],[287,55],[288,56],[289,56],[290,57],[292,58],[294,59],[293,60],[295,61],[296,62],[297,63],[298,64],[299,65],[300,66],[301,67],[302,68],[303,69],[304,70],[305,71],[306,72],[307,73],[308,74],[309,75],[703,76],[704,77],[679,78],[682,78],[701,76],[702,76],[692,76],[691,79],[689,76],[684,76],[697,76],[695,76],[699,76],[683,76],[696,76],[700,76],[685,76],[686,76],[698,76],[680,76],[687,76],[688,76],[690,76],[694,76],[705,80],[693,76],[681,76],[718,81],[712,80],[714,82],[713,80],[706,80],[707,80],[709,80],[711,80],[715,82],[716,82],[708,82],[710,82],[721,83],[722,84],[487,85],[482,86],[485,87],[313,88],[329,89],[335,90],[336,91],[328,92],[317,93],[315,94],[171,95],[170,96],[314,97],[483,98],[484,99],[172,100],[365,100],[222,101],[223,102],[173,103],[470,104],[469,104],[325,105],[323,106],[326,107],[320,108],[332,109],[333,110],[322,111],[331,112],[339,113],[343,114],[345,115],[346,116],[344,117],[340,94],[467,118],[348,119],[466,120],[468,121],[471,122],[318,104],[334,123],[486,124],[472,125],[473,126],[474,127],[476,128],[479,129],[478,130],[475,131],[477,132],[480,133],[481,134],[464,135],[390,136],[391,137],[392,138],[393,139],[394,140],[395,141],[397,142],[424,143],[447,144],[426,145],[448,146],[386,147],[423,148],[445,104],[446,149],[387,149],[389,150],[396,151],[458,104],[451,152],[452,152],[461,153],[457,154],[455,155],[450,149],[454,156],[449,157],[460,158],[459,159],[462,160],[488,161],[162,162],[490,163],[330,164],[158,165],[159,166],[492,167],[491,168],[444,169],[434,165],[435,170],[421,171],[422,172],[442,173],[443,174],[431,175],[432,175],[433,176],[384,177],[363,178],[366,179],[428,180],[349,181],[362,182],[429,183],[436,184],[437,185],[440,186],[441,187],[502,188],[361,189],[359,168],[494,190],[493,191],[175,192],[156,193],[154,194],[155,195],[163,196],[164,197],[174,198],[497,199],[496,200],[216,201],[213,202],[211,203],[212,204],[214,205],[221,206],[176,207],[219,208],[218,209],[220,210],[177,211],[152,212],[178,213],[180,214],[150,215],[202,216],[194,217],[184,218],[185,213],[186,219],[187,220],[189,219],[190,221],[191,219],[193,222],[192,223],[201,224],[197,219],[198,219],[199,219],[205,225],[203,226],[204,227],[217,228],[209,229],[208,230],[206,231],[207,229],[420,232],[411,233],[412,234],[400,235],[402,236],[403,168],[408,237],[409,238],[410,239],[413,240],[416,241],[406,242],[419,243],[418,244],[417,242],[405,245],[407,246],[358,247],[352,248],[355,249],[353,250],[356,251],[351,252],[357,168],[501,253],[500,254],[498,252],[499,255],[383,256],[378,257],[369,258],[382,259],[381,260],[370,261],[465,262],[375,263],[166,84],[512,181],[517,264],[518,265],[519,266],[585,267],[525,268],[522,269],[524,270],[526,271],[532,272],[527,273],[528,273],[529,273],[530,273],[534,274],[538,275],[535,273],[536,273],[537,276],[539,277],[541,278],[551,279],[552,280],[523,281],[553,282],[554,283],[558,284],[559,285],[560,286],[555,273],[556,287],[557,288],[561,284],[562,289],[563,290],[565,291],[564,292],[545,264],[546,273],[547,293],[548,273],[544,273],[550,294],[549,295],[567,296],[569,297],[568,298],[571,299],[570,292],[573,300],[572,292],[577,301],[580,302],[579,303],[583,304],[582,305],[584,306],[507,181],[508,181],[509,307],[505,308],[506,309],[504,310],[676,311],[674,312],[675,313],[100,314],[101,315],[102,316],[141,317],[103,318],[118,319],[119,319],[132,320],[120,320],[121,321],[122,320],[123,319],[135,322],[124,321],[125,319],[126,321],[133,321],[127,319],[129,323],[131,324],[130,325],[128,326],[134,327],[117,318],[116,328],[113,329],[139,330],[140,331],[136,332],[138,333],[137,332],[673,334],[97,335],[75,336],[73,337],[66,338],[67,338],[87,339],[88,340],[89,341],[90,342],[95,343],[92,344],[93,339],[94,344],[86,345],[91,346],[96,347],[84,348],[81,349],[78,350],[79,351],[85,352],[82,353],[83,354],[80,355],[76,356],[77,357],[68,337],[69,338],[74,358],[70,359],[72,360],[71,361],[65,362],[63,363],[56,364],[59,364],[61,365],[62,366],[242,367],[249,368],[241,367],[256,369],[233,370],[232,371],[255,6],[250,372],[253,373],[235,374],[234,375],[230,376],[229,377],[252,378],[231,379],[236,380],[240,380],[258,381],[257,380],[244,382],[245,383],[247,384],[243,385],[246,386],[251,6],[238,387],[239,388],[248,389],[228,390],[254,391],[625,392],[612,393],[624,394],[623,395],[593,396],[632,397],[613,398],[622,399],[599,400],[610,401],[617,402],[614,403],[597,404],[596,405],[609,406],[600,407],[616,408],[618,409],[619,410],[620,410],[621,411],[627,410],[628,412],[602,413],[603,413],[604,413],[611,414],[615,415],[601,416],[629,417],[630,418],[598,419],[606,420],[607,421],[608,422],[631,401],[655,423],[633,424],[647,425],[147,426],[590,427],[591,428],[510,429],[145,70],[589,430],[144,431]],"exportedModulesMap":[[658,1],[672,2],[661,3],[657,1],[659,4],[660,1],[663,5],[664,6],[588,7],[665,8],[667,9],[668,10],[677,11],[586,12],[635,13],[636,14],[634,15],[637,16],[638,17],[639,18],[640,19],[641,20],[642,21],[643,22],[644,23],[645,24],[646,25],[224,26],[225,26],[260,27],[261,28],[262,29],[263,30],[264,31],[265,32],[266,33],[267,34],[268,35],[269,36],[270,36],[272,37],[271,38],[273,39],[274,40],[275,41],[259,42],[276,43],[277,44],[278,45],[311,46],[279,47],[280,48],[281,49],[282,50],[283,51],[284,52],[285,53],[286,54],[287,55],[288,56],[289,56],[290,57],[292,58],[294,59],[293,60],[295,61],[296,62],[297,63],[298,64],[299,65],[300,66],[301,67],[302,68],[303,69],[304,70],[305,71],[306,72],[307,73],[308,74],[309,75],[703,76],[704,77],[679,78],[682,78],[701,76],[702,76],[692,76],[691,79],[689,76],[684,76],[697,76],[695,76],[699,76],[683,76],[696,76],[700,76],[685,76],[686,76],[698,76],[680,76],[687,76],[688,76],[690,76],[694,76],[705,80],[693,76],[681,76],[718,81],[712,80],[714,82],[713,80],[706,80],[707,80],[709,80],[711,80],[715,82],[716,82],[708,82],[710,82],[721,83],[722,84],[487,85],[482,86],[485,87],[313,88],[329,89],[335,90],[336,91],[328,92],[317,93],[315,94],[171,95],[170,96],[314,97],[483,98],[484,99],[172,100],[365,100],[222,101],[223,102],[173,103],[470,104],[469,104],[325,105],[323,106],[326,107],[320,108],[332,109],[333,110],[322,111],[331,112],[339,113],[343,114],[345,115],[346,116],[344,117],[340,94],[467,118],[348,119],[466,120],[468,121],[471,122],[318,104],[334,123],[486,124],[472,125],[473,126],[474,127],[476,128],[479,129],[478,130],[475,131],[477,132],[480,133],[481,134],[464,135],[390,136],[391,137],[392,138],[393,139],[394,140],[395,141],[397,142],[424,143],[447,144],[426,145],[448,146],[386,147],[423,148],[445,104],[446,149],[387,149],[389,150],[396,151],[458,104],[451,152],[452,152],[461,153],[457,154],[455,155],[450,149],[454,156],[449,157],[460,158],[459,159],[462,160],[488,161],[162,162],[490,163],[330,164],[158,165],[159,166],[492,167],[491,168],[444,169],[434,165],[435,170],[421,171],[422,172],[442,173],[443,174],[431,175],[432,175],[433,176],[384,177],[363,178],[366,179],[428,180],[349,181],[362,182],[429,183],[436,184],[437,185],[440,186],[441,187],[502,188],[361,189],[359,168],[494,190],[493,191],[175,192],[156,193],[154,194],[155,195],[163,196],[164,197],[174,198],[497,199],[496,200],[216,201],[213,202],[211,203],[212,204],[214,205],[221,206],[176,207],[219,208],[218,209],[220,210],[177,211],[152,212],[178,213],[180,214],[150,215],[202,216],[194,217],[184,218],[185,213],[186,219],[187,220],[189,219],[190,221],[191,219],[193,222],[192,223],[201,224],[197,219],[198,219],[199,219],[205,225],[203,226],[204,227],[217,228],[209,229],[208,230],[206,231],[207,229],[420,232],[411,233],[412,234],[400,235],[402,236],[403,168],[408,237],[409,238],[410,239],[413,240],[416,241],[406,242],[419,243],[418,244],[417,242],[405,245],[407,246],[358,247],[352,248],[355,249],[353,250],[356,251],[351,252],[357,168],[501,253],[500,254],[498,252],[499,255],[383,256],[378,257],[369,258],[382,259],[381,260],[370,261],[465,262],[375,263],[166,84],[512,181],[517,264],[518,265],[519,266],[585,267],[525,268],[522,269],[524,270],[526,271],[532,272],[527,273],[528,273],[529,273],[530,273],[534,274],[538,275],[535,273],[536,273],[537,276],[539,277],[541,278],[551,279],[552,280],[523,281],[553,282],[554,283],[558,284],[559,285],[560,286],[555,273],[556,287],[557,288],[561,284],[562,289],[563,290],[565,291],[564,292],[545,264],[546,273],[547,293],[548,273],[544,273],[550,294],[549,295],[567,296],[569,297],[568,298],[571,299],[570,292],[573,300],[572,292],[577,301],[580,302],[579,303],[583,304],[582,305],[584,306],[507,181],[508,181],[509,307],[505,308],[506,309],[504,310],[676,311],[674,312],[675,313],[100,314],[101,315],[102,316],[141,317],[103,318],[118,319],[119,319],[132,320],[120,320],[121,321],[122,320],[123,319],[135,322],[124,321],[125,319],[126,321],[133,321],[127,319],[129,323],[131,324],[130,325],[128,326],[134,327],[117,318],[116,328],[113,329],[139,330],[140,331],[136,332],[138,333],[137,332],[673,334],[97,335],[75,336],[73,337],[66,338],[67,338],[87,339],[88,340],[89,341],[90,342],[95,343],[92,344],[93,339],[94,344],[86,345],[91,346],[96,347],[84,348],[81,349],[78,350],[79,351],[85,352],[82,353],[83,354],[80,355],[76,356],[77,357],[68,337],[69,338],[74,358],[70,359],[72,360],[71,361],[65,362],[63,363],[56,364],[59,364],[61,365],[62,366],[242,367],[249,368],[241,367],[256,369],[233,370],[232,371],[255,6],[250,372],[253,373],[235,374],[234,375],[230,376],[229,377],[252,378],[231,379],[236,380],[240,380],[258,381],[257,380],[244,382],[245,383],[247,384],[243,385],[246,386],[251,6],[238,387],[239,388],[248,389],[228,390],[254,391],[625,392],[612,393],[624,394],[623,395],[593,396],[632,397],[613,398],[622,399],[599,400],[610,401],[617,402],[614,403],[597,404],[596,405],[609,406],[600,407],[616,408],[618,409],[619,410],[620,410],[621,411],[627,410],[628,412],[602,413],[603,413],[604,413],[611,414],[615,415],[601,416],[629,417],[630,418],[598,419],[606,420],[607,421],[608,422],[631,401],[633,432],[647,432],[589,181],[144,332]],"semanticDiagnosticsPerFile":[143,142,658,656,669,672,671,661,657,659,660,663,664,588,665,666,667,668,677,678,586,587,635,636,634,637,638,639,640,641,642,643,644,645,646,662,224,225,260,261,262,263,264,265,266,267,268,269,270,272,271,273,274,275,259,310,276,277,278,311,279,280,281,282,283,284,285,286,287,288,289,290,291,292,294,293,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,703,704,679,682,701,702,692,691,689,684,697,695,699,683,696,700,685,686,698,680,687,688,690,694,705,693,681,718,717,712,714,713,706,707,709,711,715,716,708,710,719,721,720,165,722,487,482,485,327,312,313,329,335,336,328,317,315,167,171,168,170,169,314,483,484,316,172,365,222,223,173,470,469,325,323,326,320,321,319,332,333,322,324,331,337,338,339,343,345,346,342,344,341,340,467,347,348,466,468,471,318,334,486,472,473,474,476,479,478,475,477,480,481,464,390,391,392,393,394,395,397,424,447,425,426,448,386,423,445,446,387,389,385,396,463,388,458,451,452,461,456,457,455,450,453,454,449,460,459,462,488,162,161,490,489,330,157,158,159,492,491,444,434,435,421,422,442,443,431,432,433,364,384,363,366,427,428,430,349,362,429,436,437,438,440,439,441,502,361,360,359,494,493,175,156,154,155,153,163,164,174,497,496,495,216,213,211,212,214,215,210,221,176,219,218,220,148,177,152,178,180,179,151,149,150,202,181,182,183,194,184,185,186,187,188,189,190,191,193,192,201,195,196,197,198,199,200,205,203,204,217,209,208,206,207,420,411,412,399,400,402,403,408,409,410,413,416,414,415,401,398,406,419,418,417,405,404,407,358,350,352,355,353,356,351,354,357,501,500,498,499,383,378,369,382,380,381,367,368,377,374,379,370,465,371,372,373,375,376,166,511,512,515,517,518,519,520,516,521,513,514,585,525,522,524,526,532,533,531,527,528,529,530,534,538,535,536,537,539,542,541,543,551,552,523,553,554,558,559,560,555,556,557,561,562,563,565,564,545,546,547,548,544,550,549,566,567,569,568,571,570,573,572,574,575,576,577,578,580,579,581,583,582,540,584,507,508,503,509,505,506,504,226,670,676,674,675,98,100,101,102,99,141,103,118,119,132,120,121,122,123,135,124,125,126,133,127,129,131,130,128,134,117,104,105,106,107,116,109,108,110,111,112,113,114,115,139,140,136,138,137,160,673,97,75,73,66,67,87,88,89,90,95,92,93,94,86,91,96,84,81,78,79,85,82,83,80,76,77,64,68,69,74,70,72,71,65,51,52,53,63,54,55,56,57,58,59,60,61,62,49,50,9,10,14,13,3,15,16,17,18,19,20,21,22,4,23,5,24,28,25,26,27,29,30,31,6,32,33,34,35,7,39,36,37,38,40,8,41,46,47,42,43,44,45,2,1,48,12,11,242,249,241,256,233,232,255,250,253,235,234,230,229,252,231,236,237,240,227,258,257,244,245,247,243,246,251,238,239,248,228,254,625,594,612,624,623,593,632,595,613,622,599,610,617,614,597,596,609,600,616,618,619,620,621,626,592,627,628,602,603,604,611,615,601,629,630,605,598,606,607,608,631,146,648,649,650,651,652,653,654,655,633,647,147,590,591,510,145,589,144],"emitSignatures":[[144,"7501318ad4d83f33b4cf67135c7cfa64a297f95a1921241cd91e5bc47db30b02"]],"latestChangedDtsFile":"./src/constants.d.ts"},"version":"5.4.5"} \ No newline at end of file diff --git a/tests/system-integration/package-lock.json b/tests/system-integration/package-lock.json new file mode 100644 index 0000000000..5e565566f5 --- /dev/null +++ b/tests/system-integration/package-lock.json @@ -0,0 +1,9966 @@ +{ + "name": "@zowe/installation-test", + "version": "0.9.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@zowe/installation-test", + "version": "0.9.0", + "license": "EPL-2.0", + "dependencies": { + "json-schema-to-ts": "^3.1.0", + "node-jq": "^4.3.1" + }, + "devDependencies": { + "@jest/globals": "^29.7.0", + "@types/debug": "4.1.12", + "@types/exit": "0.1.33", + "@types/fs-extra": "11.0.4", + "@types/jest": "^29.5.12", + "@types/lodash": "^4.17.0", + "@types/node": "20.12.7", + "@types/xml2js": "0.4.14", + "@types/yaml": "^1.9.7", + "@types/yn": "^3.1.0", + "@typescript-eslint/eslint-plugin": "7.7.0", + "@typescript-eslint/parser": "7.7.0", + "@zowe/zos-files-for-zowe-sdk": "^7.24.1", + "@zowe/zos-jobs-for-zowe-sdk": "^7.24.1", + "@zowe/zos-uss-for-zowe-sdk": "^7.24.1", + "debug": "4.3.4", + "eslint": "8.56.0", + "eslint-config-google": "0.14.0", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-header": "3.1.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "5.1.2", + "exit": "0.1.2", + "fs-extra": "11.2.0", + "jest": "29.7.0", + "jest-junit": "16.0.0", + "lodash": "^4.17.21", + "prettier": "3.2.5", + "ts-jest": "29.1.2", + "ts-node": "10.9.2", + "typescript": "5.4.5", + "xml2js": "0.6.2", + "yaml": "^2.4.2", + "yn": "4.0.0" + } + }, + "../sanity/test": { + "extraneous": true + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", + "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "peer": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "peer": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "peer": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "peer": true, + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.6.tgz", + "integrity": "sha512-4x/182sKXmQkf0EtXxT26GEsaOATpD7WVtza5hrYivWZeo6QefC6xq9KAXrnjtFKBZ4rZwR7aX/zClYYXgtwLw==", + "dev": true, + "peer": true, + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "peer": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.1.0.tgz", + "integrity": "sha512-1aL4TuVrLS9sf8quCLerU3H9J4vtCtgu8VauYozrmEyU57i/EdKleCnsQ7vpnABIH6c9mnTxcH5sFkO3BlV8wQ==", + "dev": true, + "peer": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", + "dev": true, + "peer": true, + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", + "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "dev": true, + "peer": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.1.tgz", + "integrity": "sha512-eqV17lO3EIFqCWK3969Rz+J8MYrRZKw9IBHpSo6DEcEX2c+uzDFOgHE9f2MnyDpfs48LFO4hXmk9KhQ74JzU1g==", + "dev": true, + "peer": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "peer": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.1.tgz", + "integrity": "sha512-aIL8Z9NsMr3C64jyQzE0XlkEyBLpgEJJFDHLVVStkFV5Q3Il/r/YtY6NJWKQ4cy4AE7spP1IX5Jq7VCAxHHMfQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.0.tgz", + "integrity": "sha512-tsAyV6FC3R3pHmKS880IXcDJuiFJiKITO1jxR1qbplcsBkZLBmjrEw5GbC7ikD6f5RU1hr7WnmxB/2kKc1qUWQ==", + "dev": true, + "peer": true, + "dependencies": { + "@sigstore/bundle": "^2.3.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.2.tgz", + "integrity": "sha512-mwbY1VrEGU4CO55t+Kl6I7WZzIl+ysSzEYdA1Nv/FTrl2bkeaPXo5PnWZAVfcY2zSdhOpsUTJW67/M2zHXGn5w==", + "dev": true, + "peer": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.0.tgz", + "integrity": "sha512-hQF60nc9yab+Csi4AyoAmilGNfpXT+EXdBgFkP9OgPwIBPwyqVf7JAWPtmqrrrneTmAT6ojv7OlH1f6Ix5BG4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "peer": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", + "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", + "dev": true, + "peer": true, + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/exit": { + "version": "0.1.33", + "resolved": "https://registry.npmjs.org/@types/exit/-/exit-0.1.33.tgz", + "integrity": "sha512-1/NNW0tyaodminOWDq8snoPHGvf4f9srYKVwCpOukpTesAbJmYSzxa9l+10fHl1xTFOF+l9JXmyRReS+qhSN/g==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "dev": true, + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/xml2js": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.14.tgz", + "integrity": "sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yaml": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@types/yaml/-/yaml-1.9.7.tgz", + "integrity": "sha512-8WMXRDD1D+wCohjfslHDgICd2JtMATZU8CkhH8LVJqcJs6dyYj5TGptzP8wApbmEullGBSsCEzzap73DQ1HJaA==", + "deprecated": "This is a stub types definition. yaml provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "yaml": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@types/yn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/yn/-/yn-3.1.0.tgz", + "integrity": "sha512-Qs2tU/syFYlALjR3EoT+NcvpMwAd6voSiDxW+c8bhAN1WbzQUnRfWTmttORf4R1WqDUT+dvHKj+llupSxs0O/w==", + "deprecated": "This is a stub types definition. yn provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "yn": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz", + "integrity": "sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/type-utils": "7.7.0", + "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.0.tgz", + "integrity": "sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz", + "integrity": "sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz", + "integrity": "sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/utils": "7.7.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.0.tgz", + "integrity": "sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz", + "integrity": "sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/visitor-keys": "7.7.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.0.tgz", + "integrity": "sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.7.0", + "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz", + "integrity": "sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.7.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@zowe/core-for-zowe-sdk": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@zowe/core-for-zowe-sdk/-/core-for-zowe-sdk-7.24.1.tgz", + "integrity": "sha512-LrZCCS+vJslitdldwF6Etd46bG4doq57Aab7VBM/yAeDtkPYjhLNQQ/ff23XOgsmkO+NDr+izsfcL7/dwYmXeQ==", + "dev": true, + "peer": true, + "dependencies": { + "comment-json": "4.1.1", + "string-width": "4.2.3" + }, + "peerDependencies": { + "@zowe/imperative": "^5.0.0" + } + }, + "node_modules/@zowe/imperative": { + "version": "5.23.1", + "resolved": "https://registry.npmjs.org/@zowe/imperative/-/imperative-5.23.1.tgz", + "integrity": "sha512-QtmRGcr1jnVGxs7a942bynxMY5oZKcd8v/axbjykW1doxQYvfUUxlzbAAok9cson/xzt5A22xen1xd8SVkZZxw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/yargs": "13.0.4", + "chalk": "2.4.2", + "cli-table3": "0.6.2", + "comment-json": "4.1.1", + "cross-spawn": "7.0.3", + "dataobject-parser": "1.2.1", + "deepmerge": "4.2.2", + "diff": "5.1.0", + "diff2html": "3.4.20-usewontache.1.60e7a2e", + "fast-glob": "3.2.7", + "fastest-levenshtein": "1.0.12", + "find-up": "4.1.0", + "fs-extra": "8.1.0", + "jest-diff": "27.0.6", + "js-yaml": "4.1.0", + "jsonfile": "4.0.0", + "jsonschema": "1.4.1", + "lodash": "4.17.21", + "lodash-deep": "2.0.0", + "log4js": "6.4.6", + "markdown-it": "14.1.0", + "mustache": "4.2.0", + "npm-package-arg": "9.1.0", + "opener": "1.5.2", + "pacote": "17.0.6", + "prettyjson": "1.2.2", + "progress": "2.0.3", + "read": "1.0.7", + "readline-sync": "1.4.10", + "semver": "7.5.4", + "stack-trace": "0.0.10", + "strip-ansi": "6.0.1", + "which": "4.0.0", + "wrap-ansi": "7.0.0", + "yamljs": "0.3.0", + "yargs": "15.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@zowe/imperative/node_modules/@types/yargs": { + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.4.tgz", + "integrity": "sha512-Ke1WmBbIkVM8bpvsNEcGgQM70XcEh/nbpxQhW7FhrsbCsXSY9BmLB1+LHtD7r9zrsOcFlLiF+a/UeJsdfw3C5A==", + "dev": true, + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@zowe/imperative/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@zowe/imperative/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@zowe/imperative/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@zowe/imperative/node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@zowe/imperative/node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@zowe/imperative/node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@zowe/imperative/node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@zowe/imperative/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@zowe/imperative/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "node_modules/@zowe/imperative/node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@zowe/imperative/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@zowe/imperative/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@zowe/imperative/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@zowe/imperative/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@zowe/imperative/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@zowe/imperative/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@zowe/imperative/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@zowe/imperative/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@zowe/imperative/node_modules/jest-diff": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz", + "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@zowe/imperative/node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@zowe/imperative/node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@zowe/imperative/node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@zowe/imperative/node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@zowe/imperative/node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@zowe/imperative/node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@zowe/imperative/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@zowe/imperative/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@zowe/imperative/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@zowe/imperative/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@zowe/imperative/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@zowe/imperative/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@zowe/imperative/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@zowe/imperative/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@zowe/imperative/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "peer": true + }, + "node_modules/@zowe/imperative/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@zowe/imperative/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@zowe/imperative/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@zowe/imperative/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@zowe/imperative/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "peer": true + }, + "node_modules/@zowe/imperative/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/@zowe/imperative/node_modules/yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dev": true, + "peer": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@zowe/imperative/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "peer": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@zowe/zos-files-for-zowe-sdk": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@zowe/zos-files-for-zowe-sdk/-/zos-files-for-zowe-sdk-7.24.1.tgz", + "integrity": "sha512-++exHv3HsduiXHQmzVGOpxbptZVacXidfcuJ+FWLM8aewPQjWplE8iQa63/6Bq65d3Kj+x2QRruY/2SrPlh3Iw==", + "dev": true, + "dependencies": { + "get-stream": "6.0.1", + "minimatch": "5.0.1" + }, + "peerDependencies": { + "@zowe/core-for-zowe-sdk": "^7.0.0", + "@zowe/imperative": "^5.0.0" + } + }, + "node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@zowe/zos-jobs-for-zowe-sdk": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@zowe/zos-jobs-for-zowe-sdk/-/zos-jobs-for-zowe-sdk-7.24.1.tgz", + "integrity": "sha512-JHwgMKJdL0wOgAar1EGUiNvLEzbm97he1hclJ8xleYp65mjsB9JtBsCXAT0pW/+WPjjGmwdR8Bi5dzBr7dQTkQ==", + "dev": true, + "dependencies": { + "@zowe/zos-files-for-zowe-sdk": "7.24.1" + }, + "peerDependencies": { + "@zowe/core-for-zowe-sdk": "^7.0.0", + "@zowe/imperative": "^5.0.0" + } + }, + "node_modules/@zowe/zos-uss-for-zowe-sdk": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@zowe/zos-uss-for-zowe-sdk/-/zos-uss-for-zowe-sdk-7.24.1.tgz", + "integrity": "sha512-jcwIrlLOe0tZOdJu3DSMPOn0M7bxZqMY/HkdAyDSgSG34sbaL4pU9XI3HqZ6bCNMK6mYnEMEfvoAMlDkLotdyw==", + "dev": true, + "dependencies": { + "ssh2": "1.15.0" + }, + "peerDependencies": { + "@zowe/imperative": "^5.2.0" + } + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "peer": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true, + "peer": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bin-build": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "dependencies": { + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/bin-build/node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-build/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/bin-build/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-build/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bin-build/node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==", + "dependencies": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/bin-build/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/bin-build/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/bin-build/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buildcheck": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", + "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dev": true, + "peer": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001614", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001614.tgz", + "integrity": "sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/caw": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dependencies": { + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-table3": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "dev": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/comment-json": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.1.1.tgz", + "integrity": "sha512-v8gmtPvxhBlhdRBLwdHSjGy9BgA23t9H1FctdQKyUrErPjSrJcdDMqBq9B4Irtm7w3TNYLQJNH6ARKnpyag1sA==", + "dev": true, + "peer": true, + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.2", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cpu-features": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", + "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "buildcheck": "~0.0.6", + "nan": "^2.17.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dataobject-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/dataobject-parser/-/dataobject-parser-1.2.1.tgz", + "integrity": "sha512-1XMF0e8Dkfano8WY9TOCWLUQqosXI/Hf6GQrPESCnIn+NbYwy5kVUto0l2L6EVOIRflq8D820QnfQgVapckmTQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/diff2html": { + "version": "3.4.20-usewontache.1.60e7a2e", + "resolved": "https://registry.npmjs.org/diff2html/-/diff2html-3.4.20-usewontache.1.60e7a2e.tgz", + "integrity": "sha512-0ge1jQpRv9Eg6USdIgnDIzAnuhhlgFPmhglCUBNhSVU772biWWbSu/palu0uK+PbgidjkjkajztZGVAZnD56pw==", + "dev": true, + "peer": true, + "dependencies": { + "diff": "5.1.0", + "wontache": "0.1.0" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "highlight.js": "11.6.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "dependencies": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/download/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "peer": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.752.tgz", + "integrity": "sha512-P3QJreYI/AUTcfBVrC4zy9KvnZWekViThgQMX/VpJ+IsOBbcX5JFpORM4qWapwWQ+agb2nYAOyn/4PMXOk0m2Q==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "peer": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-google": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz", + "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-header": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", + "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", + "dev": true, + "peerDependencies": { + "eslint": ">=7.7.0" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-node/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.2.tgz", + "integrity": "sha512-dhlpWc9vOwohcWmClFcA+HjlvUpuyynYs0Rf+L/P6/0iQE6vlHW9l5bkfzN62/Stm9fbq8ku46qzde76T1xlSg==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "peer": true + }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true, + "peer": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "peer": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dependencies": { + "npm-conf": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "engines": { + "node": "*" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.6.0.tgz", + "integrity": "sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "peer": true + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "peer": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "peer": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "dev": true, + "peer": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "peer": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "peer": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", + "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "dependencies": { + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-invalid-path/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "peer": true + }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-valid-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", + "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "dependencies": { + "is-invalid-path": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "peer": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-junit": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", + "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2", + "xml": "^1.0.1" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.13.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz", + "integrity": "sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "peer": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-to-ts": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.0.tgz", + "integrity": "sha512-UeVN/ery4/JeXI8h4rM8yZPxsH+KqPi/84qFxHfTGHZnWnK9D0UU9ZGYO+6XAaJLqCWMiks+ARuFOKAiSxJCHA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "peer": true + }, + "node_modules/jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "peer": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash-deep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lodash-deep/-/lodash-deep-2.0.0.tgz", + "integrity": "sha512-+Yxj+pYo4tc9+n52qyIF7lySncvCYXRBF0jE0jkRxORpnvEHm6eO/DeUvZlH9zSCCUg4HQY+mzqZqhXmMyLuPw==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": ">=3.7.0" + }, + "engines": { + "node": ">=0.8.0", + "npm": ">=1.2.10" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log4js": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.6.tgz", + "integrity": "sha512-1XMtRBZszmVZqPAOOWczH+Q94AI42mtNWjvjA5RduKTSWjEc56uOBbyM1CJnfN4Ym0wSd8cQ43zOojlSHgRDAw==", + "dev": true, + "peer": true, + "dependencies": { + "date-format": "^4.0.9", + "debug": "^4.3.4", + "flatted": "^3.2.5", + "rfdc": "^1.3.0", + "streamroller": "^3.0.8" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "peer": true, + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "peer": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "peer": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "peer": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "peer": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "peer": true, + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "peer": true + }, + "node_modules/nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-downloader-helper": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz", + "integrity": "sha512-FSvAol2Z8UP191sZtsUZwHIN0eGoGue3uEXGdWIH5228e9KH1YHXT7fN8Oa33UGf+FbqGTQg3sJfrRGzmVCaJA==", + "bin": { + "ndh": "bin/ndh" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/node-gyp": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", + "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "dev": true, + "peer": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-jq": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/node-jq/-/node-jq-4.3.1.tgz", + "integrity": "sha512-5iU9L/7j8ZNHwhxDRJXgyza6JnEKqdkNcJ9+ul5HZnhConhg/v9JdvA9agJ8XA+qBgGr1MK/MeHDrdK1tL2QAA==", + "hasInstallScript": true, + "dependencies": { + "bin-build": "^3.0.0", + "is-valid-path": "^0.1.1", + "joi": "^17.4.0", + "node-downloader-helper": "^2.1.6", + "strip-final-newline": "^2.0.0", + "tempfile": "^3.0.0" + }, + "bin": { + "node-jq": "bin/jq" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dev": true, + "peer": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dev": true, + "peer": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "peer": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-conf/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "peer": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "peer": true, + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "dev": true, + "peer": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "dev": true, + "peer": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "peer": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", + "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", + "dev": true, + "peer": true, + "dependencies": { + "@npmcli/redact": "^1.1.0", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "dev": true, + "peer": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "peer": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "peer": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", + "dependencies": { + "p-timeout": "^1.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "peer": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==", + "dependencies": { + "p-reduce": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", + "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "dev": true, + "peer": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", + "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "dev": true, + "peer": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/npm-package-arg/node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "peer": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "peer": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prettyjson": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.2.tgz", + "integrity": "sha512-hDso231aQslRQPJjuSMIyUTN5CmW78AwEHlvigOs9E9IO+blW1AJTCJC6pQ8FArBSFsp5ZUdZsWXCUfXiD2D0w==", + "dev": true, + "peer": true, + "dependencies": { + "colors": "1.4.0", + "minimist": "^1.2.0" + }, + "bin": { + "prettyjson": "bin/prettyjson" + } + }, + "node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "peer": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "peer": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "peer": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-package-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", + "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "peer": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dev": true, + "peer": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "peer": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true, + "peer": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true + }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "peer": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sigstore": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.0.tgz", + "integrity": "sha512-q+o8L2ebiWD1AxD17eglf1pFrl9jtW7FHa0ygqY6EKvibK8JHyq9Z26v9MZXeDiw+RbfOJ9j2v70M10Hd6E06A==", + "dev": true, + "peer": true, + "dependencies": { + "@sigstore/bundle": "^2.3.1", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.1", + "@sigstore/sign": "^2.3.0", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "peer": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", + "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "dev": true, + "peer": true, + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "peer": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "peer": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "peer": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true, + "peer": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssh2": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz", + "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "asn1": "^0.2.6", + "bcrypt-pbkdf": "^1.0.2" + }, + "engines": { + "node": ">=10.16.0" + }, + "optionalDependencies": { + "cpu-features": "~0.0.9", + "nan": "^2.18.0" + } + }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, + "peer": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "peer": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "peer": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "peer": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempfile": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-3.0.0.tgz", + "integrity": "sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==", + "dependencies": { + "temp-dir": "^2.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempfile/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==" + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", + "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ts-node/node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tuf-js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", + "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", + "dev": true, + "peer": true, + "dependencies": { + "@tufjs/models": "2.0.0", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "peer": true + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true, + "peer": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "peer": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.14.tgz", + "integrity": "sha512-JixKH8GR2pWYshIPUg/NujK3JO7JiqEEUiNArE86NQyrgUuZeTlZQN3xuS/yiV5Kb48ev9K6RqNkaJjXsdg7Jw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "peer": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "peer": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true, + "peer": true + }, + "node_modules/wontache": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wontache/-/wontache-0.1.0.tgz", + "integrity": "sha512-UH4ikvEVRtvqY3DoW9/NjctB11FDuHjkKPO1tjaUVIVnZevxNtvba7lhR7H5TfMBVCpF2jwxH1qlu0UQSQ/zCw==", + "dev": true, + "peer": true, + "dependencies": { + "underscore": "^1.13.0-2" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yamljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yamljs/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-4.0.0.tgz", + "integrity": "sha512-huWiiCS4TxKc4SfgmTwW1K7JmXPPAmuXWYy4j9qjQo4+27Kni8mGhAAi1cloRWmBe2EqcLgt3IGqQoRL/MtPgg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/tests/system-integration/package.json b/tests/system-integration/package.json new file mode 100644 index 0000000000..5a591b64ce --- /dev/null +++ b/tests/system-integration/package.json @@ -0,0 +1,53 @@ +{ + "name": "@zowe/installation-test", + "version": "0.9.0", + "description": "Installation test of Zowe build", + "main": "index.js", + "license": "EPL-2.0", + "devDependencies": { + "@jest/globals": "^29.7.0", + "@types/debug": "4.1.12", + "@types/exit": "0.1.33", + "@types/fs-extra": "11.0.4", + "@types/jest": "^29.5.12", + "@types/lodash": "^4.17.0", + "@types/node": "20.12.7", + "@types/xml2js": "0.4.14", + "@types/yaml": "^1.9.7", + "@types/yn": "^3.1.0", + "@typescript-eslint/eslint-plugin": "7.7.0", + "@typescript-eslint/parser": "7.7.0", + "@zowe/zos-files-for-zowe-sdk": "^7.24.1", + "@zowe/zos-jobs-for-zowe-sdk": "^7.24.1", + "@zowe/zos-uss-for-zowe-sdk": "^7.24.1", + "debug": "4.3.4", + "eslint": "8.56.0", + "eslint-config-google": "0.14.0", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-header": "3.1.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "5.1.2", + "exit": "0.1.2", + "fs-extra": "11.2.0", + "jest": "29.7.0", + "jest-junit": "16.0.0", + "lodash": "^4.17.21", + "prettier": "3.2.5", + "ts-jest": "29.1.2", + "ts-node": "10.9.2", + "typescript": "5.4.5", + "xml2js": "0.6.2", + "yaml": "^2.4.2", + "yn": "4.0.0" + }, + "scripts": { + "build": "tsc", + "test": "jest --no-colors --runInBand", + "merge-reports": "node dist/merge-test-reports.js", + "lint": "eslint ." + }, + "dependencies": { + "json-schema-to-ts": "^3.1.0", + "node-jq": "^4.3.1" + } +} diff --git a/tests/system-integration/reports/junit.xml b/tests/system-integration/reports/junit.xml new file mode 100644 index 0000000000..8466e1fde0 --- /dev/null +++ b/tests/system-integration/reports/junit.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/tests/system-integration/src/ZoweYamlType.ts b/tests/system-integration/src/ZoweYamlType.ts new file mode 100644 index 0000000000..6629084313 --- /dev/null +++ b/tests/system-integration/src/ZoweYamlType.ts @@ -0,0 +1,1083 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { FromSchema } from 'json-schema-to-ts'; +import zoweYamlSchema from '../../../schemas/zowe-yaml-schema.json'; +import serverYamlSchema from '../../../schemas/server-common.json'; + +// modified "$id" field in server-common schema so `json-schema-to-ts` could resolve the references +const serverCommonSchema = serverYamlSchema as { + $schema: 'https://json-schema.org/draft/2019-09/schema'; + $id: 'schemas/v2/server-common'; + title: 'Common types'; + description: 'Configuration types that are common in Zowe and may be referenced by multiple components'; + $defs: { + semverVersion: { + $anchor: 'zoweSemverVersion'; + type: 'string'; + description: 'A semantic version, see https://semver.org/'; + pattern: '^[0-9]*\\.[0-9]*\\.[0-9]*(-*[a-zA-Z][0-9a-zA-Z\\-\\.]*)?(\\+[0-9a-zA-Z\\-\\.]*)?$'; + }; + semverRange: { + $anchor: 'zoweSemverRange'; + type: 'string'; + description: 'A semantic version, see https://semver.org/'; + pattern: '^(([\\^\\~\\>\\<]?)|(>=?)|(<=?))[0-9]*\\.[0-9]*\\.[0-9]*(-*[a-zA-Z][0-9a-zA-Z\\-\\.]*)?(\\+[0-9a-zA-Z\\-\\.]*)?$'; + }; + dataset: { + $anchor: 'zoweDataset'; + type: 'string'; + description: 'A 44-char all caps dotted ZOS name'; + pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$'; + minLength: 3; + maxLength: 44; + }; + datasetMember: { + $anchor: 'zoweDatasetMember'; + type: 'string'; + description: 'A 1-8-char all caps dataset member name'; + pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$'; + minLength: 1; + maxLength: 8; + }; + jobname: { + $anchor: 'zoweJobname'; + type: 'string'; + pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$'; + minLength: 3; + maxLength: 8; + }; + user: { + $anchor: 'zoweUser'; + type: 'string'; + pattern: '^([A-Z0-9$#@]){1,8}$'; + minLength: 1; + maxLength: 8; + }; + token: { + $anchor: 'zoweToken'; + type: 'string'; + pattern: '^([A-Z0-9$#@.]){1,32}$'; + minLength: 1; + maxLength: 32; + }; + path: { + $anchor: 'zowePath'; + type: 'string'; + minLength: 1; + maxLength: 1024; + }; + file: { + $anchor: 'zoweFile'; + type: 'string'; + minLength: 1; + maxLength: 256; + }; + reverseDomainNotation: { + $anchor: 'zoweReverseDomainNotation'; + type: 'string'; + pattern: '^[A-Za-z]{2,6}(\\.[A-Za-z0-9-]{1,62}[A-Za-z0-9])+$'; + }; + ipv4: { + $anchor: 'zoweIpv4'; + type: 'string'; + pattern: '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'; + }; + tcpPort: { + $anchor: 'zoweTcpPort'; + type: 'integer'; + description: 'TCP network port'; + minimum: 1024; + maximum: 65535; + }; + reservedTcpPort: { + $anchor: 'zoweReservedTcpPort'; + type: 'integer'; + description: 'Reserved TCP network ports. Can be used but discouraged due to their standardized use by common programs'; + deprecated: true; + minimum: 1; + maximum: 1023; + }; + }; +}; + +const zoweSchema = zoweYamlSchema as { + $schema: 'https://json-schema.org/draft/2019-09/schema'; + $id: 'https://zowe.orgschemas/v2/server-base'; + title: 'Zowe configuration file'; + description: 'Configuration file for Zowe (zowe.org) version 2.'; + type: 'object'; + additionalProperties: false; + properties: { + zowe: { + type: 'object'; + additionalProperties: false; + properties: { + setup: { + type: 'object'; + additionalProperties: false; + description: 'Zowe setup configurations used by "zwe install" and "zwe init" commands.'; + properties: { + dataset: { + type: 'object'; + additionalProperties: false; + description: 'MVS data set related configurations'; + properties: { + prefix: { + type: 'string'; + description: 'Where Zowe MVS data sets will be installed'; + }; + proclib: { + type: 'string'; + description: 'PROCLIB where Zowe STCs will be copied over'; + }; + parmlib: { + type: 'string'; + description: 'Zowe PARMLIB'; + }; + parmlibMembers: { + type: 'object'; + additionalProperties: false; + description: 'Holds Zowe PARMLIB members for plugins'; + properties: { + zis: { + $ref: 'schemas/v2/server-common#zoweDatasetMember'; + description: 'PARMLIB member used by ZIS'; + }; + }; + }; + jcllib: { + type: 'string'; + description: 'JCL library where Zowe will store temporary JCLs during initialization'; + }; + loadlib: { + type: 'string'; + description: 'States the dataset where Zowe executable utilities are located'; + default: '.SZWELOAD'; + }; + authLoadlib: { + type: 'string'; + description: 'The dataset that contains any Zowe core code that needs to run APF-authorized, such as ZIS'; + default: '.SZWEAUTH'; + }; + authPluginLib: { + type: 'string'; + description: 'APF authorized LOADLIB for Zowe ZIS Plugins'; + }; + }; + }; + zis: { + type: 'object'; + additionalProperties: false; + description: 'ZIS related configurations. This setup is optional.'; + properties: { + parmlib: { + type: 'object'; + additionalProperties: false; + description: 'ZIS related PARMLIB configurations. This setup is optional.'; + properties: { + keys: { + type: 'object'; + additionalProperties: true; + description: 'Used to specify special ZIS key types with key-value pairs'; + examples: ['key.sample.1: list', 'key.sample.2: list']; + }; + }; + }; + }; + }; + security: { + type: 'object'; + additionalProperties: false; + description: 'Security related configurations. This setup is optional.'; + properties: { + product: { + type: 'string'; + description: 'Security product name. Can be RACF, ACF2 or TSS'; + enum: ['RACF', 'ACF2', 'TSS']; + default: 'RACF'; + }; + groups: { + type: 'object'; + additionalProperties: false; + description: 'security group name'; + properties: { + admin: { + type: 'string'; + description: 'Zowe admin user group'; + default: 'ZWEADMIN'; + }; + stc: { + type: 'string'; + description: 'Zowe STC group'; + default: 'ZWEADMIN'; + }; + sysProg: { + type: 'string'; + description: 'Zowe SysProg group'; + default: 'ZWEADMIN'; + }; + }; + }; + users: { + type: 'object'; + additionalProperties: false; + description: 'security user name'; + properties: { + zowe: { + type: 'string'; + description: 'Zowe runtime user name of main service'; + default: 'ZWESVUSR'; + }; + zis: { + type: 'string'; + description: 'Zowe runtime user name of ZIS'; + default: 'ZWESIUSR'; + }; + }; + }; + stcs: { + type: 'object'; + additionalProperties: false; + description: 'STC names'; + properties: { + zowe: { + type: 'string'; + description: 'STC name of main service'; + default: 'ZWESLSTC'; + }; + zis: { + type: 'string'; + description: 'STC name of ZIS'; + default: 'ZWESISTC'; + }; + aux: { + type: 'string'; + description: 'STC name of Auxiliary Service'; + default: 'ZWESASTC'; + }; + }; + }; + }; + }; + certificate: { + type: 'object'; + additionalProperties: false; + if: { + properties: { + type: { + const: 'PKCS12'; + }; + }; + }; + then: { + required: ['pkcs12']; + }; + else: { + required: ['keyring']; + }; + description: 'Certificate related configurations'; + properties: { + type: { + type: 'string'; + description: 'Type of certificate storage method.'; + enum: ['PKCS12', 'JCEKS', 'JCECCAKS', 'JCERACFKS', 'JCECCARACFKS', 'JCEHYBRIDRACFKS']; + default: 'PKCS12'; + }; + pkcs12: { + type: 'object'; + additionalProperties: false; + description: 'PKCS#12 keystore settings'; + properties: { + directory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Keystore directory'; + }; + name: { + type: 'string'; + description: 'Certificate alias name. Note: please use all lower cases as alias.'; + default: 'localhost'; + }; + password: { + type: 'string'; + description: 'Keystore password'; + default: 'password'; + }; + caAlias: { + type: 'string'; + description: 'Alias name of self-signed certificate authority. Note: please use all lower cases as alias.'; + default: 'local_ca'; + }; + caPassword: { + type: 'string'; + description: 'Password of keystore stored self-signed certificate authority.'; + default: 'local_ca_password'; + }; + lock: { + type: 'boolean'; + description: 'Whether to restrict the permissions of the keystore after creation'; + }; + import: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to import certificate from another PKCS#12 keystore.'; + properties: { + keystore: { + type: 'string'; + description: 'Existing PKCS#12 keystore which holds the certificate issued by external CA.'; + }; + password: { + type: 'string'; + description: 'Password of the above keystore'; + }; + alias: { + type: 'string'; + description: 'Certificate alias will be imported. Note: please use all lower cases as alias.'; + }; + }; + }; + }; + }; + keyring: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you are using z/OS keyring'; + properties: { + owner: { + type: 'string'; + description: 'keyring owner. If this is empty, Zowe will use the user ID defined as zowe.setup.security.users.zowe.'; + }; + name: { + type: 'string'; + description: 'keyring name'; + }; + label: { + type: 'string'; + description: 'Label of Zowe certificate.'; + default: 'localhost'; + }; + caLabel: { + type: 'string'; + description: 'label of Zowe CA certificate.'; + default: 'localca'; + }; + connect: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to connect existing certificate in keyring to Zowe.'; + properties: { + user: { + type: 'string'; + description: 'Current owner of the existing certificate, can be SITE or an user ID.'; + }; + label: { + type: 'string'; + description: 'Label of the existing certificate will be connected to Zowe keyring.'; + }; + }; + }; + import: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to import existing certificate stored in data set to Zowe.'; + properties: { + dsName: { + type: 'string'; + description: 'Name of the data set holds the certificate issued by other CA. This data set should be in PKCS12 format and contain private key.'; + }; + password: { + type: 'string'; + description: 'Password for the PKCS12 data set.'; + }; + }; + }; + zOSMF: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to trust z/OSMF certificate authority in Zowe keyring.'; + properties: { + ca: { + type: 'string'; + description: 'z/OSMF certificate authority alias'; + }; + user: { + type: 'string'; + description: 'z/OSMF user. Zowe initialization utility can detect alias of z/OSMF CA for RACF security system. The automated detection requires this z/OSMF user as input.'; + }; + }; + }; + }; + }; + dname: { + type: 'object'; + additionalProperties: false; + description: 'Certificate distinguish name'; + properties: { + caCommonName: { + type: 'string'; + description: 'Common name of certificate authority generated by Zowe.'; + }; + commonName: { + type: 'string'; + description: 'Common name of certificate generated by Zowe.'; + }; + orgUnit: { + type: 'string'; + description: 'Organization unit of certificate generated by Zowe.'; + }; + org: { + type: 'string'; + description: 'Organization of certificate generated by Zowe.'; + }; + locality: { + type: 'string'; + description: 'Locality of certificate generated by Zowe. This is usually the city name.'; + }; + state: { + type: 'string'; + description: 'State of certificate generated by Zowe. You can also put province name here.'; + }; + country: { + type: 'string'; + description: '2 letters country code of certificate generated by Zowe.'; + }; + }; + }; + validity: { + type: 'integer'; + description: 'Validity days for Zowe generated certificates'; + default: 3650; + }; + san: { + type: 'array'; + description: 'Domain names and IPs should be added into certificate SAN. If this field is not defined, `zwe init` command will use `zowe.externalDomains`.'; + items: { + type: 'string'; + }; + }; + importCertificateAuthorities: { + type: 'array'; + description: 'PEM format certificate authorities will also be imported and trusted. If you have other certificate authorities want to be trusted in Zowe keyring, list the certificate labels here. **NOTE**, due to the limitation of RACDCERT command, this field should contain maximum 2 entries.'; + items: { + type: 'string'; + }; + }; + }; + }; + vsam: { + type: 'object'; + additionalProperties: false; + description: 'VSAM configurations if you are using VSAM as Caching Service storage'; + properties: { + mode: { + type: 'string'; + description: 'VSAM data set with Record-Level-Sharing enabled or not'; + enum: ['NONRLS', 'RLS']; + default: 'NONRLS'; + }; + volume: { + type: 'string'; + description: 'Volume name if you are using VSAM in NONRLS mode'; + }; + storageClass: { + type: 'string'; + description: 'Storage class name if you are using VSAM in RLS mode'; + }; + }; + }; + }; + }; + runtimeDirectory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to where you installed Zowe.'; + }; + logDirectory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to where you want to store Zowe log files.'; + }; + workspaceDirectory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to where you want to store Zowe workspace files. Zowe workspace are used by Zowe component runtime to store temporary files.'; + }; + extensionDirectory: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to where you want to store Zowe extensions. "zwe components install" will install new extensions into this directory.'; + }; + job: { + type: 'object'; + additionalProperties: false; + description: 'Customize your Zowe z/OS JES job.'; + properties: { + name: { + type: 'string'; + description: 'Job name of Zowe primary ZWESLSTC started task.'; + }; + prefix: { + type: 'string'; + description: 'A short prefix to customize address spaces created by Zowe job.'; + }; + }; + }; + network: { + $ref: '#/$defs/networkSettings'; + }; + extensionRegistry: { + type: 'object'; + description: 'Defines optional configuration for downloading extensions from an online or offline registry'; + required: ['defaultHandler', 'handlers']; + properties: { + defaultHandler: { + type: 'string'; + description: 'The name of a handler specified in the handlers section. Will be used as the default for \'zwe components\' commands'; + }; + handlers: { + type: 'object'; + patternProperties: { + '^.*$': { + $ref: '#/$defs/registryHandler'; + }; + }; + }; + }; + }; + launcher: { + type: 'object'; + description: 'Set default behaviors of how the Zowe launcher will handle components'; + additionalProperties: false; + properties: { + restartIntervals: { + type: 'array'; + description: 'Intervals of seconds to wait before restarting a component if it fails before the minUptime value.'; + items: { + type: 'integer'; + }; + }; + minUptime: { + type: 'integer'; + default: 90; + description: 'The minimum amount of seconds before a component is considered running and the restart counter is reset.'; + }; + shareAs: { + type: 'string'; + description: 'Determines which SHAREAS mode should be used when starting a component'; + enum: ['no', 'yes', 'must', '']; + default: 'yes'; + }; + unsafeDisableZosVersionCheck: { + type: 'boolean'; + description: 'Used to allow Zowe to warn, instead of error, when running on a version of z/OS that this version of Zowe hasn\'t been verified as working with'; + default: false; + }; + }; + }; + rbacProfileIdentifier: { + type: 'string'; + description: 'An ID used for determining resource names used in RBAC authorization checks'; + }; + cookieIdentifier: { + type: 'string'; + description: 'An ID that can be used by servers that distinguish their cookies from unrelated Zowe installs'; + }; + externalDomains: { + type: 'array'; + description: 'List of domain names of how you access Zowe from your local computer.'; + minItems: 1; + uniqueItems: true; + items: { + type: ['string']; + }; + }; + externalPort: { + $ref: '#/$defs/port'; + description: 'Port number of how you access Zowe APIML Gateway from your local computer.'; + }; + environments: { + type: 'object'; + description: 'Global environment variables can be applied to all Zowe high availability instances.'; + }; + launchScript: { + type: 'object'; + description: 'Customize Zowe launch scripts (zwe commands) behavior.'; + properties: { + logLevel: { + type: 'string'; + description: 'Log level for Zowe launch scripts.'; + enum: ['', 'info', 'debug', 'trace']; + }; + onComponentConfigureFail: { + type: 'string'; + description: 'Chooses how \'zwe start\' behaves if a component configure script fails'; + enum: ['warn', 'exit']; + default: 'warn'; + }; + }; + }; + certificate: { + $ref: '#/$defs/certificate'; + description: 'Zowe certificate setup.'; + }; + verifyCertificates: { + type: 'string'; + description: 'Customize how Zowe should validate certificates used by components or other services.'; + enum: ['STRICT', 'NONSTRICT', 'DISABLED']; + }; + sysMessages: { + type: 'array'; + description: 'List of Zowe message portions when matched will be additionally logged into the system\'s log (such as syslog on z/OS). Note: Some messages extremely early in the Zowe lifecycle may not be added to the system\'s log'; + uniqueItems: true; + items: { + type: 'string'; + }; + }; + useConfigmgr: { + type: 'boolean'; + default: false; + description: 'Determines whether or not to use the features of configmgr such as multi-config, parmlib config, config templates, and schema validation. This effects the zwe command.'; + }; + configmgr: { + type: 'object'; + description: 'Controls how configmgr will be used by zwe'; + required: ['validation']; + properties: { + validation: { + type: 'string'; + enum: ['STRICT', 'COMPONENT-COMPAT']; + // eslint-disable-next-line max-len + description: 'States how configmgr will do validation: Will it quit on any error (STRICT) or quit on any error except the case of a component not having a schema file (COMPONENT-COMPAT)'; + }; + }; + }; + }; + }; + java: { + type: 'object'; + properties: { + home: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to Java home directory.'; + }; + }; + }; + node: { + type: 'object'; + properties: { + home: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to node.js home directory.'; + }; + }; + }; + zOSMF: { + type: 'object'; + additionalProperties: false; + properties: { + host: { + type: 'string'; + description: 'Host or domain name of your z/OSMF instance.'; + }; + port: { + $ref: '#/$defs/port'; + description: 'Port number of your z/OSMF instance.'; + }; + scheme: { + $ref: '#/$defs/scheme'; + description: 'Scheme used to connect to z/OSMF instance. Optional for outbout AT-TLS, defaults to https'; + }; + applId: { + type: 'string'; + description: 'Appl ID of your z/OSMF instance.'; + }; + }; + }; + components: { + type: 'object'; + patternProperties: { + '^.*$': { + $ref: '#/$defs/component'; + }; + }; + }; + haInstances: { + type: 'object'; + patternProperties: { + '^.*$': { + type: 'object'; + description: 'Configuration of Zowe high availability instance.'; + required: ['hostname', 'sysname']; + properties: { + hostname: { + type: 'string'; + description: 'Host name of the Zowe high availability instance. This is hostname for internal communications.'; + }; + sysname: { + type: 'string'; + description: 'z/OS system name of the Zowe high availability instance. Some JES command will be routed to this system name.'; + }; + components: { + type: 'object'; + patternProperties: { + '^.*$': { + $ref: '#/$defs/component'; + }; + }; + }; + }; + }; + }; + }; + }; + $defs: { + port: { + type: 'integer'; + minimum: 0; + maximum: 65535; + }; + scheme: { + type: 'string'; + enum: ['http', 'https']; + default: 'https'; + }; + certificate: { + oneOf: [{ $ref: '#/$defs/pkcs12-certificate' }, { $ref: '#/$defs/keyring-certificate' }]; + }; + 'pkcs12-certificate': { + type: 'object'; + additionalProperties: false; + required: ['keystore', 'truststore', 'pem']; + properties: { + keystore: { + type: 'object'; + additionalProperties: false; + description: 'Certificate keystore.'; + required: ['type', 'file', 'alias']; + properties: { + type: { + type: 'string'; + description: 'Keystore type.'; + const: 'PKCS12'; + }; + file: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to your PKCS#12 keystore.'; + }; + password: { + type: 'string'; + description: 'Password of your PKCS#12 keystore.'; + }; + alias: { + type: 'string'; + description: 'Certificate alias name of defined in your PKCS#12 keystore'; + }; + }; + }; + truststore: { + type: 'object'; + additionalProperties: false; + description: 'Certificate truststore.'; + required: ['type', 'file']; + properties: { + type: { + type: 'string'; + description: 'Truststore type.'; + const: 'PKCS12'; + }; + file: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to your PKCS#12 keystore.'; + }; + password: { + type: 'string'; + description: 'Password of your PKCS#12 keystore.'; + }; + }; + }; + pem: { + type: 'object'; + additionalProperties: false; + description: 'Certificate in PEM format.'; + required: ['key', 'certificate']; + properties: { + key: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to the certificate private key stored in PEM format.'; + }; + certificate: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Path to the certificate stored in PEM format.'; + }; + certificateAuthorities: { + description: 'List of paths to the certificate authorities stored in PEM format.'; + oneOf: [ + { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Paths to the certificate authorities stored in PEM format. You can separate multiple certificate authorities by comma.'; + }, + { + type: 'array'; + description: 'Path to the certificate authority stored in PEM format.'; + items: { + $ref: 'schemas/v2/server-common#zowePath'; + }; + }, + ]; + }; + }; + }; + }; + }; + 'keyring-certificate': { + type: 'object'; + additionalProperties: false; + required: ['keystore', 'truststore']; + properties: { + keystore: { + type: 'object'; + additionalProperties: false; + description: 'Certificate keystore.'; + required: ['type', 'file', 'alias']; + properties: { + type: { + type: 'string'; + description: 'Keystore type.'; + enum: ['JCEKS', 'JCECCAKS', 'JCERACFKS', 'JCECCARACFKS', 'JCEHYBRIDRACFKS']; + }; + file: { + type: 'string'; + description: 'Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.'; + pattern: '^safkeyring://.*'; + }; + password: { + type: 'string'; + description: 'Literally \'password\' may be needed when using keyrings for compatibility with java servers.'; + enum: ['', 'password']; + }; + alias: { + type: 'string'; + description: 'Certificate label of z/OS keyring. Case sensitivity and spaces matter.'; + }; + }; + }; + truststore: { + type: 'object'; + additionalProperties: false; + description: 'Certificate truststore.'; + required: ['type', 'file']; + properties: { + type: { + type: 'string'; + description: 'Truststore type.'; + enum: ['JCEKS', 'JCECCAKS', 'JCERACFKS', 'JCECCARACFKS', 'JCEHYBRIDRACFKS']; + }; + file: { + type: 'string'; + description: 'Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.'; + pattern: '^safkeyring://.*'; + }; + password: { + type: 'string'; + description: 'Literally \'password\' may be needed when using keyrings for compatibility with java servers.'; + enum: ['', 'password']; + }; + }; + }; + pem: { + type: 'object'; + additionalProperties: false; + description: 'Certificate in PEM format.'; + properties: { + key: { + type: 'string'; + description: 'Path to the certificate private key stored in PEM format.'; + }; + certificate: { + type: 'string'; + description: 'Path to the certificate stored in PEM format.'; + }; + certificateAuthorities: { + description: 'List of paths to the certificate authorities stored in PEM format.'; + oneOf: [ + { + type: 'string'; + description: 'Paths to the certificate authorities stored in PEM format. You can separate multiple certificate authorities by comma.'; + }, + { + type: 'array'; + description: 'Path to the certificate authority stored in PEM format.'; + items: { + type: 'string'; + }; + }, + ]; + }; + }; + }; + }; + }; + component: { + $anchor: 'zoweComponent'; + type: 'object'; + properties: { + enabled: { + type: 'boolean'; + description: 'Whether to enable or disable this component'; + default: false; + }; + certificate: { + $ref: '#/$defs/certificate'; + description: 'Certificate for current component.'; + }; + launcher: { + type: 'object'; + description: 'Set behavior of how the Zowe launcher will handle this particular component'; + additionalProperties: true; + properties: { + restartIntervals: { + type: 'array'; + description: 'Intervals of seconds to wait before restarting a component if it fails before the minUptime value.'; + items: { + type: 'integer'; + }; + }; + minUptime: { + type: 'integer'; + default: 90; + description: 'The minimum amount of seconds before a component is considered running and the restart counter is reset.'; + }; + shareAs: { + type: 'string'; + description: 'Determines which SHAREAS mode should be used when starting a component'; + enum: ['no', 'yes', 'must', '']; + default: 'yes'; + }; + }; + }; + zowe: { + type: 'object'; + description: 'Component level overrides for top level Zowe network configuration.'; + additionalProperties: true; + properties: { + network: { + $ref: '#/$defs/networkSettings'; + }; + job: { + $ref: '#/$defs/componentJobSettings'; + }; + }; + }; + }; + }; + componentJobSettings: { + $anchor: 'componentJobSettings'; + type: 'object'; + description: 'Component level overrides for job execution behavior'; + properties: { + suffix: { + type: 'string'; + description: 'Can be used by components to declare a jobname suffix to append to their job. This is not currently used by Zowe itself, it is up to components to use this value if desired. Zowe may use this value in the future.'; + }; + }; + }; + tlsSettings: { + $anchor: 'tlsSettings'; + type: 'object'; + properties: { + ciphers: { + type: 'array'; + description: 'Acceptable TLS cipher suites for network connections, in IANA format.'; + items: { + type: 'string'; + }; + }; + curves: { + type: 'array'; + description: 'Acceptable key exchange elliptic curves for network connections.'; + items: { + type: 'string'; + }; + }; + maxTls: { + type: 'string'; + enum: ['TLSv1.2', 'TLSv1.3']; + default: 'TLSv1.3'; + description: 'Maximum TLS version allowed for network connections.'; + }; + minTls: { + type: 'string'; + enum: ['TLSv1.2', 'TLSv1.3']; + default: 'TLSv1.2'; + description: 'Minimum TLS version allowed for network connections, and less than or equal to network.maxTls.'; + }; + }; + }; + networkSettings: { + type: 'object'; + $anchor: 'networkSettings'; + additionalProperties: false; + description: 'Optional, advanced network configuration parameters'; + properties: { + server: { + type: 'object'; + additionalProperties: false; + description: 'Optional, advanced network configuration parameters for Zowe servers'; + properties: { + tls: { + $ref: '#/$defs/tlsSettings'; + }; + listenAddresses: { + type: 'array'; + description: 'The IP addresses which all of the Zowe servers will be binding on and listening to. Some servers may only support listening on the first element.'; + items: { + $ref: 'schemas/v2/server-common#zoweIpv4'; + }; + }; + vipaIp: { + type: 'string'; + description: 'The IP address which all of the Zowe servers will be binding to. If you are using multiple DIPVA addresses, do not use this option.'; + }; + validatePortFree: { + type: 'boolean'; + default: true; + description: 'Whether or not to ensure that the port a server is about to use is available. Usually, servers will know this when they attempt to bind to a port, so this option allows you to disable the additional verification step.'; + }; + }; + }; + client: { + type: 'object'; + additionalProperties: false; + description: 'Optional, advanced network configuration parameters for Zowe servers when sending requests as clients.'; + properties: { + tls: { + $ref: '#/$defs/tlsSettings'; + }; + }; + }; + }; + }; + registryHandler: { + $anchor: 'registryHandler'; + type: 'object'; + required: ['registry', 'path']; + properties: { + registry: { + type: 'string'; + description: 'The location of the default registry for this handler. It could be a URL, path, dataset, whatever this handler supports'; + }; + path: { + $ref: 'schemas/v2/server-common#zowePath'; + description: 'Unix file path to the configmgr-compatible JS file which implements the handler API'; + }; + }; + }; + }; +}; + +type ZoweYamlType = FromSchema; + +export default ZoweYamlType; diff --git a/tests/system-integration/src/__tests__/RemoteTestRunner.ts b/tests/system-integration/src/__tests__/RemoteTestRunner.ts new file mode 100644 index 0000000000..d1c5688b4c --- /dev/null +++ b/tests/system-integration/src/__tests__/RemoteTestRunner.ts @@ -0,0 +1,70 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { Session } from '@zowe/imperative'; +import { getZosmfSession } from '../zowe'; +import * as uss from '../uss'; +import ZoweYamlType from '../ZoweYamlType'; +import { REMOTE_TEST_DIR, TEST_YAML_DIR } from '../constants'; +import * as files from '@zowe/zos-files-for-zowe-sdk'; +import * as fs from 'fs-extra'; +import * as YAML from 'yaml'; +import { log } from 'console'; + +export class RemoteTestRunner { + private session: Session; + + RemoteTestRunner() { + log('init'); + this.session = getZosmfSession(); + } + + public async runRaw(command: string, cwd: string = REMOTE_TEST_DIR): Promise { + this.session = getZosmfSession(); + const output = await uss.runCommand(`${command}`, cwd); + return { + stdout: output.data, + rc: output.rc, + }; + } + + /** + * + * @param zoweYaml + * @param zweCommand + * @param cwd + */ + public async runTest(zoweYaml: ZoweYamlType, zweCommand: string, cwd: string = REMOTE_TEST_DIR): Promise { + console.log(this.session); + this.session = getZosmfSession(); + console.log(this.session); + let command = zweCommand.trim(); + if (command.startsWith('zwe')) { + command = command.replace(/zwe/, ''); + } + const testName = expect.getState().currentTestName; + const stringZoweYaml = YAML.stringify(zoweYaml); + fs.writeFileSync(`${TEST_YAML_DIR}/zowe.yaml.${testName}`, stringZoweYaml); + await files.Upload.bufferToUssFile(this.session, `${REMOTE_TEST_DIR}/zowe.test.yaml`, Buffer.from(stringZoweYaml), { + binary: false, + }); + + const output = await uss.runCommand(`./bin/zwe ${command} --config ${REMOTE_TEST_DIR}/zowe.test.yaml`, cwd); + return { + stdout: output.data, + rc: output.rc, + }; + } +} + +export type TestOutput = { + stdout: string; + rc: number; +}; diff --git a/tests/system-integration/src/__tests__/ZoweYaml.ts b/tests/system-integration/src/__tests__/ZoweYaml.ts new file mode 100644 index 0000000000..eb17a71f6d --- /dev/null +++ b/tests/system-integration/src/__tests__/ZoweYaml.ts @@ -0,0 +1,28 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import * as files from '@zowe/zos-files-for-zowe-sdk'; +import * as yaml from 'yaml'; +import { THIS_TEST_BASE_YAML } from '../constants'; +import * as fs from 'fs-extra'; +import * as _ from 'lodash'; +import ZoweYamlType from '../ZoweYamlType'; + +export class ZoweYaml { + /* public updateField(field: string, value: string) { + // this.zoweYaml[field] = value; + }*/ + + static basicZoweYaml(): ZoweYamlType { + const fileContents = fs.readFileSync(THIS_TEST_BASE_YAML, 'utf8'); + const zoweYaml = yaml.parse(fileContents); + return zoweYaml as ZoweYamlType; + } +} diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap new file mode 100644 index 0000000000..27cc12fe86 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -0,0 +1,87 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Dummy tests a test 1`] = ` +" +$ zwe + +------------------ +Synopsis + zwe [sub-command [sub-command]...] [parameter [parameter]...] + +------------------ +Description + A command line utility helps you managing Zowe instance. + + You can issue --help or -h to find information for all commands it supports. + +------------------ +Global parameters + --help|-h (optional) + Display this help. + --debug|--verbose|-v (optional) + Enable verbose mode. + --trace|-vv (optional) + Enable trace level debug mode. + --silent|-s (optional) + Do not display messages to standard output. + --log-dir|--log|-l string (optional) + Write logs to this directory. + --config|-c string (optional) + Path to Zowe configuration zowe.yaml file. + --configmgr (optional) + Enable use of configmgr capabilities. +------------------ +Available sub-command(s) + - certificate + - components + - config + - diagnose + - init + - install + - internal + - migrate + - sample + - start + - stop + - support + - version + +------------------ +Example(s) + zwe install -h + + zwe init --allow-overwrite --config /path/to/zowe.yaml + + zwe start -c /path/to/zowe.yaml" +`; + +exports[`Dummy tests run echo 1`] = ` +" +$ hi" +`; + +exports[`Dummy tests run echo 2`] = ` +" +$ export TERM=xterm + +# python3 +export PYTHON_HOME=/ZOWE/node/python3/usr/lpp/IBM/cyp/v3r12/pyz + +# java 8 +export JAVA_HOME=/ZOWE/node/J8.0_64 + +# these variables are required by v8, v12 +export _BPXK_AUTOCVT=ON +export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)" + +# node v14.15.1 +#export NODE_HOME=/ZOWE/node/node-v14.21.3-os390-s390x + +# node v16.20.1 +export NODE_HOME=/ZOWE/node/node-v16.20.2-os390-s390x + +# node v18.x +# export NODE_HOME=/ZOWE/node/node-v18.16.0 + +export PATH=/bin:.:/ZOWE/bin:$NODE_HOME/bin:$JAVA_HOME/bin:$PYTHON_HOME/bin" +`; diff --git a/tests/system-integration/src/__tests__/init/apfauth.tests.ts b/tests/system-integration/src/__tests__/init/apfauth.tests.ts new file mode 100644 index 0000000000..19cc91fd06 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/apfauth.tests.ts @@ -0,0 +1,10 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + diff --git a/tests/system-integration/src/__tests__/init/certificate.tests.ts b/tests/system-integration/src/__tests__/init/certificate.tests.ts new file mode 100644 index 0000000000..19cc91fd06 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/certificate.tests.ts @@ -0,0 +1,10 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + diff --git a/tests/system-integration/src/__tests__/init/composite.tests.ts b/tests/system-integration/src/__tests__/init/composite.tests.ts new file mode 100644 index 0000000000..19cc91fd06 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/composite.tests.ts @@ -0,0 +1,10 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + diff --git a/tests/system-integration/src/__tests__/init/generate.tests.ts b/tests/system-integration/src/__tests__/init/generate.tests.ts new file mode 100644 index 0000000000..567479c4b2 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/generate.tests.ts @@ -0,0 +1,9 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ diff --git a/tests/system-integration/src/__tests__/init/mvs.tests.ts b/tests/system-integration/src/__tests__/init/mvs.tests.ts new file mode 100644 index 0000000000..19cc91fd06 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/mvs.tests.ts @@ -0,0 +1,10 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + diff --git a/tests/system-integration/src/__tests__/init/security.tests.ts b/tests/system-integration/src/__tests__/init/security.tests.ts new file mode 100644 index 0000000000..567479c4b2 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/security.tests.ts @@ -0,0 +1,9 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ diff --git a/tests/system-integration/src/__tests__/init/stc.tests.ts b/tests/system-integration/src/__tests__/init/stc.tests.ts new file mode 100644 index 0000000000..19cc91fd06 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/stc.tests.ts @@ -0,0 +1,10 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + diff --git a/tests/system-integration/src/__tests__/init/vsam.test.ts b/tests/system-integration/src/__tests__/init/vsam.test.ts new file mode 100644 index 0000000000..a5069083af --- /dev/null +++ b/tests/system-integration/src/__tests__/init/vsam.test.ts @@ -0,0 +1,51 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { RemoteTestRunner } from '../RemoteTestRunner'; +import { ZoweYaml } from '../ZoweYaml'; + +const testSuiteName = 'Dummy tests'; +describe(testSuiteName, () => { + beforeEach(() => {}); + + it('run echo', async () => { + const testRunner = new RemoteTestRunner(); + + console.log('heres a log'); + const cfgYaml = ZoweYaml.basicZoweYaml(); + cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; + const result = await testRunner.runRaw('echo "hi"'); + console.log(result); + console.log(JSON.stringify(result)); + expect(result.rc).toBe(0); // 100 is expected... + expect(result.stdout).not.toBeNull(); + expect(result.stdout).toMatchSnapshot(); + + const result2 = await testRunner.runRaw('cat /u/zowead3/.profile'); + console.log(result2); + console.log(JSON.stringify(result2)); + expect(result2.rc).toBe(0); // 100 is expected... + expect(result2.stdout).not.toBeNull(); + expect(result2.stdout).toMatchSnapshot(); + }); + + it('a test', async () => { + const testRunner = new RemoteTestRunner(); + console.log('heres a log'); + const cfgYaml = ZoweYaml.basicZoweYaml(); + cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; + const result = await testRunner.runTest(cfgYaml, '--help'); + console.log(result); + console.log(JSON.stringify(result)); + expect(result.rc).toBe(100); // 100 is expected... + expect(result.stdout).not.toBeNull(); + expect(result.stdout).toMatchSnapshot(); + }); +}); diff --git a/tests/system-integration/src/constants.ts b/tests/system-integration/src/constants.ts new file mode 100644 index 0000000000..2b0dacc72b --- /dev/null +++ b/tests/system-integration/src/constants.ts @@ -0,0 +1,46 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import * as path from 'path'; +import * as util from './utils'; +import yn from 'yn'; +// import Debug from 'debug'; +// const debug = Debug('zowe-install-test:constants'); + +// the FMID we will use to test PTF +export const ZOWE_FMID = 'AZWE002'; +export const REPO_ROOT_DIR: string = path.resolve(__dirname, '../../../'); +export const THIS_TEST_ROOT_DIR: string = path.resolve(__dirname, '../'); // JEST runs in the src dir +export const THIS_TEST_BASE_YAML: string = path.resolve(THIS_TEST_ROOT_DIR, '.build/zowe.yaml.base'); +export const INSTALL_TEST_ROOT_DIR: string = path.resolve(__dirname, '../'); +export const TEST_YAML_DIR = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'zowe_yaml_tests'); +export const TEST_DATASETS_HLQ = process.env['TEST_DS_HLQ'] || 'ZWETESTS'; +export const TEST_JOBS_RUN_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'jobs-run.txt'); + +const cleanup = yn(process.env['CLEANUP_AFTER_TESTS']); +export const CLEANUP_AFTER_TESTS = cleanup != null ? cleanup : true; + +const envVars = ['SSH_HOST', 'SSH_PORT', 'SSH_USER', 'SSH_PASSWORD', 'ZOSMF_PORT', 'REMOTE_TEST_ROOT_DIR']; +util.checkMandatoryEnvironmentVariables(envVars); + +export const REMOTE_TEST_DIR = process.env['REMOTE_TEST_ROOT_DIR'] || '/ZOWE/zwe-system-test'; + +const ru = yn(process.env['ZOSMF_REJECT_UNAUTHORIZED']); + +export const REMOTE_CONNECTION = { + host: process.env['SSH_HOST'], + ssh_port: Number(process.env['SSH_PORT']), + zosmf_port: process.env['ZOSMF_PORT'], + user: process.env['SSH_USER'], + password: process.env['SSH_PASSWORD'], + zosmf_reject_unauthorized: ru != null ? ru : false, +}; + +// debug(`process.env >>>>>>>>>>>>>>>>>>>>>>>>>>\n${JSON.stringify(process.env)}\n<<<<<<<<<<<<<<<<<<<<<<<`); diff --git a/tests/system-integration/src/globalSetup.ts b/tests/system-integration/src/globalSetup.ts new file mode 100644 index 0000000000..78c07b38fc --- /dev/null +++ b/tests/system-integration/src/globalSetup.ts @@ -0,0 +1,53 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import * as uss from './uss'; +import * as files from '@zowe/zos-files-for-zowe-sdk'; +import { REMOTE_TEST_DIR, REPO_ROOT_DIR, TEST_YAML_DIR, THIS_TEST_BASE_YAML, THIS_TEST_ROOT_DIR } from './constants'; +import * as fs from 'fs-extra'; +import { getZosmfSession } from './zowe'; + +module.exports = async () => { + // check directories and configmgr look OK + console.log(`${REPO_ROOT_DIR}`); + if (!fs.existsSync(`${REPO_ROOT_DIR}/bin/zwe`)) { + throw new Error('Could not locate the zwe tool locally. Ensure you are running tests from the test project root'); + } + const configmgrPax = fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build`).find((item) => /configmgr.*\.pax/g.test(item)); + if (configmgrPax == null) { + throw new Error('Could not locate a configmgr pax in the .build directory'); + } + + console.log(`Using example-zowe.yaml as base for future zowe.yaml modifications...`); + fs.copyFileSync(`${REPO_ROOT_DIR}/example-zowe.yaml`, THIS_TEST_BASE_YAML); + fs.mkdirpSync(`${THIS_TEST_ROOT_DIR}/.build/zowe`); + fs.mkdirpSync(`${TEST_YAML_DIR}`); + console.log('Setting up remote server...'); + await uss.runCommand(`mkdir -p ${REMOTE_TEST_DIR}`); + + console.log(`Uploading ${configmgrPax} to ${REMOTE_TEST_DIR}/configmgr.pax ...`); + await files.Upload.fileToUssFile( + getZosmfSession(), + `${THIS_TEST_ROOT_DIR}/.build/${configmgrPax}`, + `${REMOTE_TEST_DIR}/configmgr.pax`, + { binary: true }, + ); + + console.log(`Uploading ${REPO_ROOT_DIR}/bin to ${REMOTE_TEST_DIR}/bin...`); + await files.Upload.dirToUSSDirRecursive(getZosmfSession(), `${REPO_ROOT_DIR}/bin`, `${REMOTE_TEST_DIR}/bin/`, { + binary: false, + includeHidden: true, + }); + + console.log(`Unpacking configmgr and placing it in bin/utils ...`); + await uss.runCommand(`pax -ppx -rf configmgr.pax && mv configmgr bin/utils/`, `${REMOTE_TEST_DIR}`); + + console.log('Remote server setup complete'); +}; diff --git a/tests/system-integration/src/globalTeardown.ts b/tests/system-integration/src/globalTeardown.ts new file mode 100644 index 0000000000..becfa612e0 --- /dev/null +++ b/tests/system-integration/src/globalTeardown.ts @@ -0,0 +1,32 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { CLEANUP_AFTER_TESTS, REMOTE_TEST_DIR, TEST_JOBS_RUN_FILE, TEST_YAML_DIR } from './constants'; +import * as uss from './uss'; +import * as fs from 'fs-extra'; + +module.exports = async () => { + if (!CLEANUP_AFTER_TESTS) { + return; + } + + await uss.runCommand(`rm -rf ${REMOTE_TEST_DIR}`); + + if (fs.existsSync(`${TEST_JOBS_RUN_FILE}`)) { + fs.readFileSync(`${TEST_JOBS_RUN_FILE}`, 'utf8') + .split('\n') + .forEach((job) => { + // + console.log('Purge ' + job); + }); + } + + fs.rmdirSync(TEST_YAML_DIR); +}; diff --git a/tests/system-integration/src/uss.ts b/tests/system-integration/src/uss.ts new file mode 100644 index 0000000000..0d8508207a --- /dev/null +++ b/tests/system-integration/src/uss.ts @@ -0,0 +1,32 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { REMOTE_CONNECTION } from './constants'; +import { Shell, SshSession } from '@zowe/zos-uss-for-zowe-sdk'; + +function getSession(): SshSession { + return new SshSession({ + hostname: REMOTE_CONNECTION.host, + port: REMOTE_CONNECTION.ssh_port, + user: REMOTE_CONNECTION.user, + password: REMOTE_CONNECTION.password, + }); +} + +export async function runCommand(command: string, cwd: string = '~') { + const session = getSession(); + let stdout = ''; + const rc = await Shell.executeSshCwd(session, command, cwd, (data) => { + if (data.trim()) { + stdout += data; + } + }); + return { data: stdout, rc: rc }; +} diff --git a/tests/system-integration/src/utils.ts b/tests/system-integration/src/utils.ts new file mode 100644 index 0000000000..a350788a86 --- /dev/null +++ b/tests/system-integration/src/utils.ts @@ -0,0 +1,44 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import * as util from 'util'; +import * as crypto from 'crypto'; + +/** + * Sleep for certain time + * @param {Integer} ms + */ +export function sleep(ms: number): Promise { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +/** + * Check if there are any mandatory environment variable is missing. + * + * @param {Array} vars list of env variable names + */ +export function checkMandatoryEnvironmentVariables(vars: string[]): void { + for (const v of vars) { + if (!Object.keys(process.env).includes(v)) { + throw new Error(`Expected to find a value for ${v} in process.env`); + } + } +} + +/** + * Generate MD5 hash of a variable + * + * @param {Any} obj any object + */ +export function calculateHash(obj: unknown): string { + return crypto.createHash('md5').update(util.format('%j', obj)).digest('hex'); +} diff --git a/tests/system-integration/src/zowe.ts b/tests/system-integration/src/zowe.ts new file mode 100644 index 0000000000..f7429d5abd --- /dev/null +++ b/tests/system-integration/src/zowe.ts @@ -0,0 +1,34 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { ConnectionPropsForSessCfg, Session } from '@zowe/imperative'; +import { REMOTE_CONNECTION } from './constants'; + +let cachedZosmfSession: Session; + +export function getZosmfSession(): Session { + if (cachedZosmfSession != null) { + return cachedZosmfSession; + } + + const sessCfg: unknown = { + hostname: REMOTE_CONNECTION.host, + port: REMOTE_CONNECTION.zosmf_port, + user: REMOTE_CONNECTION.user, + password: REMOTE_CONNECTION.password, + rejectUnauthorized: REMOTE_CONNECTION.zosmf_reject_unauthorized, + protocol: 'https', + }; + + ConnectionPropsForSessCfg.resolveSessCfgProps(sessCfg, { $0: '', _: [] }, {}); + cachedZosmfSession = new Session(sessCfg); + console.log('returning not cached ' + cachedZosmfSession); + return cachedZosmfSession; +} diff --git a/tests/system-integration/tsconfig.json b/tests/system-integration/tsconfig.json new file mode 100644 index 0000000000..9ee0f2d2f0 --- /dev/null +++ b/tests/system-integration/tsconfig.json @@ -0,0 +1,112 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + // "incremental": true, /* Enable incremental compilation */ + "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2015", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./src", /* Specify the root folder within your source files. */ + "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": ".", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true, /* Enable importing .json files */ + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./dist", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + "newLine": "lf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./dist/types", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + // "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + "outDir": "lib", + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "lib", + "node_modules", + "**/__mocks__/*", + "**/*.spec.ts", + "**/*-spec.ts", + ] +} From 9512ec46beafbf38c473487a53cbcac5fbe498cd Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 17 May 2024 14:55:22 -0400 Subject: [PATCH 02/21] add gitignores Signed-off-by: MarkAckert --- .gitignore | 5 +++++ bin/commands/init/generate/index.ts | 9 +++++++-- bin/libs/zos-jes.ts | 2 ++ build/zwe/package-lock.json | 6 +++--- schemas/server-common.json | 2 +- tests/system-integration/.gitignore | 1 + 6 files changed, 19 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index e740da7bb7..d159357542 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,11 @@ tmp/ # Compiled TS files bin/libs/*.js build/zwe/out +bin/**/cli.js +bin/**/index.js +bin/utils/ObjUtils.js +bin/commands/components/handlerutils.js +bin/commands/components/npm.js # Mac files .DS_Store diff --git a/bin/commands/init/generate/index.ts b/bin/commands/init/generate/index.ts index 88a768b990..6e8c40ddaa 100644 --- a/bin/commands/init/generate/index.ts +++ b/bin/commands/init/generate/index.ts @@ -34,7 +34,12 @@ export function execute(dryRun?: boolean) { } const tempFile = fs.createTmpFile(); - zosFs.copyMvsToUss(ZOWE_CONFIG.zowe.setup.dataset.prefix + '.SZWESAMP(ZWEGENER)', tempFile); + const copyResult= zosFs.copyMvsToUss(ZOWE_CONFIG.zowe.setup.dataset.prefix + '.SZWESAMP(ZWEGENER)', tempFile); + if (copyResult != 0) { + //TODO: error message id + common.printMessage(`Error ZWETODOE: ${ZOWE_CONFIG.zowe.setup.dataset.prefix}.SZWESAMP(ZWEGENER) could not be copied. Review other error output from the 'cp' command.`); + return; + } let jclContents = xplatform.loadFileUTF8(tempFile, xplatform.AUTO_DETECT); // Replace is using special replacement patterns, by doubling '$' we will avoid that @@ -91,7 +96,7 @@ export function execute(dryRun?: boolean) { const result = zosJes.waitForJob(jobid); os.remove(tempFile); - common.printMessage(`Job completed with RC=${result.rc}`); + common.printMessage(`Job ZWEGENER(${jobid}) completed with RC=${result.rc}`); if (result.rc == 0) { common.printMessage("Zowe JCL generated successfully"); } else { diff --git a/bin/libs/zos-jes.ts b/bin/libs/zos-jes.ts index b9e6fd53ea..ed1263b663 100644 --- a/bin/libs/zos-jes.ts +++ b/bin/libs/zos-jes.ts @@ -239,6 +239,8 @@ export function printAndHandleJcl(jclLocationOrContent: string, jobName: string, } if (jobHasFailures) { common.printLevel2Message(`Job ended with some failures. Please check job log for details.`); + } else { + common.printMessage(`Job ${jobname}(${jobId}) completed with RC=${rc}`) } return 0 } else { diff --git a/build/zwe/package-lock.json b/build/zwe/package-lock.json index be384cecb9..680a2f23c8 100644 --- a/build/zwe/package-lock.json +++ b/build/zwe/package-lock.json @@ -9,9 +9,9 @@ "version": "2.0.0", "license": "EPL-2.0", "devDependencies": { - "@types/jest": "^29.5.0", - "jest": "^29.5.0", - "ts-jest": "^29.0.5", + "@types/jest": "29.5.0", + "jest": "29.5.0", + "ts-jest": "29.0.5", "typescript": "4.6.4" } }, diff --git a/schemas/server-common.json b/schemas/server-common.json index c9b419ce95..18eb0f2ae9 100644 --- a/schemas/server-common.json +++ b/schemas/server-common.json @@ -69,7 +69,7 @@ "minLength": 1, "maxLength": 32 }, - "path": { + "optionalPath": { "$anchor": "zoweOptionalPath", "type": "string", "minLength": 0, diff --git a/tests/system-integration/.gitignore b/tests/system-integration/.gitignore index bb56973d79..de5fb9b2a1 100644 --- a/tests/system-integration/.gitignore +++ b/tests/system-integration/.gitignore @@ -1 +1,2 @@ .build/* +lib/**/* From 7a1cf2bc22853272940667fba88edf7bf5d62d9d Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 17 May 2024 14:57:34 -0400 Subject: [PATCH 03/21] Test initialization - vsam Signed-off-by: MarkAckert --- tests/system-integration/.gitignore | 3 +- tests/system-integration/jest.config.ts | 1 + tests/system-integration/package-lock.json | 179 +++++++++++-- tests/system-integration/package.json | 5 +- .../resources/custom_config.yml | 18 ++ .../resources/test_config.yml | 18 ++ .../src/__tests__/RemoteTestRunner.ts | 70 ----- .../init/__snapshots__/canary.test.ts.snap | 61 +++++ .../init/__snapshots__/vsam.test.ts.snap | 251 +++++++++++++----- .../src/__tests__/init/canary.test.ts | 41 +++ .../src/__tests__/init/vsam.test.ts | 82 +++--- .../src/config/TestConfig.ts | 131 +++++++++ .../src/{__tests__ => config}/ZoweYaml.ts | 6 +- tests/system-integration/src/constants.ts | 46 ---- tests/system-integration/src/globalSetup.ts | 234 ++++++++++++++-- .../system-integration/src/globalTeardown.ts | 23 +- .../src/{ => types}/ZoweYamlType.ts | 106 +++++--- tests/system-integration/src/uss.ts | 10 +- tests/system-integration/src/utils.ts | 68 ++++- .../src/zos/RemoteTestRunner.ts | 111 ++++++++ .../src/zos/TestAwareFiles.ts | 67 +++++ tests/system-integration/src/zowe.ts | 22 +- 22 files changed, 1188 insertions(+), 365 deletions(-) create mode 100644 tests/system-integration/resources/custom_config.yml create mode 100644 tests/system-integration/resources/test_config.yml delete mode 100644 tests/system-integration/src/__tests__/RemoteTestRunner.ts create mode 100644 tests/system-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap create mode 100644 tests/system-integration/src/__tests__/init/canary.test.ts create mode 100644 tests/system-integration/src/config/TestConfig.ts rename tests/system-integration/src/{__tests__ => config}/ZoweYaml.ts (79%) delete mode 100644 tests/system-integration/src/constants.ts rename tests/system-integration/src/{ => types}/ZoweYamlType.ts (90%) create mode 100644 tests/system-integration/src/zos/RemoteTestRunner.ts create mode 100644 tests/system-integration/src/zos/TestAwareFiles.ts diff --git a/tests/system-integration/.gitignore b/tests/system-integration/.gitignore index de5fb9b2a1..9f5223d44a 100644 --- a/tests/system-integration/.gitignore +++ b/tests/system-integration/.gitignore @@ -1,2 +1,3 @@ .build/* -lib/**/* +lib/ +reports/* diff --git a/tests/system-integration/jest.config.ts b/tests/system-integration/jest.config.ts index d2a3af3759..001a90583d 100644 --- a/tests/system-integration/jest.config.ts +++ b/tests/system-integration/jest.config.ts @@ -16,6 +16,7 @@ const config: Config = { globalTeardown: '/src/globalTeardown.ts', preset: 'ts-jest', testRegex: '__tests__.*\\.*?\\.(spec|test)\\.ts$', + maxWorkers: 1, reporters: [ 'default', [ diff --git a/tests/system-integration/package-lock.json b/tests/system-integration/package-lock.json index 5e565566f5..59cc7f2148 100644 --- a/tests/system-integration/package-lock.json +++ b/tests/system-integration/package-lock.json @@ -18,8 +18,9 @@ "@types/exit": "0.1.33", "@types/fs-extra": "11.0.4", "@types/jest": "^29.5.12", - "@types/lodash": "^4.17.0", + "@types/lodash": "^4.17.3", "@types/node": "20.12.7", + "@types/semver": "^7.5.8", "@types/xml2js": "0.4.14", "@types/yaml": "^1.9.7", "@types/yn": "^3.1.0", @@ -39,8 +40,10 @@ "fs-extra": "11.2.0", "jest": "29.7.0", "jest-junit": "16.0.0", + "jfrog-client-js": "^2.8.0", "lodash": "^4.17.21", "prettier": "3.2.5", + "semver": "^7.6.2", "ts-jest": "29.1.2", "ts-node": "10.9.2", "typescript": "5.4.5", @@ -2035,9 +2038,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", - "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.3.tgz", + "integrity": "sha512-zmNrEJaBvNskZXQWaUQq6bktF4IDGVfDS78M+YEk5aCn9M/b94/mB/6WCyfH2/MjwBdc6QuOor95CIlKWYRL3A==", "dev": true }, "node_modules/@types/ms": { @@ -3139,6 +3142,44 @@ "safer-buffer": "~2.1.0" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/axios-retry": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.2.6.tgz", + "integrity": "sha512-kyedApcSW9FbQ+UIJOIXtez59aE8wjpYa0/l0ahhnUwjrZdEvEuftm87mW704yFIbtJgOllGr52lkZquVna89A==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.15.4", + "is-retry-allowed": "^2.2.0" + } + }, + "node_modules/axios-retry/node_modules/is-retry-allowed": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -3847,6 +3888,18 @@ "node": ">=0.1.90" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -4193,6 +4246,15 @@ "node": ">=0.10.0" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -5011,6 +5073,26 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -5041,6 +5123,20 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -6417,6 +6513,42 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jfrog-client-js": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jfrog-client-js/-/jfrog-client-js-2.8.0.tgz", + "integrity": "sha512-Q2gYG6vKKeKi6bu8crIRBTFz3AABzROg+CtxFqH5Z9u5yyD24bReUvjujfwxu3aYTq8VUdojVbHVg9A6jBw6mg==", + "dev": true, + "dependencies": { + "axios": "~0.27.2", + "axios-retry": "~3.2.5", + "https-proxy-agent": "^5.0.1" + } + }, + "node_modules/jfrog-client-js/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/jfrog-client-js/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/joi": { "version": "17.13.1", "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz", @@ -6808,6 +6940,18 @@ "node": ">= 0.6" } }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -8595,13 +8739,10 @@ } }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -8609,24 +8750,6 @@ "node": ">=10" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", diff --git a/tests/system-integration/package.json b/tests/system-integration/package.json index 5a591b64ce..0a9e9a68c8 100644 --- a/tests/system-integration/package.json +++ b/tests/system-integration/package.json @@ -10,8 +10,9 @@ "@types/exit": "0.1.33", "@types/fs-extra": "11.0.4", "@types/jest": "^29.5.12", - "@types/lodash": "^4.17.0", + "@types/lodash": "^4.17.3", "@types/node": "20.12.7", + "@types/semver": "^7.5.8", "@types/xml2js": "0.4.14", "@types/yaml": "^1.9.7", "@types/yn": "^3.1.0", @@ -31,8 +32,10 @@ "fs-extra": "11.2.0", "jest": "29.7.0", "jest-junit": "16.0.0", + "jfrog-client-js": "^2.8.0", "lodash": "^4.17.21", "prettier": "3.2.5", + "semver": "^7.6.2", "ts-jest": "29.1.2", "ts-node": "10.9.2", "typescript": "5.4.5", diff --git a/tests/system-integration/resources/custom_config.yml b/tests/system-integration/resources/custom_config.yml new file mode 100644 index 0000000000..4b335a1848 --- /dev/null +++ b/tests/system-integration/resources/custom_config.yml @@ -0,0 +1,18 @@ +# These below variables can be replaced +host: +user: +password: +ssh_port: +zosmf_port: +remote_test_dir: +zos_java_home: +zos_node_home: +remote_setup: false +remote_teardown: false +test_ds_hlq: +test_volume: +zosmf_reject_unauthorized: +download_configmgr: false +jfrog_user: +jfrog_token: +collect_test_spool: true diff --git a/tests/system-integration/resources/test_config.yml b/tests/system-integration/resources/test_config.yml new file mode 100644 index 0000000000..4b335a1848 --- /dev/null +++ b/tests/system-integration/resources/test_config.yml @@ -0,0 +1,18 @@ +# These below variables can be replaced +host: +user: +password: +ssh_port: +zosmf_port: +remote_test_dir: +zos_java_home: +zos_node_home: +remote_setup: false +remote_teardown: false +test_ds_hlq: +test_volume: +zosmf_reject_unauthorized: +download_configmgr: false +jfrog_user: +jfrog_token: +collect_test_spool: true diff --git a/tests/system-integration/src/__tests__/RemoteTestRunner.ts b/tests/system-integration/src/__tests__/RemoteTestRunner.ts deleted file mode 100644 index d1c5688b4c..0000000000 --- a/tests/system-integration/src/__tests__/RemoteTestRunner.ts +++ /dev/null @@ -1,70 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -import { Session } from '@zowe/imperative'; -import { getZosmfSession } from '../zowe'; -import * as uss from '../uss'; -import ZoweYamlType from '../ZoweYamlType'; -import { REMOTE_TEST_DIR, TEST_YAML_DIR } from '../constants'; -import * as files from '@zowe/zos-files-for-zowe-sdk'; -import * as fs from 'fs-extra'; -import * as YAML from 'yaml'; -import { log } from 'console'; - -export class RemoteTestRunner { - private session: Session; - - RemoteTestRunner() { - log('init'); - this.session = getZosmfSession(); - } - - public async runRaw(command: string, cwd: string = REMOTE_TEST_DIR): Promise { - this.session = getZosmfSession(); - const output = await uss.runCommand(`${command}`, cwd); - return { - stdout: output.data, - rc: output.rc, - }; - } - - /** - * - * @param zoweYaml - * @param zweCommand - * @param cwd - */ - public async runTest(zoweYaml: ZoweYamlType, zweCommand: string, cwd: string = REMOTE_TEST_DIR): Promise { - console.log(this.session); - this.session = getZosmfSession(); - console.log(this.session); - let command = zweCommand.trim(); - if (command.startsWith('zwe')) { - command = command.replace(/zwe/, ''); - } - const testName = expect.getState().currentTestName; - const stringZoweYaml = YAML.stringify(zoweYaml); - fs.writeFileSync(`${TEST_YAML_DIR}/zowe.yaml.${testName}`, stringZoweYaml); - await files.Upload.bufferToUssFile(this.session, `${REMOTE_TEST_DIR}/zowe.test.yaml`, Buffer.from(stringZoweYaml), { - binary: false, - }); - - const output = await uss.runCommand(`./bin/zwe ${command} --config ${REMOTE_TEST_DIR}/zowe.test.yaml`, cwd); - return { - stdout: output.data, - rc: output.rc, - }; - } -} - -export type TestOutput = { - stdout: string; - rc: number; -}; diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap new file mode 100644 index 0000000000..73f942f628 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap @@ -0,0 +1,61 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Canary tests a test 1`] = ` +" +$ zwe + +------------------ +Synopsis + zwe [sub-command [sub-command]...] [parameter [parameter]...] + +------------------ +Description + A command line utility helps you managing Zowe instance. + + You can issue --help or -h to find information for all commands it supports. + +------------------ +Global parameters + --help|-h (optional) + Display this help. + --debug|--verbose|-v (optional) + Enable verbose mode. + --trace|-vv (optional) + Enable trace level debug mode. + --silent|-s (optional) + Do not display messages to standard output. + --log-dir|--log|-l string (optional) + Write logs to this directory. + --config|-c string (optional) + Path to Zowe configuration zowe.yaml file. + --configmgr (optional) + Enable use of configmgr capabilities. +------------------ +Available sub-command(s) + - certificate + - components + - config + - diagnose + - init + - install + - internal + - migrate + - sample + - start + - stop + - support + - version + +------------------ +Example(s) + zwe install -h + + zwe init --allow-overwrite --config /path/to/zowe.yaml + + zwe start -c /path/to/zowe.yaml" +`; + +exports[`Canary tests run echo 1`] = ` +" +$ hi" +`; diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index 27cc12fe86..89362bb1f8 100644 --- a/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -1,87 +1,192 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Dummy tests a test 1`] = ` +exports[`init vsam BAD: bad ds prefix 1`] = ` " -$ zwe +$ Temporary directory '/tmp/.zweenv-6996' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets ------------------- -Synopsis - zwe [sub-command [sub-command]...] [parameter [parameter]...] - ------------------- -Description - A command line utility helps you managing Zowe instance. - - You can issue --help or -h to find information for all commands it supports. - ------------------- -Global parameters - --help|-h (optional) - Display this help. - --debug|--verbose|-v (optional) - Enable verbose mode. - --trace|-vv (optional) - Enable trace level debug mode. - --silent|-s (optional) - Do not display messages to standard output. - --log-dir|--log|-l string (optional) - Write logs to this directory. - --config|-c string (optional) - Path to Zowe configuration zowe.yaml file. - --configmgr (optional) - Enable use of configmgr capabilities. ------------------- -Available sub-command(s) - - certificate - - components - - config - - diagnose - - init - - install - - internal - - migrate - - sample - - start - - stop - - support - - version - ------------------- -Example(s) - zwe install -h - - zwe init --allow-overwrite --config /path/to/zowe.yaml - - zwe start -c /path/to/zowe.yaml" -`; - -exports[`Dummy tests run echo 1`] = ` -" -$ hi" +cp: FSUM6258 cannot open file "//'ZOWEAD6.ZWETEST.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) +Error ZWETODOE: ZOWEAD6.ZWETEST.NOEXIST.SZWESAMP(ZWEGENER) could not be copied. Review other error output from the 'cp' command. +ERROR: Error ZWEL0999E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL ZOWEAD6.ZWETEST.NOEXIST.SZWESAMP(ZWEGENER) before running this command." `; -exports[`Dummy tests run echo 2`] = ` +exports[`init vsam GOOD: simple --dry-run 1`] = ` " -$ export TERM=xterm - -# python3 -export PYTHON_HOME=/ZOWE/node/python3/usr/lpp/IBM/cyp/v3r12/pyz +$ Temporary directory '/tmp/.zweenv-1582' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets -# java 8 -export JAVA_HOME=/ZOWE/node/J8.0_64 +Template JCL: ZOWEAD6.ZWETEST.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace ZOWEAD6.ZWETEST with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=ZOWEAD6.ZWETEST.SZWEEXEC,DISP=SHR +//* +//* Replace ZOWEAD6.ZWETEST with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=ZOWEAD6.ZWETEST.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /ZOWE/zwe-integration with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /ZOWE/zwe-integration/schemas/zowe-yaml-schema.json +FILE /ZOWE/zwe-integration/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /ZOWE/zwe-integration/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) -# these variables are required by v8, v12 -export _BPXK_AUTOCVT=ON -export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)" +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully +Template JCL: ZOWEAD6.ZWETEST.SZWESAMP(ZWECSVSM) , Executable JCL: ZOWEAD6.ZWETEST.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 5) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(ZOWEAD6.ZWETEST.VSAMTEST) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(ZOWEAD6.ZWETEST.VSAMTEST.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(ZOWEAD6.ZWETEST.VSAMTEST.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(ZOS003) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly -# node v14.15.1 -#export NODE_HOME=/ZOWE/node/node-v14.21.3-os390-s390x +>> Command run successfully. -# node v16.20.1 -export NODE_HOME=/ZOWE/node/node-v16.20.2-os390-s390x -# node v18.x -# export NODE_HOME=/ZOWE/node/node-v18.16.0 +>> Zowe Caching Service VSAM storage is created successfully. +" +`; -export PATH=/bin:.:/ZOWE/bin:$NODE_HOME/bin:$JAVA_HOME/bin:$PYTHON_HOME/bin" +exports[`init vsam disable cfgmgr 1`] = ` +" +$ Error ZWEL0316E: Command requires zowe.useConfigmgr=true to use." `; diff --git a/tests/system-integration/src/__tests__/init/canary.test.ts b/tests/system-integration/src/__tests__/init/canary.test.ts new file mode 100644 index 0000000000..cd1a5a3c4f --- /dev/null +++ b/tests/system-integration/src/__tests__/init/canary.test.ts @@ -0,0 +1,41 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; +import { ZoweYaml } from '../../config/ZoweYaml'; + +/** + * Make sure the test suite and remote system are working as expected + */ +const testSuiteName = 'Canary tests'; +describe(testSuiteName, () => { + let testRunner: RemoteTestRunner; + beforeAll(() => { + testRunner = new RemoteTestRunner('canary'); + }); + + it('run echo', async () => { + const cfgYaml = ZoweYaml.basicZoweYaml(); + cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; + const result = await testRunner.runRaw('echo "hi"'); + expect(result.rc).toBe(0); + expect(result.stdout).not.toBeNull(); + expect(result.stdout).toMatchSnapshot(); + }); + + it('a test', async () => { + const cfgYaml = ZoweYaml.basicZoweYaml(); + cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; + const result = await testRunner.runZweTest(cfgYaml, '--help'); + expect(result.rc).toBe(100); // 100 is expected... + expect(result.stdout).not.toBeNull(); + expect(result.stdout).toMatchSnapshot(); + }); +}); diff --git a/tests/system-integration/src/__tests__/init/vsam.test.ts b/tests/system-integration/src/__tests__/init/vsam.test.ts index a5069083af..f5a51b1217 100644 --- a/tests/system-integration/src/__tests__/init/vsam.test.ts +++ b/tests/system-integration/src/__tests__/init/vsam.test.ts @@ -8,44 +8,60 @@ * Copyright Contributors to the Zowe Project. */ -import { RemoteTestRunner } from '../RemoteTestRunner'; -import { ZoweYaml } from '../ZoweYaml'; +import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; +import ZoweYamlType from '../../types/ZoweYamlType'; +import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; +import { ZoweYaml } from '../../config/ZoweYaml'; +import { DatasetType, TestAwareFiles, TestManagedDataset } from '../../zos/TestAwareFiles'; -const testSuiteName = 'Dummy tests'; +const testSuiteName = 'init vsam'; describe(testSuiteName, () => { - beforeEach(() => {}); - - it('run echo', async () => { - const testRunner = new RemoteTestRunner(); - - console.log('heres a log'); - const cfgYaml = ZoweYaml.basicZoweYaml(); - cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; - const result = await testRunner.runRaw('echo "hi"'); - console.log(result); - console.log(JSON.stringify(result)); - expect(result.rc).toBe(0); // 100 is expected... + let testRunner: RemoteTestRunner; + let cfgYaml: ZoweYamlType; + let cleanupDatasets: TestManagedDataset[] = []; // a list of datasets deleted after every test + + beforeAll(() => { + testRunner = new RemoteTestRunner('vsam'); + }); + beforeEach(() => { + cfgYaml = ZoweYaml.basicZoweYaml(); + // customizations for all vsam tests + cfgYaml.zowe.setup.vsam.name = REMOTE_SYSTEM_INFO.prefix + '.VSAMTEST'; + cfgYaml.zowe.setup.vsam.volume = REMOTE_SYSTEM_INFO.volume; + }); + + afterEach(async () => { + if (TEST_COLLECT_SPOOL) { + testRunner.collectSpool(); + } + // re-created in every `init vsam` based on changes to zowe yaml command... + const jcllib: TestManagedDataset = { name: REMOTE_SYSTEM_INFO.jcllib, type: DatasetType.NON_CLUSTER }; + + // try to delete everything we know about + TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); + cleanupDatasets = []; + }); + + it('disable cfgmgr', async () => { + cfgYaml.zowe.useConfigmgr = false; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(60); // 60 is expected... + }); + + it('BAD: bad ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); - expect(result.stdout).toMatchSnapshot(); - - const result2 = await testRunner.runRaw('cat /u/zowead3/.profile'); - console.log(result2); - console.log(JSON.stringify(result2)); - expect(result2.rc).toBe(0); // 100 is expected... - expect(result2.stdout).not.toBeNull(); - expect(result2.stdout).toMatchSnapshot(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); }); - it('a test', async () => { - const testRunner = new RemoteTestRunner(); - console.log('heres a log'); - const cfgYaml = ZoweYaml.basicZoweYaml(); - cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; - const result = await testRunner.runTest(cfgYaml, '--help'); - console.log(result); - console.log(JSON.stringify(result)); - expect(result.rc).toBe(100); // 100 is expected... + it('GOOD: simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); - expect(result.stdout).toMatchSnapshot(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... }); }); diff --git a/tests/system-integration/src/config/TestConfig.ts b/tests/system-integration/src/config/TestConfig.ts new file mode 100644 index 0000000000..a3e07e37ad --- /dev/null +++ b/tests/system-integration/src/config/TestConfig.ts @@ -0,0 +1,131 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import * as path from 'path'; +import * as fs from 'fs-extra'; +import * as yaml from 'yaml'; +import yn from 'yn'; +import { findDirWalkingUpOrThrow } from '../utils'; +class ConfigItem { + public readonly name: string; + public readonly required: boolean; + public readonly default: T; + + constructor(name: string, required: boolean = false, defaultVal: T = undefined) { + this.name = name; + this.required = required; + this.default = defaultVal; + } +} + +type TestConfigData = { + zos_java_home: string; + zos_node_home: string; + host: string; + user: string; + password: string; + ssh_port: string; + zosmf_port: string; + remote_test_dir: string; + test_ds_hlq: string; + test_volume: string; + zosmf_reject_unauthorized: string; + download_configmgr: string; + remote_setup: boolean; + remote_teardown: boolean; + jfrog_user: string; + jfrog_token: string; + collect_test_spool: string; +}; + +const configFields: ConfigItem[] = [ + new ConfigItem('zos_java_home', false), + new ConfigItem('zos_node_home', false), + new ConfigItem('host', true), + new ConfigItem('user', true), + new ConfigItem('password', true), + new ConfigItem('ssh_port', true), + new ConfigItem('zosmf_port', true), + new ConfigItem('remote_test_dir', true), + new ConfigItem('test_ds_hlq', true), + new ConfigItem('test_volume', true), + new ConfigItem('zosmf_reject_unauthorized', false, false), + new ConfigItem('download_configmgr', false, true), + new ConfigItem('remote_setup', false), + new ConfigItem('remote_teardown', false), + new ConfigItem('jfrog_user', false), + new ConfigItem('jfrog_token', false), + new ConfigItem('collect_test_spool', false, true), +]; + +// +export const REPO_ROOT_DIR: string = findDirWalkingUpOrThrow('zowe-install-packaging'); +export const THIS_TEST_ROOT_DIR: string = findDirWalkingUpOrThrow('system-integration'); // JEST runs in the src dir + +const configFile = process.env['TEST_CONFIG_FILE'] || `${THIS_TEST_ROOT_DIR}/resources/test_config.yml`; +const configData = getConfig(configFile); + +export const THIS_TEST_BASE_YAML: string = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'zowe.yaml.base'); +export const INSTALL_TEST_ROOT_DIR: string = path.resolve(__dirname, '../'); +export const TEST_DATASETS_LINGERING_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'lingering_ds.txt'); +export const TEST_JOBS_RUN_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'jobs-run.txt'); +export const DOWNLOAD_CONFIGMGR = yn(configData.download_configmgr, { default: true }); +export const TEST_DATASETS_HLQ = configData.test_ds_hlq || 'ZWETESTS'; +export const REMOTE_SETUP = yn(configData.remote_setup, { default: true }); +export const REMOTE_TEARDOWN = yn(configData.remote_teardown, { default: true }); +export const REMOTE_TEST_DIR = configData.remote_test_dir; +export const TEST_COLLECT_SPOOL = yn(configData.collect_test_spool); +export const JFROG_CREDENTIALS = { + user: configData.jfrog_user, + token: configData.jfrog_token, +}; +const ru = yn(configData.zosmf_reject_unauthorized, { default: false }); + +export const REMOTE_SYSTEM_INFO = { + zosJavaHome: configData.zos_java_home, + zosNodeHome: configData.zos_node_home, + volume: configData.test_volume, + prefix: configData.test_ds_hlq, + szweexec: `${configData.test_ds_hlq}.SZWEEXEC`, + szwesamp: `${configData.test_ds_hlq}.SZWESAMP`, + jcllib: `${configData.test_ds_hlq}.JCLLIB`, + szweload: `${configData.test_ds_hlq}.SZWELOAD`, +}; + +export const REMOTE_CONNECTION_CFG = { + host: configData.host, + ssh_port: Number(configData.ssh_port), + zosmf_port: Number(configData.zosmf_port), + user: configData.user, + password: configData.password, + zosmf_reject_unauthorized: ru, +}; + +export function getConfig(configFile: string): TestConfigData { + const rawConfig = yaml.parse(fs.readFileSync(configFile, 'utf8')); + const configData: { [key: string]: string } = {}; + + for (const configItem of configFields) { + const paramName = configItem.name; + configData[paramName] = rawConfig[paramName]; + const envValue = process.env[paramName.toUpperCase()]?.trim(); + if (envValue != null && envValue.length > 0) { + configData[paramName] = envValue; + } + + if (configData[paramName] == null && configItem.required === true) { + console.log(`Must set the ${paramName} configuration variable in the ${configFile} + or set it via environment variable ${paramName.toUpperCase()}`); + throw Error(`Required configuration parameter unset`); + } + } + // coerce typing, will throw an error fast if something's wrong + return configData as unknown as TestConfigData; +} diff --git a/tests/system-integration/src/__tests__/ZoweYaml.ts b/tests/system-integration/src/config/ZoweYaml.ts similarity index 79% rename from tests/system-integration/src/__tests__/ZoweYaml.ts rename to tests/system-integration/src/config/ZoweYaml.ts index eb17a71f6d..57ba41a336 100644 --- a/tests/system-integration/src/__tests__/ZoweYaml.ts +++ b/tests/system-integration/src/config/ZoweYaml.ts @@ -8,12 +8,10 @@ * Copyright Contributors to the Zowe Project. */ -import * as files from '@zowe/zos-files-for-zowe-sdk'; import * as yaml from 'yaml'; -import { THIS_TEST_BASE_YAML } from '../constants'; +import { THIS_TEST_BASE_YAML } from './TestConfig'; import * as fs from 'fs-extra'; -import * as _ from 'lodash'; -import ZoweYamlType from '../ZoweYamlType'; +import ZoweYamlType from '../types/ZoweYamlType'; export class ZoweYaml { /* public updateField(field: string, value: string) { diff --git a/tests/system-integration/src/constants.ts b/tests/system-integration/src/constants.ts deleted file mode 100644 index 2b0dacc72b..0000000000 --- a/tests/system-integration/src/constants.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -import * as path from 'path'; -import * as util from './utils'; -import yn from 'yn'; -// import Debug from 'debug'; -// const debug = Debug('zowe-install-test:constants'); - -// the FMID we will use to test PTF -export const ZOWE_FMID = 'AZWE002'; -export const REPO_ROOT_DIR: string = path.resolve(__dirname, '../../../'); -export const THIS_TEST_ROOT_DIR: string = path.resolve(__dirname, '../'); // JEST runs in the src dir -export const THIS_TEST_BASE_YAML: string = path.resolve(THIS_TEST_ROOT_DIR, '.build/zowe.yaml.base'); -export const INSTALL_TEST_ROOT_DIR: string = path.resolve(__dirname, '../'); -export const TEST_YAML_DIR = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'zowe_yaml_tests'); -export const TEST_DATASETS_HLQ = process.env['TEST_DS_HLQ'] || 'ZWETESTS'; -export const TEST_JOBS_RUN_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'jobs-run.txt'); - -const cleanup = yn(process.env['CLEANUP_AFTER_TESTS']); -export const CLEANUP_AFTER_TESTS = cleanup != null ? cleanup : true; - -const envVars = ['SSH_HOST', 'SSH_PORT', 'SSH_USER', 'SSH_PASSWORD', 'ZOSMF_PORT', 'REMOTE_TEST_ROOT_DIR']; -util.checkMandatoryEnvironmentVariables(envVars); - -export const REMOTE_TEST_DIR = process.env['REMOTE_TEST_ROOT_DIR'] || '/ZOWE/zwe-system-test'; - -const ru = yn(process.env['ZOSMF_REJECT_UNAUTHORIZED']); - -export const REMOTE_CONNECTION = { - host: process.env['SSH_HOST'], - ssh_port: Number(process.env['SSH_PORT']), - zosmf_port: process.env['ZOSMF_PORT'], - user: process.env['SSH_USER'], - password: process.env['SSH_PASSWORD'], - zosmf_reject_unauthorized: ru != null ? ru : false, -}; - -// debug(`process.env >>>>>>>>>>>>>>>>>>>>>>>>>>\n${JSON.stringify(process.env)}\n<<<<<<<<<<<<<<<<<<<<<<<`); diff --git a/tests/system-integration/src/globalSetup.ts b/tests/system-integration/src/globalSetup.ts index 78c07b38fc..b1bd0f975e 100644 --- a/tests/system-integration/src/globalSetup.ts +++ b/tests/system-integration/src/globalSetup.ts @@ -9,45 +9,221 @@ */ import * as uss from './uss'; +import * as _ from 'lodash'; import * as files from '@zowe/zos-files-for-zowe-sdk'; -import { REMOTE_TEST_DIR, REPO_ROOT_DIR, TEST_YAML_DIR, THIS_TEST_BASE_YAML, THIS_TEST_ROOT_DIR } from './constants'; +import { + DOWNLOAD_CONFIGMGR, + JFROG_CREDENTIALS, + REMOTE_SETUP, + REMOTE_SYSTEM_INFO, + REMOTE_TEST_DIR, + REPO_ROOT_DIR, + TEST_DATASETS_LINGERING_FILE, + TEST_JOBS_RUN_FILE, + THIS_TEST_BASE_YAML, + THIS_TEST_ROOT_DIR, +} from './config/TestConfig'; import * as fs from 'fs-extra'; import { getZosmfSession } from './zowe'; +import * as yaml from 'yaml'; +import ZoweYamlType from './types/ZoweYamlType'; +import { JfrogClient } from 'jfrog-client-js'; +import { processManifestVersion } from './utils'; +import { execSync } from 'child_process'; + +const zosmfSession = getZosmfSession(); + +function setupBaseYaml() { + console.log(`Using example-zowe.yaml as base for future zowe.yaml modifications...`); + const zoweYaml: ZoweYamlType = yaml.parse(fs.readFileSync(`${REPO_ROOT_DIR}/example-zowe.yaml`, 'utf8')) as ZoweYamlType; + + zoweYaml.java.home = REMOTE_SYSTEM_INFO.zosJavaHome; + zoweYaml.node.home = REMOTE_SYSTEM_INFO.zosNodeHome; + zoweYaml.zowe.runtimeDirectory = `${REMOTE_TEST_DIR}`; + zoweYaml.zowe.setup.dataset.prefix = REMOTE_SYSTEM_INFO.prefix; + zoweYaml.zowe.setup.dataset.jcllib = REMOTE_SYSTEM_INFO.jcllib; + // zoweYaml.zowe.setup.dataset.loadlib = REMOTE_SYSTEM_INFO.szweexec; + // zoweYaml.node.home = systemDefaults.zos_node_home; + // zoweYaml.zowe.runtimeDirectory = systemDefaults. + fs.writeFileSync(THIS_TEST_BASE_YAML, yaml.stringify(zoweYaml)); +} + +const jf = new JfrogClient({ + platformUrl: 'https://zowe.jfrog.io/', + username: JFROG_CREDENTIALS.user, + accessToken: JFROG_CREDENTIALS.token, +}); + +async function downloadManifestDep(binaryName: string): Promise { + const manifestJson = fs.readJSONSync(`${REPO_ROOT_DIR}/manifest.json.template`, 'utf8'); + const binaryDep = manifestJson['binaryDependencies'][binaryName]; + const dlSpec = processManifestVersion(binaryDep.version); + const nameMatch = binaryDep?.artifact || '*'; + + // get folders so we can regex against + const pathMatch = `${binaryName.replace(/\./g, '/')}/${dlSpec.versionPattern}`; + + const searchResults = await jf + .artifactory() + .search() + .aqlSearch( + ` + items.find({ + "repo": "${dlSpec.repository}", + "path": {"$match": "${pathMatch}"}, + "name": {"$match": "${nameMatch}" } + }).sort({"$desc" : ["created"]}).limit(1) + + `.replace(/\s/g, ''), + ); + if (searchResults.results == null || searchResults.results.length === 0) { + throw new Error(`Could not find a ${binaryDep} matching the manifest.json spec`); + } + const artifact = searchResults.results[0]; + const dlFile = `${THIS_TEST_ROOT_DIR}/.build/${artifact.name}`; + await jf.artifactory().download().downloadArtifactToFile(`${artifact.repo}/${artifact.path}/${artifact.name}`, dlFile); + return dlFile; +} + +async function cleanUssDir(dir: string) { + console.log(`Checking if ${dir} is clean...`); + const lsOut = await uss.runCommand(`ls ${dir}`); + if (lsOut.rc === 0) { + // already exists + console.log(`Cleaning up old ${dir}...`); + await uss.runCommand(`rm -rf ${dir}`); + } +} module.exports = async () => { // check directories and configmgr look OK - console.log(`${REPO_ROOT_DIR}`); if (!fs.existsSync(`${REPO_ROOT_DIR}/bin/zwe`)) { throw new Error('Could not locate the zwe tool locally. Ensure you are running tests from the test project root'); } - const configmgrPax = fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build`).find((item) => /configmgr.*\.pax/g.test(item)); - if (configmgrPax == null) { - throw new Error('Could not locate a configmgr pax in the .build directory'); - } - - console.log(`Using example-zowe.yaml as base for future zowe.yaml modifications...`); - fs.copyFileSync(`${REPO_ROOT_DIR}/example-zowe.yaml`, THIS_TEST_BASE_YAML); + setupBaseYaml(); fs.mkdirpSync(`${THIS_TEST_ROOT_DIR}/.build/zowe`); - fs.mkdirpSync(`${TEST_YAML_DIR}`); - console.log('Setting up remote server...'); - await uss.runCommand(`mkdir -p ${REMOTE_TEST_DIR}`); - - console.log(`Uploading ${configmgrPax} to ${REMOTE_TEST_DIR}/configmgr.pax ...`); - await files.Upload.fileToUssFile( - getZosmfSession(), - `${THIS_TEST_ROOT_DIR}/.build/${configmgrPax}`, - `${REMOTE_TEST_DIR}/configmgr.pax`, - { binary: true }, - ); - - console.log(`Uploading ${REPO_ROOT_DIR}/bin to ${REMOTE_TEST_DIR}/bin...`); - await files.Upload.dirToUSSDirRecursive(getZosmfSession(), `${REPO_ROOT_DIR}/bin`, `${REMOTE_TEST_DIR}/bin/`, { - binary: false, - includeHidden: true, - }); + fs.rmSync(TEST_DATASETS_LINGERING_FILE, { force: true }); + fs.rmSync(TEST_JOBS_RUN_FILE, { force: true }); + + if (REMOTE_SETUP) { + if (DOWNLOAD_CONFIGMGR) { + await downloadManifestDep('org.zowe.configmgr'); + await downloadManifestDep('org.zowe.configmgr-rexx'); + } + + const configmgrPax = fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build`).find((item) => /configmgr.*\.pax/g.test(item)); + if (configmgrPax == null) { + throw new Error('Could not locate a configmgr pax in the .build directory'); + } - console.log(`Unpacking configmgr and placing it in bin/utils ...`); - await uss.runCommand(`pax -ppx -rf configmgr.pax && mv configmgr bin/utils/`, `${REMOTE_TEST_DIR}`); + const configmgrRexxPax = fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build`).find((item) => /configmgr-rexx.*\.pax/g.test(item)); + if (configmgrRexxPax == null) { + throw new Error('Could not locate a configmgr-rexx pax in the .build directory'); + } - console.log('Remote server setup complete'); + console.log('Setting up remote server...'); + await uss.runCommand(`mkdir -p ${REMOTE_TEST_DIR}`); + + console.log(`Uploading ${configmgrPax} to ${REMOTE_TEST_DIR}/configmgr.pax ...`); + await files.Upload.fileToUssFile( + zosmfSession, + `${THIS_TEST_ROOT_DIR}/.build/${configmgrPax}`, + `${REMOTE_TEST_DIR}/configmgr.pax`, + { binary: true }, + ); + + console.log(`Uploading ${configmgrRexxPax} to ${REMOTE_TEST_DIR}/configmgr-rexx.pax ...`); + await files.Upload.fileToUssFile( + zosmfSession, + `${THIS_TEST_ROOT_DIR}/.build/${configmgrRexxPax}`, + `${REMOTE_TEST_DIR}/configmgr-rexx.pax`, + { binary: true }, + ); + + console.log(`Building zwe typescript...`); + execSync(`npm install && npm run prod`, { cwd: `${REPO_ROOT_DIR}/build/zwe` }); + + await cleanUssDir(`${REMOTE_TEST_DIR}/bin`); + await cleanUssDir(`${REMOTE_TEST_DIR}/schemas`); + + console.log(`Uploading ${REPO_ROOT_DIR}/bin to ${REMOTE_TEST_DIR}/bin...`); + await files.Upload.dirToUSSDirRecursive(zosmfSession, `${REPO_ROOT_DIR}/bin`, `${REMOTE_TEST_DIR}/bin/`, { + binary: false, + includeHidden: true, + }); + + console.log(`Uploading ${REPO_ROOT_DIR}/schemas to ${REMOTE_TEST_DIR}/schemas...`); + await files.Upload.dirToUSSDirRecursive(zosmfSession, `${REPO_ROOT_DIR}/schemas`, `${REMOTE_TEST_DIR}/schemas/`, { + binary: false, + includeHidden: true, + }); + + await createPds(REMOTE_SYSTEM_INFO.szweexec, { + primary: 5, + secondary: 1, + }); + await createPds(REMOTE_SYSTEM_INFO.szwesamp, { + primary: 5, + secondary: 1, + }); + await createPds(REMOTE_SYSTEM_INFO.szweload, { + primary: 5, + recfm: 'U', + lrecl: 0, + secondary: 1, + }); + + console.log(`Unpacking configmgr and placing it in bin/utils ...`); + await uss.runCommand(`pax -ppx -rf configmgr.pax && mv configmgr bin/utils/`, `${REMOTE_TEST_DIR}`); + + console.log(`Unpacking configmgr-rexx and placing it in ${REMOTE_SYSTEM_INFO.szweload} ...`); + await uss.runCommand(`pax -ppx -rf configmgr-rexx.pax`, `${REMOTE_TEST_DIR}`); + for (const pgm of ['ZWERXCFG', 'ZWECFG31', 'ZWECFG64']) { + await uss.runCommand(`cp -X ${pgm} "//'${REMOTE_SYSTEM_INFO.szweload}(${pgm})'"`, `${REMOTE_TEST_DIR}`); + } + + console.log(`Uploading sample JCL from files/SZWESAMP to ${REMOTE_SYSTEM_INFO.szwesamp}...`); + await files.Upload.dirToPds(zosmfSession, `${REPO_ROOT_DIR}/files/SZWESAMP`, REMOTE_SYSTEM_INFO.szwesamp, { + binary: false, + }); + + console.log(`Uploading JCL from files/SZWEEXEC to ${REMOTE_SYSTEM_INFO.szweexec}...`); + await files.Upload.dirToPds(zosmfSession, `${REPO_ROOT_DIR}/files/SZWEEXEC`, REMOTE_SYSTEM_INFO.szweexec, { + binary: false, + }); + + console.log('Remote server setup complete'); + } }; + +async function createPds(pdsName: string, createOpts: Partial) { + const defaultPdsOpts: files.ICreateDataSetOptions = { + lrecl: 80, + recfm: 'FB', + blksize: 32720, + alcunit: 'cyl', + primary: 10, + secondary: 2, + dsorg: 'PO', + dsntype: 'library', + volser: REMOTE_SYSTEM_INFO.volume, + }; + const mergedOpts: Partial = _.merge({}, defaultPdsOpts, createOpts); + console.log(`Creating ${pdsName}`); + await createDataset(pdsName, files.CreateDataSetTypeEnum.DATA_SET_PARTITIONED, mergedOpts); +} + +async function createDataset(dsName: string, type: files.CreateDataSetTypeEnum, createOpts: Partial) { + console.log(`Checking if ${dsName} exists...`); + const listPdsResp = await files.List.dataSet(zosmfSession, dsName, { + pattern: dsName, + }); + console.log(JSON.stringify(listPdsResp)); + const respItems: { [key: string]: string }[] = listPdsResp.apiResponse?.items; + if (respItems != null && respItems.find((item) => item.dsname === dsName) != null) { + console.log(`Pds exists, cleaning up...`); + await files.Delete.dataSet(zosmfSession, dsName, {}); + } + console.log(`Creating ${dsName}`); + await files.Create.dataSet(zosmfSession, type, dsName, createOpts); +} diff --git a/tests/system-integration/src/globalTeardown.ts b/tests/system-integration/src/globalTeardown.ts index becfa612e0..14d3fe0309 100644 --- a/tests/system-integration/src/globalTeardown.ts +++ b/tests/system-integration/src/globalTeardown.ts @@ -8,25 +8,32 @@ * Copyright Contributors to the Zowe Project. */ -import { CLEANUP_AFTER_TESTS, REMOTE_TEST_DIR, TEST_JOBS_RUN_FILE, TEST_YAML_DIR } from './constants'; +import { REMOTE_TEARDOWN, REMOTE_TEST_DIR, TEST_JOBS_RUN_FILE as TEST_JOBS_TRACKING_FILE } from './config/TestConfig'; import * as uss from './uss'; import * as fs from 'fs-extra'; - +import * as jobs from '@zowe/zos-jobs-for-zowe-sdk'; +import { getZosmfSession } from './zowe'; module.exports = async () => { - if (!CLEANUP_AFTER_TESTS) { + if (!REMOTE_TEARDOWN) { return; } await uss.runCommand(`rm -rf ${REMOTE_TEST_DIR}`); - if (fs.existsSync(`${TEST_JOBS_RUN_FILE}`)) { - fs.readFileSync(`${TEST_JOBS_RUN_FILE}`, 'utf8') + // await files.Dataset.deleteDataset(); + + if (fs.existsSync(`${TEST_JOBS_TRACKING_FILE}`)) { + fs.readFileSync(`${TEST_JOBS_TRACKING_FILE}`, 'utf8') .split('\n') - .forEach((job) => { + .forEach(async (job) => { + const jobPieces = job.split(':'); + const jobName = jobPieces[0]; + const jobId = jobPieces[1]; + console.log('Purging ' + job); + await jobs.DeleteJobs.deleteJob(getZosmfSession(), jobName, jobId); // - console.log('Purge ' + job); }); } - fs.rmdirSync(TEST_YAML_DIR); + // fs.rmdirSync(TEST_YAML_DIR); }; diff --git a/tests/system-integration/src/ZoweYamlType.ts b/tests/system-integration/src/types/ZoweYamlType.ts similarity index 90% rename from tests/system-integration/src/ZoweYamlType.ts rename to tests/system-integration/src/types/ZoweYamlType.ts index 6629084313..5603640969 100644 --- a/tests/system-integration/src/ZoweYamlType.ts +++ b/tests/system-integration/src/types/ZoweYamlType.ts @@ -8,14 +8,17 @@ * Copyright Contributors to the Zowe Project. */ +/* eslint-disable max-len */ +/* eslint-disable quotes */ + import { FromSchema } from 'json-schema-to-ts'; -import zoweYamlSchema from '../../../schemas/zowe-yaml-schema.json'; -import serverYamlSchema from '../../../schemas/server-common.json'; +import zoweYamlSchema from '../../../../schemas/zowe-yaml-schema.json'; +import serverYamlSchema from '../../../../schemas/server-common.json'; // modified "$id" field in server-common schema so `json-schema-to-ts` could resolve the references const serverCommonSchema = serverYamlSchema as { $schema: 'https://json-schema.org/draft/2019-09/schema'; - $id: 'schemas/v2/server-common'; + $id: '/schemas/v2/server-common'; title: 'Common types'; description: 'Configuration types that are common in Zowe and may be referenced by multiple components'; $defs: { @@ -39,6 +42,22 @@ const serverCommonSchema = serverYamlSchema as { minLength: 3; maxLength: 44; }; + datasetPrefix: { + $anchor: 'zoweDatasetPrefix'; + type: 'string'; + description: "A 35-char all caps dotted ZOS name (space for '.SZWEnnnn')"; + pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$'; + minLength: 3; + maxLength: 35; + }; + datasetVsam: { + $anchor: 'zoweDatasetVsam'; + type: 'string'; + description: "A 38-char all caps dotted ZOS name (space for '.INDEX')"; + pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$'; + minLength: 3; + maxLength: 38; + }; datasetMember: { $anchor: 'zoweDatasetMember'; type: 'string'; @@ -68,6 +87,12 @@ const serverCommonSchema = serverYamlSchema as { minLength: 1; maxLength: 32; }; + optionalPath: { + $anchor: 'zoweOptionalPath'; + type: 'string'; + minLength: 0; + maxLength: 1024; + }; path: { $anchor: 'zowePath'; type: 'string'; @@ -110,7 +135,7 @@ const serverCommonSchema = serverYamlSchema as { const zoweSchema = zoweYamlSchema as { $schema: 'https://json-schema.org/draft/2019-09/schema'; - $id: 'https://zowe.orgschemas/v2/server-base'; + $id: 'https://zowe.org/schemas/v2/server-base'; title: 'Zowe configuration file'; description: 'Configuration file for Zowe (zowe.org) version 2.'; type: 'object'; @@ -131,15 +156,15 @@ const zoweSchema = zoweYamlSchema as { description: 'MVS data set related configurations'; properties: { prefix: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDatasetPrefix'; description: 'Where Zowe MVS data sets will be installed'; }; proclib: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDataset'; description: 'PROCLIB where Zowe STCs will be copied over'; }; parmlib: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDataset'; description: 'Zowe PARMLIB'; }; parmlibMembers: { @@ -148,27 +173,27 @@ const zoweSchema = zoweYamlSchema as { description: 'Holds Zowe PARMLIB members for plugins'; properties: { zis: { - $ref: 'schemas/v2/server-common#zoweDatasetMember'; + $ref: '/schemas/v2/server-common#zoweDatasetMember'; description: 'PARMLIB member used by ZIS'; }; }; }; jcllib: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDataset'; description: 'JCL library where Zowe will store temporary JCLs during initialization'; }; loadlib: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDataset'; description: 'States the dataset where Zowe executable utilities are located'; default: '.SZWELOAD'; }; authLoadlib: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDataset'; description: 'The dataset that contains any Zowe core code that needs to run APF-authorized, such as ZIS'; default: '.SZWEAUTH'; }; authPluginLib: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDataset'; description: 'APF authorized LOADLIB for Zowe ZIS Plugins'; }; }; @@ -249,17 +274,17 @@ const zoweSchema = zoweYamlSchema as { description: 'STC names'; properties: { zowe: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDatasetMember'; description: 'STC name of main service'; default: 'ZWESLSTC'; }; zis: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDatasetMember'; description: 'STC name of ZIS'; default: 'ZWESISTC'; }; aux: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweDatasetMember'; description: 'STC name of Auxiliary Service'; default: 'ZWESASTC'; }; @@ -297,7 +322,7 @@ const zoweSchema = zoweYamlSchema as { description: 'PKCS#12 keystore settings'; properties: { directory: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Keystore directory'; }; name: { @@ -490,24 +515,28 @@ const zoweSchema = zoweYamlSchema as { type: 'string'; description: 'Storage class name if you are using VSAM in RLS mode'; }; + name: { + $ref: '/schemas/v2/server-common#zoweDatasetVsam'; + description: 'Data set name. Must match components.caching-service.storage.vsam.name'; + }; }; }; }; }; runtimeDirectory: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Path to where you installed Zowe.'; }; logDirectory: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Path to where you want to store Zowe log files.'; }; workspaceDirectory: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Path to where you want to store Zowe workspace files. Zowe workspace are used by Zowe component runtime to store temporary files.'; }; extensionDirectory: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Path to where you want to store Zowe extensions. "zwe components install" will install new extensions into this directory.'; }; job: { @@ -535,7 +564,7 @@ const zoweSchema = zoweYamlSchema as { properties: { defaultHandler: { type: 'string'; - description: 'The name of a handler specified in the handlers section. Will be used as the default for \'zwe components\' commands'; + description: "The name of a handler specified in the handlers section. Will be used as the default for 'zwe components' commands"; }; handlers: { type: 'object'; @@ -572,7 +601,7 @@ const zoweSchema = zoweYamlSchema as { }; unsafeDisableZosVersionCheck: { type: 'boolean'; - description: 'Used to allow Zowe to warn, instead of error, when running on a version of z/OS that this version of Zowe hasn\'t been verified as working with'; + description: "Used to allow Zowe to warn, instead of error, when running on a version of z/OS that this version of Zowe hasn't been verified as working with"; default: false; }; }; @@ -613,7 +642,7 @@ const zoweSchema = zoweYamlSchema as { }; onComponentConfigureFail: { type: 'string'; - description: 'Chooses how \'zwe start\' behaves if a component configure script fails'; + description: "Chooses how 'zwe start' behaves if a component configure script fails"; enum: ['warn', 'exit']; default: 'warn'; }; @@ -630,7 +659,7 @@ const zoweSchema = zoweYamlSchema as { }; sysMessages: { type: 'array'; - description: 'List of Zowe message portions when matched will be additionally logged into the system\'s log (such as syslog on z/OS). Note: Some messages extremely early in the Zowe lifecycle may not be added to the system\'s log'; + description: "List of Zowe message portions when matched will be additionally logged into the system's log (such as syslog on z/OS). Note: Some messages extremely early in the Zowe lifecycle may not be added to the system's log"; uniqueItems: true; items: { type: 'string'; @@ -649,7 +678,6 @@ const zoweSchema = zoweYamlSchema as { validation: { type: 'string'; enum: ['STRICT', 'COMPONENT-COMPAT']; - // eslint-disable-next-line max-len description: 'States how configmgr will do validation: Will it quit on any error (STRICT) or quit on any error except the case of a component not having a schema file (COMPONENT-COMPAT)'; }; }; @@ -660,8 +688,8 @@ const zoweSchema = zoweYamlSchema as { type: 'object'; properties: { home: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to Java home directory.'; + $ref: '/schemas/v2/server-common#zoweOptionalPath'; + description: "Path to Java home directory. If java is at '/java/home/bin/java', than this would be '/java/home'"; }; }; }; @@ -669,8 +697,8 @@ const zoweSchema = zoweYamlSchema as { type: 'object'; properties: { home: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to node.js home directory.'; + $ref: '/schemas/v2/server-common#zoweOptionalPath'; + description: "Path to node.js home directory. If node is at '/node/home/bin/node', than this would be '/node/home'"; }; }; }; @@ -764,7 +792,7 @@ const zoweSchema = zoweYamlSchema as { const: 'PKCS12'; }; file: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Path to your PKCS#12 keystore.'; }; password: { @@ -789,7 +817,7 @@ const zoweSchema = zoweYamlSchema as { const: 'PKCS12'; }; file: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Path to your PKCS#12 keystore.'; }; password: { @@ -805,25 +833,25 @@ const zoweSchema = zoweYamlSchema as { required: ['key', 'certificate']; properties: { key: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Path to the certificate private key stored in PEM format.'; }; certificate: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Path to the certificate stored in PEM format.'; }; certificateAuthorities: { description: 'List of paths to the certificate authorities stored in PEM format.'; oneOf: [ { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Paths to the certificate authorities stored in PEM format. You can separate multiple certificate authorities by comma.'; }, { type: 'array'; description: 'Path to the certificate authority stored in PEM format.'; items: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; }; }, ]; @@ -855,7 +883,7 @@ const zoweSchema = zoweYamlSchema as { }; password: { type: 'string'; - description: 'Literally \'password\' may be needed when using keyrings for compatibility with java servers.'; + description: "Literally 'password' may be needed when using keyrings for compatibility with java servers."; enum: ['', 'password']; }; alias: { @@ -882,7 +910,7 @@ const zoweSchema = zoweYamlSchema as { }; password: { type: 'string'; - description: 'Literally \'password\' may be needed when using keyrings for compatibility with java servers.'; + description: "Literally 'password' may be needed when using keyrings for compatibility with java servers."; enum: ['', 'password']; }; }; @@ -1034,7 +1062,7 @@ const zoweSchema = zoweYamlSchema as { type: 'array'; description: 'The IP addresses which all of the Zowe servers will be binding on and listening to. Some servers may only support listening on the first element.'; items: { - $ref: 'schemas/v2/server-common#zoweIpv4'; + $ref: '/schemas/v2/server-common#zoweIpv4'; }; }; vipaIp: { @@ -1070,7 +1098,7 @@ const zoweSchema = zoweYamlSchema as { description: 'The location of the default registry for this handler. It could be a URL, path, dataset, whatever this handler supports'; }; path: { - $ref: 'schemas/v2/server-common#zowePath'; + $ref: '/schemas/v2/server-common#zowePath'; description: 'Unix file path to the configmgr-compatible JS file which implements the handler API'; }; }; diff --git a/tests/system-integration/src/uss.ts b/tests/system-integration/src/uss.ts index 0d8508207a..8c1d00b04d 100644 --- a/tests/system-integration/src/uss.ts +++ b/tests/system-integration/src/uss.ts @@ -8,15 +8,15 @@ * Copyright Contributors to the Zowe Project. */ -import { REMOTE_CONNECTION } from './constants'; +import { REMOTE_CONNECTION_CFG } from './config/TestConfig'; import { Shell, SshSession } from '@zowe/zos-uss-for-zowe-sdk'; function getSession(): SshSession { return new SshSession({ - hostname: REMOTE_CONNECTION.host, - port: REMOTE_CONNECTION.ssh_port, - user: REMOTE_CONNECTION.user, - password: REMOTE_CONNECTION.password, + hostname: REMOTE_CONNECTION_CFG.host, + port: REMOTE_CONNECTION_CFG.ssh_port, + user: REMOTE_CONNECTION_CFG.user, + password: REMOTE_CONNECTION_CFG.password, }); } diff --git a/tests/system-integration/src/utils.ts b/tests/system-integration/src/utils.ts index a350788a86..8dfeded3d0 100644 --- a/tests/system-integration/src/utils.ts +++ b/tests/system-integration/src/utils.ts @@ -10,6 +10,21 @@ import * as util from 'util'; import * as crypto from 'crypto'; +import * as path from 'path'; +import * as semver from 'semver'; + +export function findDirWalkingUpOrThrow(dirName: string) { + let tries = 10; // max walk-back of 10 directories + let currPath = path.resolve(__dirname); + while (tries > 0) { + if (path.basename(currPath) === dirName) { + return currPath; + } + currPath = path.resolve(currPath, '..'); + tries--; + } + throw new Error(`could not find path ${dirName}`); +} /** * Sleep for certain time @@ -21,19 +36,6 @@ export function sleep(ms: number): Promise { }); } -/** - * Check if there are any mandatory environment variable is missing. - * - * @param {Array} vars list of env variable names - */ -export function checkMandatoryEnvironmentVariables(vars: string[]): void { - for (const v of vars) { - if (!Object.keys(process.env).includes(v)) { - throw new Error(`Expected to find a value for ${v} in process.env`); - } - } -} - /** * Generate MD5 hash of a variable * @@ -42,3 +44,43 @@ export function checkMandatoryEnvironmentVariables(vars: string[]): void { export function calculateHash(obj: unknown): string { return crypto.createHash('md5').update(util.format('%j', obj)).digest('hex'); } + +export function processManifestVersion(version: string, repository: string = undefined): DownloadSpec { + /* Lifted from zowe-actions */ + const REPOSITORY_SNAPSHOT = 'libs-snapshot-local'; + const REPOSITORY_RELEASE = 'libs-release-local'; + let repoOut = repository; + let versionOut = ''; + const m1 = version.match(/^~([0-9]+)\.([0-9]+)\.([0-9]+)(-.+)?$/); + const m2 = version.match(/^\^([0-9]+)\.([0-9]+)\.([0-9]+)(-.+)?$/); + if (m1) { + if (repoOut == null) { + repoOut = m1[4] ? REPOSITORY_SNAPSHOT : REPOSITORY_RELEASE; + } + versionOut = `${m1[1]}.${m1[2]}.*${m1[4] ? m1[4] : ''}`; + } else if (m2) { + if (repoOut == null) { + repoOut = m2[4] ? REPOSITORY_SNAPSHOT : REPOSITORY_RELEASE; + } + versionOut = `${m2[1]}.*${m2[4] ? m2[4] : ''}`; + } else { + // parse semantic version, this may throw exception if version is invalid + if (semver.prerelease(version)) { + repoOut = `${repository ? repository : REPOSITORY_SNAPSHOT}`; + versionOut = `${semver.major(version)}.${semver.minor(version)}.${semver.patch(version)}-${semver.prerelease(version)}/`; + } else { + // this is formal release + repoOut = `${repository ? repository : REPOSITORY_RELEASE}`; + versionOut = `${version}`; + } + } + return { + repository: repoOut, + versionPattern: versionOut, + }; +} + +export type DownloadSpec = { + repository: string; + versionPattern: string; +}; diff --git a/tests/system-integration/src/zos/RemoteTestRunner.ts b/tests/system-integration/src/zos/RemoteTestRunner.ts new file mode 100644 index 0000000000..25e913991d --- /dev/null +++ b/tests/system-integration/src/zos/RemoteTestRunner.ts @@ -0,0 +1,111 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { Session } from '@zowe/imperative'; +import { getZosmfSession } from '../zowe'; +import * as uss from '../uss'; +import ZoweYamlType from '../types/ZoweYamlType'; +import { REMOTE_TEST_DIR, TEST_JOBS_RUN_FILE, THIS_TEST_ROOT_DIR } from '../config/TestConfig'; +import * as files from '@zowe/zos-files-for-zowe-sdk'; +import * as fs from 'fs-extra'; +import * as YAML from 'yaml'; +import * as jobs from '@zowe/zos-jobs-for-zowe-sdk'; +export class RemoteTestRunner { + private readonly yamlOutputDir: string; + private readonly spoolOutputDir: string; + private readonly session: Session; + private trackedJobs: jobs.IDownloadAllSpoolContentParms[] = []; + + constructor(testGroup: string) { + this.session = getZosmfSession(); + this.yamlOutputDir = `${THIS_TEST_ROOT_DIR}/.build/${testGroup}/yaml`; + this.spoolOutputDir = `${THIS_TEST_ROOT_DIR}/.build/${testGroup}/spool`; + fs.rmSync(this.yamlOutputDir, { recursive: true, force: true }); + fs.rmSync(this.spoolOutputDir, { recursive: true, force: true }); + fs.mkdirpSync(this.yamlOutputDir); + fs.mkdirpSync(this.spoolOutputDir); + } + + public async runRaw(command: string, cwd: string = REMOTE_TEST_DIR): Promise { + const output = await uss.runCommand(`${command}`, cwd); + // Any non-deterministic output should be cleaned up for test snapshots. + const cleanedOutput = output.data.replace(/(JOB[0-9]{5})/gim, 'JOB00000'); + return { + stdout: output.data, + cleanedStdout: cleanedOutput, + rc: output.rc, + }; + } + + public async collectSpool() { + const testName = expect.getState().currentTestName.replace(/\s/g, '_'); + for (const job of this.trackedJobs) { + jobs.DownloadJobs.downloadAllSpoolContentCommon(getZosmfSession(), { + ...job, + outDir: this.spoolOutputDir, + extension: '.' + testName.substring(0, 40), // arbitrarily chosen to keep things readable... + }); + } + this.trackedJobs = []; + } + + /** + * + * @param zoweYaml + * @param zweCommand + * @param cwd + */ + public async runZweTest(zoweYaml: ZoweYamlType, zweCommand: string, cwd: string = REMOTE_TEST_DIR): Promise { + let command = zweCommand.trim(); + if (command.startsWith('zwe')) { + command = command.replace(/zwe/, ''); + } + const testName = expect.getState().currentTestName.replace(/\s/g, '_').substring(0, 40); + const stringZoweYaml = YAML.stringify(zoweYaml); + + fs.writeFileSync(`${this.yamlOutputDir}/zowe.yaml.${testName}`, stringZoweYaml); + await files.Upload.fileToUssFile( + this.session, + `${this.yamlOutputDir}/zowe.yaml.${testName}`, + `${REMOTE_TEST_DIR}/zowe.test.yaml`, + { + binary: false, + }, + ); + + const output = await uss.runCommand(`./bin/zwe ${command} --config ${REMOTE_TEST_DIR}/zowe.test.yaml`, cwd); + + const matches = output.data.matchAll(/([A-Za-z0-9]{4,8})\((JOB[0-9]{1,5})\) completed with RC=(.*)$/gim); + + // for each match, 0=full matched string, 1=jobname, 2=jobid, 3=rc + for (const match of matches) { + fs.appendFileSync(TEST_JOBS_RUN_FILE, `${match[1]}:${match[2]}`); + this.trackedJobs.push({ + jobname: match[1], + jobid: match[2], + }); + } + + // Any non-deterministic output should be cleaned up for test snapshots. + const cleanedOutput = output.data.replace(/(JOB[0-9]{5})/gim, 'JOB00000'); + + return { + stdout: output.data, + cleanedStdout: cleanedOutput, + rc: output.rc, + }; + } +} + +export type TestOutput = { + stdout: string; + cleanedStdout: string; + rc: number; +}; diff --git a/tests/system-integration/src/zos/TestAwareFiles.ts b/tests/system-integration/src/zos/TestAwareFiles.ts new file mode 100644 index 0000000000..7cf8fb00fd --- /dev/null +++ b/tests/system-integration/src/zos/TestAwareFiles.ts @@ -0,0 +1,67 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import * as fs from 'fs-extra'; +import { getZosmfSession } from '../zowe'; +import * as files from '@zowe/zos-files-for-zowe-sdk'; +import { TEST_DATASETS_LINGERING_FILE } from '../config/TestConfig'; +export class TestAwareFiles { + private static readonly session = getZosmfSession(); + + constructor() {} + + public static async deleteAll(datasets: TestManagedDataset[]) { + const deleteOps: DeleteDs[] = []; + datasets.forEach((dataset) => { + if (dataset.type === DatasetType.VSAM) { + try { + deleteOps.push({ ds: dataset, action: files.Delete.vsam(this.session, dataset.name, { purge: true }) }); + } catch (error) { + // TODO: ? + } + } else if (dataset.type === DatasetType.ZFS) { + try { + deleteOps.push({ ds: dataset, action: files.Delete.zfs(this.session, dataset.name, {}) }); + } catch (error) { + // TODO: ? + } + } else if (dataset.type === DatasetType.NON_CLUSTER) { + try { + deleteOps.push({ ds: dataset, action: files.Delete.dataSet(this.session, dataset.name, {}) }); + } catch (error) { + // TODO: ? + } + } + }); + deleteOps.forEach(async (dsDelete) => { + const res = await dsDelete.action; + if (!res.success) { + console.log(`Issue deleting ${dsDelete.ds.name}. Will try again during teardown.`); + fs.appendFileSync(TEST_DATASETS_LINGERING_FILE, `${dsDelete.ds.name}:${dsDelete.ds.type}`); + } + }); + } +} + +type DeleteDs = { + ds: TestManagedDataset; + action: Promise; +}; + +export type TestManagedDataset = { + name: string; + type: DatasetType; +}; + +export enum DatasetType { + NON_CLUSTER, + VSAM, + ZFS, +} diff --git a/tests/system-integration/src/zowe.ts b/tests/system-integration/src/zowe.ts index f7429d5abd..dc5f575128 100644 --- a/tests/system-integration/src/zowe.ts +++ b/tests/system-integration/src/zowe.ts @@ -9,26 +9,18 @@ */ import { ConnectionPropsForSessCfg, Session } from '@zowe/imperative'; -import { REMOTE_CONNECTION } from './constants'; - -let cachedZosmfSession: Session; +import { REMOTE_CONNECTION_CFG } from './config/TestConfig'; export function getZosmfSession(): Session { - if (cachedZosmfSession != null) { - return cachedZosmfSession; - } - const sessCfg: unknown = { - hostname: REMOTE_CONNECTION.host, - port: REMOTE_CONNECTION.zosmf_port, - user: REMOTE_CONNECTION.user, - password: REMOTE_CONNECTION.password, - rejectUnauthorized: REMOTE_CONNECTION.zosmf_reject_unauthorized, + hostname: REMOTE_CONNECTION_CFG.host, + port: REMOTE_CONNECTION_CFG.zosmf_port, + user: REMOTE_CONNECTION_CFG.user, + password: REMOTE_CONNECTION_CFG.password, + rejectUnauthorized: REMOTE_CONNECTION_CFG.zosmf_reject_unauthorized, protocol: 'https', }; ConnectionPropsForSessCfg.resolveSessCfgProps(sessCfg, { $0: '', _: [] }, {}); - cachedZosmfSession = new Session(sessCfg); - console.log('returning not cached ' + cachedZosmfSession); - return cachedZosmfSession; + return new Session(sessCfg); } From 5c376df6ade5db468aa5196fd0258ab422c3cea5 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 17 May 2024 15:04:04 -0400 Subject: [PATCH 04/21] cleanup lib folder Signed-off-by: MarkAckert --- .../lib/src/ZoweYamlType.d.ts | 1184 ----------------- .../lib/src/ZoweYamlType.js | 18 - .../lib/src/__tests__/RemoteTestRunner.d.ts | 16 - .../lib/src/__tests__/RemoteTestRunner.js | 82 -- .../lib/src/__tests__/ZoweYaml.d.ts | 4 - .../lib/src/__tests__/ZoweYaml.js | 49 - .../lib/src/__tests__/init/apfauth.tests.d.ts | 0 .../lib/src/__tests__/init/apfauth.tests.js | 9 - .../src/__tests__/init/certificate.tests.d.ts | 0 .../src/__tests__/init/certificate.tests.js | 9 - .../src/__tests__/init/composite.tests.d.ts | 0 .../lib/src/__tests__/init/composite.tests.js | 9 - .../src/__tests__/init/generate.tests.d.ts | 0 .../lib/src/__tests__/init/generate.tests.js | 9 - .../lib/src/__tests__/init/mvs.tests.d.ts | 0 .../lib/src/__tests__/init/mvs.tests.js | 9 - .../src/__tests__/init/security.tests.d.ts | 0 .../lib/src/__tests__/init/security.tests.js | 9 - .../lib/src/__tests__/init/stc.tests.d.ts | 0 .../lib/src/__tests__/init/stc.tests.js | 9 - .../lib/src/__tests__/init/vsam.test.d.ts | 1 - .../lib/src/__tests__/init/vsam.test.js | 38 - .../system-integration/lib/src/constants.d.ts | 18 - tests/system-integration/lib/src/constants.js | 67 - .../lib/src/globalSetup.d.ts | 1 - .../system-integration/lib/src/globalSetup.js | 75 -- .../lib/src/globalTeardown.d.ts | 1 - .../lib/src/globalTeardown.js | 61 - tests/system-integration/lib/src/uss.d.ts | 4 - tests/system-integration/lib/src/uss.js | 44 - tests/system-integration/lib/src/utils.d.ts | 17 - tests/system-integration/lib/src/utils.js | 69 - tests/system-integration/lib/src/zowe.d.ts | 2 - tests/system-integration/lib/src/zowe.js | 35 - .../lib/tsconfig.tsbuildinfo | 1 - tests/system-integration/resources/.gitignore | 1 + 36 files changed, 1 insertion(+), 1850 deletions(-) delete mode 100644 tests/system-integration/lib/src/ZoweYamlType.d.ts delete mode 100644 tests/system-integration/lib/src/ZoweYamlType.js delete mode 100644 tests/system-integration/lib/src/__tests__/RemoteTestRunner.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/RemoteTestRunner.js delete mode 100644 tests/system-integration/lib/src/__tests__/ZoweYaml.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/ZoweYaml.js delete mode 100644 tests/system-integration/lib/src/__tests__/init/apfauth.tests.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/init/apfauth.tests.js delete mode 100644 tests/system-integration/lib/src/__tests__/init/certificate.tests.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/init/certificate.tests.js delete mode 100644 tests/system-integration/lib/src/__tests__/init/composite.tests.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/init/composite.tests.js delete mode 100644 tests/system-integration/lib/src/__tests__/init/generate.tests.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/init/generate.tests.js delete mode 100644 tests/system-integration/lib/src/__tests__/init/mvs.tests.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/init/mvs.tests.js delete mode 100644 tests/system-integration/lib/src/__tests__/init/security.tests.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/init/security.tests.js delete mode 100644 tests/system-integration/lib/src/__tests__/init/stc.tests.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/init/stc.tests.js delete mode 100644 tests/system-integration/lib/src/__tests__/init/vsam.test.d.ts delete mode 100644 tests/system-integration/lib/src/__tests__/init/vsam.test.js delete mode 100644 tests/system-integration/lib/src/constants.d.ts delete mode 100644 tests/system-integration/lib/src/constants.js delete mode 100644 tests/system-integration/lib/src/globalSetup.d.ts delete mode 100644 tests/system-integration/lib/src/globalSetup.js delete mode 100644 tests/system-integration/lib/src/globalTeardown.d.ts delete mode 100644 tests/system-integration/lib/src/globalTeardown.js delete mode 100644 tests/system-integration/lib/src/uss.d.ts delete mode 100644 tests/system-integration/lib/src/uss.js delete mode 100644 tests/system-integration/lib/src/utils.d.ts delete mode 100644 tests/system-integration/lib/src/utils.js delete mode 100644 tests/system-integration/lib/src/zowe.d.ts delete mode 100644 tests/system-integration/lib/src/zowe.js delete mode 100644 tests/system-integration/lib/tsconfig.tsbuildinfo create mode 100644 tests/system-integration/resources/.gitignore diff --git a/tests/system-integration/lib/src/ZoweYamlType.d.ts b/tests/system-integration/lib/src/ZoweYamlType.d.ts deleted file mode 100644 index 8c518a6674..0000000000 --- a/tests/system-integration/lib/src/ZoweYamlType.d.ts +++ /dev/null @@ -1,1184 +0,0 @@ -import { FromSchema } from 'json-schema-to-ts'; -declare const serverCommonSchema: { - $schema: 'https://json-schema.org/draft/2019-09/schema'; - $id: 'schemas/v2/server-common'; - title: 'Common types'; - description: 'Configuration types that are common in Zowe and may be referenced by multiple components'; - $defs: { - semverVersion: { - $anchor: 'zoweSemverVersion'; - type: 'string'; - description: 'A semantic version, see https://semver.org/'; - pattern: '^[0-9]*\\.[0-9]*\\.[0-9]*(-*[a-zA-Z][0-9a-zA-Z\\-\\.]*)?(\\+[0-9a-zA-Z\\-\\.]*)?$'; - }; - semverRange: { - $anchor: 'zoweSemverRange'; - type: 'string'; - description: 'A semantic version, see https://semver.org/'; - pattern: '^(([\\^\\~\\>\\<]?)|(>=?)|(<=?))[0-9]*\\.[0-9]*\\.[0-9]*(-*[a-zA-Z][0-9a-zA-Z\\-\\.]*)?(\\+[0-9a-zA-Z\\-\\.]*)?$'; - }; - dataset: { - $anchor: 'zoweDataset'; - type: 'string'; - description: 'A 44-char all caps dotted ZOS name'; - pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$'; - minLength: 3; - maxLength: 44; - }; - datasetMember: { - $anchor: 'zoweDatasetMember'; - type: 'string'; - description: 'A 1-8-char all caps dataset member name'; - pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$'; - minLength: 1; - maxLength: 8; - }; - jobname: { - $anchor: 'zoweJobname'; - type: 'string'; - pattern: '^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$'; - minLength: 3; - maxLength: 8; - }; - user: { - $anchor: 'zoweUser'; - type: 'string'; - pattern: '^([A-Z0-9$#@]){1,8}$'; - minLength: 1; - maxLength: 8; - }; - token: { - $anchor: 'zoweToken'; - type: 'string'; - pattern: '^([A-Z0-9$#@.]){1,32}$'; - minLength: 1; - maxLength: 32; - }; - path: { - $anchor: 'zowePath'; - type: 'string'; - minLength: 1; - maxLength: 1024; - }; - file: { - $anchor: 'zoweFile'; - type: 'string'; - minLength: 1; - maxLength: 256; - }; - reverseDomainNotation: { - $anchor: 'zoweReverseDomainNotation'; - type: 'string'; - pattern: '^[A-Za-z]{2,6}(\\.[A-Za-z0-9-]{1,62}[A-Za-z0-9])+$'; - }; - ipv4: { - $anchor: 'zoweIpv4'; - type: 'string'; - pattern: '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'; - }; - tcpPort: { - $anchor: 'zoweTcpPort'; - type: 'integer'; - description: 'TCP network port'; - minimum: 1024; - maximum: 65535; - }; - reservedTcpPort: { - $anchor: 'zoweReservedTcpPort'; - type: 'integer'; - description: 'Reserved TCP network ports. Can be used but discouraged due to their standardized use by common programs'; - deprecated: true; - minimum: 1; - maximum: 1023; - }; - }; -}; -declare const zoweSchema: { - $schema: 'https://json-schema.org/draft/2019-09/schema'; - $id: 'https://zowe.orgschemas/v2/server-base'; - title: 'Zowe configuration file'; - description: 'Configuration file for Zowe (zowe.org) version 2.'; - type: 'object'; - additionalProperties: false; - properties: { - zowe: { - type: 'object'; - additionalProperties: false; - properties: { - setup: { - type: 'object'; - additionalProperties: false; - description: 'Zowe setup configurations used by "zwe install" and "zwe init" commands.'; - properties: { - dataset: { - type: 'object'; - additionalProperties: false; - description: 'MVS data set related configurations'; - properties: { - prefix: { - type: 'string'; - description: 'Where Zowe MVS data sets will be installed'; - }; - proclib: { - type: 'string'; - description: 'PROCLIB where Zowe STCs will be copied over'; - }; - parmlib: { - type: 'string'; - description: 'Zowe PARMLIB'; - }; - parmlibMembers: { - type: 'object'; - additionalProperties: false; - description: 'Holds Zowe PARMLIB members for plugins'; - properties: { - zis: { - $ref: 'schemas/v2/server-common#zoweDatasetMember'; - description: 'PARMLIB member used by ZIS'; - }; - }; - }; - jcllib: { - type: 'string'; - description: 'JCL library where Zowe will store temporary JCLs during initialization'; - }; - loadlib: { - type: 'string'; - description: 'States the dataset where Zowe executable utilities are located'; - default: '.SZWELOAD'; - }; - authLoadlib: { - type: 'string'; - description: 'The dataset that contains any Zowe core code that needs to run APF-authorized, such as ZIS'; - default: '.SZWEAUTH'; - }; - authPluginLib: { - type: 'string'; - description: 'APF authorized LOADLIB for Zowe ZIS Plugins'; - }; - }; - }; - zis: { - type: 'object'; - additionalProperties: false; - description: 'ZIS related configurations. This setup is optional.'; - properties: { - parmlib: { - type: 'object'; - additionalProperties: false; - description: 'ZIS related PARMLIB configurations. This setup is optional.'; - properties: { - keys: { - type: 'object'; - additionalProperties: true; - description: 'Used to specify special ZIS key types with key-value pairs'; - examples: [ - 'key.sample.1: list', - 'key.sample.2: list' - ]; - }; - }; - }; - }; - }; - security: { - type: 'object'; - additionalProperties: false; - description: 'Security related configurations. This setup is optional.'; - properties: { - product: { - type: 'string'; - description: 'Security product name. Can be RACF, ACF2 or TSS'; - enum: [ - 'RACF', - 'ACF2', - 'TSS' - ]; - default: 'RACF'; - }; - groups: { - type: 'object'; - additionalProperties: false; - description: 'security group name'; - properties: { - admin: { - type: 'string'; - description: 'Zowe admin user group'; - default: 'ZWEADMIN'; - }; - stc: { - type: 'string'; - description: 'Zowe STC group'; - default: 'ZWEADMIN'; - }; - sysProg: { - type: 'string'; - description: 'Zowe SysProg group'; - default: 'ZWEADMIN'; - }; - }; - }; - users: { - type: 'object'; - additionalProperties: false; - description: 'security user name'; - properties: { - zowe: { - type: 'string'; - description: 'Zowe runtime user name of main service'; - default: 'ZWESVUSR'; - }; - zis: { - type: 'string'; - description: 'Zowe runtime user name of ZIS'; - default: 'ZWESIUSR'; - }; - }; - }; - stcs: { - type: 'object'; - additionalProperties: false; - description: 'STC names'; - properties: { - zowe: { - type: 'string'; - description: 'STC name of main service'; - default: 'ZWESLSTC'; - }; - zis: { - type: 'string'; - description: 'STC name of ZIS'; - default: 'ZWESISTC'; - }; - aux: { - type: 'string'; - description: 'STC name of Auxiliary Service'; - default: 'ZWESASTC'; - }; - }; - }; - }; - }; - certificate: { - type: 'object'; - additionalProperties: false; - if: { - properties: { - type: { - const: 'PKCS12'; - }; - }; - }; - then: { - required: [ - 'pkcs12' - ]; - }; - else: { - required: [ - 'keyring' - ]; - }; - description: 'Certificate related configurations'; - properties: { - type: { - type: 'string'; - description: 'Type of certificate storage method.'; - enum: [ - 'PKCS12', - 'JCEKS', - 'JCECCAKS', - 'JCERACFKS', - 'JCECCARACFKS', - 'JCEHYBRIDRACFKS' - ]; - default: 'PKCS12'; - }; - pkcs12: { - type: 'object'; - additionalProperties: false; - description: 'PKCS#12 keystore settings'; - properties: { - directory: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Keystore directory'; - }; - name: { - type: 'string'; - description: 'Certificate alias name. Note: please use all lower cases as alias.'; - default: 'localhost'; - }; - password: { - type: 'string'; - description: 'Keystore password'; - default: 'password'; - }; - caAlias: { - type: 'string'; - description: 'Alias name of self-signed certificate authority. Note: please use all lower cases as alias.'; - default: 'local_ca'; - }; - caPassword: { - type: 'string'; - description: 'Password of keystore stored self-signed certificate authority.'; - default: 'local_ca_password'; - }; - lock: { - type: 'boolean'; - description: 'Whether to restrict the permissions of the keystore after creation'; - }; - import: { - type: 'object'; - additionalProperties: false; - description: 'Configure this section if you want to import certificate from another PKCS#12 keystore.'; - properties: { - keystore: { - type: 'string'; - description: 'Existing PKCS#12 keystore which holds the certificate issued by external CA.'; - }; - password: { - type: 'string'; - description: 'Password of the above keystore'; - }; - alias: { - type: 'string'; - description: 'Certificate alias will be imported. Note: please use all lower cases as alias.'; - }; - }; - }; - }; - }; - keyring: { - type: 'object'; - additionalProperties: false; - description: 'Configure this section if you are using z/OS keyring'; - properties: { - owner: { - type: 'string'; - description: 'keyring owner. If this is empty, Zowe will use the user ID defined as zowe.setup.security.users.zowe.'; - }; - name: { - type: 'string'; - description: 'keyring name'; - }; - label: { - type: 'string'; - description: 'Label of Zowe certificate.'; - default: 'localhost'; - }; - caLabel: { - type: 'string'; - description: 'label of Zowe CA certificate.'; - default: 'localca'; - }; - connect: { - type: 'object'; - additionalProperties: false; - description: 'Configure this section if you want to connect existing certificate in keyring to Zowe.'; - properties: { - user: { - type: 'string'; - description: 'Current owner of the existing certificate, can be SITE or an user ID.'; - }; - label: { - type: 'string'; - description: 'Label of the existing certificate will be connected to Zowe keyring.'; - }; - }; - }; - import: { - type: 'object'; - additionalProperties: false; - description: 'Configure this section if you want to import existing certificate stored in data set to Zowe.'; - properties: { - dsName: { - type: 'string'; - description: 'Name of the data set holds the certificate issued by other CA. This data set should be in PKCS12 format and contain private key.'; - }; - password: { - type: 'string'; - description: 'Password for the PKCS12 data set.'; - }; - }; - }; - zOSMF: { - type: 'object'; - additionalProperties: false; - description: 'Configure this section if you want to trust z/OSMF certificate authority in Zowe keyring.'; - properties: { - ca: { - type: 'string'; - description: 'z/OSMF certificate authority alias'; - }; - user: { - type: 'string'; - description: 'z/OSMF user. Zowe initialization utility can detect alias of z/OSMF CA for RACF security system. The automated detection requires this z/OSMF user as input.'; - }; - }; - }; - }; - }; - dname: { - type: 'object'; - additionalProperties: false; - description: 'Certificate distinguish name'; - properties: { - caCommonName: { - type: 'string'; - description: 'Common name of certificate authority generated by Zowe.'; - }; - commonName: { - type: 'string'; - description: 'Common name of certificate generated by Zowe.'; - }; - orgUnit: { - type: 'string'; - description: 'Organization unit of certificate generated by Zowe.'; - }; - org: { - type: 'string'; - description: 'Organization of certificate generated by Zowe.'; - }; - locality: { - type: 'string'; - description: 'Locality of certificate generated by Zowe. This is usually the city name.'; - }; - state: { - type: 'string'; - description: 'State of certificate generated by Zowe. You can also put province name here.'; - }; - country: { - type: 'string'; - description: '2 letters country code of certificate generated by Zowe.'; - }; - }; - }; - validity: { - type: 'integer'; - description: 'Validity days for Zowe generated certificates'; - default: 3650; - }; - san: { - type: 'array'; - description: 'Domain names and IPs should be added into certificate SAN. If this field is not defined, `zwe init` command will use `zowe.externalDomains`.'; - items: { - type: 'string'; - }; - }; - importCertificateAuthorities: { - type: 'array'; - description: 'PEM format certificate authorities will also be imported and trusted. If you have other certificate authorities want to be trusted in Zowe keyring, list the certificate labels here. **NOTE**, due to the limitation of RACDCERT command, this field should contain maximum 2 entries.'; - items: { - type: 'string'; - }; - }; - }; - }; - vsam: { - type: 'object'; - additionalProperties: false; - description: 'VSAM configurations if you are using VSAM as Caching Service storage'; - properties: { - mode: { - type: 'string'; - description: 'VSAM data set with Record-Level-Sharing enabled or not'; - enum: [ - 'NONRLS', - 'RLS' - ]; - default: 'NONRLS'; - }; - volume: { - type: 'string'; - description: 'Volume name if you are using VSAM in NONRLS mode'; - }; - storageClass: { - type: 'string'; - description: 'Storage class name if you are using VSAM in RLS mode'; - }; - }; - }; - }; - }; - runtimeDirectory: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to where you installed Zowe.'; - }; - logDirectory: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to where you want to store Zowe log files.'; - }; - workspaceDirectory: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to where you want to store Zowe workspace files. Zowe workspace are used by Zowe component runtime to store temporary files.'; - }; - extensionDirectory: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to where you want to store Zowe extensions. "zwe components install" will install new extensions into this directory.'; - }; - job: { - type: 'object'; - additionalProperties: false; - description: 'Customize your Zowe z/OS JES job.'; - properties: { - name: { - type: 'string'; - description: 'Job name of Zowe primary ZWESLSTC started task.'; - }; - prefix: { - type: 'string'; - description: 'A short prefix to customize address spaces created by Zowe job.'; - }; - }; - }; - network: { - $ref: '#/$defs/networkSettings'; - }; - extensionRegistry: { - type: 'object'; - description: 'Defines optional configuration for downloading extensions from an online or offline registry'; - required: [ - 'defaultHandler', - 'handlers' - ]; - properties: { - defaultHandler: { - type: 'string'; - description: 'The name of a handler specified in the handlers section. Will be used as the default for \'zwe components\' commands'; - }; - handlers: { - type: 'object'; - patternProperties: { - '^.*$': { - $ref: '#/$defs/registryHandler'; - }; - }; - }; - }; - }; - launcher: { - type: 'object'; - description: 'Set default behaviors of how the Zowe launcher will handle components'; - additionalProperties: false; - properties: { - restartIntervals: { - type: 'array'; - description: 'Intervals of seconds to wait before restarting a component if it fails before the minUptime value.'; - items: { - type: 'integer'; - }; - }; - minUptime: { - type: 'integer'; - default: 90; - description: 'The minimum amount of seconds before a component is considered running and the restart counter is reset.'; - }; - shareAs: { - type: 'string'; - description: 'Determines which SHAREAS mode should be used when starting a component'; - enum: [ - 'no', - 'yes', - 'must', - '' - ]; - default: 'yes'; - }; - unsafeDisableZosVersionCheck: { - type: 'boolean'; - description: 'Used to allow Zowe to warn, instead of error, when running on a version of z/OS that this version of Zowe hasn\'t been verified as working with'; - default: false; - }; - }; - }; - rbacProfileIdentifier: { - type: 'string'; - description: 'An ID used for determining resource names used in RBAC authorization checks'; - }; - cookieIdentifier: { - type: 'string'; - description: 'An ID that can be used by servers that distinguish their cookies from unrelated Zowe installs'; - }; - externalDomains: { - type: 'array'; - description: 'List of domain names of how you access Zowe from your local computer.'; - minItems: 1; - uniqueItems: true; - items: { - type: [ - 'string' - ]; - }; - }; - externalPort: { - $ref: '#/$defs/port'; - description: 'Port number of how you access Zowe APIML Gateway from your local computer.'; - }; - environments: { - type: 'object'; - description: 'Global environment variables can be applied to all Zowe high availability instances.'; - }; - launchScript: { - type: 'object'; - description: 'Customize Zowe launch scripts (zwe commands) behavior.'; - properties: { - logLevel: { - type: 'string'; - description: 'Log level for Zowe launch scripts.'; - enum: [ - '', - 'info', - 'debug', - 'trace' - ]; - }; - onComponentConfigureFail: { - type: 'string'; - description: 'Chooses how \'zwe start\' behaves if a component configure script fails'; - enum: [ - 'warn', - 'exit' - ]; - default: 'warn'; - }; - }; - }; - certificate: { - $ref: '#/$defs/certificate'; - description: 'Zowe certificate setup.'; - }; - verifyCertificates: { - type: 'string'; - description: 'Customize how Zowe should validate certificates used by components or other services.'; - enum: [ - 'STRICT', - 'NONSTRICT', - 'DISABLED' - ]; - }; - sysMessages: { - type: 'array'; - description: 'List of Zowe message portions when matched will be additionally logged into the system\'s log (such as syslog on z/OS). Note: Some messages extremely early in the Zowe lifecycle may not be added to the system\'s log'; - uniqueItems: true; - items: { - type: 'string'; - }; - }; - useConfigmgr: { - type: 'boolean'; - default: false; - description: 'Determines whether or not to use the features of configmgr such as multi-config, parmlib config, config templates, and schema validation. This effects the zwe command.'; - }; - configmgr: { - type: 'object'; - description: 'Controls how configmgr will be used by zwe'; - required: [ - 'validation' - ]; - properties: { - validation: { - type: 'string'; - enum: [ - 'STRICT', - 'COMPONENT-COMPAT' - ]; - description: 'States how configmgr will do validation: Will it quit on any error (STRICT) or quit on any error except the case of a component not having a schema file (COMPONENT-COMPAT)'; - }; - }; - }; - }; - }; - java: { - type: 'object'; - properties: { - home: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to Java home directory.'; - }; - }; - }; - node: { - type: 'object'; - properties: { - home: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to node.js home directory.'; - }; - }; - }; - zOSMF: { - type: 'object'; - additionalProperties: false; - properties: { - host: { - type: 'string'; - description: 'Host or domain name of your z/OSMF instance.'; - }; - port: { - $ref: '#/$defs/port'; - description: 'Port number of your z/OSMF instance.'; - }; - scheme: { - $ref: '#/$defs/scheme'; - description: 'Scheme used to connect to z/OSMF instance. Optional for outbout AT-TLS, defaults to https'; - }; - applId: { - type: 'string'; - description: 'Appl ID of your z/OSMF instance.'; - }; - }; - }; - components: { - type: 'object'; - patternProperties: { - '^.*$': { - $ref: '#/$defs/component'; - }; - }; - }; - haInstances: { - type: 'object'; - patternProperties: { - '^.*$': { - type: 'object'; - description: 'Configuration of Zowe high availability instance.'; - required: [ - 'hostname', - 'sysname' - ]; - properties: { - hostname: { - type: 'string'; - description: 'Host name of the Zowe high availability instance. This is hostname for internal communications.'; - }; - sysname: { - type: 'string'; - description: 'z/OS system name of the Zowe high availability instance. Some JES command will be routed to this system name.'; - }; - components: { - type: 'object'; - patternProperties: { - '^.*$': { - $ref: '#/$defs/component'; - }; - }; - }; - }; - }; - }; - }; - }; - $defs: { - port: { - type: 'integer'; - minimum: 0; - maximum: 65535; - }; - scheme: { - type: 'string'; - enum: [ - 'http', - 'https' - ]; - default: 'https'; - }; - certificate: { - oneOf: [ - { - $ref: '#/$defs/pkcs12-certificate'; - }, - { - $ref: '#/$defs/keyring-certificate'; - } - ]; - }; - 'pkcs12-certificate': { - type: 'object'; - additionalProperties: false; - required: [ - 'keystore', - 'truststore', - 'pem' - ]; - properties: { - keystore: { - type: 'object'; - additionalProperties: false; - description: 'Certificate keystore.'; - required: [ - 'type', - 'file', - 'alias' - ]; - properties: { - type: { - type: 'string'; - description: 'Keystore type.'; - const: 'PKCS12'; - }; - file: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to your PKCS#12 keystore.'; - }; - password: { - type: 'string'; - description: 'Password of your PKCS#12 keystore.'; - }; - alias: { - type: 'string'; - description: 'Certificate alias name of defined in your PKCS#12 keystore'; - }; - }; - }; - truststore: { - type: 'object'; - additionalProperties: false; - description: 'Certificate truststore.'; - required: [ - 'type', - 'file' - ]; - properties: { - type: { - type: 'string'; - description: 'Truststore type.'; - const: 'PKCS12'; - }; - file: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to your PKCS#12 keystore.'; - }; - password: { - type: 'string'; - description: 'Password of your PKCS#12 keystore.'; - }; - }; - }; - pem: { - type: 'object'; - additionalProperties: false; - description: 'Certificate in PEM format.'; - required: [ - 'key', - 'certificate' - ]; - properties: { - key: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to the certificate private key stored in PEM format.'; - }; - certificate: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Path to the certificate stored in PEM format.'; - }; - certificateAuthorities: { - description: 'List of paths to the certificate authorities stored in PEM format.'; - oneOf: [ - { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Paths to the certificate authorities stored in PEM format. You can separate multiple certificate authorities by comma.'; - }, - { - type: 'array'; - description: 'Path to the certificate authority stored in PEM format.'; - items: { - $ref: 'schemas/v2/server-common#zowePath'; - }; - } - ]; - }; - }; - }; - }; - }; - 'keyring-certificate': { - type: 'object'; - additionalProperties: false; - required: [ - 'keystore', - 'truststore' - ]; - properties: { - keystore: { - type: 'object'; - additionalProperties: false; - description: 'Certificate keystore.'; - required: [ - 'type', - 'file', - 'alias' - ]; - properties: { - type: { - type: 'string'; - description: 'Keystore type.'; - enum: [ - 'JCEKS', - 'JCECCAKS', - 'JCERACFKS', - 'JCECCARACFKS', - 'JCEHYBRIDRACFKS' - ]; - }; - file: { - type: 'string'; - description: 'Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.'; - pattern: '^safkeyring://.*'; - }; - password: { - type: 'string'; - description: 'Literally \'password\' may be needed when using keyrings for compatibility with java servers.'; - enum: [ - '', - 'password' - ]; - }; - alias: { - type: 'string'; - description: 'Certificate label of z/OS keyring. Case sensitivity and spaces matter.'; - }; - }; - }; - truststore: { - type: 'object'; - additionalProperties: false; - description: 'Certificate truststore.'; - required: [ - 'type', - 'file' - ]; - properties: { - type: { - type: 'string'; - description: 'Truststore type.'; - enum: [ - 'JCEKS', - 'JCECCAKS', - 'JCERACFKS', - 'JCECCARACFKS', - 'JCEHYBRIDRACFKS' - ]; - }; - file: { - type: 'string'; - description: 'Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.'; - pattern: '^safkeyring://.*'; - }; - password: { - type: 'string'; - description: 'Literally \'password\' may be needed when using keyrings for compatibility with java servers.'; - enum: [ - '', - 'password' - ]; - }; - }; - }; - pem: { - type: 'object'; - additionalProperties: false; - description: 'Certificate in PEM format.'; - properties: { - key: { - type: 'string'; - description: 'Path to the certificate private key stored in PEM format.'; - }; - certificate: { - type: 'string'; - description: 'Path to the certificate stored in PEM format.'; - }; - certificateAuthorities: { - description: 'List of paths to the certificate authorities stored in PEM format.'; - oneOf: [ - { - type: 'string'; - description: 'Paths to the certificate authorities stored in PEM format. You can separate multiple certificate authorities by comma.'; - }, - { - type: 'array'; - description: 'Path to the certificate authority stored in PEM format.'; - items: { - type: 'string'; - }; - } - ]; - }; - }; - }; - }; - }; - component: { - $anchor: 'zoweComponent'; - type: 'object'; - properties: { - enabled: { - type: 'boolean'; - description: 'Whether to enable or disable this component'; - default: false; - }; - certificate: { - $ref: '#/$defs/certificate'; - description: 'Certificate for current component.'; - }; - launcher: { - type: 'object'; - description: 'Set behavior of how the Zowe launcher will handle this particular component'; - additionalProperties: true; - properties: { - restartIntervals: { - type: 'array'; - description: 'Intervals of seconds to wait before restarting a component if it fails before the minUptime value.'; - items: { - type: 'integer'; - }; - }; - minUptime: { - type: 'integer'; - default: 90; - description: 'The minimum amount of seconds before a component is considered running and the restart counter is reset.'; - }; - shareAs: { - type: 'string'; - description: 'Determines which SHAREAS mode should be used when starting a component'; - enum: [ - 'no', - 'yes', - 'must', - '' - ]; - default: 'yes'; - }; - }; - }; - zowe: { - type: 'object'; - description: 'Component level overrides for top level Zowe network configuration.'; - additionalProperties: true; - properties: { - network: { - $ref: '#/$defs/networkSettings'; - }; - job: { - $ref: '#/$defs/componentJobSettings'; - }; - }; - }; - }; - }; - componentJobSettings: { - $anchor: 'componentJobSettings'; - type: 'object'; - description: 'Component level overrides for job execution behavior'; - properties: { - suffix: { - type: 'string'; - description: 'Can be used by components to declare a jobname suffix to append to their job. This is not currently used by Zowe itself, it is up to components to use this value if desired. Zowe may use this value in the future.'; - }; - }; - }; - tlsSettings: { - $anchor: 'tlsSettings'; - type: 'object'; - properties: { - ciphers: { - type: 'array'; - description: 'Acceptable TLS cipher suites for network connections, in IANA format.'; - items: { - type: 'string'; - }; - }; - curves: { - type: 'array'; - description: 'Acceptable key exchange elliptic curves for network connections.'; - items: { - type: 'string'; - }; - }; - maxTls: { - type: 'string'; - enum: [ - 'TLSv1.2', - 'TLSv1.3' - ]; - default: 'TLSv1.3'; - description: 'Maximum TLS version allowed for network connections.'; - }; - minTls: { - type: 'string'; - enum: [ - 'TLSv1.2', - 'TLSv1.3' - ]; - default: 'TLSv1.2'; - description: 'Minimum TLS version allowed for network connections, and less than or equal to network.maxTls.'; - }; - }; - }; - networkSettings: { - type: 'object'; - $anchor: 'networkSettings'; - additionalProperties: false; - description: 'Optional, advanced network configuration parameters'; - properties: { - server: { - type: 'object'; - additionalProperties: false; - description: 'Optional, advanced network configuration parameters for Zowe servers'; - properties: { - tls: { - $ref: '#/$defs/tlsSettings'; - }; - listenAddresses: { - type: 'array'; - description: 'The IP addresses which all of the Zowe servers will be binding on and listening to. Some servers may only support listening on the first element.'; - items: { - $ref: 'schemas/v2/server-common#zoweIpv4'; - }; - }; - vipaIp: { - type: 'string'; - description: 'The IP address which all of the Zowe servers will be binding to. If you are using multiple DIPVA addresses, do not use this option.'; - }; - validatePortFree: { - type: 'boolean'; - default: true; - description: 'Whether or not to ensure that the port a server is about to use is available. Usually, servers will know this when they attempt to bind to a port, so this option allows you to disable the additional verification step.'; - }; - }; - }; - client: { - type: 'object'; - additionalProperties: false; - description: 'Optional, advanced network configuration parameters for Zowe servers when sending requests as clients.'; - properties: { - tls: { - $ref: '#/$defs/tlsSettings'; - }; - }; - }; - }; - }; - registryHandler: { - $anchor: 'registryHandler'; - type: 'object'; - required: [ - 'registry', - 'path' - ]; - properties: { - registry: { - type: 'string'; - description: 'The location of the default registry for this handler. It could be a URL, path, dataset, whatever this handler supports'; - }; - path: { - $ref: 'schemas/v2/server-common#zowePath'; - description: 'Unix file path to the configmgr-compatible JS file which implements the handler API'; - }; - }; - }; - }; -}; -type ZoweYamlType = FromSchema; -export default ZoweYamlType; diff --git a/tests/system-integration/lib/src/ZoweYamlType.js b/tests/system-integration/lib/src/ZoweYamlType.js deleted file mode 100644 index 3673057b90..0000000000 --- a/tests/system-integration/lib/src/ZoweYamlType.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const zowe_yaml_schema_json_1 = __importDefault(require("../../../schemas/zowe-yaml-schema.json")); -const server_common_json_1 = __importDefault(require("../../../schemas/server-common.json")); -const serverCommonSchema = server_common_json_1.default; -const zoweSchema = zowe_yaml_schema_json_1.default; diff --git a/tests/system-integration/lib/src/__tests__/RemoteTestRunner.d.ts b/tests/system-integration/lib/src/__tests__/RemoteTestRunner.d.ts deleted file mode 100644 index bdf2543456..0000000000 --- a/tests/system-integration/lib/src/__tests__/RemoteTestRunner.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import ZoweYamlType from '../ZoweYamlType'; -export declare class RemoteTestRunner { - private session; - RemoteTestRunner(): void; - /** - * - * @param zoweYaml - * @param zweCommand - * @param cwd - */ - runTest(zoweYaml: ZoweYamlType, zweCommand: string, cwd?: string): Promise; -} -export type TestOutput = { - stdout: string; - rc: number; -}; diff --git a/tests/system-integration/lib/src/__tests__/RemoteTestRunner.js b/tests/system-integration/lib/src/__tests__/RemoteTestRunner.js deleted file mode 100644 index cb7c81bff5..0000000000 --- a/tests/system-integration/lib/src/__tests__/RemoteTestRunner.js +++ /dev/null @@ -1,82 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RemoteTestRunner = void 0; -const zowe_1 = require("../zowe"); -const uss = __importStar(require("../uss")); -const constants_1 = require("../constants"); -const files = __importStar(require("@zowe/zos-files-for-zowe-sdk")); -const fs = __importStar(require("fs-extra")); -const YAML = __importStar(require("yaml")); -class RemoteTestRunner { - RemoteTestRunner() { - console.log('init'); - this.session = (0, zowe_1.getZosmfSession)(); - } - /** - * - * @param zoweYaml - * @param zweCommand - * @param cwd - */ - runTest(zoweYaml_1, zweCommand_1) { - return __awaiter(this, arguments, void 0, function* (zoweYaml, zweCommand, cwd = constants_1.REMOTE_TEST_DIR) { - let command = zweCommand.trim(); - if (command.startsWith('zwe')) { - command = command.replace(/zwe/, ''); - } - const testName = expect.getState().currentTestName; - const stringZoweYaml = YAML.stringify(zoweYaml); - fs.writeFileSync(`${constants_1.TEST_YAML_DIR}/zowe.yaml.${testName}`, stringZoweYaml); - yield files.Upload.bufferToUssFile(this.session, `${constants_1.REMOTE_TEST_DIR}/zowe.test.yaml`, Buffer.from(stringZoweYaml), { - binary: false, - }); - const output = yield uss.runCommand(`./bin/zwe ${command} --config ${constants_1.REMOTE_TEST_DIR}/zowe.test.yaml`, cwd); - return { - stdout: output.data, - rc: output.rc, - }; - }); - } -} -exports.RemoteTestRunner = RemoteTestRunner; diff --git a/tests/system-integration/lib/src/__tests__/ZoweYaml.d.ts b/tests/system-integration/lib/src/__tests__/ZoweYaml.d.ts deleted file mode 100644 index e804f3a8f6..0000000000 --- a/tests/system-integration/lib/src/__tests__/ZoweYaml.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import ZoweYamlType from '../ZoweYamlType'; -export declare class ZoweYaml { - static basicZoweYaml(): ZoweYamlType; -} diff --git a/tests/system-integration/lib/src/__tests__/ZoweYaml.js b/tests/system-integration/lib/src/__tests__/ZoweYaml.js deleted file mode 100644 index 0603f031a9..0000000000 --- a/tests/system-integration/lib/src/__tests__/ZoweYaml.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ZoweYaml = void 0; -const yaml = __importStar(require("yaml")); -const constants_1 = require("../constants"); -const fs = __importStar(require("fs-extra")); -class ZoweYaml { - /* public updateField(field: string, value: string) { - // this.zoweYaml[field] = value; - }*/ - static basicZoweYaml() { - const fileContents = fs.readFileSync(constants_1.THIS_TEST_BASE_YAML, 'utf8'); - const zoweYaml = yaml.parse(fileContents); - return zoweYaml; - } -} -exports.ZoweYaml = ZoweYaml; diff --git a/tests/system-integration/lib/src/__tests__/init/apfauth.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/apfauth.tests.d.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/system-integration/lib/src/__tests__/init/apfauth.tests.js b/tests/system-integration/lib/src/__tests__/init/apfauth.tests.js deleted file mode 100644 index 567479c4b2..0000000000 --- a/tests/system-integration/lib/src/__tests__/init/apfauth.tests.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ diff --git a/tests/system-integration/lib/src/__tests__/init/certificate.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/certificate.tests.d.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/system-integration/lib/src/__tests__/init/certificate.tests.js b/tests/system-integration/lib/src/__tests__/init/certificate.tests.js deleted file mode 100644 index 567479c4b2..0000000000 --- a/tests/system-integration/lib/src/__tests__/init/certificate.tests.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ diff --git a/tests/system-integration/lib/src/__tests__/init/composite.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/composite.tests.d.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/system-integration/lib/src/__tests__/init/composite.tests.js b/tests/system-integration/lib/src/__tests__/init/composite.tests.js deleted file mode 100644 index 567479c4b2..0000000000 --- a/tests/system-integration/lib/src/__tests__/init/composite.tests.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ diff --git a/tests/system-integration/lib/src/__tests__/init/generate.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/generate.tests.d.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/system-integration/lib/src/__tests__/init/generate.tests.js b/tests/system-integration/lib/src/__tests__/init/generate.tests.js deleted file mode 100644 index 567479c4b2..0000000000 --- a/tests/system-integration/lib/src/__tests__/init/generate.tests.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ diff --git a/tests/system-integration/lib/src/__tests__/init/mvs.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/mvs.tests.d.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/system-integration/lib/src/__tests__/init/mvs.tests.js b/tests/system-integration/lib/src/__tests__/init/mvs.tests.js deleted file mode 100644 index 567479c4b2..0000000000 --- a/tests/system-integration/lib/src/__tests__/init/mvs.tests.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ diff --git a/tests/system-integration/lib/src/__tests__/init/security.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/security.tests.d.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/system-integration/lib/src/__tests__/init/security.tests.js b/tests/system-integration/lib/src/__tests__/init/security.tests.js deleted file mode 100644 index 567479c4b2..0000000000 --- a/tests/system-integration/lib/src/__tests__/init/security.tests.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ diff --git a/tests/system-integration/lib/src/__tests__/init/stc.tests.d.ts b/tests/system-integration/lib/src/__tests__/init/stc.tests.d.ts deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/system-integration/lib/src/__tests__/init/stc.tests.js b/tests/system-integration/lib/src/__tests__/init/stc.tests.js deleted file mode 100644 index 567479c4b2..0000000000 --- a/tests/system-integration/lib/src/__tests__/init/stc.tests.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ diff --git a/tests/system-integration/lib/src/__tests__/init/vsam.test.d.ts b/tests/system-integration/lib/src/__tests__/init/vsam.test.d.ts deleted file mode 100644 index cb0ff5c3b5..0000000000 --- a/tests/system-integration/lib/src/__tests__/init/vsam.test.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/tests/system-integration/lib/src/__tests__/init/vsam.test.js b/tests/system-integration/lib/src/__tests__/init/vsam.test.js deleted file mode 100644 index 25f1937c21..0000000000 --- a/tests/system-integration/lib/src/__tests__/init/vsam.test.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const RemoteTestRunner_1 = require("../RemoteTestRunner"); -const ZoweYaml_1 = require("../ZoweYaml"); -const testSuiteName = 'Dummy tests'; -describe(testSuiteName, () => { - let testRunner; - beforeEach(() => { - testRunner = new RemoteTestRunner_1.RemoteTestRunner(); - }); - it('a test', () => __awaiter(void 0, void 0, void 0, function* () { - console.log('heres a log'); - const cfgYaml = ZoweYaml_1.ZoweYaml.basicZoweYaml(); - cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; - const result = yield testRunner.runTest(cfgYaml, '--help'); - expect(result.rc).toBe(0); - expect(result.stdout).not.toBeNull(); - expect(result.stdout).toMatchSnapshot(); - })); -}); diff --git a/tests/system-integration/lib/src/constants.d.ts b/tests/system-integration/lib/src/constants.d.ts deleted file mode 100644 index 9ae78443a2..0000000000 --- a/tests/system-integration/lib/src/constants.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -export declare const ZOWE_FMID = "AZWE002"; -export declare const REPO_ROOT_DIR: string; -export declare const THIS_TEST_ROOT_DIR: string; -export declare const THIS_TEST_BASE_YAML: string; -export declare const INSTALL_TEST_ROOT_DIR: string; -export declare const TEST_YAML_DIR: string; -export declare const TEST_DATASETS_HLQ: string; -export declare const TEST_JOBS_RUN_FILE: string; -export declare const CLEANUP_AFTER_TESTS: boolean; -export declare const REMOTE_TEST_DIR: string; -export declare const REMOTE_CONNECTION: { - host: string; - ssh_port: number; - zosmf_port: string; - user: string; - password: string; - zosmf_reject_unauthorized: boolean; -}; diff --git a/tests/system-integration/lib/src/constants.js b/tests/system-integration/lib/src/constants.js deleted file mode 100644 index 69bf8a65c5..0000000000 --- a/tests/system-integration/lib/src/constants.js +++ /dev/null @@ -1,67 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.REMOTE_CONNECTION = exports.REMOTE_TEST_DIR = exports.CLEANUP_AFTER_TESTS = exports.TEST_JOBS_RUN_FILE = exports.TEST_DATASETS_HLQ = exports.TEST_YAML_DIR = exports.INSTALL_TEST_ROOT_DIR = exports.THIS_TEST_BASE_YAML = exports.THIS_TEST_ROOT_DIR = exports.REPO_ROOT_DIR = exports.ZOWE_FMID = void 0; -const path = __importStar(require("path")); -const util = __importStar(require("./utils")); -const yn_1 = __importDefault(require("yn")); -// import Debug from 'debug'; -// const debug = Debug('zowe-install-test:constants'); -// the FMID we will use to test PTF -exports.ZOWE_FMID = 'AZWE002'; -exports.REPO_ROOT_DIR = path.resolve(__dirname, '../../../'); -exports.THIS_TEST_ROOT_DIR = path.resolve(__dirname, '../'); // JEST runs in the src dir -exports.THIS_TEST_BASE_YAML = path.resolve(exports.THIS_TEST_ROOT_DIR, '.build/zowe.yaml.base'); -exports.INSTALL_TEST_ROOT_DIR = path.resolve(__dirname, '../'); -exports.TEST_YAML_DIR = path.resolve(exports.THIS_TEST_ROOT_DIR, '.build', 'zowe_yaml_tests'); -exports.TEST_DATASETS_HLQ = process.env['TEST_DS_HLQ'] || 'ZWETESTS'; -exports.TEST_JOBS_RUN_FILE = path.resolve(exports.THIS_TEST_ROOT_DIR, '.build', 'jobs-run.txt'); -const cleanup = (0, yn_1.default)(process.env['CLEANUP_AFTER_TESTS']); -exports.CLEANUP_AFTER_TESTS = cleanup != null ? cleanup : true; -const envVars = ['SSH_HOST', 'SSH_PORT', 'SSH_USER', 'SSH_PASSWORD', 'ZOSMF_PORT', 'REMOTE_TEST_ROOT_DIR']; -util.checkMandatoryEnvironmentVariables(envVars); -exports.REMOTE_TEST_DIR = process.env['REMOTE_TEST_ROOT_DIR'] || '/ZOWE/zwe-system-test'; -const ru = (0, yn_1.default)(process.env['ZOSMF_REJECT_UNAUTHORIZED']); -exports.REMOTE_CONNECTION = { - host: process.env['SSH_HOST'], - ssh_port: Number(process.env['SSH_PORT']), - zosmf_port: process.env['ZOSMF_PORT'], - user: process.env['SSH_USER'], - password: process.env['SSH_PASSWORD'], - zosmf_reject_unauthorized: ru != null ? ru : false, -}; -// debug(`process.env >>>>>>>>>>>>>>>>>>>>>>>>>>\n${JSON.stringify(process.env)}\n<<<<<<<<<<<<<<<<<<<<<<<`); diff --git a/tests/system-integration/lib/src/globalSetup.d.ts b/tests/system-integration/lib/src/globalSetup.d.ts deleted file mode 100644 index cb0ff5c3b5..0000000000 --- a/tests/system-integration/lib/src/globalSetup.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/tests/system-integration/lib/src/globalSetup.js b/tests/system-integration/lib/src/globalSetup.js deleted file mode 100644 index 6fa115a346..0000000000 --- a/tests/system-integration/lib/src/globalSetup.js +++ /dev/null @@ -1,75 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const uss = __importStar(require("./uss")); -const files = __importStar(require("@zowe/zos-files-for-zowe-sdk")); -const constants_1 = require("./constants"); -const fs = __importStar(require("fs-extra")); -const zowe_1 = require("./zowe"); -module.exports = () => __awaiter(void 0, void 0, void 0, function* () { - // check directories and configmgr look OK - console.log(`${constants_1.REPO_ROOT_DIR}`); - if (!fs.existsSync(`${constants_1.REPO_ROOT_DIR}/bin/zwe`)) { - throw new Error('Could not locate the zwe tool locally. Ensure you are running tests from the test project root'); - } - const configmgrPax = fs.readdirSync(`${constants_1.THIS_TEST_ROOT_DIR}/.build`).find((item) => /configmgr.*\.pax/g.test(item)); - if (configmgrPax == null) { - throw new Error('Could not locate a configmgr pax in the .build directory'); - } - console.log(`Using example-zowe.yaml as base for future zowe.yaml modifications...`); - fs.copyFileSync(`${constants_1.REPO_ROOT_DIR}/example-zowe.yaml`, constants_1.THIS_TEST_BASE_YAML); - fs.mkdirpSync(`${constants_1.THIS_TEST_ROOT_DIR}/.build/zowe`); - fs.mkdirpSync(`${constants_1.TEST_YAML_DIR}`); - console.log('Setting up remote server...'); - yield uss.runCommand(`mkdir -p ${constants_1.REMOTE_TEST_DIR}`); - console.log(`Uploading ${configmgrPax} to ${constants_1.REMOTE_TEST_DIR}/configmgr.pax ...`); - yield files.Upload.fileToUssFile((0, zowe_1.getZosmfSession)(), `${constants_1.THIS_TEST_ROOT_DIR}/.build/${configmgrPax}`, `${constants_1.REMOTE_TEST_DIR}/configmgr.pax`, { binary: true }); - console.log(`Uploading ${constants_1.REPO_ROOT_DIR}/bin to ${constants_1.REMOTE_TEST_DIR}/bin...`); - yield files.Upload.dirToUSSDirRecursive((0, zowe_1.getZosmfSession)(), `${constants_1.REPO_ROOT_DIR}/bin`, `${constants_1.REMOTE_TEST_DIR}/bin/`, { - binary: false, - includeHidden: true, - }); - console.log(`Unpacking configmgr and placing it in bin/utils ...`); - yield uss.runCommand(`pax -ppx -rf configmgr.pax && mv configmgr bin/utils/`, `${constants_1.REMOTE_TEST_DIR}`); - console.log('Remote server setup complete'); -}); diff --git a/tests/system-integration/lib/src/globalTeardown.d.ts b/tests/system-integration/lib/src/globalTeardown.d.ts deleted file mode 100644 index cb0ff5c3b5..0000000000 --- a/tests/system-integration/lib/src/globalTeardown.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/tests/system-integration/lib/src/globalTeardown.js b/tests/system-integration/lib/src/globalTeardown.js deleted file mode 100644 index 55eb2ba4c0..0000000000 --- a/tests/system-integration/lib/src/globalTeardown.js +++ /dev/null @@ -1,61 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const constants_1 = require("./constants"); -const uss = __importStar(require("./uss")); -const fs = __importStar(require("fs-extra")); -module.exports = () => __awaiter(void 0, void 0, void 0, function* () { - if (!constants_1.CLEANUP_AFTER_TESTS) { - return; - } - yield uss.runCommand(`rm -rf ${constants_1.REMOTE_TEST_DIR}`); - if (fs.existsSync(`${constants_1.TEST_JOBS_RUN_FILE}`)) { - fs.readFileSync(`${constants_1.TEST_JOBS_RUN_FILE}`, 'utf8') - .split('\n') - .forEach((job) => { - // - console.log('Purge ' + job); - }); - } - fs.rmdirSync(constants_1.TEST_YAML_DIR); -}); diff --git a/tests/system-integration/lib/src/uss.d.ts b/tests/system-integration/lib/src/uss.d.ts deleted file mode 100644 index 512ac227c9..0000000000 --- a/tests/system-integration/lib/src/uss.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export declare function runCommand(command: string, cwd?: string): Promise<{ - data: string; - rc: any; -}>; diff --git a/tests/system-integration/lib/src/uss.js b/tests/system-integration/lib/src/uss.js deleted file mode 100644 index aeab6533da..0000000000 --- a/tests/system-integration/lib/src/uss.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.runCommand = void 0; -const constants_1 = require("./constants"); -const zos_uss_for_zowe_sdk_1 = require("@zowe/zos-uss-for-zowe-sdk"); -function getSession() { - return new zos_uss_for_zowe_sdk_1.SshSession({ - hostname: constants_1.REMOTE_CONNECTION.host, - port: constants_1.REMOTE_CONNECTION.ssh_port, - user: constants_1.REMOTE_CONNECTION.user, - password: constants_1.REMOTE_CONNECTION.password, - }); -} -function runCommand(command_1) { - return __awaiter(this, arguments, void 0, function* (command, cwd = '~') { - const session = getSession(); - let stdout = ''; - const rc = yield zos_uss_for_zowe_sdk_1.Shell.executeSshCwd(session, command, cwd, (data) => { - if (data.trim()) { - stdout += data; - } - }); - return { data: stdout, rc: rc }; - }); -} -exports.runCommand = runCommand; diff --git a/tests/system-integration/lib/src/utils.d.ts b/tests/system-integration/lib/src/utils.d.ts deleted file mode 100644 index e67e85c358..0000000000 --- a/tests/system-integration/lib/src/utils.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Sleep for certain time - * @param {Integer} ms - */ -export declare function sleep(ms: number): Promise; -/** - * Check if there are any mandatory environment variable is missing. - * - * @param {Array} vars list of env variable names - */ -export declare function checkMandatoryEnvironmentVariables(vars: string[]): void; -/** - * Generate MD5 hash of a variable - * - * @param {Any} obj any object - */ -export declare function calculateHash(obj: unknown): string; diff --git a/tests/system-integration/lib/src/utils.js b/tests/system-integration/lib/src/utils.js deleted file mode 100644 index 887f62372c..0000000000 --- a/tests/system-integration/lib/src/utils.js +++ /dev/null @@ -1,69 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.calculateHash = exports.checkMandatoryEnvironmentVariables = exports.sleep = void 0; -const util = __importStar(require("util")); -const crypto = __importStar(require("crypto")); -/** - * Sleep for certain time - * @param {Integer} ms - */ -function sleep(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} -exports.sleep = sleep; -/** - * Check if there are any mandatory environment variable is missing. - * - * @param {Array} vars list of env variable names - */ -function checkMandatoryEnvironmentVariables(vars) { - for (const v of vars) { - if (!Object.keys(process.env).includes(v)) { - throw new Error(`Expected to find a value for ${v} in process.env`); - } - } -} -exports.checkMandatoryEnvironmentVariables = checkMandatoryEnvironmentVariables; -/** - * Generate MD5 hash of a variable - * - * @param {Any} obj any object - */ -function calculateHash(obj) { - return crypto.createHash('md5').update(util.format('%j', obj)).digest('hex'); -} -exports.calculateHash = calculateHash; diff --git a/tests/system-integration/lib/src/zowe.d.ts b/tests/system-integration/lib/src/zowe.d.ts deleted file mode 100644 index 0c2e6d77ab..0000000000 --- a/tests/system-integration/lib/src/zowe.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Session } from '@zowe/imperative'; -export declare function getZosmfSession(): Session; diff --git a/tests/system-integration/lib/src/zowe.js b/tests/system-integration/lib/src/zowe.js deleted file mode 100644 index 9910f4c0ad..0000000000 --- a/tests/system-integration/lib/src/zowe.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getZosmfSession = void 0; -const imperative_1 = require("@zowe/imperative"); -const constants_1 = require("./constants"); -let cachedZosmfSession; -function getZosmfSession() { - console.log('called get zosmf'); - if (cachedZosmfSession != null) { - console.log('returning cached 1' + cachedZosmfSession); - return cachedZosmfSession; - } - const sessCfg = { - hostname: constants_1.REMOTE_CONNECTION.host, - port: constants_1.REMOTE_CONNECTION.zosmf_port, - user: constants_1.REMOTE_CONNECTION.user, - password: constants_1.REMOTE_CONNECTION.password, - rejectUnauthorized: constants_1.REMOTE_CONNECTION.zosmf_reject_unauthorized, - protocol: 'https', - }; - imperative_1.ConnectionPropsForSessCfg.resolveSessCfgProps(sessCfg, { $0: '', _: [] }, {}); - cachedZosmfSession = new imperative_1.Session(sessCfg); - console.log('returning not cached ' + cachedZosmfSession); - return cachedZosmfSession; -} -exports.getZosmfSession = getZosmfSession; diff --git a/tests/system-integration/lib/tsconfig.tsbuildinfo b/tests/system-integration/lib/tsconfig.tsbuildinfo deleted file mode 100644 index 002d804c3a..0000000000 --- a/tests/system-integration/lib/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"program":{"fileNames":["../node_modules/typescript/lib/lib.es6.d.ts","../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/ts-algebra/lib/utils/and.d.ts","../node_modules/ts-algebra/lib/utils/extends.d.ts","../node_modules/ts-algebra/lib/utils/if.d.ts","../node_modules/ts-algebra/lib/utils/intersectunion.d.ts","../node_modules/ts-algebra/lib/utils/isnever.d.ts","../node_modules/ts-algebra/lib/utils/merge.d.ts","../node_modules/ts-algebra/lib/utils/not.d.ts","../node_modules/ts-algebra/lib/utils/or.d.ts","../node_modules/ts-algebra/lib/utils/prettify.d.ts","../node_modules/ts-algebra/lib/utils/tail.d.ts","../node_modules/ts-algebra/lib/utils/unionlast.d.ts","../node_modules/ts-algebra/lib/utils/unionpop.d.ts","../node_modules/ts-algebra/lib/utils/index.d.ts","../node_modules/ts-algebra/lib/meta-types/never.d.ts","../node_modules/ts-algebra/lib/meta-types/utils.d.ts","../node_modules/ts-algebra/lib/meta-types/const.d.ts","../node_modules/ts-algebra/lib/meta-types/enum.d.ts","../node_modules/ts-algebra/lib/meta-types/object.d.ts","../node_modules/ts-algebra/lib/meta-types/primitive.d.ts","../node_modules/ts-algebra/lib/meta-types/tuple.d.ts","../node_modules/ts-algebra/lib/meta-types/union.d.ts","../node_modules/ts-algebra/lib/meta-types/type.d.ts","../node_modules/ts-algebra/lib/meta-types/array.d.ts","../node_modules/ts-algebra/lib/meta-types/resolve.d.ts","../node_modules/ts-algebra/lib/meta-types/any.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/union.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/utils.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/const.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/enum.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/tuple.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/array.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/object.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/primitive.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/any.d.ts","../node_modules/ts-algebra/lib/meta-types/intersection/index.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/union.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/any.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/array.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/const.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/enum.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/utils.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/object.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/primitive.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/tuple.d.ts","../node_modules/ts-algebra/lib/meta-types/exclusion/index.d.ts","../node_modules/ts-algebra/lib/meta-types/index.d.ts","../node_modules/ts-algebra/lib/index.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/deserializationpattern.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/jsonschema.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/extendedjsonschema.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/fromschemaoptions.d.ts","../node_modules/json-schema-to-ts/lib/types/definitions/index.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-options.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/and.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/extends.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/get.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/if.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/key.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/join.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/narrow.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/not.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/pop.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/split.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/tail.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/writable.d.ts","../node_modules/json-schema-to-ts/lib/types/type-utils/index.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/utils.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/allof.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/anyof.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/const.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/deserialize.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/enum.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/ifthenelse.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/multipletypes.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/not.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/nullable.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/oneof.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/references/utils.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/references/external.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/references/internal.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/references/index.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/array.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/object.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/singletype.d.ts","../node_modules/json-schema-to-ts/lib/types/parse-schema/index.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/type-guards/compiler.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/type-guards/validator.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/type-guards/index.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/asconst.d.ts","../node_modules/json-schema-to-ts/lib/types/utils/index.d.ts","../node_modules/json-schema-to-ts/lib/types/index.d.ts","../../../schemas/zowe-yaml-schema.json","../../../schemas/server-common.json","../src/zoweyamltype.ts","../src/utils.ts","../node_modules/yn/index.d.ts","../src/constants.ts","../node_modules/@zowe/imperative/lib/profiles/src/constants/profilesconstants.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/iprofileproperty.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/iprofileschema.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/iprofiledependency.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/config/iprofiletypeconfiguration.d.ts","../node_modules/@zowe/imperative/lib/logger/src/doc/ilog4jslayout.d.ts","../node_modules/@zowe/imperative/lib/logger/src/doc/ilog4jsappender.d.ts","../node_modules/@zowe/imperative/lib/logger/src/doc/ilog4jsconfig.d.ts","../node_modules/@zowe/imperative/lib/logger/src/doc/iconfiglogging.d.ts","../node_modules/@zowe/imperative/lib/error/src/doc/iimperativeerror.d.ts","../node_modules/@zowe/imperative/lib/error/src/doc/iimperativeerrorparms.d.ts","../node_modules/@zowe/imperative/lib/error/src/imperativeerror.d.ts","../node_modules/log4js/types/log4js.d.ts","../node_modules/@zowe/imperative/lib/console/src/doc/iconsole.d.ts","../node_modules/@zowe/imperative/lib/console/src/console.d.ts","../node_modules/@zowe/imperative/lib/logger/src/logger.d.ts","../node_modules/@zowe/imperative/lib/logger/src/loggerconfigbuilder.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@zowe/imperative/node_modules/@types/yargs/index.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/icommandexampledefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/option/icommandoptionallowablevalues.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/option/icommandoptionvalueimplications.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/option/icommandoptiondefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/ipartialcommanddefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofileauthconfig.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofiletypeconfiguration.d.ts","../node_modules/@zowe/imperative/lib/logger/src/loggerutils.d.ts","../node_modules/@zowe/imperative/lib/logger/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/abstract/abstractprofilemanager.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/api/iprofilemanagerfactory.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/imetaprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/iprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/definition/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/ideleteprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iloadallprofiles.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iloadprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iprofilemanager.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iprofilemanagerinit.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/isaveprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/isaveprofilefromcliargs.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/isetdefaultprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iupdateprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/iupdateprofilefromcliargs.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/ivalidateprofile.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/ivalidateprofilewithschema.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/ivalidateprofileforcli.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/parms/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofiledeleted.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofileinitialized.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofileloaded.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofilesaved.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofileupdated.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/iprofilevalidated.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/response/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/doc/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/utils/profileio.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/utils/profileutils.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/utils/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/doc/iprofilevalidationtask.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/doc/iprofilevalidationtaskresult.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/doc/iprofilevalidationreport.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/doc/iprofilevalidationplan.d.ts","../node_modules/@zowe/imperative/lib/operations/src/taskstage.d.ts","../node_modules/@zowe/imperative/lib/operations/src/doc/itaskwithstatus.d.ts","../node_modules/@zowe/imperative/lib/operations/src/operation.d.ts","../node_modules/@zowe/imperative/lib/operations/src/doc/ioperationresult.d.ts","../node_modules/@zowe/imperative/lib/operations/src/operations.d.ts","../node_modules/@zowe/imperative/lib/operations/src/taskprogress.d.ts","../node_modules/@zowe/imperative/lib/operations/index.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/validation/api/profilevalidator.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/basicprofilemanager.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/abstract/abstractprofilemanagerfactory.d.ts","../node_modules/@zowe/imperative/lib/profiles/src/basicprofilemanagerfactory.d.ts","../node_modules/@zowe/imperative/lib/profiles/index.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofileproperty.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofileschema.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/ichainedhandlerargumentmapping.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/ichainedhandlerentry.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/option/icommandpositionaldefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/icommanddefinitionpasson.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofile.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/icommanddefinition.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/profiles/commandprofiles.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ipromptoptions.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerresponseconsoleapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerresponsedataapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/parms/iprogressbarparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerprogressapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/response/icommandoutputformat.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerformatoutputapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/handler/ihandlerresponseapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/args/icommandarguments.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/ihandlerparameters.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/icommandhandler.d.ts","../node_modules/@zowe/imperative/lib/error/index.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/response/icommandresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/api/processor/icommandresponseapi.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/parms/icommandresponseparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/response/commandresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/icommandhandlerresponsechecker.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/handler/icommandhandlerresponsevalidator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/response/icommandvalidatorerror.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/response/response/icommandvalidatorresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/handlers/failedcommandhandler.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/ihelpgeneratorparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/ihelpgeneratorfactoryparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/ihelpgenerator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/abstract/abstracthelpgenerator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/ihelpgeneratorfactory.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/abstract/abstracthelpgeneratorfactory.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/defaulthelpgenerator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/helpconstants.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/helpgeneratorfactory.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativelogsconfig.d.ts","../node_modules/@zowe/imperative/lib/security/src/abstract/abstractcredentialmanager.d.ts","../node_modules/@zowe/imperative/lib/security/src/doc/icredentialmanagerinit.d.ts","../node_modules/@zowe/imperative/lib/security/src/credentialmanagerfactory.d.ts","../node_modules/@zowe/imperative/lib/security/src/defaultcredentialmanager.d.ts","../node_modules/@zowe/imperative/lib/security/src/doc/icredentialmanagernamemap.d.ts","../node_modules/@zowe/imperative/lib/security/src/credentialmanageroverride.d.ts","../node_modules/@zowe/imperative/lib/security/src/doc/icredentialmanagerconstructor.d.ts","../node_modules/@zowe/imperative/lib/security/src/errors/badcredentialmanagererror.d.ts","../node_modules/@zowe/imperative/lib/security/index.d.ts","../node_modules/@zowe/imperative/lib/interfaces/src/types/imperativereject.d.ts","../node_modules/@zowe/imperative/lib/interfaces/src/doc/iconstructor.d.ts","../node_modules/@zowe/imperative/lib/interfaces/index.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeoverrides.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeauthgroupconfig.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iapimlsvcattrs.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/definition/icommandprofileautoinitconfig.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeconfig.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/doc/idaemonrequest.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/doc/idaemonresponse.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/daemonrequest.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/executils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/jsonutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/jsutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/nextverfeatures.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/doc/isysteminfo.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/processutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/textutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/doc/ioptionformat.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/cliutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/envfileutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/diff/doc/idiffnameoptions.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/diff/doc/idiffoptions.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/diff/diffutils.d.ts","../node_modules/@zowe/imperative/lib/utilities/index.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/idaemoncontext.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigprofile.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfig.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfiglayer.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigvault.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configapi.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configlayers.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configplugins.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configprofiles.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/configsecure.d.ts","../node_modules/@zowe/imperative/lib/config/src/api/index.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigschema.d.ts","../node_modules/@zowe/imperative/lib/config/src/config.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/types/httpverb.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/iheadercontent.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/ihttpsoptions.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/types/abstractrestclientproperties.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/ioptionsfullresponse.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/irestclienterror.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/sessconstants.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/doc/isession.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/abstractsession.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/session.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/irestclientresponse.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/doc/irestoptions.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/headers.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/abstractrestclient.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/compressionutils.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/restclient.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/restconstants.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/reststandaloneutils.d.ts","../node_modules/@zowe/imperative/lib/rest/src/client/restclienterror.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/doc/ioverridepromptconnprops.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/doc/ioptionsforaddconnprops.d.ts","../node_modules/@zowe/imperative/lib/rest/src/session/connectionpropsforsesscfg.d.ts","../node_modules/@zowe/imperative/lib/rest/index.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/auth/doc/iauthhandlerapi.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/auth/handlers/abstractauthhandler.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigautostoreopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/configautostore.d.ts","../node_modules/@zowe/imperative/lib/config/src/configconstants.d.ts","../node_modules/@zowe/imperative/lib/config/src/configschema.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeenvironmentalvariablesetting.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeenvironmentalvariablesettings.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/env/environmentalvariablesettings.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/doc/iimperativeloggingconfig.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/configurationloader.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/configurationvalidator.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/definitiontreeresolver.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/api/doc/iimperativeapi.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/api/imperativeapi.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/imperative.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/loggingconfigurer.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/plugins/abstractpluginlifecycle.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/plugins/doc/ipluginpeerdepends.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/plugins/doc/iplugincfgprops.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/plugins/pluginmanagementfacility.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/auth/handlers/baseauthhandler.d.ts","../node_modules/@zowe/imperative/lib/imperative/src/config/cmd/auto-init/handlers/baseautoinithandler.d.ts","../node_modules/@zowe/imperative/lib/imperative/index.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigbuilderopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigconvertresult.d.ts","../node_modules/@zowe/imperative/lib/config/src/configbuilder.d.ts","../node_modules/@zowe/imperative/lib/config/src/configutils.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofloc.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofargattrs.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofattrs.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofmergeargopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofmergedarg.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofinfoupdatepropopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofinfoprops.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofinforemoveknownpropopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iextenderopts.d.ts","../node_modules/@zowe/imperative/lib/config/src/profileinfo.d.ts","../node_modules/@zowe/imperative/lib/config/src/profilecredentials.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iprofinfoerrparms.d.ts","../node_modules/@zowe/imperative/lib/config/src/profinfoerr.d.ts","../node_modules/@zowe/imperative/lib/config/src/doc/iconfigsecure.d.ts","../node_modules/@zowe/imperative/lib/config/index.d.ts","../node_modules/@zowe/imperative/lib/utilities/src/imperativeconfig.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/webhelpgenerator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/doc/iwebhelpmanager.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/help/webhelpmanager.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/parms/icliloadprofile.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/profiles/parms/icliloadallprofiles.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/profiles/cliprofilemanager.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/syntax/syntaxvalidator.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/utils/commandutils.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/utils/sharedoptions.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/doc/iyargsresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/abstractcommandyargs.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/groupcommandyargs.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/doc/iyargsparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/commandyargs.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/yargsconfigurer.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/yargs/yargsdefiner.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/commandpreparer.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/parms/iinvokecommandparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/doc/processor/icommandprocessorparms.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/commandprocessor.d.ts","../node_modules/@zowe/imperative/lib/cmd/src/response/handlerresponse.d.ts","../node_modules/@zowe/imperative/lib/cmd/index.d.ts","../node_modules/@zowe/imperative/lib/console/index.d.ts","../node_modules/@zowe/imperative/lib/constants/src/constants.d.ts","../node_modules/@zowe/imperative/lib/constants/index.d.ts","../node_modules/@zowe/imperative/lib/expect/src/imperativeexpect.d.ts","../node_modules/@zowe/imperative/lib/expect/index.d.ts","../node_modules/@zowe/imperative/lib/io/src/io.d.ts","../node_modules/@zowe/imperative/lib/io/index.d.ts","../node_modules/@zowe/imperative/lib/messages/src/doc/imessagedefinition.d.ts","../node_modules/@zowe/imperative/lib/messages/src/coremessages.d.ts","../node_modules/@zowe/imperative/lib/messages/index.d.ts","../node_modules/@zowe/imperative/lib/settings/src/doc/isettingsfile.d.ts","../node_modules/@zowe/imperative/lib/settings/src/persistance/isettingsfilepersistence.d.ts","../node_modules/@zowe/imperative/lib/settings/src/appsettings.d.ts","../node_modules/@zowe/imperative/lib/settings/index.d.ts","../node_modules/@zowe/imperative/lib/index.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/doc/isshsession.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/sshsession.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/shell.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/sshbasehandler.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/constants/zosuss.messages.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/constants/zosuss.profile.d.ts","../node_modules/@zowe/zos-uss-for-zowe-sdk/lib/index.d.ts","../src/uss.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/constants/zosfiles.constants.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/constants/zosfiles.messages.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/types/zosmfmigratedrecalloptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/types/zosmfrestclientproperties.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/idataset.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/izosfilesoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/ioptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/ioptionsfullresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/irestclientresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/iussfilelistresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/doc/izosfilesresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/copy/doc/icopydatasetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/get/doc/igetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/copy/doc/icrosslparcopydatasetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/copy/copy.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/copy/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/doc/icreatedatasetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/doc/icreateussoption.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/doc/icreatevsamoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/doc/icreatezfsoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/createdatasettype.enum.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/create.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/create.defaults.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/create/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/doc/ideletedatasetoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/doc/ideletevsamoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/doc/ideletevsamresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/delete.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/delete/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/utils/zosfilesattributes.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/doc/idownloadoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/doc/idownloaddsmresult.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/doc/idownloadussdirresult.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/izosmflistresponse.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/idsmlistoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/ifsoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/ilistoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/doc/iusslistoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/list.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/list/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/download.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/download/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/get/get.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/get/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hmigrate/doc/imigrateoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hmigrate/hmigrate.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hmigrate/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hdelete/doc/ideleteoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hdelete/hdelete.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hdelete/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hrecall/doc/irecalloptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hrecall/hrecall.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/hrecall/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/invoke/invoke.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/invoke/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/mount/doc/imountfsmode.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/mount/doc/imountfsoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/mount/mount.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/mount/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/rename/rename.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/rename/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/unmount/unmount.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/unmount/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploaddir.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploadfile.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploadmap.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploadoptions.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/doc/iuploadresult.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/upload.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/upload/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/utilities/doc/tag.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/utilities/utilities.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/methods/utilities/index.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/utils/zosfilesutils.d.ts","../node_modules/@zowe/zos-files-for-zowe-sdk/lib/index.d.ts","../node_modules/@types/jsonfile/index.d.ts","../node_modules/@types/jsonfile/utils.d.ts","../node_modules/@types/fs-extra/index.d.ts","../src/zowe.ts","../src/globalsetup.ts","../src/globalteardown.ts","../node_modules/yaml/dist/parse/line-counter.d.ts","../node_modules/yaml/dist/errors.d.ts","../node_modules/yaml/dist/doc/applyreviver.d.ts","../node_modules/yaml/dist/log.d.ts","../node_modules/yaml/dist/nodes/tojs.d.ts","../node_modules/yaml/dist/nodes/scalar.d.ts","../node_modules/yaml/dist/stringify/stringify.d.ts","../node_modules/yaml/dist/nodes/collection.d.ts","../node_modules/yaml/dist/nodes/yamlseq.d.ts","../node_modules/yaml/dist/schema/types.d.ts","../node_modules/yaml/dist/schema/common/map.d.ts","../node_modules/yaml/dist/schema/common/seq.d.ts","../node_modules/yaml/dist/schema/common/string.d.ts","../node_modules/yaml/dist/stringify/foldflowlines.d.ts","../node_modules/yaml/dist/stringify/stringifynumber.d.ts","../node_modules/yaml/dist/stringify/stringifystring.d.ts","../node_modules/yaml/dist/util.d.ts","../node_modules/yaml/dist/nodes/yamlmap.d.ts","../node_modules/yaml/dist/nodes/identity.d.ts","../node_modules/yaml/dist/schema/schema.d.ts","../node_modules/yaml/dist/doc/createnode.d.ts","../node_modules/yaml/dist/nodes/addpairtojsmap.d.ts","../node_modules/yaml/dist/nodes/pair.d.ts","../node_modules/yaml/dist/schema/tags.d.ts","../node_modules/yaml/dist/options.d.ts","../node_modules/yaml/dist/nodes/node.d.ts","../node_modules/yaml/dist/parse/cst-scalar.d.ts","../node_modules/yaml/dist/parse/cst-stringify.d.ts","../node_modules/yaml/dist/parse/cst-visit.d.ts","../node_modules/yaml/dist/parse/cst.d.ts","../node_modules/yaml/dist/nodes/alias.d.ts","../node_modules/yaml/dist/doc/document.d.ts","../node_modules/yaml/dist/doc/directives.d.ts","../node_modules/yaml/dist/compose/composer.d.ts","../node_modules/yaml/dist/parse/lexer.d.ts","../node_modules/yaml/dist/parse/parser.d.ts","../node_modules/yaml/dist/public-api.d.ts","../node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts","../node_modules/yaml/dist/schema/yaml-1.1/set.d.ts","../node_modules/yaml/dist/visit.d.ts","../node_modules/yaml/dist/index.d.ts","../src/__tests__/remotetestrunner.ts","../node_modules/@types/lodash/common/common.d.ts","../node_modules/@types/lodash/common/array.d.ts","../node_modules/@types/lodash/common/collection.d.ts","../node_modules/@types/lodash/common/date.d.ts","../node_modules/@types/lodash/common/function.d.ts","../node_modules/@types/lodash/common/lang.d.ts","../node_modules/@types/lodash/common/math.d.ts","../node_modules/@types/lodash/common/number.d.ts","../node_modules/@types/lodash/common/object.d.ts","../node_modules/@types/lodash/common/seq.d.ts","../node_modules/@types/lodash/common/string.d.ts","../node_modules/@types/lodash/common/util.d.ts","../node_modules/@types/lodash/index.d.ts","../src/__tests__/zoweyaml.ts","../src/__tests__/init/apfauth.tests.ts","../src/__tests__/init/certificate.tests.ts","../src/__tests__/init/composite.tests.ts","../src/__tests__/init/generate.tests.ts","../src/__tests__/init/mvs.tests.ts","../src/__tests__/init/security.tests.ts","../src/__tests__/init/stc.tests.ts","../src/__tests__/init/vsam.test.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/ms/index.d.ts","../node_modules/@types/debug/index.d.ts","../node_modules/@types/exit/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/@jest/expect-utils/build/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/@sinclair/typebox/typebox.d.ts","../node_modules/@jest/schemas/build/index.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/expect/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/xml2js/lib/processors.d.ts","../node_modules/@types/xml2js/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileInfos":["df039a67536fe2acc3affdcbfb645892f842db36fe599e8e652e2f0c640a90d1",{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"76f838d5d49b65de83bc345c04aa54c62a3cfdb72a477dc0c0fce89a30596c30","affectsGlobalScope":true},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"be50d415c7cd0b7ccf407afb39001cb794b78b4cedb9c80b4f67b4206e081a41","b95868450d71cfa9ad87bcb8a31f6b723988d692e89aaed03690f5c907aa0550","70b8f8b4d363639a9aa2bd0af7f3be9b6b46dc4612243e4af76c63a65353507f","8fe3a50bbafa00b28431bf07caf1b78a9e69033c1175e83f09aee5b8adc67fbd","0f63227d67b6c41811524b4953ffe2c06272fd396f52bfbe3a1f3b04fcf32c07","5b6b2404605b4a02b04d65ec20cc45eb604cbd6fb5624836331eaae78499ab56","d7c0b206b541896ebf7f37da32559b75c7452e0d43a567d3307726060498381c","64f7fafdd826b9726b960fc6c6bfc00e41086f9f62bdeb3afd1b1fe142bb5363","3543fe72044d2665132be330e2c03ae4de319e8c594f733d60826a12357fc30a","babc71234fd5a58461c5b9d669c5ebf883c3e2d820bed5b2251995e03d29cef5","a3b300ee383bc871006ea9f17f9a3dd1b3b9c7d3e2032c2b9d69a9bf708d9d24","913f363f49d710887c8ad61c1f0e102eea1e2d891acc63ffc0fa066e80599d14","2892f0b65fb2df5bc5db568a6cbb080c8cdbd1f3f4ca391a5854a58d6a84f6e1","5b5ae1073d30857ac5f8955a8b63c068f1840736b57e5da3ed2e1e3f7b8ed6c3","9be835e15d2273281bad24317ff2bd5a7f6bebbec34cd8a96f73ab46b3efe24a","ec382f858ab8e57dd1757ed185291ec351c9033942055630d198ff0bfc508d36","2ebef6d74ca6edf4c45decfa9d015aac88575b63a126ad417617adfa83514830","43371e0d43e95d7645f6b8cdd7df17026ea573c8de64333fa4b71eaa7872b5a0","df1a920d89fcd403a350314ebe1240805fd67cd510d3443306babe99c5f4d7b1","62468b0711d2733dfcdca6aeb649ed98a92ae856b5337efe9b68bf2dc606e27c","35db5f59706b4bffadc3b6bb82d58825faf6e23aacf81a44a3ebf2c1955f47c1","637fe6cfcfdd045adf2b78278509c9adee2645997ce798f613f3188d906c5d74","37527068a4d6704a052746260bc6612cf16a0758794d2dee400939f58c3b246d","dec9bc581155ab60af59039769381367ef993c8725b92610caccbbc056aeebec","88469ffbb48d651630cf6d1c8c786cb6e78d73acc6ba2cda826459a8d2f859ea","5a44fc0c3ce0fb083bba9343aa67777c5f51bd0ba67e633656c704c31d732b64","80963fa6320b6ac2326f3a3dcba72a3c2a7f41079252489f6f43132b72b33634","3931eb5a462ff5133383aa00d8a2d36fede7d9de67f04cc99f9a9f2e2d5eab4e","e0b7e4ca93392468feaf2abd445d3ab8313b794b5373dc226f51d1379615b85a","765c0e600ad4c48f79e7603f95de84609e5ed25cd84b22aa27d86fceb22af41c","90f689a9f7f5829bec97c2390efb2e0654d48fdfb1aeaf90c99d2aaec257f088","297ab6f3f1a47f24af54f7ae61aac5e2b8c3c58db6719ed004a78c1b7739dfa8","d670cbe492cd3baafcd084f374dbf45a838b982e863d7385fb39acfeda506d8c","b96e6b23f9a66de57d6ef4ce69e9d5aa32a699cd997433cbb970e9ff92684eec","da4710ec87a36f423ac598fe5eccdecbe801c06b55ebe7066a7334ac673bf8e7","a65b0643c322acf323e913e8b8797c87e3460ccaa06640555cc1acc1b07b04a7","63d56cc0d0242dfdd096140c85e733704a571d23162e1964729d5a079cdb4561","4123efa64088870de40eeed37cbe55ec7a5e7b1d90a23a978097ce4bcba156d6","453afe9af8903372c88e6d325fa190abc139b02f7b9a424cc2e395da05f0d9d5","21f3bdfa2ec15e61c2cd4bc617d5cbf6d5bdf4fe399446551e4de620567f40ae","5ac8b9d5ce1356f339937a3ad1b83c145d11b84d02434435afbfbf3726a1ac72","0b4122e881c08ca34ea3b346f79ad35863288ad0a484e7748f3ccc72688b8a4a","0486506ec74a74b7f9e48b029c24b902df9915e074d21f66064aa3e0d50fb3a0","5db914a921d4215b8fae0b0c4a4aa131c8ffacbcba867361c8474f981fd102be","9db728206382d7b19568292ceb6e05e3b541ebc2f228209b5e42ff09882caee9","c0bfd91ece96433a98ed4a783b8f42ac161f9c838f8602ee2c57459906fe3726","2f3d1c08413e7715bda820fd283f19b56d9fa131371e2b7cf3b8016621d133b4","81dddc6f65e0f33cc06255880a7aac26ea920e47236050de6f79265ed1ef5381","8a835ce6138ba2d63c4ee51a6231e99b372293d2d0879a249a6c249f9df8ae91","5d3abe1f304ea20cf0c54a9eed8d3505e51610ff546b799a2503642af2be8a0f","b2e0dde797b45b298cc77d0336da5f22eeb515fa95721e5397129e0582f7cf7b","c034d194506f3e113b5b3b09eeba042b4438748fe5ed712f81295e0683570ad7","58b9580f8c83947617b15dbc5636f92984826f1aa88fcebb9165544858cb7b0d","f5d119be7ddba4e71c4c14cfc597726065364f5131aa3b456d38d54bc2c9b80e","02dee89e39447084501af3c13047a74216e62d506b5606691fff0fe3d09e9f8c","1b56d883cdeaa45e91d22a2bc063b2abf16e0d106b78355caed92a85a8f93e80","9ba6ac2653d0a674f6280024799f13c9aeb1b9dab7de5acc2ff598c1982f7bf0","631207e0e921dd9d08af73171bc297b589b15b31912c044aefeacadd694d687a","dcf204392d153eae8368f1d4c9cc9088e925d7f7e852d4ef84730e96ce2805ef","bf03537a0300b3c27e6a958a4e5fc862309ad2bc698be2fd9b792c2a9614297d","b9b7457690e699bad56a463f8e8d92e123b92257b04cc6f7612bd11db2155fc8","71c0f26c787d2514dceac24fc29f704a4e3a3d5d7b59308aac07c3a0481447df","7544c17f8e9906288f17698f06ba2d8950fd383b8e100594a433a372ba9166e9","77efed03e0ff1c1730437400f7db0f08a052f39856a19ac44dc97d6366c1ec73","f98795592d7e1074378abe109454b7353517b612cf8e2df276e817082e8a9db5","ceaa59fed54a207310047265d611e2601f5aaff4b56b7086c33850e828355919","a50faffdce515e97b64aa365dc81bac64b0f26be3bb0c03f8d7f95e1e8797038","3bc16e18d77625cebb8fdf93e525dc51cfd3db57ec0eead43cb254c0af05eb09","a870bd3a05df7c51ef0b5afa6e4c4cb9ee4fad7a92acae0e8374b168e95666a4","37fb1464c6d4cd4c5caa90381ece59352327f52751914d70eb17d9918cd31cc9","de9e9aceb10128bf45ee66779066dcf36db7bc614417b28693e22f39af7a56f2","e98324a43e2a71153912f8a9e624e258a866d1432626488b68ad38506d8ffca2","de90a66267bd025d30c6623276a2ae4091bb47af211d6b47bb7508f50ddf54b6","b481eb7dfc437a72c3b6964d8fc98a01ed7298b763513f7cc64af992f2a66023","b8e915c10920bbb765319f19067e3754c6113a2f78c66c5b92e1c4b0d0bda5e5","e2bcf0aa809b3d8c0af97deaa988f61f299368b41ad61bfb95d4685ed2013785","4bb29133da3e3befb6f82094d6ec72ae2cfb2c785df327732ca5717f311ee8ee","4f07e219ce111d2a7b8551a68993cf80a96dba3c07fafa55cbc0b375579198ae","02e6fbcccf57b970406fc4f7319d92314739983820d0a7474c7f296d0bcad422","372c034127bd8edf8fb1cd96ad84e7bdd9fe23931d2c063c001d00fa417e9adf","f25275d39e7ee47370e5b020c0a8ad6f89b394cc3a622c64694c867cf3385f82","7de2511e71e948a58a4ec5f9ebc87fce9ae59392f76c2f71ba67a5354c8aaa50","a06b127b31087aa5bd5b53595072deeedc3d978e914204f896a02465982b9a6c","a7dd33cccdec774c39e53590fcb93418d0675376f4786a938498cd0e8c03a895","c023c25d1f19bc3160a868610e0c9788ede82c54cdcbcac5208a73ece09860be","b7cd5b76b7f5a7d723ab5a3795ad21d9048a604cc9a239ffd6126a2c05fc4877","aa0bfdb515b3889524c8545d0863b3bc8b71463696778d5f7a9f5b55fe044e17","5dac5621fc59d4a10ac4b67dd3ba1966b185f9527ccca8d5fcfa490a5b835bc8","39cca18567e0202924247b62a7846c1410d38f59a15bf91f7e8c5d1b3bd93eab","ba1d0b7814659778be83c3e79bcb8028cdb521fa623ba4e844f97b4a3f9c5645","fd584c0aad6a373d3f2c3fbf8e03b655fe06479a14104906c1ca6669dd1569f8",{"version":"5d77cea05bb9db1a3dab8585d43317059af625f9addbc9d0adb511124f891330","signature":"71ab773143db98e2a8c86a04f6c59ff5f52710d873ef6e51bda7f0f93d86a77d"},{"version":"8afb311999a3f1a8cd74d6f75dfef15bde1e97d90c9a0e2e9d6e317525a1be8b","signature":"940ca6175f8ae57cf5077564bb4ed4f7bbcc1ea26db5c02f6f513302d6a380d5"},{"version":"4961598d611185798a8911d15a28d55fc217513562ac0a12309484ca432d4808","signature":"537e40f2d9c1138123744cb30cbde8d3681c34103229910dd5e02c3a4d7601e5"},{"version":"487864819b2e187ceac2281d77352ea61c43e5f72991765b78962c3719e6316a","signature":"67c6c22aff458f5381116308164636f44049ffb983e5fa48479e1ab072b74bb0"},"9fde1428c828c9ff281394035f9ef77ac35886fcd0729bea8fe3bb8b2354946a",{"version":"15f37bc42c444e7037c6018604aa8498e56226de6edee9beda8d77fab0a0d837","signature":"e42de158eea28e8bcc6c9fa6bc18e981eb85fb36af8bbeb495a8dc918a468530"},"fde311c1e27f31ba2a6cb4076659f1737df2aa1b0553428d58a0f63043f24e9e","ff1d36fa5920bc7163e14beb616cecf12b5fcd1bbe38b0d54905814bedd8ceb5","844400ee78cced1dfc82302ad36c8578bdc8a33969d5e5ae3428b4a1fa0b3e2e","9a9511516915fe38cf625d06058ba0159a6a8a2cb5ac2ab7de1f308f4b96f9aa","b918e73c9ea0321ff1ec79b7431029f037729a1148966fb28c6092dff448ced7","a299a575f7df0b332ad1e74549b0c34f1ba40c79dadd9b9843018e712042d8f3","d8e2b89aff76c7804cb74c99bbe66605338c36fcff10b7e670c6f95db2ba3e71","1f1f0d8922fb4c8d83263d71594d15004fd4a687d38fb61cb621bee662535b59","fcbfc6d2122831683ce1e3fbbd38cb5fed2f94776d282aae25be1e4e462b355e","876debc1830896caaef2cae23f00eed412012eedae341a4bd905cf5c2d74d289","718aa30e042ae459d4184e6b29accc78146cddf54c384065d534ce1d42e3b083","9f241522d7618b910f71b96edae694866601ce31d6ba50ee8724769fc9ad1ed2","3edb1e79062d36d838bb826440303cacf1acca1589df5afc0be011e5354b125c","85bb9ec11cf2eaba421fde94d43ad6c9006ff94db2d32cdba368222332f0a1a3","442bab679dfa816ef6f92dacc8ea8889a6e1e48f021579c264cb4fb7a6baf2c9","ed2d06a4373122a568bddf7d98a87d7e98c9a64afb0c13b58e63eb69ff0bb546","3a26cc363c0b7bacd0e865f57de7a5a9ed03f4b3866d223faecec750cd499c77","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","989ea8e89ef2d6a07a1872fcee14be6b9e1920b04f19a4ab149d673f89af67e6","207e2c650349c308784c7bafa97c179a06be8c712e0dea5d110168ba2a738d9e","7be83e775564d83ac430e925b8c6e1eff23ebd5b7a0113cc045b31961c94fe42","d166081dc75f4fe8997a1fdc06d2dea03d0e7dc6ec29d52aa90df2018fdd3e93","4a90fac407e7b784b3936a3f997b1dc65773c6bcf7e46473e37931c4566b3ae3","830798bef0a6f5e74c0f755609af254408be5b2e81b757fd8b665919e9c10437","9571e7149d5254bd0805e83d9533f810f441e20fc44709825f40fc2597da9e60","202a6fc1d742067fcb038cc206cfd67e36e70b487543a190b13fcd4417947483","0629ba58f0a8caab0550e2ee52c4e2fce77e2a77d55a2698c1db9925d7628b59","374c3065e6d64d2dc99f5b6b636b35d040da0ef102378aeefecfd3980159abbb","613ddd0a577793d1ab426f46bd9421cdec0c3f4629c790ea7fe75dbb81b455b6","d4dc0ff08a7eb798e2cc14b78ee7fe1eb8467ee42237cfcdacda2a417db5ee55","0b99a6cca2c8b4df64ef01c2b48274d1519111319a47593ad497f8b16e5939fc","0f00c17c5ee290326dc950fcc14af1b830a4aafdbc4f783419df3a97a0478b97","e58359514396db81a868598cfdec16ed43e653b58b6a4ffa25f066c53034f9b1","63d06974f5ce3bf12c798f2d145a88f0122dddc6455f4e527c58e66faf62e038","92a94dc4b6631e695359d1370da40ce0411ddb7b0ce0f54ba161d8db0c4255e8","aba29d8cb9c780728cbe0d167d561414df7f3bcaec7d72a93331f31206d23536","154b7a4a5fe25c0700335f9d4c6123ffb02574e44c3d0a18a9fefb3c277ef213","07f6c2ca27e73adacd98d72946d03cc243334d3493c2056231df9e75177e11ec","2712c8a1250fd303c53c6cdb7189871400ccd62976d92534a61dc1490ec9ecff","9a17bccb0f8f88216ced437ca35e0b0fe33b3c95bf28b5e529a51723d6f82db9","da4621763e2cfc1ad9ca313fc924e4158f4fc1cdd9c0f1447624749fc6fe309a","cc126583c6681d567df9c4c977294eb6383610ed97e33c1ad51903110dad8f2d","557cad762351c249d9314db3e3d1de670d216c8fc8fac867c5e367424120a6f0","8dc596da06d7c50b53053c0507ff12cfef85e4b78bfc2bd7a0acb2537dbe07ff","5954d5a5a8598155bb83929d277777413607d80c7c5082c256df289faff6e714","a2f8174b988b95c69c1adbe677a3eb93337a28fd46521b023ec010dde73a01a0","a4424279d0bb550fbe49e0cd7b81a0b14518521caf7c5478e07c064ad19c1a3d","1b24f71ccbded4b59b48b4d524dd3036d76d477ed6a5daf4649b3a3d0435088e","81a5dc9f640013927f0b1b0024a940040708eb1e0cfefe241ba1f94a4866ed93","c94422e1f9588632341bbdd98ec05ec2b0dbaf55b6af56904394ce3eec513781","0d95d1a119ff36cac80ac9251596eda4cc94bd700249d6fdf653ea3fec1245eb","0717a222288982b39b7f77e60f0fe27d4fafe56beee61a200506a97fa23f76b0","3add72ef4e006f7ad1b36284fe85f1134f045bf8941518704f83367883ab9ac0","5940038f4f1e6d15d07a96af074a5f6dd250ef7a2d694f5d0a26aafed3067bf1","f0d947a69ce4d2425aaab02a88d572053b79e4a8edb7f2439c1631debb31703f","b389170624a78c8145512e8b7c53b267b885ed5d00de644c6d2a1a2901c7a1f5","f091fd39db8b972fbbd27d8b1fc23f5c56117ceef43fb7f668e9c2a246f558e6","53c51846e5e77e8f98c7776e73005255a92eecb8314a91c0382ae65e12b61562","08a52df2864a931d5321c22d5770c503d398e5f68890075f1a02b10f3f314749","1708b53bc1679c5cc33d6a21fff3c7a8d08f170c995e55a58ad15c3b799b9157","aa8722730c55b09e73b0a748a9bfb29cc335eb617cdb56e8d257deeffbe4056e","a89b970fa0374112ece68f2d40196b4849f4eaf2af737e41faba0302aeb2cf80","c2bf7b18df2d7725a4c2db5bed6b268b2ff3a5e8143432cd16905dbc33400c9e","f471b464e3a55276d1106ba602a221c7e9c476be0eb80820dca7e9ef04f5e3e1","30383ecd870ae5642cfcaaed21ebb58a33b990bff3c5aebfee700b74f6cbcd4a","5996c19247652d34684c13874481339ebeb634b988eeb09a4b5756f74428a9a7","a8d1572719d4b270e3346ccdf174151ebeec231e3a60aa1250d771049b24912e","51bedfb8884eeee18a5ea1cc513450395c9781c0671a14ffb1be62a041431a4a","783646b589b52db11b1fbd4c3f4ce6f390e8430f453c1ae6884f2b700137f7c9","e9c3b0a949e90db58aed5b2dbff9cf6f0dfc139b62aec385688fc9d5f956e517","ef0d062de7b4c3afc8f06437f16d08a542a8b7b1a95d98c5e554ce76692a24bf","4f6ed3ca540074e860b4e477660a75ec7d565c6dfeaf6cde5b477d5fde35b955","e34541f1051a90a5252c946aadecca070e3b63aa6605857efb2650b8e1bea1f6","6d1cca4a90053f132f915a3df12f7d293932694274b49764a424ee766e599ba2","635c57d6eb2401f9fad98450092c663e14e7e9006d78b843614c8be85720532b","d417414d45ba13d672a3715ecfe832e0cc633b895ee9e074ccd734d0b88a47d5","acdc9fb9638a235a69bd270003d8db4d6153ada2b7ccbea741ade36b295e431e","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"a14ed46fa3f5ffc7a8336b497cd07b45c2084213aaca933a22443fcb2eef0d07","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"7fd7fcbf021a5845bdd9397d4649fcf2fe17152d2098140fc723099a215d19ad","affectsGlobalScope":true},"df3389f71a71a38bc931aaf1ef97a65fada98f0a27f19dd12f8b8de2b0f4e461","d69a3298a197fe5d59edba0ec23b4abf2c8e7b8c6718eac97833633cd664e4c9",{"version":"a9544f6f8af0d046565e8dde585502698ebc99eef28b715bad7c2bded62e4a32","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"8b809082dfeffc8cc4f3b9c59f55c0ff52ba12f5ae0766cb5c35deee83b8552e","affectsGlobalScope":true},"bd3f5d05b6b5e4bfcea7739a45f3ffb4a7f4a3442ba7baf93e0200799285b8f1","4c775c2fccabf49483c03cd5e3673f87c1ffb6079d98e7b81089c3def79e29c6","d4f9d3ae2fe1ae199e1c832cca2c44f45e0b305dfa2808afdd51249b6f4a5163","7525257b4aa35efc7a1bbc00f205a9a96c4e4ab791da90db41b77938c4e0c18e","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"9c611eff81287837680c1f4496daf9e737d6f3a1ff17752207814b8f8e1265af","affectsGlobalScope":true},"fe1fd6afdfe77976d4c702f3746c05fb05a7e566845c890e0e970fe9376d6a90","b5d4e3e524f2eead4519c8e819eaf7fa44a27c22418eff1b7b2d0ebc5fdc510d","afb1701fd4be413a8a5a88df6befdd4510c30a31372c07a4138facf61594c66d","9bd8e5984676cf28ebffcc65620b4ab5cb38ab2ec0aac0825df8568856895653","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","5e8dc64e7e68b2b3ea52ed685cf85239e0d5fb9df31aabc94370c6bc7e19077b",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"c07146dbbbd8b347241b5df250a51e48f2d7bef19b1e187b1a3f20c849988ff1","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"ae5507fc333d637dec9f37c6b3f4d423105421ea2820a64818de55db85214d66","affectsGlobalScope":true},{"version":"46755a4afc53df75f0bfce72259fb971daac826b0cdd8c4eaccad2755a817403","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","54e854615c4eafbdd3fd7688bd02a3aafd0ccf0e87c98f79d3e9109f047ce6b8","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","8221b00f271cf7f535a8eeec03b0f80f0929c7a16116e2d2df089b41066de69b","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","7fa32887f8a97909fca35ebba3740f8caf8df146618d8fff957a3f89f67a2f6a","9a9634296cca836c3308923ba7aa094fa6ed76bb1e366d8ddcf5c65888ab1024",{"version":"bddce945d552a963c9733db106b17a25474eefcab7fc990157a2134ef55d4954","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","4b55240c2a03b2c71e98a7fc528b16136faa762211c92e781a01c37821915ea6","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"94c086dff8dbc5998749326bc69b520e8e4273fb5b7b58b50e0210e0885dfcde","affectsGlobalScope":true},{"version":"f5b5dc128973498b75f52b1b8c2d5f8629869104899733ae485100c2309b4c12","affectsGlobalScope":true},"ebe5facd12fd7745cda5f4bc3319f91fb29dc1f96e57e9c6f8b260a7cc5b67ee","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","21c56c6e8eeacef15f63f373a29fab6a2b36e4705be7a528aae8c51469e2737b",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"a42be67ed1ddaec743582f41fc219db96a1b69719fccac6d1464321178d610fc","f7dc3e993645c18af9071c7861c74b13775e108f7e25719f1832502749f3f3ab","4c89d1e817ed5662f32f73281908c35300225f86ee9615ea7284b3a3ba7e8e73","4d45b087ac6232c4b691d7af7b005853b3c34d6669f8a0adeb852621d0ca6487","6d1d6e2b7174f994c8d1a12a0c9840e791193f9b19f7978cc728b6017506fb81","71b5fb5ab34deff2c438ca9e699165576d086a597f78f36cd0e8f31d3b813a50","f9a628585dc8d9973cce3968f05f8f9cac16388b114fe35a72dc27eddd3b5ed7","6614bdbdab15e2bc6d1140dad22cfca6618a79ebb2ddca1e10e979628d04b465","102a0246574a7b1fbddc4c10c5e9e28043b91a563c989dcf6cdab036566f2a8f","65137d9bb0feb8773c6c8b0febf0df482c56736a5a343f8a8f1793ec57f60821","ad6373332491e34ef1e4e045f45dcbde93429680b9793b2ccedc1aeb104ab89f","e0233e4856dd75848de95008aa78d01ce1620e8ab2b1cb517071d0642be5bdbc","6183a56473c639c67bae727efff3b4d4fa5e0836ef9170a6a863fd5da100ad6f","c87f68de7be11c5e5fdc61daf4b82817e304509bf6628b7e535dcde3a52cc03e","394cc7861c820ae8cfbb70fefe4810e38d0df90fcff4963896417d2cf391272f","a6b2eefcee7bf0eb3442f3af088e0a0e30fbe29bd85d9e829434a3e4b7ac911d","56d8f5f610511b6c25511f9628cc3718a6d296aa2937d6fdf9dead1e46947023","03037d76ff0005f6893b57f0778d80547d01bfad6906a2fc145e1d65843b12cf","14b7c2b93e9e61d7d9ae0a15ec53e13b907d86e41d941f923181b35fc3c91667","e68d09210bfbc6c91a50f25dc588ddaf5596cc98859c890d0d75823a95e0fb9b","0d7b8162bce11d4e3ecc779b960894742b96530ed4ce97bcc98294414ec67fdd","7c20f2dfd5737c6be51a430296b3a6e4d343609bb960194538e278fedcf1d2c1","3d5b9ec4c3545b98ca8a4c6ec7d2611729e8735acf8eba9a38aec0673fd04514","3e2be2beb52cd6ddcf118b4eca5d714e20af00abf78ca29a22a1142ae4e9e15f","68f9dc7f3ed068b7fee91ef3a58e2ea5b24da3c750edb16c36b90f9d37bdac27","c8c183e6fb6a34dba9daca07f5739c7185d6f46f45cc6052b474599563126d49","eec0b2333c5d5dc4970368f6b451f73d4ae2b7c63984f628c0f1c734be8a334f","770022d3a791df2084bd29548ce96af5938d464dfdbce9970c2ea626ed78434b","4183b4fffd2c031fdf59b9f10e4605301f6136efc459a635edeafd143853286d","785db2d9303f6e5e95770f53ae01bd11aff56e2f1d30765e34ef54f61d684fd6","e5479df8689f85ce437b87ee86fac83a4a2f766dc8a728a28c4efb66d05d9a34","255933b7a2d8f2151547c08e0d0d23252b2b31c96d936dd5fbb9843c9e74b334","9524b9280458375efe0709fdb562c8194b4efd868c4c666f681145bf6a7a1c28","2032d6ec452e4a7d33a87c2e97c37f6db35215b604b30e2495a2a2247f60c082","f5d55bec32087015056cc3fc0a052169878dac611246087120f25a70a285c647","42243bd3897b138dbfdd66afee6ef4224983e6e3dfb8b433710fbd7cfab40f08","ab0b91ba544d64392aef15007e3eff72a7823580399d302458e2140d4fd3579d","4235519a2b8121ffb75328f2822773f0122da6be80336b463a01af5fb48d7b0e","24f169a9c97740ee80b8755dd2ff4fa38678ec4d3aedeb180c293692f6c2361a","be58586a82f316c49d0cb290070f24c4eb703868b50c3fc2cdfaae56631c0fa2","5b19c632c9500022939b1d2770a1e9ec601b32d1fb018d6994097db9001a4d8c","2ac14fb4bb514ddea63664aaec47060d0488a5e646d75a16c398bbb206f8985f","dd4f00785ed0577caccbb1173caa10676964241bae5d804f1e1f7d7bc5593d53","ee4c5fbc985c57953bbc0827bea95e8b0ea2b71831fa216cd8b0e4632c66301c","c858050d3d96d500b5d06096956a8137167e60e063fae37a67d6353583fcc63d","20db6b2113a0890afc714e2107f4219df8f246c35de0a0d346edc342b3a59b76","b2e95d0efc2054fa9ca967a01e82a02a1fd6a911ebe8a7f7bc2583795f9dd881","1c5ce6a202398223afcd7f8927d99463f941237767466d53b23a61ea157846bb","3d005136f19a117184eddcc51811c015533ab4bd79adf7e88bd616c3d67650c0","b2f0cc01cfd06dd34c4d49363c3ff9c4036eb04f96e524f44b1c971eb40f27be","015a461f5bb209f9efe2a00e40e6c606d8d900f52ff7d07f6fee2430d8f20284","be875211e8e00b6a4541bc363877119d3d80a9a8640011e3c97d0d7e65534a9e","1662c3668c06b90e17ea51c1932961184426652e89a4a9e8ef1a4b8101955a97","62996658cffc51e88e36cb4195616d9a1a7cbfad45275e482c0b9dd5b0e7f344","763e5e7e2b50ffb424b84fec434c2283ff9b1c105cc91f8563c67247e39d8aec","be4ace7b0a5bf878e11fb560cde13ce6d165b39e9d684502b07a06e335d1097f","116391d567472ae8adb81282652b4f369d4bd6bbb13aa01b124d0358ee42bab0","0a62399600cf30c53fab181f40af7c88bb024537fb6f305bcc250434ec554c89","c479ed59e0cc6ecd56c4d47bbb06eb00f8bd08c6ea03607e270afded90cb3470","b36887df57f77679299481cbd0c791d9832dfd575d6fcc5591ffdc3b90b4ceb4","20db4c97ffe62cb8a09904558bdab88cea9d7c295a5de916f76c61457dec2867","c118897e00f131381cf6573bc540d3435106c76895e58a55b76b1e19de644e6c","3f511408ea5106b322b0cb490c8ce49ebe1ebdbb0b9f0f25808e1f07867d5757","3bf7b1fba3f92de778e4473c0f03c1b05d31e98b5a45b0a79fbceb106684a68e","613a94f6b698e86cd2baa6209c78ac9131dfd6a3587df12ff98041afdcf76f9d","d81cebf9e57d0eb9ffa1eda702e2bd09f4c50014f2f3c53e0a609290beefe662","d91d51f9e48a48e812b935c5d9fef6168f1d0559de7c0863b61c414c3b605455","e19d256779d8279deab657f22cad490121240fbbfedcd0527933084284192933","2198c5ace2839aa913a1d652aa652ae2052bc0d80e3a9a257e8e30a8e160aeb3","6326939154a02aacb3261f3739e3dea4554085dfceb2d26dbd82468a450f8e1b","d27fa9313bff4d88fec18d395c04123f0714a44fdd6de5ac7c30a7429ef0c4e1","f4bc8eff98d872e004049464f8d86751fecaac7417840e8cecbaa6e55b3b1d57","7663c18abd2e3ed19c9d12581b45134e2d514490891f4f860a792811cc24d2c2","ef27d2813b1fcb6b1bcdc8e9c332d9b36e71de2e7ebbe3262b3318a4d7bf3560","643307ae04aee6d0a28effc4ac9fabb8eb040be596be9f6020d52c5b62be5ae2","13203589974b7751bfeeb3055c4c0199a60fe582adc898a65a5d79375614dd47","1ed686cccce5a27be1f3141d173e8a820c88ad687a495882726d20b682ed817e","c9b2ae1d29936d28fec9d468c2fe35d77a5d550f7f2ef42e1048135f35765778","b383aeb5ab94070a1c24dcf4f95ce6ac1a351c563e37a2de0058d8d1259d49c9","7d5414c872fef983b214f8f1e66edf7652becd6d9da52a5cdbcb88c7c5ed0aac","5c5f9edf4f848449142a867fcfd02b035e102eeb32a04b84e7b54525c2dd26c6","ac8ac236717f7f84690ef26bff8744cd2f28a8db1167048b84fc52c69634e263","9a8000bd3e203ca941f4f52ceef2686946800bc1418ddca9aa1b29cb2af5319d","c60210772fa691168b8c1ef11d86bde50abdbc9772fc811190c95e56c5ed1ff7","9618f852ead3126916ecf12541e1040f62cd97375b669e673acf6a29f7fcc03b","387b04be5d19e57edd81c7f03f48a32f426b43ffd6533688de48c8eee941c60b","78f2ea8e5e5264ea21c5468b4872e8560564ae654a8d4b72a4a9e571230ea536","20bd128b1900dfc8ad9e6968a2141a2d0ce3a47b9f6c6c37d2f72dd7db3139e3","e7f325977f5952a7458467ed482e1903fa9ac90d9cd48d595033dce448e2ceb6","b50362e95e904b3f62389c8b7474e58bf1d6ad5cb9ee793a1fbd830c48a9b130","97f6a71ad8733b651e1168571649ef7c1f2da3a2a645f3b554529019f3278b44","37a0a590bc79312fde1117df5c85f59fe0aaa8023cf05932800badea10ee5ff9","3ba66eb4df84e3c942328529490bb3098eaaebadcd475b9dafa50a791d07a615","53f213a384bf10d9554a4b765fb689c5652a6207654b45175588ad9ced7646d9","d276fbf95f7a55fcb1071861e19f1cfc64573b85d82d5fc16685d794b7a1a6be","acb673766fafe44805916b7268e7f9eb8a533857bba96c491b9822ef96344840","d140fb0a1532b1305f6896d14abad20f89aced0297dc8de1c91e48c5722d04dc","b0af76354e4b9cd0a21a7b5fe88fcb967c1cef5cc802de6d0750583751856558","3fb1e27086f0aa3de2f0e7e5a7785143a688e4632e3815bdced89b1eb47db5da","0d77de3ab21a79ba6b045b6e090b554bf781b0479bf4e612fa3e37a294e4cd48","c803c7a019d167d414e842a993bef5da33f8684468581add5ae079ba4bd9f9d9","2fb74550f7bde961e30e85d54e98e95f24529832ed258da29af243c16b946e8d","1faf898cfa002f866766e350c443d345078aca64513ee734edd52859c2ebe519","a82983282c6519cdc8c66d81a07e034454af9df1a8b0d600e27608dc67887e6b","6a82da485abc23e1f63f65d14698451dc0a3f153810bc1208ff328cfbc91d17a","0e28ebe5133db119d2e6e52dd7f7ade6092152e85b14b6c23aaef938b368da53","66d72a9904812bb7f17cdd284889d3c1b37961e5722e20e248d2c4d887afed5c","ceb3e4ab38154b897f6008c78a1632c416b78a3d980b2a6e1b4420cfd2335f1c","b5408bc8c0429418457e538dc66320c8d0a3781e3aa6f3784a391e890ce0ba08","7d58aed1a0f3537d9bcb95641b83957a60c43edbcbd572e60125c4c2ce134fbc","55814b6d90ac9df7d387e2dd83d10b85cb5521870ebe86d9fa3a1e93ecabb3c7","3d69b81fd329ddb25cd59c5f3f0a12e6236a1c93d6acb67dae495f7346b8b68a","36b3fc1e11ff5ef0af78c9eac67bf0f0566828223b82b562b9394b5884b9b977","261ad905d3763ef75d887260e79913ab33938dc80bf5c247263e7d3a6e56261f","b062c20df544eedc8903d047cb6ec7b12ef730c27bf1bbc52459a0976247e386","f8e9c0ede647b155f6f23ef46e97986f9d4bea5cec92a86ffb10a4b18a011dc6","9541a134946e40b71ff41770484698337169da237658c5e12d749b4eb874595a","c079324b927b081e8785280e0efbd33ba228ebebb2425a93cf9bc41b01398a0b","43d03180c19e11ac277e4b7c4d8f4d65654211e8b0ddcd0cef5ab4e85600a2e0","45b9ab524a41523754211490fde86ceb4919c7f33891f905158794badd37092a","207e6271d7cc0a519a8f024dd5f09823bbb3978e733fa69b3ff23dcde9a11269","c25393e12204b3d7fb64f30b1162d9dc99b24cfc38533eb0ffd86cb1eeb6a294","f10103a4a9cd8f96e06f7e1c78424d3cadce5b0956e94f5e2c65a49d29f5a7d4","0524f5e4a4743166af011984619e634d3b81bfff649837643ae0467199809467","b647906423e2f95be4258f5e6b3a170782928cbfad310a9be31062a27e100858","deb833983eab5c95ce61751f07bfd2b2618b013b182021eaaaeb6cfb8a071e88","088853f4d3b115a3f05a3561c09513a2652472eb45e162a8c263dfb8d84a210e","0984b6e8a2eb2451ec1cb49e51f6c0c9bb2b1f8cebb850a7c49ffe4dd4fe7a27","982e0717cdc99894e25fb6d87b0218cd221d99a440ab8f32f66388309ee8ece2","75eac5e76c0214e789afb921009201d750cb67033789bc75cac71dd7fba3c035","9e237c0e4743ac170786019d80f25c56d7341db9bb191116fb8939d66523ba62","fd111f97dce2e421cc1bee9dba82bbcbebe6ff1b6842c03a9f98418ce0350b42","353f7144721b2748ef6ebfe38a4b0981097fa598ea35457e629b27b961dab07b","7a28c877fc6fcec1579988cd8eb48c0442040c70be663fe09c1d1429e0423a9a","7d43bdaf780517dcaa029ff8cafb7464ad8d4cd3186cc6d60ca3911f6b75925f","864ddc2a7850329bbd857f4ff97ea8df2a4f6ec30ecda45fdac02096c6567df0","dc87959b5eaa6530139bf9b136c3c0f5b552d19d1e659066c820435b043b2eb9","195680be8390d611254573187da6c50d3a679be81021abf1b49baa6a8d6dab56","79c04ddfb432b75ac99f3ced497c24cd026b2810d656b007dd7783f219478e51","fb5e2197d79c2a9e36556075477b459bc1cba96a49577d8ee0d963a20b488d8f","520525246cf40d9f7da18774069a0d3a521fe92f1f282499c2fed30193f44291","36a364aa3535becb3f69bff0044643a3c02c1b5d809f16bcd04e726024cebafd","f79a32de1dace313c819fb562099b16d97bc290f2532836ea16f2ad9bdd86a66","0d467454e25ef5862f3d054ac3adb7713aabd482bb53b79dd2c89c376f8e84a4","cfa54ffe6efb22b8feaaf2e36c681a084c3ce505bf2890c503f4cbb519337e63","00fae336db44552739ebe7c172187d8d667d49ec1aa0739d0408dad1334c54b4","216a57f3e0a22a5dabeb20f7e70197849c2e89163f6025ce014eb704e47c937b","02d3038759d3e967c121fb058732c531ef867b913e1004069ca8ae291c47ec62","39973c3424992a00f6a10246c17b31e2de83109dd4891fb03ecbb44998cb9144","4748840d90c6ab3818e65c686e5c9bc89eb8861bec693606a0aa1e52bad39552","acc9c371832ce828a998571b8ded4239728c427786389d54721c8faa14f38836","28fa5115b7e713a349499ef2f7496e8ed46400f7fc4f674a14093d4a9fd13f7c","d878fae306447b55cb7de1d2d9560a6f5f92aaef306a17f294fb157b98763e41","110eb84825d6c46c600ef1f1f8518d63cce6cdd4c29f4028a11585296a587f51","75d8eba72b08a5618a68ef80bab10aa089126d6d6980288f71a67c18a1ebf9cf","9da72bc274a751ac3ba0b5932e029b0f744fb685a73878edae2dbd5d8d299bd8","b123ca2df88e0b4a452edbb83f02515b37a76cbd754859d88513415be0497e05","2fd32aec6f5df41b1fec54294b317bfbbf616a811dab4ffdc1fc3dad672689bb","d6d3cca0b5e6dcaa22b638361f3731d61d970551ae1dd94edc50fc1644c06a04","285c939d8e4cdbd36d01d25e749a33dd87f773b00f3dc723f6379965f1f3e57b","f0eeec252b0b1352d89d1c00b1b4de86aac0ce60ef50efe68fabf6d7ef94ab9b","1670b85b5476061ada746b1666605ffc74fdde6fe2507ea4fd4aea03afc71f34","0753c1a9e5282f7d474fd1322aca12858b57703baa03ccab28901499fb4b52b2","a92b2ae227c03340ddd4c38ee20f54ddf9b239b53d36b6de2442be8b4d56d970","135762c9d7d771c78cafdf36ffc1785b8d37f7e60b0bf9581e2de83296ca89a8","6f5ea90a20a125640c6acfd5dbc04086512465bcde781e80114a000b5262ff1e","26c93ece8e57b05e555d0d899401c2aa8638f1c5b9b1f7debbe00c9dbf582d68","62010289494665b1f59e6a192403c2be5db4462daa8a9b2122b6a7f3dd0037a3","dc6b39c63f4c9debf861f584760f98a2cbd6c3cd8ea155a5c9b50f7457576399","25d3fa4d471fcc47c43f0c3f432fd0d549b90ff177c8cccf8c4ecc8212d4bb2c","fe2bde75b894c5e06a04c1293238bd07d459f8be15d4bf0fb0398ae96d93f7da","8a9d182357187d43e618a2af5c446142c9b54a61fbd54fd34380dd249f4726da","059d57361af574f7bfbc92611b18d0cd0e86096b3f02347bfbd5946da23d7409","fcd6c5c9464e4746d12c42e52effd1be2fb3365bc9b352af00163ff2e462bc35","8ab72b32c9d583c2bf3f6ed7def7d4d192fe861dac6a3936638b966c76efdafb","2a42d270d9157ecac790cb4262a03a1f573a22e8393c74190a313601decd7a20","57b358e53474d48f596ff3f50ac1c16771ba6f960d67bf5ff52cad244686c78c","5db80aaed904b53df8bb56b6ad11bfbd7bd95cbae495551dd3d23c2a2e920551","3e6ecb32fe77a3d1ceb886ffc52a9ac172d1be9f1f95578742f966ecf1894832","7cedb55fe7533bd1489d0bb90a4cd5f64e20f903dd1da79346087dd521ac8127","ea48005eeee9696b61331fdbe3dcce5145401f453bbc2b3335037920a5f326b2","140b5b26ae62c6c4415d9c68b0239a145feb01269c452344cddcb590ba3dbbdf","5c364fbe017dd7555ad9c0ccce84700b74acfea1c393db4d3c8f943c000e953c","846da1ea9c55a62faf0e46d358224d3fe89cf90868a46d4660eb717a1b392469","62ac525d09ffae20519efcb84a5c0361ba1f971864ba61633b7b61bc5a37b27f","222df6dc8b2cb057ace9914c462f26c0cae287b8c6cb9382529040ddeb3b360c","3396d28c0c94ae860858c9c401c1d4ae74670c1b772ba4ba5619183719c03bf4","be5fa2c70cda236fce28c90bdde9ff41889320c15cc17df730baa2f645543df6","f92829ffe2ade262426e69653d6c5a43849d59fbac413de4816cf6ae008e356c","db5b0c25e6af09ca0bebae5026aa7cd79a92eaa43f9af2ab8cd5789b7aebd5b5","d3939fd3e84233dd9a5a9a0c4afbd63189b501833e6cd7dc2596d0ec83f15e78","46ef1c0f9df1ed2ae35422bc9ca9a6a1f7df7daf576b13af2dfdff2a48701320","d74870f9928a6fc1bf1bac428d17e93002febe88664f5f5a1ac00c596102f7d6","897efa5342971257e68de7f417b872f47a1c53613a42042572d7c97359a9d526","b666ad2298db2e67478951783dc5d7d5d0fe869a72461e2fedf0f027e5a54d41","3474d8ae839c1f9e9af541f2f6559457960080828ce365b1d178d14b981bb3f8","ac475370ed23b1c2c8ab48c0d0f95e4e65601e92fb0b13aebc8f1d6d381d003d","399905f8e11e068ef73cffd1868345345d79694c14b894d5894abb689618ad2f","35cfb5cfc9d3cf7136794f110372d5807db47f5643c0646363ccc1023a98fa9d",{"version":"1e1c96ae510e13ac6388d0428f59c94bc2ff283c0ccbba3f9ee965f19c495e23","signature":"bd075613ebe9ad6c9b3adb67195fc969f20e5e9c36298096c451d429f2ba2d28"},"19fd329349eb6a93a8f69af375efa88dc0dc5a9175c00b99fe30ece766cf0fec","eb243f5468506aa75b53515edd95e3f2bf047d2cea58925f5a314b08d698bfef","9548aabaeedbcfd4ff769c361f38b75a888ffd69c22da57fca5f63d9187fca5d","bf8d10553c34182dfffe8b790f014b7e79213c6e98e214485ccf9478f23f991f","755eea84a87ef7d132d354ed014c50ab75d4a34e9559ccc6fa030fedd4f3d1ea","f63cd77d7492ba22602757706f0c69eb3347a37dc699c613172d5b2a21490b5a","927ebd59c4d038b77a586979c833487e0f042abcdad43d8dbd8efd5dee594444","e96b066eb9fd84ff95919871e253bdfe89f69f693342629ce6682129af520234","c2622f3a8436b191e615420ca9bf253f6dfcf94c48a97c9d6f0aeada696f231d","476d655f8be276ff54c3b9f759e726b413974d2e9477d71ef5a822eb5c9f23eb","b51f16b5c1c0bb0cab5b769210337937a24ec746163c2a4ec19a375f038b5ac0","a23fbd2e709a483a1ad8e0eefa60f6e3ec805ccda39dc03a62b4fc5850e48355","e4ea9ef628f408110525a1cdd18ec5028bfdd329a8ddfdbf894a0fbecad4bae0","7f33d0d260ab2f1cf48bb1b1964d0f1a28382839b68d8e37234e7c9c741b721e","0763d47189f3f6abf9bf554abe26356cc031e4ddf63160daf9655feca6733510","1bc68827231a09e0c64d069b3b36edb1bc4a913cdedd0e250b0b9b311e70d5d4","f78997ac43db231a4a5457672ce28b603ac942401162f771f24c7fe81ab217d9","e66c4c9c4b957a88d81e34ea61b4dcd3b7ff020794cff90e3075999bbc315c9c","d7621fa8a764a3d4b35007ab695aa96b3733fe08806a95e878244ee30ed2641e","038dc83d6ffc3e609096c955f998fa48d9b0527a8953567ce6202aad511fbfa0","ad644527b82e0b65d2220159fe8f029832248edab936079b99db63919b80816e","5cef169a9675bf5a8252a02dfa7d5cfb901df3cb3ef830b422748a30eb7bf45b","e47834c1aaff5768c14992ce1b38674d15656e4eda26de6908fa6a8c1f7284ca","6fca3f1df1fde448c93fd2a8d5e5323a08eac12d28bf8cbb0e775bd31c5db153","b81fcb81cb82487d098ade46123e71cdc894618748607edbd78680b7c269328c","3d532a056100f5961e4490bba47dd4cd6681776c73aac1f47d15cc4e1421a25b","8262a9115176246c1d02183a7d7edac9f7e524ce3898bd83c1a62f7cbade5b98","0d538a01457b940a52af80d3579e12d6d2d591264b9c6794e6f336ca9d96f456","54e0fe5e5219a0a0d79f70c712920f83c25e7093997c875e363e35bdb9fd9390","ec7def9da2afb3c422614b127dd3e480181895f350f3eaea9907c40b95539d68","b14584f31222777bf2d335870c8f38a8664de5bc96f6e60c3fc640f979bd1148","403f9be983da13e54d42d4f1d58b9bac8351fcbc2b55f91b3c9ee084669a0fef","12aa0cf428fd73f175cd5bab0b52b990d573aeef3057180a9b25ce4600a78657","bca09e69981babb046aea598ab847d45569b80f2ea2c2f699f33f3b0eca68201","a96325bc6f6d21f0610fd8a6c9ab009ef10cc497a6e377a064ea7f624cfcda03","caee8217716916831b30db6d01e60de2767fb047a6e04416daa4f3977a0d0af6","5268bdb9bb193927e7a076eea6f61f36d36ef5f206f0ac96d75db9e081a9ae0f","9d26892d46573c93b42e27596f69a94640adcc8636bebc731206bb9b1517c2ac","ece182f166b0196560bcccb70112027ceb7bd4e3bf1a3d6578fce9c913409263","f75102825bc6df71aa3098ca43e0abc183392a0f07bfbf46d9d346fc2d58787e","eca3d39118a685a87ee0f5d939c4c907f5cd419cac7b10f67e5c28e0a339ed5b","057b45b9e0a1a04d5f0e6c4bc1006eee655156b87d4e34c442b8fef1b01c403e","96c82a2e425ce2849dbef7cb0344cd40847381c92d5adff8bd4ba7ef41e6ac85","2121d3bb13ec2ef6524180c94fca7afe1794257ad549ed8ac8705ce5ec76b928","0c10b810c8716953aaa93843fe8458e177fbc0431891065b362986d3e4db712d","7984ae4dc5cedfd63df1904661c3a62fd97101e8d58958826304875c1fe737aa","286841e5060ec0b17279a78e0e8170bddea9e79f1566fbdc03390c503f513635","58c026e95b287df30a7aa5665f5733d63a59a79c2d2591ca09f608eb28ea9d94","b1cad415e5a6f80234fae799d5f48d903cfe0339a860cf2592b104420eeeb226","57a8cc1ab2a96371ae2a641edc52d9849bbb11b5139499840cb7e9a2aad63bab","224ff6a7684920ee91a4483933a276705474c0b95e47bfdb06bcf8f1cc4d6ac6","b8ef333131aed1ba5e4ee5764474fe2bb1d7743d45182d57444fe5e47aaff3f8","c54dd58d735800d7ae1b5ad11a37c03c8524f6870d337b2e9b204a5556464b87","d55620fa0008ce6868a85ffccdd2f415d538b926d1694b96a74edbce584eb928","120ebbe6a3360a02dabed49f2c258707c7d48b2cdfe83461eccda88580fddf54","8114e4e4da23c7c72b835423ce3bd51d8f2c991f54e1e13c2d784a2789f84566","84765fb546f0535b27caf5578d8f903090c51526e8c21f30551271d9bfa8a900","67da206ebd319b5c872384e3818933de12178676443be3bb9239566e4ec6eca0","1545316ba58d5261f32d4f80e19bb8202c010f399aa13c7194662e49c2d2e7c4","8adeb00e49b6a9366d20add121183cf55b434d50efc8f0d5dae254ffa0f46877","596eeeb32d27bd2684a87367f90f27380277e0957d00bce4c1363c9f7e157e74","12ecc994acb2478ada23ba2f23f6351b1ac4374ebbbbe18fe13946edd8ae7d21","e45ba6064065038ba650f869fc5bc48cfe8279316230eb53a5a097a6855f0c7b","c1cc3ae2b370b3e61ef8c35e4d7959e8b1b75b198e838b8810a6c4afea21d572","978c6ce33ec7fe1b8b60ec3e3174a948fd80edbb3360e86b3c108bdcb8912069","9aaea3879bfeec5688c649633ba93fd4152573b8e01e869a0983eb2011df913b","60f8e47994e36de18407c8a7b4e285689eae7f08848107bebb52346fbb28d164","222fafe15e3b263369f584397b815bc046d36a401f06d9234fbcee2cc0e75dd2","6b56a4681133c98ad44c7a46bcc52cd6ebad88c4ff2da9b6ed732e71bb40bf07","1d4fc2ca00f621bd668d410888244e79ff24378a0f77716a1a39848478dff500","b7b0efbdceecacd0bdda5d17504979eaa591f6c6ca9e0bed3072ae0aaf6e5c09","179d1edac2f9c09f5fdc9ecfc09336347018f50e3ca94438d5689a3231c3bca0","2ddcbfecfaebfd5edb8f624dac815308b50b778e6c5e6b87cc9191f082cad095","14b83d6e337d6697d69038aa8d384096ebbe983d75e596e180d6483586d68051","07d9bf6c83ca7e8b1cf9d577dff43c6ccb91af6ce3fd6db7135e21e66ac3411f","211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32",{"version":"852317b7af371da8a5ac77ccb09c186f1400aa64f8fa6233511d6261c8655b19","signature":"e40fd8c7edb424642e8e62b71c3064a01c84bf99eb9c07aaf285ae6bee3d28e6"},{"version":"4635b038bd5840d62d7c56dc22c59742fa391d7b76ba37dad65eb0a8031008be","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"5e74b3b56d6fa38e27c08553e5664abce45e76ff355f696e77554a22c515e28a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"3dfcd0a3bfa70b53135db3cf2e4ddcb7eccc3e4418ce833ae24eecd06928328f","5c0948b942f2e4d15bf7425e927967bf7b7013060b39286d01789d748e3df721","bc41a8e33caf4d193b0c49ec70d1e8db5ce3312eafe5447c6c1d5a2084fece12","7c33f11a56ba4e79efc4ddae85f8a4a888e216d2bf66c863f344d403437ffc74","d147404d24705b7dfcc196012d20d9622ed042c04a160d641baf2af0f462ed77","fc9d4e784c9e7569911d8a6a01e1de90617942639c7c260beffdef1548b1ce06","f3acf8cff186f71a3a9b2da63f1378de6fe68a8578cb47d097776143cc84cd7d","c6029ce69540fcc6b659b90e1c1164bffc0d68f8db05f9ba5dca0919255c05af","5743243334c97d149ebb6093de9060ddaff7158ea093e99062737cbcfc8e5ca5","aa9456d4df880022cac314c906f232cd3911052e114aa77c41dae2ce42e4bcf0","585b6a3e27da0624e1d7d370aa56de47405f63443557d05fc1628a65684f2db6","d2bce192bfd015f614ed990644618ca6d9d58e1d17eaf427f943d03d823be7a3","c2be5af341b5c92d4c26e1d4451394c7ac3d7db081d9e08d99ba4abf67fed2e1","e27605c8932e75b14e742558a4c3101d9f4fdd32e7e9a056b2ca83f37f973945","3771cb36b62e2fa4a9e381816c75bad9595ba12a1b513d8ccdca05d8b9a6f081","f3daf1c3dccf7f6f6611cfc327526735a747a28a4a86f1c9e75a7d89ac406cad","4d56463740ea85ab77709af57f97c8a412c6ceac031c7de6b08b183bd924fb60","dc6b37790a3e06a31d2bfec7d926f472da80c212df13d668d2c1335c757357e0","3fcfbc27efa7d3302b4ddce48126c5a0e28253070c6342fd4e889501809d80e9","3f5d5691e167b4df74f8e700d79facf33d6054178d5902fb4311943b7ba14dd3","4965752112e0dd55f695c547b2ec8beb9ecc4b98962ef19b6302c330c35d2f42","394b4927dcc6eda44eb759f395da17b6e07f4daf272216b5cfc92eb32239f561","171c555cae7fb14e62a760eac187e74381c4b1a7e1e6e0834a0ace1f434dfb66","66c57d7932ffcfb7ab9573825e45029c0a7f39c94b742b283f19f8bf301ce7d9","3956f34170e48abf902bc81055fb35a7e8b87109dbf3ca272d096d6d42cf7b84","7777a3f34cef7a7cabd0fa03a662cb6968cccadb111af18098d7eb302c892253","960923ce078ecfef6e5c34468cdba5c552b064c0db7cb0fdd3eafd1bb9d3d7e9","42f034630b3a866d4a88b37cf0f8357b36af2f7298b319d536b7413ba99f979b","33d1d46d7789bebdf9b78cd54f39022aad5d7d1d03a58bdad4fe98658acfef06","b5a4f434a23873c13037973bb7072f28d5438e0d0bcb6fefd15ffcb44592891e","0b2b568e213ec5b02f35ee84ebf4c3218ff66fd4dad8acb1ac19001ca96e34f2","b19ff018419b54a2da6d73e289995ee46d6124de0beaf0d0b9b49e072efc6f46","325994b6f6c7598c73bbd0294bf1e3f1e229772669b3c8a08fe3170442f600b8","6710a28c1184ef61c21173c7cbf64cdc07d7cecd5982e9c8469052a2d7380b6c","843563f951d16e850a0be806010f630a4a71f0a55810bb9aced67c6d7774bf2f","9af1c478e5403b39b922df9132d779bc6e1ef88cafec17fcecf26356d90ecbd6","454e856b3762d7b57bfb0fd8f321b5a95c4f369a3506f631bddba5c186d70eb1","2d92dab66d4e9228e477063ba55f073507a2f3451a3cef146347a41d6bd062ab","02b1caff09358768da68691fd5bdb7c60b6682371ef987cfcfb329e860996673","b932682e049f41e294a3429aca3b0adb4d2eed8047b4c22f91565e9353d6940c","989b451e0ad386e24883d8939e1ba39f3446c91dd2bfac0862d76e5e73711da4",{"version":"5fe0bfee6f4c755d85e40d499314e5796e91c56555b713d5a9c30931dd30295a","signature":"e5aa6f9f174b70dc81759b46d31b8dbcf35273bd1760dd6f42b88d258960cb4f"},"b8442e9db28157344d1bc5d8a5a256f1692de213f0c0ddeb84359834015a008c","458111fc89d11d2151277c822dfdc1a28fa5b6b2493cf942e37d4cd0a6ee5f22","da2b6356b84a40111aaecb18304ea4e4fcb43d70efb1c13ca7d7a906445ee0d3","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","febf0b2de54781102b00f61653b21377390a048fbf5262718c91860d11ff34a6","6f294731b495c65ecf46a5694f0082954b961cf05463bea823f8014098eaffa0","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","68a0d0c508e1b6d8d23a519a8a0a3303dc5baa4849ca049f21e5bad41945e3fc","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","b03afe4bec768ae333582915146f48b161e567a81b5ebc31c4d78af089770ac9","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd",{"version":"ef6a775dedc33618f6d3690582ebbe5ad52fd28ae757d6a9a7ef22f3e8bf2753","signature":"be2d8b749756dfc9e59182e975a575fc544849d1977c1b8222df8ea6d6f7f5df"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"233a21773fce7bb4d66d98fc26224da295302dacdae4c151c1e0ffafd178339a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"233a21773fce7bb4d66d98fc26224da295302dacdae4c151c1e0ffafd178339a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"5955bcdf8878bfbb1a51c008fa54efaa7e4c0e81eecb086e8b574d085ec3b33a","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},{"version":"8cb5ca4275ed1fb2d193b2ded33f72d891d367b44f357adfe7afd8aadfa98b6c","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"55584873eae27c5607725f0a9b2123cdea9100fd47cd4bfd582b567a7c363877","2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","8041cfce439ff29d339742389de04c136e3029d6b1817f07b2d7fcbfb7534990","670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","9d38964b57191567a14b396422c87488cecd48f405c642daa734159875ee81d9","069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","53de0abfdd3b44213e7c3884e1aaceaf390a16a8494429864c57ddaaa43dd1e7","afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec",{"version":"5ab630d466ac55baa6d32820378098404fc18ba9da6f7bc5df30c5dbb1cffae8","affectsGlobalScope":true},"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","c0288f54de6f544706a3150c8b579b1a975870695c4be866f727ece6a16f3976","f8636a916949481bc363ae24cbeb8451fa98fd2d07329e0664a46567278c9adb","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e"],"root":[144,145,147,510,[589,591],633,[647,655]],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"module":1,"newLine":1,"noImplicitAny":true,"outDir":"./","preserveConstEnums":true,"skipLibCheck":true,"target":2},"fileIdsList":[[656],[671],[656,657,658,659,660],[656,658],[662],[311],[274,311,586,587],[274,311],[666],[667],[673,676],[274,303,311],[634,636,637,638,639,640,641,642,643,644,645,646],[634,635,637,638,639,640,641,642,643,644,645,646],[635,636,637,638,639,640,641,642,643,644,645,646],[634,635,636,638,639,640,641,642,643,644,645,646],[634,635,636,637,639,640,641,642,643,644,645,646],[634,635,636,637,638,640,641,642,643,644,645,646],[634,635,636,637,638,639,641,642,643,644,645,646],[634,635,636,637,638,639,640,642,643,644,645,646],[634,635,636,637,638,639,640,641,643,644,645,646],[634,635,636,637,638,639,640,641,642,644,645,646],[634,635,636,637,638,639,640,641,642,643,645,646],[634,635,636,637,638,639,640,641,642,643,644,646],[634,635,636,637,638,639,640,641,642,643,644,645],[224],[260],[261,266,295],[262,273,274,281,292,303],[262,263,273,281],[264,304],[265,266,274,282],[266,292,300],[267,269,273,281],[260,268],[269,270],[273],[271,273],[260,273],[273,274,275,292,303],[273,274,275,288,292,295],[258,261,308],[269,273,276,281,292,303],[273,274,276,277,281,292,300,303],[276,278,292,300,303],[224,225,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310],[273,279],[280,303,308],[269,273,281,292],[282],[283],[260,284],[285,302,308],[286],[287],[273,288,289],[288,290,304,306],[261,273,292,293,294,295],[261,292,294],[292,293],[295],[296],[260,292],[273,298,299],[298,299],[266,281,292,300],[301],[281,302],[261,276,287,303],[266,304],[292,305],[280,306],[307],[261,266,273,275,284,292,303,306,308],[292,309],[679,718],[679,703,718],[718],[679],[679,704,718],[679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717],[704,718],[273,311,720],[165],[167,168,169,170,171,173,222,223,312,313,314,315,316,317,318,320,321,323,324,325,326,327,328,329,331,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,466,468,471,472,473,474,475,476,477,478,479,480,481,482,485,486],[173,317],[173,221,317,327,331,334,338,342,397,483,484],[312],[328],[334],[331,334],[292,311,317,318,326,327],[167,170,313,314,315,316],[317],[167,170],[168,169],[170],[166,332],[173,221,317,342,384,464],[171],[170,221],[221,222],[167,172,223,502],[221],[324],[322],[320,321,323,325],[311,319],[330,331],[166,332,487],[216,311],[311,330],[328,329],[163,170,317,340,341,342],[340,341,342,344],[317,340,341,343],[340,342],[326],[340,345,346],[317,326,465],[317,326,467],[173,202,221,469,470],[311,320,321,323,325,330,331,332,333],[320,321,323,325,326,334],[317,327,334,338],[166,170,317,327],[166,311,317,334],[166,175,221,317,331,333,344,475,477,478],[166,170,476],[166,221,317,333,344,477],[331],[476],[173,221,317,333,344],[166,173,221,317,333,344,476],[385,386,387,388,389,396,397,423,424,425,426,445,446,447,448,449,450,451,452,453,454,455,456,457,459,460,461,462,463],[397],[386,387,390],[390],[385,390],[388,390],[391,392,393,394],[386,387,389,395,396],[422,423,487],[386,444,445,446,487],[221,386,396],[330,487],[385],[327,328,397],[386],[388],[387,397],[450],[158],[450,454],[450,451,454],[451],[311,358],[311,358,449,459],[221,389,396,397,420,449,450,451,452,453,454,455,456,457,458,464],[330,461],[161,162],[161],[489],[157,159],[175],[157,158],[491],[330],[364,366,384,421,422,427,428,429,430,431,432,433,436,437,438,441,442,443],[175,366,434,487],[420,487],[420,421,487],[420,421,422,487],[420,464,487],[366],[175,487],[281,292,311,383],[487],[349,362,363,364,365,487],[427],[502],[358,361],[428],[163,173,317,340,342,366,384,435],[156,366],[366,439],[362,440,487],[175,216,221,330,358,361,383,420,444,464,487,488,490,492,494,497,501],[359,360],[493],[292,311],[153,154,155,156,163,164,174],[155],[153],[154],[156,159,160,162],[156],[150,166,173],[495,496],[495],[210,211,212,213,214,215],[212],[210],[175,210,211,213],[212,213],[148,149,150,151,177,178,179,181,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,202,203,204,205,206,207,208,209,217,218,219,220],[175,202],[152,176,177],[176,202],[152,218,219],[152,176],[150,151],[152],[149,150,151,178,179],[149],[152,177,180,194,201],[181,182,183,184,185,186,187,188,189,190,191,192,193],[152,175],[179],[166,186],[166,189],[192],[150,191],[195,196,197,198,199,200],[203,204],[152,178,179],[152,197],[179,206,208,209,216,487],[206],[179,206,207],[207],[398,399,400,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419],[175,216,292,311,330,361,398,406,407,409,410],[292,311,410],[276,311,398],[216,292,311,401],[175,311,407],[216,292,311,398],[399],[216,292,311,402,406,408,411],[158,330,403],[405],[405,418,487],[404,417,420,487],[404],[303,311,405,406],[350,351,352,353,354,355,356,357],[350,351],[354],[350],[358],[362],[500],[498,499],[498],[367,368,369,370,371,372,373,374,375,376,378,379,380,381,382,465],[166,319,327,377,487],[367],[380,381],[380],[262,311],[366,384,464,487],[262,311,374],[502,516],[292,311,502,514],[311,502],[511,512,513,514,515,516,517,518,519,520,521,526,534,539,540,550,552,554,557,560,563,565,569,571,573,580,583,584],[502,515,521,522,523,524],[515,516],[522],[522,524,525],[502,516,521,527,529,530,531],[516],[527,528,529,530,531,532,533],[502,516,521,535,536,537],[521],[535,536,537,538],[292,311,523,540],[502,521,541,544,550],[541,542,543,551],[517],[311,502,523],[523,553],[557],[502,521,558],[558,559],[502,521,555],[555,556],[502,521,561],[561,562],[564],[502,516,521],[513,516],[544,545,546,547,548,549],[502,521,545,546,547,548],[516,566],[566,567,568],[502,521,567],[570],[572],[517,540,576],[574,575,576,577,578,579],[292,311,502,521,577],[581,582],[311,502,517,521,581],[311,502,515,517,521,560],[503,504,505,506,507,508],[504],[502,504],[502,503],[669,675],[673],[670,674],[99],[98,100,102],[98,99,100,101],[97,102,103,135,140],[102],[97,102,117,135],[97,102,116,135],[97,102,135],[97,102,116,118,119,120,121,122,123,124,125,126,127,131,134],[97,102,116,128,131,135],[102,113,129,130,135],[128,131,135],[97,102,116,117,135],[97,102,132,133,135],[104,105,106,107,108,109,110,111,112,113,114,115],[112],[116],[138,139],[141],[136,137],[672],[96],[63,65,74],[63,64,65,72,74,75],[63,64,65,74],[64,66,67,68,69,70,71,72,73,75,86],[63,64,66,67,68,69,70,71,72,73,75,86,95],[63,64,66,67,68,69,70,71,72,73,74,75,86,95],[61,64,66,67,68,69,70,71,72,73,75,85,86,95],[64,66,67,68,69,70,71,72,73,75,86,87,88,89,90,92,93,94],[63,64,65,66,67,68,69,70,71,72,73,75,86,90,91,95],[63,71,85,95],[63,64,72,95],[64,66,67,68,69,70,71,72,73,74,75,85,95],[64,66,67,68,69,70,71,72,73,75,76,77,78,79,80,81,82,83],[64,66,67,68,69,70,71,72,73,75,76,77,78,79,80,85],[63,64,66,67,68,69,70,71,72,73,74,75,76,77,85],[64,66,67,68,69,70,71,72,73,75,76,77,78,85],[64,66,67,68,69,70,71,72,73,75,76,78,79,80,81,82,83,84],[63,64,66,67,68,69,70,71,72,73,75,76,77,78,79,85],[63,64,66,67,68,69,70,71,72,73,75,76,77,78,79],[64,66,67,68,69,70,71,72,73,75,76,77,78,79,85],[64,66,67,68,69,70,71,72,73,75,85],[63,65,72],[64,66,67,68,69,70,71,72,73,75],[63,64,65,72,74],[64,66,67,68,69,70,71,73,75],[63,64,72,74],[72],[51,52,53,54,55,56,57,58,59,60,61,62],[52],[54],[61],[235,239,303],[235,292,303],[230],[232,235,300,303],[281,300],[230,311],[232,235,281,303],[227,228,231,234,261,273,292,303],[227,233],[231,235,261,295,303,311],[261,311],[251,261,311],[229,230,311],[235],[229,230,231,232,233,234,235,236,237,239,240,241,242,243,244,245,246,247,248,249,250,252,253,254,255,256,257],[235,242,243],[233,235,243,244],[234],[227,230,235],[235,239,243,244],[239],[233,235,238,303],[227,232,233,235,239,242],[261,292],[230,235,251,261,308,311],[593,616,617,621,623,624],[601,611,617,623],[623],[593,597,600,609,610,611,614,616,617,622,624],[592],[592,593,597,600,601,609,610,611,614,615,616,617,621,622,623,625,626,627,628,629,630,631],[596,609,614],[596,597,598,600,609,617,621,623],[610,611,617],[597,600,609,614,617,622,623],[597,598,600,609,610,616,621,622,623],[596,597,598,600,609,610,611,612,613,617,621,622],[596,617,621],[617,623],[596,597,598,599,608,611,614,617,621],[596,597,598,599,611,612,614,617,621],[592,594,595,597,601,611,614,615,617,624],[593,597,617,621],[621],[618,619,620],[594,616,617,623,625],[601],[601,610,614,616],[601,616],[597,598,600,609,611,612,616,617],[596,600,601,608,611,632],[596,597,598,601,608,609,611,614],[616,622,623],[597],[597,598],[595,596,598,602,603,604,605,606,607,609,612,614],[633,647],[144,147,502,510,585,588,589,632],[144,147,585,588,632,646],[145,146,283],[147,510,585,588,589],[147,510,588],[147,509],[147,502],[141,142,143],[144]],"referencedMap":[[658,1],[672,2],[661,3],[657,1],[659,4],[660,1],[663,5],[664,6],[588,7],[665,8],[667,9],[668,10],[677,11],[586,12],[635,13],[636,14],[634,15],[637,16],[638,17],[639,18],[640,19],[641,20],[642,21],[643,22],[644,23],[645,24],[646,25],[224,26],[225,26],[260,27],[261,28],[262,29],[263,30],[264,31],[265,32],[266,33],[267,34],[268,35],[269,36],[270,36],[272,37],[271,38],[273,39],[274,40],[275,41],[259,42],[276,43],[277,44],[278,45],[311,46],[279,47],[280,48],[281,49],[282,50],[283,51],[284,52],[285,53],[286,54],[287,55],[288,56],[289,56],[290,57],[292,58],[294,59],[293,60],[295,61],[296,62],[297,63],[298,64],[299,65],[300,66],[301,67],[302,68],[303,69],[304,70],[305,71],[306,72],[307,73],[308,74],[309,75],[703,76],[704,77],[679,78],[682,78],[701,76],[702,76],[692,76],[691,79],[689,76],[684,76],[697,76],[695,76],[699,76],[683,76],[696,76],[700,76],[685,76],[686,76],[698,76],[680,76],[687,76],[688,76],[690,76],[694,76],[705,80],[693,76],[681,76],[718,81],[712,80],[714,82],[713,80],[706,80],[707,80],[709,80],[711,80],[715,82],[716,82],[708,82],[710,82],[721,83],[722,84],[487,85],[482,86],[485,87],[313,88],[329,89],[335,90],[336,91],[328,92],[317,93],[315,94],[171,95],[170,96],[314,97],[483,98],[484,99],[172,100],[365,100],[222,101],[223,102],[173,103],[470,104],[469,104],[325,105],[323,106],[326,107],[320,108],[332,109],[333,110],[322,111],[331,112],[339,113],[343,114],[345,115],[346,116],[344,117],[340,94],[467,118],[348,119],[466,120],[468,121],[471,122],[318,104],[334,123],[486,124],[472,125],[473,126],[474,127],[476,128],[479,129],[478,130],[475,131],[477,132],[480,133],[481,134],[464,135],[390,136],[391,137],[392,138],[393,139],[394,140],[395,141],[397,142],[424,143],[447,144],[426,145],[448,146],[386,147],[423,148],[445,104],[446,149],[387,149],[389,150],[396,151],[458,104],[451,152],[452,152],[461,153],[457,154],[455,155],[450,149],[454,156],[449,157],[460,158],[459,159],[462,160],[488,161],[162,162],[490,163],[330,164],[158,165],[159,166],[492,167],[491,168],[444,169],[434,165],[435,170],[421,171],[422,172],[442,173],[443,174],[431,175],[432,175],[433,176],[384,177],[363,178],[366,179],[428,180],[349,181],[362,182],[429,183],[436,184],[437,185],[440,186],[441,187],[502,188],[361,189],[359,168],[494,190],[493,191],[175,192],[156,193],[154,194],[155,195],[163,196],[164,197],[174,198],[497,199],[496,200],[216,201],[213,202],[211,203],[212,204],[214,205],[221,206],[176,207],[219,208],[218,209],[220,210],[177,211],[152,212],[178,213],[180,214],[150,215],[202,216],[194,217],[184,218],[185,213],[186,219],[187,220],[189,219],[190,221],[191,219],[193,222],[192,223],[201,224],[197,219],[198,219],[199,219],[205,225],[203,226],[204,227],[217,228],[209,229],[208,230],[206,231],[207,229],[420,232],[411,233],[412,234],[400,235],[402,236],[403,168],[408,237],[409,238],[410,239],[413,240],[416,241],[406,242],[419,243],[418,244],[417,242],[405,245],[407,246],[358,247],[352,248],[355,249],[353,250],[356,251],[351,252],[357,168],[501,253],[500,254],[498,252],[499,255],[383,256],[378,257],[369,258],[382,259],[381,260],[370,261],[465,262],[375,263],[166,84],[512,181],[517,264],[518,265],[519,266],[585,267],[525,268],[522,269],[524,270],[526,271],[532,272],[527,273],[528,273],[529,273],[530,273],[534,274],[538,275],[535,273],[536,273],[537,276],[539,277],[541,278],[551,279],[552,280],[523,281],[553,282],[554,283],[558,284],[559,285],[560,286],[555,273],[556,287],[557,288],[561,284],[562,289],[563,290],[565,291],[564,292],[545,264],[546,273],[547,293],[548,273],[544,273],[550,294],[549,295],[567,296],[569,297],[568,298],[571,299],[570,292],[573,300],[572,292],[577,301],[580,302],[579,303],[583,304],[582,305],[584,306],[507,181],[508,181],[509,307],[505,308],[506,309],[504,310],[676,311],[674,312],[675,313],[100,314],[101,315],[102,316],[141,317],[103,318],[118,319],[119,319],[132,320],[120,320],[121,321],[122,320],[123,319],[135,322],[124,321],[125,319],[126,321],[133,321],[127,319],[129,323],[131,324],[130,325],[128,326],[134,327],[117,318],[116,328],[113,329],[139,330],[140,331],[136,332],[138,333],[137,332],[673,334],[97,335],[75,336],[73,337],[66,338],[67,338],[87,339],[88,340],[89,341],[90,342],[95,343],[92,344],[93,339],[94,344],[86,345],[91,346],[96,347],[84,348],[81,349],[78,350],[79,351],[85,352],[82,353],[83,354],[80,355],[76,356],[77,357],[68,337],[69,338],[74,358],[70,359],[72,360],[71,361],[65,362],[63,363],[56,364],[59,364],[61,365],[62,366],[242,367],[249,368],[241,367],[256,369],[233,370],[232,371],[255,6],[250,372],[253,373],[235,374],[234,375],[230,376],[229,377],[252,378],[231,379],[236,380],[240,380],[258,381],[257,380],[244,382],[245,383],[247,384],[243,385],[246,386],[251,6],[238,387],[239,388],[248,389],[228,390],[254,391],[625,392],[612,393],[624,394],[623,395],[593,396],[632,397],[613,398],[622,399],[599,400],[610,401],[617,402],[614,403],[597,404],[596,405],[609,406],[600,407],[616,408],[618,409],[619,410],[620,410],[621,411],[627,410],[628,412],[602,413],[603,413],[604,413],[611,414],[615,415],[601,416],[629,417],[630,418],[598,419],[606,420],[607,421],[608,422],[631,401],[655,423],[633,424],[647,425],[147,426],[590,427],[591,428],[510,429],[145,70],[589,430],[144,431]],"exportedModulesMap":[[658,1],[672,2],[661,3],[657,1],[659,4],[660,1],[663,5],[664,6],[588,7],[665,8],[667,9],[668,10],[677,11],[586,12],[635,13],[636,14],[634,15],[637,16],[638,17],[639,18],[640,19],[641,20],[642,21],[643,22],[644,23],[645,24],[646,25],[224,26],[225,26],[260,27],[261,28],[262,29],[263,30],[264,31],[265,32],[266,33],[267,34],[268,35],[269,36],[270,36],[272,37],[271,38],[273,39],[274,40],[275,41],[259,42],[276,43],[277,44],[278,45],[311,46],[279,47],[280,48],[281,49],[282,50],[283,51],[284,52],[285,53],[286,54],[287,55],[288,56],[289,56],[290,57],[292,58],[294,59],[293,60],[295,61],[296,62],[297,63],[298,64],[299,65],[300,66],[301,67],[302,68],[303,69],[304,70],[305,71],[306,72],[307,73],[308,74],[309,75],[703,76],[704,77],[679,78],[682,78],[701,76],[702,76],[692,76],[691,79],[689,76],[684,76],[697,76],[695,76],[699,76],[683,76],[696,76],[700,76],[685,76],[686,76],[698,76],[680,76],[687,76],[688,76],[690,76],[694,76],[705,80],[693,76],[681,76],[718,81],[712,80],[714,82],[713,80],[706,80],[707,80],[709,80],[711,80],[715,82],[716,82],[708,82],[710,82],[721,83],[722,84],[487,85],[482,86],[485,87],[313,88],[329,89],[335,90],[336,91],[328,92],[317,93],[315,94],[171,95],[170,96],[314,97],[483,98],[484,99],[172,100],[365,100],[222,101],[223,102],[173,103],[470,104],[469,104],[325,105],[323,106],[326,107],[320,108],[332,109],[333,110],[322,111],[331,112],[339,113],[343,114],[345,115],[346,116],[344,117],[340,94],[467,118],[348,119],[466,120],[468,121],[471,122],[318,104],[334,123],[486,124],[472,125],[473,126],[474,127],[476,128],[479,129],[478,130],[475,131],[477,132],[480,133],[481,134],[464,135],[390,136],[391,137],[392,138],[393,139],[394,140],[395,141],[397,142],[424,143],[447,144],[426,145],[448,146],[386,147],[423,148],[445,104],[446,149],[387,149],[389,150],[396,151],[458,104],[451,152],[452,152],[461,153],[457,154],[455,155],[450,149],[454,156],[449,157],[460,158],[459,159],[462,160],[488,161],[162,162],[490,163],[330,164],[158,165],[159,166],[492,167],[491,168],[444,169],[434,165],[435,170],[421,171],[422,172],[442,173],[443,174],[431,175],[432,175],[433,176],[384,177],[363,178],[366,179],[428,180],[349,181],[362,182],[429,183],[436,184],[437,185],[440,186],[441,187],[502,188],[361,189],[359,168],[494,190],[493,191],[175,192],[156,193],[154,194],[155,195],[163,196],[164,197],[174,198],[497,199],[496,200],[216,201],[213,202],[211,203],[212,204],[214,205],[221,206],[176,207],[219,208],[218,209],[220,210],[177,211],[152,212],[178,213],[180,214],[150,215],[202,216],[194,217],[184,218],[185,213],[186,219],[187,220],[189,219],[190,221],[191,219],[193,222],[192,223],[201,224],[197,219],[198,219],[199,219],[205,225],[203,226],[204,227],[217,228],[209,229],[208,230],[206,231],[207,229],[420,232],[411,233],[412,234],[400,235],[402,236],[403,168],[408,237],[409,238],[410,239],[413,240],[416,241],[406,242],[419,243],[418,244],[417,242],[405,245],[407,246],[358,247],[352,248],[355,249],[353,250],[356,251],[351,252],[357,168],[501,253],[500,254],[498,252],[499,255],[383,256],[378,257],[369,258],[382,259],[381,260],[370,261],[465,262],[375,263],[166,84],[512,181],[517,264],[518,265],[519,266],[585,267],[525,268],[522,269],[524,270],[526,271],[532,272],[527,273],[528,273],[529,273],[530,273],[534,274],[538,275],[535,273],[536,273],[537,276],[539,277],[541,278],[551,279],[552,280],[523,281],[553,282],[554,283],[558,284],[559,285],[560,286],[555,273],[556,287],[557,288],[561,284],[562,289],[563,290],[565,291],[564,292],[545,264],[546,273],[547,293],[548,273],[544,273],[550,294],[549,295],[567,296],[569,297],[568,298],[571,299],[570,292],[573,300],[572,292],[577,301],[580,302],[579,303],[583,304],[582,305],[584,306],[507,181],[508,181],[509,307],[505,308],[506,309],[504,310],[676,311],[674,312],[675,313],[100,314],[101,315],[102,316],[141,317],[103,318],[118,319],[119,319],[132,320],[120,320],[121,321],[122,320],[123,319],[135,322],[124,321],[125,319],[126,321],[133,321],[127,319],[129,323],[131,324],[130,325],[128,326],[134,327],[117,318],[116,328],[113,329],[139,330],[140,331],[136,332],[138,333],[137,332],[673,334],[97,335],[75,336],[73,337],[66,338],[67,338],[87,339],[88,340],[89,341],[90,342],[95,343],[92,344],[93,339],[94,344],[86,345],[91,346],[96,347],[84,348],[81,349],[78,350],[79,351],[85,352],[82,353],[83,354],[80,355],[76,356],[77,357],[68,337],[69,338],[74,358],[70,359],[72,360],[71,361],[65,362],[63,363],[56,364],[59,364],[61,365],[62,366],[242,367],[249,368],[241,367],[256,369],[233,370],[232,371],[255,6],[250,372],[253,373],[235,374],[234,375],[230,376],[229,377],[252,378],[231,379],[236,380],[240,380],[258,381],[257,380],[244,382],[245,383],[247,384],[243,385],[246,386],[251,6],[238,387],[239,388],[248,389],[228,390],[254,391],[625,392],[612,393],[624,394],[623,395],[593,396],[632,397],[613,398],[622,399],[599,400],[610,401],[617,402],[614,403],[597,404],[596,405],[609,406],[600,407],[616,408],[618,409],[619,410],[620,410],[621,411],[627,410],[628,412],[602,413],[603,413],[604,413],[611,414],[615,415],[601,416],[629,417],[630,418],[598,419],[606,420],[607,421],[608,422],[631,401],[633,432],[647,432],[589,181],[144,332]],"semanticDiagnosticsPerFile":[143,142,658,656,669,672,671,661,657,659,660,663,664,588,665,666,667,668,677,678,586,587,635,636,634,637,638,639,640,641,642,643,644,645,646,662,224,225,260,261,262,263,264,265,266,267,268,269,270,272,271,273,274,275,259,310,276,277,278,311,279,280,281,282,283,284,285,286,287,288,289,290,291,292,294,293,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,703,704,679,682,701,702,692,691,689,684,697,695,699,683,696,700,685,686,698,680,687,688,690,694,705,693,681,718,717,712,714,713,706,707,709,711,715,716,708,710,719,721,720,165,722,487,482,485,327,312,313,329,335,336,328,317,315,167,171,168,170,169,314,483,484,316,172,365,222,223,173,470,469,325,323,326,320,321,319,332,333,322,324,331,337,338,339,343,345,346,342,344,341,340,467,347,348,466,468,471,318,334,486,472,473,474,476,479,478,475,477,480,481,464,390,391,392,393,394,395,397,424,447,425,426,448,386,423,445,446,387,389,385,396,463,388,458,451,452,461,456,457,455,450,453,454,449,460,459,462,488,162,161,490,489,330,157,158,159,492,491,444,434,435,421,422,442,443,431,432,433,364,384,363,366,427,428,430,349,362,429,436,437,438,440,439,441,502,361,360,359,494,493,175,156,154,155,153,163,164,174,497,496,495,216,213,211,212,214,215,210,221,176,219,218,220,148,177,152,178,180,179,151,149,150,202,181,182,183,194,184,185,186,187,188,189,190,191,193,192,201,195,196,197,198,199,200,205,203,204,217,209,208,206,207,420,411,412,399,400,402,403,408,409,410,413,416,414,415,401,398,406,419,418,417,405,404,407,358,350,352,355,353,356,351,354,357,501,500,498,499,383,378,369,382,380,381,367,368,377,374,379,370,465,371,372,373,375,376,166,511,512,515,517,518,519,520,516,521,513,514,585,525,522,524,526,532,533,531,527,528,529,530,534,538,535,536,537,539,542,541,543,551,552,523,553,554,558,559,560,555,556,557,561,562,563,565,564,545,546,547,548,544,550,549,566,567,569,568,571,570,573,572,574,575,576,577,578,580,579,581,583,582,540,584,507,508,503,509,505,506,504,226,670,676,674,675,98,100,101,102,99,141,103,118,119,132,120,121,122,123,135,124,125,126,133,127,129,131,130,128,134,117,104,105,106,107,116,109,108,110,111,112,113,114,115,139,140,136,138,137,160,673,97,75,73,66,67,87,88,89,90,95,92,93,94,86,91,96,84,81,78,79,85,82,83,80,76,77,64,68,69,74,70,72,71,65,51,52,53,63,54,55,56,57,58,59,60,61,62,49,50,9,10,14,13,3,15,16,17,18,19,20,21,22,4,23,5,24,28,25,26,27,29,30,31,6,32,33,34,35,7,39,36,37,38,40,8,41,46,47,42,43,44,45,2,1,48,12,11,242,249,241,256,233,232,255,250,253,235,234,230,229,252,231,236,237,240,227,258,257,244,245,247,243,246,251,238,239,248,228,254,625,594,612,624,623,593,632,595,613,622,599,610,617,614,597,596,609,600,616,618,619,620,621,626,592,627,628,602,603,604,611,615,601,629,630,605,598,606,607,608,631,146,648,649,650,651,652,653,654,655,633,647,147,590,591,510,145,589,144],"emitSignatures":[[144,"7501318ad4d83f33b4cf67135c7cfa64a297f95a1921241cd91e5bc47db30b02"]],"latestChangedDtsFile":"./src/constants.d.ts"},"version":"5.4.5"} \ No newline at end of file diff --git a/tests/system-integration/resources/.gitignore b/tests/system-integration/resources/.gitignore new file mode 100644 index 0000000000..12cf6d06d9 --- /dev/null +++ b/tests/system-integration/resources/.gitignore @@ -0,0 +1 @@ +custom_config.yml From 977aaae540f7a4f0637a1b4fedc35d44883cc9ac Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 22 May 2024 16:54:58 -0400 Subject: [PATCH 05/21] improvements to spool collection, dataset management Signed-off-by: MarkAckert --- tests/system-integration/jest.config.ts | 6 +- tests/system-integration/reports/junit.xml | 9 -- .../resources/convert_to_ebcdic.sh | 59 +++++++++ .../resources/test_config.yml | 9 +- .../__snapshots__/certificate.test.ts.snap | 15 +++ .../init/__snapshots__/vsam.test.ts.snap | 56 +++------ .../src/__tests__/init/apfauth.tests.ts | 61 +++++++++ .../src/__tests__/init/certificate.test.ts | 79 ++++++++++++ .../src/__tests__/init/certificate.tests.ts | 10 -- .../src/__tests__/init/vsam.test.ts | 16 ++- .../src/config/TestConfig.ts | 65 +++++----- .../system-integration/src/config/ZoweYaml.ts | 6 + tests/system-integration/src/globalSetup.ts | 119 +++++++++++++++--- .../system-integration/src/globalTeardown.ts | 43 +++++-- .../src/zos/RemoteTestRunner.ts | 56 ++++++--- .../src/zos/TestAwareFiles.ts | 38 +++--- tests/system-integration/tsconfig.json | 2 +- 17 files changed, 478 insertions(+), 171 deletions(-) delete mode 100644 tests/system-integration/reports/junit.xml create mode 100644 tests/system-integration/resources/convert_to_ebcdic.sh create mode 100644 tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap create mode 100644 tests/system-integration/src/__tests__/init/certificate.test.ts delete mode 100644 tests/system-integration/src/__tests__/init/certificate.tests.ts diff --git a/tests/system-integration/jest.config.ts b/tests/system-integration/jest.config.ts index 001a90583d..b635cb4f8f 100644 --- a/tests/system-integration/jest.config.ts +++ b/tests/system-integration/jest.config.ts @@ -29,7 +29,11 @@ const config: Config = { }, ], ], - testTimeout: 3600000, + testTimeout: 60000, + transform: { + '^.+\\.(t|j)sx?$': ['ts-jest', { isolatedModules: true }], + }, + fakeTimers: {}, verbose: false, silent: false, }; diff --git a/tests/system-integration/reports/junit.xml b/tests/system-integration/reports/junit.xml deleted file mode 100644 index 8466e1fde0..0000000000 --- a/tests/system-integration/reports/junit.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/tests/system-integration/resources/convert_to_ebcdic.sh b/tests/system-integration/resources/convert_to_ebcdic.sh new file mode 100644 index 0000000000..46e55321f1 --- /dev/null +++ b/tests/system-integration/resources/convert_to_ebcdic.sh @@ -0,0 +1,59 @@ +####################################################################### +# This program and the accompanying materials are made available +# under the terms of the Eclipse Public License v2.0 which +# accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-v20.html +# +# SPDX-License-Identifier: EPL-2.0 +# +# Copyright Contributors to the Zowe Project. 2018, 2024 +####################################################################### + +# Taken as-is from .pax/pre-packaging.sh, swapped encodings +# +# Used as part of globalSetup to ensure the `bin/` folder is in the right encoding + +# --------------------------------------------------------------------- +# --- convert files to ascii +# $1: (input) pattern to convert. +# Files will be determined by 'find -type f' +# $2: (input) optional output directory. +# If unset, conversion happens in-place +# If set, conversion will mirror directory structure in output +# (output) converted files or directory following $2 +# --------------------------------------------------------------------- +function _convertAsciiToEbcdic { + input=$1 + output_dir=$2 + using_output_dir="no" + if [ -z "$output_dir" ]; then + echo "[$SCRIPT_NAME] converting $input to ebcdic in-place" + else + if [ -f "$output_dir" ]; then + echo "[$SCRIPT_NAME] $output_dir already exists and is a file, aborting _convertAsciiToEbcdic" + return 1 + elif [ ! -d "$output_dir" ]; then + mkdir -p "$output_dir" + fi + using_output_dir="yes" + echo "[$SCRIPT_NAME] will convert $input to ebcdic, results in $output_dir" + fi + + files_to_convert=$(find $input -type f) # processes all files + for ascii_file in $files_to_convert; do + echo "[$SCRIPT_NAME] converting $ascii_file to ebcdic..." + tmpfile="$(basename $ascii_file).tmp" + iconv -f ISO8859-1 -t IBM-1047 "${ascii_file}" >${tmpfile} + if [[ "$using_output_dir" == "yes" ]]; then + dir_path=$(dirname $ascii_file) + mkdir -p ${output_dir}/${dir_path} + mv "${tmpfile}" "${output_dir}/${ascii_file}" + else + mv "${tmpfile}" "${ascii_file}" + fi + done + + return 0 +} # _convertAsciiToEbcdic + +_convertAsciiToEbcdic "./bin" diff --git a/tests/system-integration/resources/test_config.yml b/tests/system-integration/resources/test_config.yml index 4b335a1848..ef4dd91b53 100644 --- a/tests/system-integration/resources/test_config.yml +++ b/tests/system-integration/resources/test_config.yml @@ -1,7 +1,7 @@ # These below variables can be replaced -host: -user: -password: +zos_host: +zos_user: +zos_password: ssh_port: zosmf_port: remote_test_dir: @@ -12,7 +12,8 @@ remote_teardown: false test_ds_hlq: test_volume: zosmf_reject_unauthorized: -download_configmgr: false +download_configmgr: true +download_zowe_tools: true jfrog_user: jfrog_token: collect_test_spool: true diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap new file mode 100644 index 0000000000..527f8eb423 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap @@ -0,0 +1,15 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`init-cert cert disable cfgmgr 1`] = ` +" +$ Error ZWEL0316E: Command requires zowe.useConfigmgr=true to use. +Error ZWEL0999E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." +`; + +exports[`init-cert cert enable cfgmgr 1`] = ` +" +$ ------------------------------------------------------------------------------- +>> Creating certificate authority "local_ca" + +Error ZWEL0158E: Keystore "/test/dir/local_ca/local_ca.keystore.p12" already exists." +`; diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index 89362bb1f8..decb37f1cc 100644 --- a/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -1,25 +1,13 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`init vsam BAD: bad ds prefix 1`] = ` +exports[`init-vsam creates vsam 1`] = ` " -$ Temporary directory '/tmp/.zweenv-6996' created. +$ Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets -cp: FSUM6258 cannot open file "//'ZOWEAD6.ZWETEST.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) -Error ZWETODOE: ZOWEAD6.ZWETEST.NOEXIST.SZWESAMP(ZWEGENER) could not be copied. Review other error output from the 'cp' command. -ERROR: Error ZWEL0999E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL ZOWEAD6.ZWETEST.NOEXIST.SZWESAMP(ZWEGENER) before running this command." -`; - -exports[`init vsam GOOD: simple --dry-run 1`] = ` -" -$ Temporary directory '/tmp/.zweenv-1582' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -------------------------------------------------------------------------------- ->> Initialize Zowe custom data sets - -Template JCL: ZOWEAD6.ZWETEST.SZWESAMP(ZWEGENER) +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) --- JCL content --- //ZWEGENER JOB //* @@ -49,15 +37,15 @@ Template JCL: ZOWEAD6.ZWETEST.SZWESAMP(ZWEGENER) // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), // SPACE=(3120,(20,5,10)) //* -//* Replace ZOWEAD6.ZWETEST with the +//* Replace TEST.DATASET.PFX with the //* Value as seen in zowe.yaml //* -//SYSPROC DD DSN=ZOWEAD6.ZWETEST.SZWEEXEC,DISP=SHR +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR //* -//* Replace ZOWEAD6.ZWETEST with the +//* Replace TEST.DATASET.PFX with the //* Value as seen in zowe.yaml //* -//STEPLIB DD DSN=ZOWEAD6.ZWETEST.SZWELOAD,DISP=SHR +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR //ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR //ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR //ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR @@ -68,12 +56,12 @@ Template JCL: ZOWEAD6.ZWETEST.SZWESAMP(ZWEGENER) //* zowe-yaml-schema.json //* server-common.json //* -//* Replace /ZOWE/zwe-integration with where your Zowe run time +//* Replace /test/dir with where your Zowe run time //* directory is, as seen in zowe.yaml //* //MYSCHEMA DD *,DLM=$$ -FILE /ZOWE/zwe-integration/schemas/zowe-yaml-schema.json -FILE /ZOWE/zwe-integration/schemas/server-common.json +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json $$ //* //* The DD below must include one or more FILE or PARMLIB @@ -84,7 +72,7 @@ $$ //* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB //* FILE /the/zowe/defaults.yaml //MYCONFIG DD *,DLM=$$ -FILE /ZOWE/zwe-integration/zowe.test.yaml +FILE /test/dir/zowe.test.yaml $$ //CMGROUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* @@ -115,7 +103,7 @@ noverbose - Submitting Job ZWEGENER Job ZWEGENER(JOB00000) completed with RC=0 Zowe JCL generated successfully -Template JCL: ZOWEAD6.ZWETEST.SZWESAMP(ZWECSVSM) , Executable JCL: ZOWEAD6.ZWETEST.JCLLIB(ZWECSVSM) +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) --- JCL Content --- //ZWECSVSM JOB //* @@ -157,36 +145,28 @@ Template JCL: ZOWEAD6.ZWETEST.SZWESAMP(ZWECSVSM) , Executable JCL: ZOWEAD6.ZWETE //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE CLUSTER - - (NAME(ZOWEAD6.ZWETEST.VSAMTEST) - + (NAME(TEST.DATASET.PFX.VSAMTEST) - // DD DDNAME=NONRLS // DD * REC(80 20) - INDEXED) - - DATA(NAME(ZOWEAD6.ZWETEST.VSAMTEST.DATA) - + DATA(NAME(TEST.DATASET.PFX.VSAMTEST.DATA) - RECSZ(4096 4096) - UNIQUE - KEYS(128 0)) - - INDEX(NAME(ZOWEAD6.ZWETEST.VSAMTEST.INDEX) - + INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - UNIQUE) //RLS DD * STORCLAS() - LOG(NONE) - //NONRLS DD * - VOLUME(ZOS003) - + VOLUME(TSTVOL) - SHAREOPTIONS(2 3) - //* --- End of JCL --- -JCL not submitted, command run with "--dry-run" flag. -To perform command, re-run command without "--dry-run" flag, or submit the JCL directly - ->> Command run successfully. - +Submitting Job ZWECSVSM +Job ZWECSVSM(JOB00000) completed with RC=0 >> Zowe Caching Service VSAM storage is created successfully. " `; - -exports[`init vsam disable cfgmgr 1`] = ` -" -$ Error ZWEL0316E: Command requires zowe.useConfigmgr=true to use." -`; diff --git a/tests/system-integration/src/__tests__/init/apfauth.tests.ts b/tests/system-integration/src/__tests__/init/apfauth.tests.ts index 19cc91fd06..2bb66dc15f 100644 --- a/tests/system-integration/src/__tests__/init/apfauth.tests.ts +++ b/tests/system-integration/src/__tests__/init/apfauth.tests.ts @@ -8,3 +8,64 @@ * Copyright Contributors to the Zowe Project. */ +import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; +import ZoweYamlType from '../../types/ZoweYamlType'; +import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; +import { ZoweYaml } from '../../config/ZoweYaml'; +import { DatasetType, TestAwareFiles, TestManagedDataset } from '../../zos/TestAwareFiles'; + +const testSuiteName = 'init-apfauth'; +describe(testSuiteName, () => { + let testRunner: RemoteTestRunner; + let cfgYaml: ZoweYamlType; + let cleanupDatasets: TestManagedDataset[] = []; // a list of datasets deleted after every test + + beforeAll(() => { + testRunner = new RemoteTestRunner('init-apfauth'); + }); + beforeEach(() => { + cfgYaml = ZoweYaml.basicZoweYaml(); + }); + + afterEach(async () => { + if (TEST_COLLECT_SPOOL) { + await testRunner.collectSpool(); + } + // re-created in every `init` subcommand based on changes to zowe yaml command... + const jcllib: TestManagedDataset = { name: REMOTE_SYSTEM_INFO.jcllib, type: DatasetType.NON_CLUSTER }; + + // try to delete everything we know about + await TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); + cleanupDatasets = []; + }); + + it('apf disable cfgmgr', async () => { + cfgYaml.zowe.useConfigmgr = false; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(60); // 60 is expected error code... + }); + + it('apf bad ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); + }); + + /* it('apf simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... + }); + + /* it('apf security-dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --security-dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... }); + });*/ +}); diff --git a/tests/system-integration/src/__tests__/init/certificate.test.ts b/tests/system-integration/src/__tests__/init/certificate.test.ts new file mode 100644 index 0000000000..7def72d4f8 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/certificate.test.ts @@ -0,0 +1,79 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; +import ZoweYamlType from '../../types/ZoweYamlType'; +import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; +import { ZoweYaml } from '../../config/ZoweYaml'; +import { DatasetType, TestAwareFiles, TestManagedDataset } from '../../zos/TestAwareFiles'; + +const testSuiteName = 'init-cert'; +describe(testSuiteName, () => { + let testRunner: RemoteTestRunner; + let cfgYaml: ZoweYamlType; + let cleanupDatasets: TestManagedDataset[] = []; // a list of datasets deleted after every test + + beforeAll(() => { + testRunner = new RemoteTestRunner('init-cert'); + }); + beforeEach(() => { + cfgYaml = ZoweYaml.basicZoweYaml(); + }); + + afterEach(async () => { + if (TEST_COLLECT_SPOOL) { + await testRunner.collectSpool(); + } + // re-created in every `init` subcommand based on changes to zowe yaml command... + const jcllib: TestManagedDataset = { name: REMOTE_SYSTEM_INFO.jcllib, type: DatasetType.NON_CLUSTER }; + + // try to delete everything we know about + await TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); + cleanupDatasets = []; + }); + + it('cert disable cfgmgr', async () => { + cfgYaml.zowe.useConfigmgr = false; + const result = await testRunner.runZweTest(cfgYaml, 'init certificate'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); // 231 is expected error code...? + }); + + it('cert enable cfgmgr', async () => { + cfgYaml.zowe.useConfigmgr = true; + const result = await testRunner.runZweTest(cfgYaml, 'init certificate'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); // 231 is expected error code...? + }, 180000); + /* + it('cert bad ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); + }); + + it('cert simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... + }); + + /* it('apf security-dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --security-dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... }); + });*/ +}); diff --git a/tests/system-integration/src/__tests__/init/certificate.tests.ts b/tests/system-integration/src/__tests__/init/certificate.tests.ts deleted file mode 100644 index 19cc91fd06..0000000000 --- a/tests/system-integration/src/__tests__/init/certificate.tests.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - diff --git a/tests/system-integration/src/__tests__/init/vsam.test.ts b/tests/system-integration/src/__tests__/init/vsam.test.ts index f5a51b1217..d7d570dd57 100644 --- a/tests/system-integration/src/__tests__/init/vsam.test.ts +++ b/tests/system-integration/src/__tests__/init/vsam.test.ts @@ -14,14 +14,14 @@ import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; import { DatasetType, TestAwareFiles, TestManagedDataset } from '../../zos/TestAwareFiles'; -const testSuiteName = 'init vsam'; +const testSuiteName = 'init-vsam'; describe(testSuiteName, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; let cleanupDatasets: TestManagedDataset[] = []; // a list of datasets deleted after every test beforeAll(() => { - testRunner = new RemoteTestRunner('vsam'); + testRunner = new RemoteTestRunner('init-vsam'); }); beforeEach(() => { cfgYaml = ZoweYaml.basicZoweYaml(); @@ -32,13 +32,13 @@ describe(testSuiteName, () => { afterEach(async () => { if (TEST_COLLECT_SPOOL) { - testRunner.collectSpool(); + await testRunner.collectSpool(); } // re-created in every `init vsam` based on changes to zowe yaml command... const jcllib: TestManagedDataset = { name: REMOTE_SYSTEM_INFO.jcllib, type: DatasetType.NON_CLUSTER }; // try to delete everything we know about - TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); + await TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); cleanupDatasets = []; }); @@ -64,4 +64,12 @@ describe(testSuiteName, () => { expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(0); // 60 is expected... }); + + fit('creates vsam', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... }); + cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: DatasetType.VSAM }); + }); }); diff --git a/tests/system-integration/src/config/TestConfig.ts b/tests/system-integration/src/config/TestConfig.ts index a3e07e37ad..110818f2ec 100644 --- a/tests/system-integration/src/config/TestConfig.ts +++ b/tests/system-integration/src/config/TestConfig.ts @@ -24,33 +24,12 @@ class ConfigItem { this.default = defaultVal; } } - -type TestConfigData = { - zos_java_home: string; - zos_node_home: string; - host: string; - user: string; - password: string; - ssh_port: string; - zosmf_port: string; - remote_test_dir: string; - test_ds_hlq: string; - test_volume: string; - zosmf_reject_unauthorized: string; - download_configmgr: string; - remote_setup: boolean; - remote_teardown: boolean; - jfrog_user: string; - jfrog_token: string; - collect_test_spool: string; -}; - const configFields: ConfigItem[] = [ new ConfigItem('zos_java_home', false), new ConfigItem('zos_node_home', false), - new ConfigItem('host', true), - new ConfigItem('user', true), - new ConfigItem('password', true), + new ConfigItem('zos_host', true), + new ConfigItem('zos_user', true), + new ConfigItem('zos_password', true), new ConfigItem('ssh_port', true), new ConfigItem('zosmf_port', true), new ConfigItem('remote_test_dir', true), @@ -58,6 +37,7 @@ const configFields: ConfigItem[] = [ new ConfigItem('test_volume', true), new ConfigItem('zosmf_reject_unauthorized', false, false), new ConfigItem('download_configmgr', false, true), + new ConfigItem('download_zowe_tools', false, true), new ConfigItem('remote_setup', false), new ConfigItem('remote_teardown', false), new ConfigItem('jfrog_user', false), @@ -65,22 +45,21 @@ const configFields: ConfigItem[] = [ new ConfigItem('collect_test_spool', false, true), ]; -// export const REPO_ROOT_DIR: string = findDirWalkingUpOrThrow('zowe-install-packaging'); export const THIS_TEST_ROOT_DIR: string = findDirWalkingUpOrThrow('system-integration'); // JEST runs in the src dir - const configFile = process.env['TEST_CONFIG_FILE'] || `${THIS_TEST_ROOT_DIR}/resources/test_config.yml`; const configData = getConfig(configFile); export const THIS_TEST_BASE_YAML: string = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'zowe.yaml.base'); +export const TEST_OUTPUT_DIR: string = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'output'); export const INSTALL_TEST_ROOT_DIR: string = path.resolve(__dirname, '../'); export const TEST_DATASETS_LINGERING_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'lingering_ds.txt'); export const TEST_JOBS_RUN_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'jobs-run.txt'); +export const DOWNLOAD_ZOWE_TOOLS = yn(configData.download_zowe_tools, { default: true }); export const DOWNLOAD_CONFIGMGR = yn(configData.download_configmgr, { default: true }); -export const TEST_DATASETS_HLQ = configData.test_ds_hlq || 'ZWETESTS'; +export const TEST_DATASETS_HLQ = configData.test_ds_hlq || configData.zos_user + '.ZWETESTS'; export const REMOTE_SETUP = yn(configData.remote_setup, { default: true }); export const REMOTE_TEARDOWN = yn(configData.remote_teardown, { default: true }); -export const REMOTE_TEST_DIR = configData.remote_test_dir; export const TEST_COLLECT_SPOOL = yn(configData.collect_test_spool); export const JFROG_CREDENTIALS = { user: configData.jfrog_user, @@ -97,18 +76,40 @@ export const REMOTE_SYSTEM_INFO = { szwesamp: `${configData.test_ds_hlq}.SZWESAMP`, jcllib: `${configData.test_ds_hlq}.JCLLIB`, szweload: `${configData.test_ds_hlq}.SZWELOAD`, + ussTestDir: configData.remote_test_dir, }; export const REMOTE_CONNECTION_CFG = { - host: configData.host, + host: configData.zos_host, ssh_port: Number(configData.ssh_port), zosmf_port: Number(configData.zosmf_port), - user: configData.user, - password: configData.password, + user: configData.zos_user, + password: configData.zos_password, zosmf_reject_unauthorized: ru, }; -export function getConfig(configFile: string): TestConfigData { +type TestConfigData = { + zos_java_home: string; + zos_node_home: string; + zos_host: string; + zos_user: string; + zos_password: string; + ssh_port: string; + zosmf_port: string; + remote_test_dir: string; + test_ds_hlq: string; + test_volume: string; + zosmf_reject_unauthorized: string; + download_configmgr: string; + download_zowe_tools: boolean; + remote_setup: boolean; + remote_teardown: boolean; + jfrog_user: string; + jfrog_token: string; + collect_test_spool: string; +}; + +function getConfig(configFile: string): TestConfigData { const rawConfig = yaml.parse(fs.readFileSync(configFile, 'utf8')); const configData: { [key: string]: string } = {}; diff --git a/tests/system-integration/src/config/ZoweYaml.ts b/tests/system-integration/src/config/ZoweYaml.ts index 57ba41a336..9f82adf271 100644 --- a/tests/system-integration/src/config/ZoweYaml.ts +++ b/tests/system-integration/src/config/ZoweYaml.ts @@ -18,6 +18,12 @@ export class ZoweYaml { // this.zoweYaml[field] = value; }*/ + /** + * This functions reads the template zowe.yaml created in {@link ../globalSetup.ts} + * and coerces it to a JSON Object. + * + * @returns ZoweYaml JSON Object + */ static basicZoweYaml(): ZoweYamlType { const fileContents = fs.readFileSync(THIS_TEST_BASE_YAML, 'utf8'); const zoweYaml = yaml.parse(fileContents); diff --git a/tests/system-integration/src/globalSetup.ts b/tests/system-integration/src/globalSetup.ts index b1bd0f975e..6fc6033a5c 100644 --- a/tests/system-integration/src/globalSetup.ts +++ b/tests/system-integration/src/globalSetup.ts @@ -10,16 +10,18 @@ import * as uss from './uss'; import * as _ from 'lodash'; +import * as path from 'path'; import * as files from '@zowe/zos-files-for-zowe-sdk'; import { DOWNLOAD_CONFIGMGR, + DOWNLOAD_ZOWE_TOOLS, JFROG_CREDENTIALS, REMOTE_SETUP, REMOTE_SYSTEM_INFO, - REMOTE_TEST_DIR, REPO_ROOT_DIR, TEST_DATASETS_LINGERING_FILE, TEST_JOBS_RUN_FILE, + TEST_OUTPUT_DIR, THIS_TEST_BASE_YAML, THIS_TEST_ROOT_DIR, } from './config/TestConfig'; @@ -29,7 +31,8 @@ import * as yaml from 'yaml'; import ZoweYamlType from './types/ZoweYamlType'; import { JfrogClient } from 'jfrog-client-js'; import { processManifestVersion } from './utils'; -import { execSync } from 'child_process'; +import { exec, execSync } from 'child_process'; +import { cwd } from 'process'; const zosmfSession = getZosmfSession(); @@ -39,9 +42,12 @@ function setupBaseYaml() { zoweYaml.java.home = REMOTE_SYSTEM_INFO.zosJavaHome; zoweYaml.node.home = REMOTE_SYSTEM_INFO.zosNodeHome; - zoweYaml.zowe.runtimeDirectory = `${REMOTE_TEST_DIR}`; + zoweYaml.zowe.runtimeDirectory = REMOTE_SYSTEM_INFO.ussTestDir; zoweYaml.zowe.setup.dataset.prefix = REMOTE_SYSTEM_INFO.prefix; zoweYaml.zowe.setup.dataset.jcllib = REMOTE_SYSTEM_INFO.jcllib; + zoweYaml.zowe.setup.vsam.name = REMOTE_SYSTEM_INFO.prefix + '.VSAM'; + zoweYaml.zowe.setup.vsam.volume = REMOTE_SYSTEM_INFO.volume; + zoweYaml.zowe.setup.certificate.pkcs12.directory = REMOTE_SYSTEM_INFO.ussTestDir; // zoweYaml.zowe.setup.dataset.loadlib = REMOTE_SYSTEM_INFO.szweexec; // zoweYaml.node.home = systemDefaults.zos_node_home; // zoweYaml.zowe.runtimeDirectory = systemDefaults. @@ -100,16 +106,21 @@ module.exports = async () => { if (!fs.existsSync(`${REPO_ROOT_DIR}/bin/zwe`)) { throw new Error('Could not locate the zwe tool locally. Ensure you are running tests from the test project root'); } + fs.mkdirpSync(`${THIS_TEST_ROOT_DIR}/.build`); setupBaseYaml(); - fs.mkdirpSync(`${THIS_TEST_ROOT_DIR}/.build/zowe`); fs.rmSync(TEST_DATASETS_LINGERING_FILE, { force: true }); fs.rmSync(TEST_JOBS_RUN_FILE, { force: true }); + fs.rmSync(TEST_OUTPUT_DIR, { force: true, recursive: true }); + fs.mkdirpSync(TEST_OUTPUT_DIR); if (REMOTE_SETUP) { if (DOWNLOAD_CONFIGMGR) { await downloadManifestDep('org.zowe.configmgr'); await downloadManifestDep('org.zowe.configmgr-rexx'); } + if (DOWNLOAD_ZOWE_TOOLS) { + await downloadManifestDep('org.zowe.utility-tools'); + } const configmgrPax = fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build`).find((item) => /configmgr.*\.pax/g.test(item)); if (configmgrPax == null) { @@ -121,39 +132,104 @@ module.exports = async () => { throw new Error('Could not locate a configmgr-rexx pax in the .build directory'); } + const zoweToolsZip = fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build`).find((item) => /zowe-utility-tools.*\.zip/g.test(item)); + if (zoweToolsZip == null) { + throw new Error('Could not locate zowe-utility-tools zip in the .build directory'); + } + console.log('Setting up remote server...'); - await uss.runCommand(`mkdir -p ${REMOTE_TEST_DIR}`); + await uss.runCommand(`mkdir -p ${REMOTE_SYSTEM_INFO.ussTestDir}`); - console.log(`Uploading ${configmgrPax} to ${REMOTE_TEST_DIR}/configmgr.pax ...`); + console.log(`Uploading ${configmgrPax} to ${REMOTE_SYSTEM_INFO.ussTestDir}/configmgr.pax ...`); await files.Upload.fileToUssFile( zosmfSession, `${THIS_TEST_ROOT_DIR}/.build/${configmgrPax}`, - `${REMOTE_TEST_DIR}/configmgr.pax`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/configmgr.pax`, { binary: true }, ); - console.log(`Uploading ${configmgrRexxPax} to ${REMOTE_TEST_DIR}/configmgr-rexx.pax ...`); + console.log(`Uploading ${configmgrRexxPax} to ${REMOTE_SYSTEM_INFO.ussTestDir}/configmgr-rexx.pax ...`); await files.Upload.fileToUssFile( zosmfSession, `${THIS_TEST_ROOT_DIR}/.build/${configmgrRexxPax}`, - `${REMOTE_TEST_DIR}/configmgr-rexx.pax`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/configmgr-rexx.pax`, { binary: true }, ); console.log(`Building zwe typescript...`); execSync(`npm install && npm run prod`, { cwd: `${REPO_ROOT_DIR}/build/zwe` }); - await cleanUssDir(`${REMOTE_TEST_DIR}/bin`); - await cleanUssDir(`${REMOTE_TEST_DIR}/schemas`); + await cleanUssDir(`${REMOTE_SYSTEM_INFO.ussTestDir}/bin`); + await cleanUssDir(`${REMOTE_SYSTEM_INFO.ussTestDir}/schemas`); - console.log(`Uploading ${REPO_ROOT_DIR}/bin to ${REMOTE_TEST_DIR}/bin...`); - await files.Upload.dirToUSSDirRecursive(zosmfSession, `${REPO_ROOT_DIR}/bin`, `${REMOTE_TEST_DIR}/bin/`, { - binary: false, - includeHidden: true, + console.log(`Uploading conversion script...`); + await files.Upload.fileToUssFile( + zosmfSession, + `${THIS_TEST_ROOT_DIR}/resources/convert_to_ebcdic.sh`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/convert_to_ebcdic.sh`, + ); + + console.log(`Uploading ${REPO_ROOT_DIR}/bin to ${REMOTE_SYSTEM_INFO.ussTestDir}/bin...`); + // archive without compression (issues on some backends) + execSync(`tar -cf ${THIS_TEST_ROOT_DIR}/.build/zwe.tar -C ${REPO_ROOT_DIR} bin`); + await files.Upload.fileToUssFile( + zosmfSession, + `${THIS_TEST_ROOT_DIR}/.build/zwe.tar`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/zwe.tar`, + { + binary: true, + }, + ); + await uss.runCommand(`tar -xf zwe.tar`, REMOTE_SYSTEM_INFO.ussTestDir); + + // zowe-install-packaging-tools + const utilsDir = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'utility-tools'); + fs.mkdirpSync(`${utilsDir}`); + execSync(`unzip -o ${THIS_TEST_ROOT_DIR}/.build/${zoweToolsZip} -d ${utilsDir}`, { cwd: THIS_TEST_ROOT_DIR }); + + for (const file of fs.readdirSync(utilsDir)) { + const match = file.match(/zowe-(.*)-[0-9]?.*tgz/im); + if (match) { + const fileName = match[0]; + const pkgName = match[1]; + + console.log(`Uploading ${pkgName} to ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/utils...`); + // re-archive without compression (issues on some backends) + execSync(`tar xzf ${fileName} && tar -cf ${pkgName}.tar package && rm -rf package`, { cwd: utilsDir }); + await files.Upload.fileToUssFile( + zosmfSession, + `${utilsDir}/${pkgName}.tar`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/${pkgName}.tar`, + { + binary: true, + }, + ); + await uss.runCommand(`tar xf ${pkgName}.tar`, REMOTE_SYSTEM_INFO.ussTestDir); + await uss.runCommand(`mv package ./bin/utils/${pkgName}`, REMOTE_SYSTEM_INFO.ussTestDir); + } + } + let ncertPax = ''; + console.log(`Uploading ncert to ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/utils...`); + fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build/utility-tools`).forEach((item) => { + const match = item.match(/zowe-ncert-([0-9]?.*)\.pax/im); + if (match && match[1]) { + ncertPax = match[0]; + } }); + await files.Upload.fileToUssFile( + zosmfSession, + `${THIS_TEST_ROOT_DIR}/.build/utility-tools/${ncertPax}`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/ncert.pax`, + { + binary: true, + }, + ); - console.log(`Uploading ${REPO_ROOT_DIR}/schemas to ${REMOTE_TEST_DIR}/schemas...`); - await files.Upload.dirToUSSDirRecursive(zosmfSession, `${REPO_ROOT_DIR}/schemas`, `${REMOTE_TEST_DIR}/schemas/`, { + console.log(`Converting everything in ${REMOTE_SYSTEM_INFO.ussTestDir}/bin to EBCDIC...`); + await uss.runCommand(`chmod +x convert_to_ebcdic.sh && ./convert_to_ebcdic.sh`, REMOTE_SYSTEM_INFO.ussTestDir); + + console.log(`Uploading ${REPO_ROOT_DIR}/schemas to ${REMOTE_SYSTEM_INFO.ussTestDir}/schemas...`); + await files.Upload.dirToUSSDirRecursive(zosmfSession, `${REPO_ROOT_DIR}/schemas`, `${REMOTE_SYSTEM_INFO.ussTestDir}/schemas/`, { binary: false, includeHidden: true, }); @@ -174,14 +250,17 @@ module.exports = async () => { }); console.log(`Unpacking configmgr and placing it in bin/utils ...`); - await uss.runCommand(`pax -ppx -rf configmgr.pax && mv configmgr bin/utils/`, `${REMOTE_TEST_DIR}`); + await uss.runCommand(`pax -ppx -rf configmgr.pax && mv configmgr bin/utils/`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); console.log(`Unpacking configmgr-rexx and placing it in ${REMOTE_SYSTEM_INFO.szweload} ...`); - await uss.runCommand(`pax -ppx -rf configmgr-rexx.pax`, `${REMOTE_TEST_DIR}`); + await uss.runCommand(`pax -ppx -rf configmgr-rexx.pax`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); for (const pgm of ['ZWERXCFG', 'ZWECFG31', 'ZWECFG64']) { - await uss.runCommand(`cp -X ${pgm} "//'${REMOTE_SYSTEM_INFO.szweload}(${pgm})'"`, `${REMOTE_TEST_DIR}`); + await uss.runCommand(`cp -X ${pgm} "//'${REMOTE_SYSTEM_INFO.szweload}(${pgm})'"`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); } + console.log(`Unpacking ncert.pax from zowe-install-packaging-tools and placing it in bin/utils/...`); + await uss.runCommand(`pax -ppx -rf ncert.pax -s#^#./bin/utils/ncert/#g`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); + console.log(`Uploading sample JCL from files/SZWESAMP to ${REMOTE_SYSTEM_INFO.szwesamp}...`); await files.Upload.dirToPds(zosmfSession, `${REPO_ROOT_DIR}/files/SZWESAMP`, REMOTE_SYSTEM_INFO.szwesamp, { binary: false, diff --git a/tests/system-integration/src/globalTeardown.ts b/tests/system-integration/src/globalTeardown.ts index 14d3fe0309..a065986440 100644 --- a/tests/system-integration/src/globalTeardown.ts +++ b/tests/system-integration/src/globalTeardown.ts @@ -8,31 +8,48 @@ * Copyright Contributors to the Zowe Project. */ -import { REMOTE_TEARDOWN, REMOTE_TEST_DIR, TEST_JOBS_RUN_FILE as TEST_JOBS_TRACKING_FILE } from './config/TestConfig'; +import { + REMOTE_SYSTEM_INFO, + REMOTE_TEARDOWN, + TEST_DATASETS_LINGERING_FILE, + TEST_JOBS_RUN_FILE as TEST_JOBS_TRACKING_FILE, +} from './config/TestConfig'; import * as uss from './uss'; import * as fs from 'fs-extra'; import * as jobs from '@zowe/zos-jobs-for-zowe-sdk'; import { getZosmfSession } from './zowe'; +import { DatasetType, TestAwareFiles, TestManagedDataset } from './zos/TestAwareFiles'; module.exports = async () => { if (!REMOTE_TEARDOWN) { return; } - await uss.runCommand(`rm -rf ${REMOTE_TEST_DIR}`); + // await uss.runCommand(`rm -rf ${REMOTE_SYSTEM_INFO.ussTestDir}`); - // await files.Dataset.deleteDataset(); + if (fs.existsSync(`${TEST_DATASETS_LINGERING_FILE}`)) { + const dsList = fs.readFileSync(`${TEST_DATASETS_LINGERING_FILE}`, 'utf8').split('\n'); + const dsDeletes: TestManagedDataset[] = dsList.map((dsEntry) => { + const dsPieces = dsEntry.split(':'); + const enumVal = Number(dsPieces[1]); + const ds: TestManagedDataset = { + name: dsPieces[0], + type: enumVal, + }; + return ds; + }); + + await TestAwareFiles.deleteAll(dsDeletes); + } if (fs.existsSync(`${TEST_JOBS_TRACKING_FILE}`)) { - fs.readFileSync(`${TEST_JOBS_TRACKING_FILE}`, 'utf8') - .split('\n') - .forEach(async (job) => { - const jobPieces = job.split(':'); - const jobName = jobPieces[0]; - const jobId = jobPieces[1]; - console.log('Purging ' + job); - await jobs.DeleteJobs.deleteJob(getZosmfSession(), jobName, jobId); - // - }); + const jobList = fs.readFileSync(`${TEST_JOBS_TRACKING_FILE}`, 'utf8').split('\n'); + for (const job of jobList) { + const jobPieces = job.split(':'); + const jobName = jobPieces[0]; + const jobId = jobPieces[1]; + console.log('Purging ' + job); + await jobs.DeleteJobs.deleteJob(getZosmfSession(), jobName, jobId); + } } // fs.rmdirSync(TEST_YAML_DIR); diff --git a/tests/system-integration/src/zos/RemoteTestRunner.ts b/tests/system-integration/src/zos/RemoteTestRunner.ts index 25e913991d..65829a0146 100644 --- a/tests/system-integration/src/zos/RemoteTestRunner.ts +++ b/tests/system-integration/src/zos/RemoteTestRunner.ts @@ -12,31 +12,27 @@ import { Session } from '@zowe/imperative'; import { getZosmfSession } from '../zowe'; import * as uss from '../uss'; import ZoweYamlType from '../types/ZoweYamlType'; -import { REMOTE_TEST_DIR, TEST_JOBS_RUN_FILE, THIS_TEST_ROOT_DIR } from '../config/TestConfig'; +import { REMOTE_SYSTEM_INFO, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR } from '../config/TestConfig'; import * as files from '@zowe/zos-files-for-zowe-sdk'; import * as fs from 'fs-extra'; import * as YAML from 'yaml'; import * as jobs from '@zowe/zos-jobs-for-zowe-sdk'; export class RemoteTestRunner { - private readonly yamlOutputDir: string; - private readonly spoolOutputDir: string; + private readonly yamlOutputTemplate: string; + private readonly spoolOutputTemplate: string; private readonly session: Session; private trackedJobs: jobs.IDownloadAllSpoolContentParms[] = []; constructor(testGroup: string) { this.session = getZosmfSession(); - this.yamlOutputDir = `${THIS_TEST_ROOT_DIR}/.build/${testGroup}/yaml`; - this.spoolOutputDir = `${THIS_TEST_ROOT_DIR}/.build/${testGroup}/spool`; - fs.rmSync(this.yamlOutputDir, { recursive: true, force: true }); - fs.rmSync(this.spoolOutputDir, { recursive: true, force: true }); - fs.mkdirpSync(this.yamlOutputDir); - fs.mkdirpSync(this.spoolOutputDir); + this.yamlOutputTemplate = `${TEST_OUTPUT_DIR}/${testGroup}/{{ testInstance }}/yaml`; + this.spoolOutputTemplate = `${TEST_OUTPUT_DIR}/${testGroup}//{{ testInstance }}/spool`; } - public async runRaw(command: string, cwd: string = REMOTE_TEST_DIR): Promise { + public async runRaw(command: string, cwd: string = REMOTE_SYSTEM_INFO.ussTestDir): Promise { const output = await uss.runCommand(`${command}`, cwd); // Any non-deterministic output should be cleaned up for test snapshots. - const cleanedOutput = output.data.replace(/(JOB[0-9]{5})/gim, 'JOB00000'); + const cleanedOutput = this.cleanOutput(output.data); return { stdout: output.data, cleanedStdout: cleanedOutput, @@ -46,41 +42,61 @@ export class RemoteTestRunner { public async collectSpool() { const testName = expect.getState().currentTestName.replace(/\s/g, '_'); + const spoolOutputDir = this.spoolOutputTemplate.replace('{{ testInstance }}', testName); + fs.mkdirpSync(spoolOutputDir); for (const job of this.trackedJobs) { - jobs.DownloadJobs.downloadAllSpoolContentCommon(getZosmfSession(), { + await jobs.DownloadJobs.downloadAllSpoolContentCommon(getZosmfSession(), { ...job, - outDir: this.spoolOutputDir, - extension: '.' + testName.substring(0, 40), // arbitrarily chosen to keep things readable... + outDir: spoolOutputDir, + extension: '.txt', // arbitrarily chosen to keep things readable... }); } this.trackedJobs = []; } + private cleanOutput(stdout: string): string { + return stdout + .replace(/(JOB[0-9]{5})/gim, 'JOB00000') + .replaceAll(`${REMOTE_SYSTEM_INFO.prefix}`, 'TEST.DATASET.PFX') + .replaceAll(`${this.session.ISession.user}`, 'TESTUSR0') + .replace(/\/tmp\/\.zweenv-[0-9]{3,5}/g, '/tmp/.zweenv-0000') + .replaceAll(REMOTE_SYSTEM_INFO.volume, 'TSTVOL') + .replaceAll(REMOTE_SYSTEM_INFO.zosJavaHome, '/test/java/home') + .replaceAll(REMOTE_SYSTEM_INFO.zosNodeHome, '/test/node/home') + .replaceAll(REMOTE_SYSTEM_INFO.ussTestDir, '/test/dir'); + } + /** * * @param zoweYaml * @param zweCommand * @param cwd */ - public async runZweTest(zoweYaml: ZoweYamlType, zweCommand: string, cwd: string = REMOTE_TEST_DIR): Promise { + public async runZweTest( + zoweYaml: ZoweYamlType, + zweCommand: string, + cwd: string = REMOTE_SYSTEM_INFO.ussTestDir, + ): Promise { let command = zweCommand.trim(); if (command.startsWith('zwe')) { command = command.replace(/zwe/, ''); } const testName = expect.getState().currentTestName.replace(/\s/g, '_').substring(0, 40); const stringZoweYaml = YAML.stringify(zoweYaml); + const yamlOutputDir = this.yamlOutputTemplate.replace('{{ testInstance }}', testName); + fs.mkdirpSync(yamlOutputDir); - fs.writeFileSync(`${this.yamlOutputDir}/zowe.yaml.${testName}`, stringZoweYaml); + fs.writeFileSync(`${yamlOutputDir}/zowe.yaml.${testName}`, stringZoweYaml); await files.Upload.fileToUssFile( this.session, - `${this.yamlOutputDir}/zowe.yaml.${testName}`, - `${REMOTE_TEST_DIR}/zowe.test.yaml`, + `${yamlOutputDir}/zowe.yaml.${testName}`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/zowe.test.yaml`, { binary: false, }, ); - const output = await uss.runCommand(`./bin/zwe ${command} --config ${REMOTE_TEST_DIR}/zowe.test.yaml`, cwd); + const output = await uss.runCommand(`./bin/zwe ${command} --config ${REMOTE_SYSTEM_INFO.ussTestDir}/zowe.test.yaml`, cwd); const matches = output.data.matchAll(/([A-Za-z0-9]{4,8})\((JOB[0-9]{1,5})\) completed with RC=(.*)$/gim); @@ -94,7 +110,7 @@ export class RemoteTestRunner { } // Any non-deterministic output should be cleaned up for test snapshots. - const cleanedOutput = output.data.replace(/(JOB[0-9]{5})/gim, 'JOB00000'); + const cleanedOutput = this.cleanOutput(output.data); return { stdout: output.data, diff --git a/tests/system-integration/src/zos/TestAwareFiles.ts b/tests/system-integration/src/zos/TestAwareFiles.ts index 7cf8fb00fd..af781801e0 100644 --- a/tests/system-integration/src/zos/TestAwareFiles.ts +++ b/tests/system-integration/src/zos/TestAwareFiles.ts @@ -21,32 +21,28 @@ export class TestAwareFiles { const deleteOps: DeleteDs[] = []; datasets.forEach((dataset) => { if (dataset.type === DatasetType.VSAM) { - try { - deleteOps.push({ ds: dataset, action: files.Delete.vsam(this.session, dataset.name, { purge: true }) }); - } catch (error) { - // TODO: ? - } + deleteOps.push({ ds: dataset, action: files.Delete.vsam(this.session, dataset.name, { purge: true }) }); } else if (dataset.type === DatasetType.ZFS) { - try { - deleteOps.push({ ds: dataset, action: files.Delete.zfs(this.session, dataset.name, {}) }); - } catch (error) { - // TODO: ? - } + deleteOps.push({ ds: dataset, action: files.Delete.zfs(this.session, dataset.name, {}) }); } else if (dataset.type === DatasetType.NON_CLUSTER) { - try { - deleteOps.push({ ds: dataset, action: files.Delete.dataSet(this.session, dataset.name, {}) }); - } catch (error) { - // TODO: ? - } + deleteOps.push({ ds: dataset, action: files.Delete.dataSet(this.session, dataset.name, {}) }); } }); - deleteOps.forEach(async (dsDelete) => { - const res = await dsDelete.action; + for (const dsDelete of deleteOps) { + let res = { success: false }; + try { + res = await dsDelete.action; + } catch (error) { + // if error message indicates 404, dataset didn't exist to be deleted. + if (error?.mDetails?.msg && error.mDetails.msg.includes('status 404')) { + res.success = true; // consider dataset deleted. + } + } if (!res.success) { console.log(`Issue deleting ${dsDelete.ds.name}. Will try again during teardown.`); - fs.appendFileSync(TEST_DATASETS_LINGERING_FILE, `${dsDelete.ds.name}:${dsDelete.ds.type}`); + fs.appendFileSync(TEST_DATASETS_LINGERING_FILE, `${dsDelete.ds.name}:${dsDelete.ds.type}\n`); } - }); + } } } @@ -60,8 +56,12 @@ export type TestManagedDataset = { type: DatasetType; }; +// Not sure why eslint was flagging these? export enum DatasetType { + // eslint-disable-next-line no-unused-vars NON_CLUSTER, + // eslint-disable-next-line no-unused-vars VSAM, + // eslint-disable-next-line no-unused-vars ZFS, } diff --git a/tests/system-integration/tsconfig.json b/tests/system-integration/tsconfig.json index 9ee0f2d2f0..d9b3df2167 100644 --- a/tests/system-integration/tsconfig.json +++ b/tests/system-integration/tsconfig.json @@ -11,7 +11,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2015", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2021", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ From 9d7fc5f44a6e034c6ce8756aa33b43b3bc35de46 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 24 May 2024 11:56:36 -0400 Subject: [PATCH 06/21] checkpoint; apfauth test issues Signed-off-by: MarkAckert --- tests/system-integration/.gitignore | 1 + tests/system-integration/jest.config.ts | 4 +- tests/system-integration/resources/.gitignore | 1 - .../resources/test_config.yml | 10 ++ .../init/__snapshots__/apfauth.test.ts.snap | 18 +++ .../__snapshots__/certificate.test.ts.snap | 10 +- .../init/__snapshots__/vsam.test.ts.snap | 26 +++- .../src/__tests__/init/apfauth.test.ts | 82 +++++++++++++ .../src/__tests__/init/apfauth.tests.ts | 71 ----------- .../src/__tests__/init/certificate.test.ts | 115 ++++++++++++------ .../src/__tests__/init/generate.tests.ts | 67 ++++++++++ .../src/__tests__/init/vsam.test.ts | 64 +++++----- .../src/config/TestConfig.ts | 8 +- tests/system-integration/src/globalSetup.ts | 21 ++-- .../system-integration/src/globalTeardown.ts | 30 ++--- .../src/zos/RemoteTestRunner.ts | 21 +++- .../src/zos/TestAwareFiles.ts | 65 ++++++---- .../src/{uss.ts => zos/Uss.ts} | 10 +- .../system-integration/src/{ => zos}/zowe.ts | 2 +- 19 files changed, 412 insertions(+), 214 deletions(-) delete mode 100644 tests/system-integration/resources/.gitignore create mode 100644 tests/system-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap create mode 100644 tests/system-integration/src/__tests__/init/apfauth.test.ts delete mode 100644 tests/system-integration/src/__tests__/init/apfauth.tests.ts rename tests/system-integration/src/{uss.ts => zos/Uss.ts} (83%) rename tests/system-integration/src/{ => zos}/zowe.ts (93%) diff --git a/tests/system-integration/.gitignore b/tests/system-integration/.gitignore index 9f5223d44a..ff675b7ea5 100644 --- a/tests/system-integration/.gitignore +++ b/tests/system-integration/.gitignore @@ -1,3 +1,4 @@ .build/* lib/ reports/* +resources/custom_config.yml diff --git a/tests/system-integration/jest.config.ts b/tests/system-integration/jest.config.ts index b635cb4f8f..7dd26d4014 100644 --- a/tests/system-integration/jest.config.ts +++ b/tests/system-integration/jest.config.ts @@ -16,7 +16,7 @@ const config: Config = { globalTeardown: '/src/globalTeardown.ts', preset: 'ts-jest', testRegex: '__tests__.*\\.*?\\.(spec|test)\\.ts$', - maxWorkers: 1, + // maxWorkers: 1, reporters: [ 'default', [ @@ -29,7 +29,7 @@ const config: Config = { }, ], ], - testTimeout: 60000, + testTimeout: 70000, transform: { '^.+\\.(t|j)sx?$': ['ts-jest', { isolatedModules: true }], }, diff --git a/tests/system-integration/resources/.gitignore b/tests/system-integration/resources/.gitignore deleted file mode 100644 index 12cf6d06d9..0000000000 --- a/tests/system-integration/resources/.gitignore +++ /dev/null @@ -1 +0,0 @@ -custom_config.yml diff --git a/tests/system-integration/resources/test_config.yml b/tests/system-integration/resources/test_config.yml index ef4dd91b53..307e8888b5 100644 --- a/tests/system-integration/resources/test_config.yml +++ b/tests/system-integration/resources/test_config.yml @@ -17,3 +17,13 @@ download_zowe_tools: true jfrog_user: jfrog_token: collect_test_spool: true + +### Always overrides any computed values in globalSetup. +### Only use to debug or write tests initially; +### these values are __not__ substituted in command response snapshots. +#zowe_yaml_overrides: +# zowe: +# setup: +# zOSMF: +# host: some-other.host.value +# port: 10443 diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap new file mode 100644 index 0000000000..262581980e --- /dev/null +++ b/tests/system-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap @@ -0,0 +1,18 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`init-apfauth (SHORT) apf bad ds prefix 1`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> APF authorize load libraries + +cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) +Error ZWETODOE: TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER) could not be copied. Review other error output from the 'cp' command. +ERROR: Error ZWEL0999E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER) before running this command." +`; + +exports[`init-apfauth (SHORT) apf disable cfgmgr 1`] = ` +" +$ Error ZWEL0316E: Command requires zowe.useConfigmgr=true to use." +`; diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap index 527f8eb423..f43ca693ad 100644 --- a/tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap +++ b/tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap @@ -1,15 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`init-cert cert disable cfgmgr 1`] = ` +exports[`init-cert (SHORT) cert disable cfgmgr 1`] = ` " $ Error ZWEL0316E: Command requires zowe.useConfigmgr=true to use. Error ZWEL0999E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." `; - -exports[`init-cert cert enable cfgmgr 1`] = ` -" -$ ------------------------------------------------------------------------------- ->> Creating certificate authority "local_ca" - -Error ZWEL0158E: Keystore "/test/dir/local_ca/local_ca.keystore.p12" already exists." -`; diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index decb37f1cc..3534edc1b2 100644 --- a/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -1,6 +1,18 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`init-vsam creates vsam 1`] = ` +exports[`init-vsam (SHORT) BAD: bad ds prefix 1`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) +Error ZWETODOE: TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER) could not be copied. Review other error output from the 'cp' command. +ERROR: Error ZWEL0999E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER) before running this command." +`; + +exports[`init-vsam (SHORT) GOOD: simple --dry-run 1`] = ` " $ Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. @@ -164,9 +176,17 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET SHAREOPTIONS(2 3) - //* --- End of JCL --- -Submitting Job ZWECSVSM -Job ZWECSVSM(JOB00000) completed with RC=0 +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + >> Zowe Caching Service VSAM storage is created successfully. " `; + +exports[`init-vsam (SHORT) disable cfgmgr 1`] = ` +" +$ Error ZWEL0316E: Command requires zowe.useConfigmgr=true to use." +`; diff --git a/tests/system-integration/src/__tests__/init/apfauth.test.ts b/tests/system-integration/src/__tests__/init/apfauth.test.ts new file mode 100644 index 0000000000..28466916c1 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/apfauth.test.ts @@ -0,0 +1,82 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; +import ZoweYamlType from '../../types/ZoweYamlType'; +import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; +import { ZoweYaml } from '../../config/ZoweYaml'; +import { FileType, TestAwareFiles as TestFileActions, TestManagedFile as TestFile } from '../../zos/TestAwareFiles'; + +const testSuiteName = 'init-apfauth'; +describe(`${testSuiteName}`, () => { + let testRunner: RemoteTestRunner; + let cfgYaml: ZoweYamlType; + let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test + + beforeAll(() => { + testRunner = new RemoteTestRunner(testSuiteName); + }); + beforeEach(() => { + cfgYaml = ZoweYaml.basicZoweYaml(); + }); + + afterEach(async () => { + if (TEST_COLLECT_SPOOL) { + await testRunner.collectSpool(); + } + // re-created in every `init` subcommand based on changes to zowe yaml command... + const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + + // try to delete everything we know about + // await TestFileActions.deleteAll([...cleanupDatasets, jcllib]); + cleanupDatasets = []; + }); + + describe('(LONG)', () => {}); + + describe('(SHORT)', () => { + it('apf disable cfgmgr', async () => { + cfgYaml.zowe.useConfigmgr = false; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(60); // 60 is expected error code... + }); + + it('apf bad ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); + }); + + it('apf dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); + }, 400000); + + /* it('apf simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... + }); + + /* it('apf security-dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --security-dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... }); + });*/ + }); +}); diff --git a/tests/system-integration/src/__tests__/init/apfauth.tests.ts b/tests/system-integration/src/__tests__/init/apfauth.tests.ts deleted file mode 100644 index 2bb66dc15f..0000000000 --- a/tests/system-integration/src/__tests__/init/apfauth.tests.ts +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; -import ZoweYamlType from '../../types/ZoweYamlType'; -import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; -import { ZoweYaml } from '../../config/ZoweYaml'; -import { DatasetType, TestAwareFiles, TestManagedDataset } from '../../zos/TestAwareFiles'; - -const testSuiteName = 'init-apfauth'; -describe(testSuiteName, () => { - let testRunner: RemoteTestRunner; - let cfgYaml: ZoweYamlType; - let cleanupDatasets: TestManagedDataset[] = []; // a list of datasets deleted after every test - - beforeAll(() => { - testRunner = new RemoteTestRunner('init-apfauth'); - }); - beforeEach(() => { - cfgYaml = ZoweYaml.basicZoweYaml(); - }); - - afterEach(async () => { - if (TEST_COLLECT_SPOOL) { - await testRunner.collectSpool(); - } - // re-created in every `init` subcommand based on changes to zowe yaml command... - const jcllib: TestManagedDataset = { name: REMOTE_SYSTEM_INFO.jcllib, type: DatasetType.NON_CLUSTER }; - - // try to delete everything we know about - await TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); - cleanupDatasets = []; - }); - - it('apf disable cfgmgr', async () => { - cfgYaml.zowe.useConfigmgr = false; - const result = await testRunner.runZweTest(cfgYaml, 'init apfauth'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(60); // 60 is expected error code... - }); - - it('apf bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; - const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); - }); - - /* it('apf simple --dry-run', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... - }); - - /* it('apf security-dry-run', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --security-dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... }); - });*/ -}); diff --git a/tests/system-integration/src/__tests__/init/certificate.test.ts b/tests/system-integration/src/__tests__/init/certificate.test.ts index 7def72d4f8..2a635862f2 100644 --- a/tests/system-integration/src/__tests__/init/certificate.test.ts +++ b/tests/system-integration/src/__tests__/init/certificate.test.ts @@ -12,17 +12,18 @@ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig' import ZoweYamlType from '../../types/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; -import { DatasetType, TestAwareFiles, TestManagedDataset } from '../../zos/TestAwareFiles'; +import { FileType, TestAwareFiles, TestManagedFile } from '../../zos/TestAwareFiles'; const testSuiteName = 'init-cert'; -describe(testSuiteName, () => { +describe(`${testSuiteName}`, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; - let cleanupDatasets: TestManagedDataset[] = []; // a list of datasets deleted after every test + let cleanupFiles: TestManagedFile[] = []; // a list of datasets deleted after every test beforeAll(() => { - testRunner = new RemoteTestRunner('init-cert'); + testRunner = new RemoteTestRunner(testSuiteName); }); + beforeEach(() => { cfgYaml = ZoweYaml.basicZoweYaml(); }); @@ -32,48 +33,82 @@ describe(testSuiteName, () => { await testRunner.collectSpool(); } // re-created in every `init` subcommand based on changes to zowe yaml command... - const jcllib: TestManagedDataset = { name: REMOTE_SYSTEM_INFO.jcllib, type: DatasetType.NON_CLUSTER }; + const jcllib: TestManagedFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; // try to delete everything we know about - await TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); - cleanupDatasets = []; + await TestAwareFiles.deleteAll([...cleanupFiles, jcllib]); + cleanupFiles = []; }); - it('cert disable cfgmgr', async () => { - cfgYaml.zowe.useConfigmgr = false; - const result = await testRunner.runZweTest(cfgYaml, 'init certificate'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); // 231 is expected error code...? - }); + describe('(SHORT)', () => { + it('cert disable cfgmgr', async () => { + cfgYaml.zowe.useConfigmgr = false; + const result = await testRunner.runZweTest(cfgYaml, 'init certificate'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); // 231 is expected error code...? + }); - it('cert enable cfgmgr', async () => { - cfgYaml.zowe.useConfigmgr = true; - const result = await testRunner.runZweTest(cfgYaml, 'init certificate'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); // 231 is expected error code...? - }, 180000); - /* - it('cert bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; - const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); - }); + /* + it('cert bad ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); + }); - it('cert simple --dry-run', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... + it('cert simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... + }); + + /* it('apf security-dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --security-dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... }); + });*/ }); - /* it('apf security-dry-run', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --security-dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... }); - });*/ + describe('(LONG)', () => { + it('cert bad hostname', async () => { + cfgYaml.zowe.useConfigmgr = true; + cfgYaml.zOSMF.host = 'doesnt-exist.anywhere.cloud'; + const result = await testRunner.runZweTest(cfgYaml, 'init certificate'); + cleanupFiles.push( + { + name: cfgYaml.zowe.setup.certificate.pkcs12.directory + '/local_ca/', + type: FileType.USS_DIR, + }, + { + name: cfgYaml.zowe.setup.certificate.pkcs12.directory + '/localhost/', + type: FileType.USS_DIR, + }, + ); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); // 231 is expected error code...? + }, 180000); + + it('cert enable cfgmgr', async () => { + cfgYaml.zowe.useConfigmgr = true; + const result = await testRunner.runZweTest(cfgYaml, 'init certificate'); + cleanupFiles.push( + { + name: cfgYaml.zowe.setup.certificate.pkcs12.directory + '/local_ca/', + type: FileType.USS_DIR, + }, + { + name: cfgYaml.zowe.setup.certificate.pkcs12.directory + '/localhost/', + type: FileType.USS_DIR, + }, + ); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); // 231 is expected error code...? + }, 180000); + }); }); diff --git a/tests/system-integration/src/__tests__/init/generate.tests.ts b/tests/system-integration/src/__tests__/init/generate.tests.ts index 567479c4b2..e94997d458 100644 --- a/tests/system-integration/src/__tests__/init/generate.tests.ts +++ b/tests/system-integration/src/__tests__/init/generate.tests.ts @@ -7,3 +7,70 @@ * * Copyright Contributors to the Zowe Project. */ + +import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; +import ZoweYamlType from '../../types/ZoweYamlType'; +import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; +import { ZoweYaml } from '../../config/ZoweYaml'; +import { FileType, TestAwareFiles, TestManagedFile } from '../../zos/TestAwareFiles'; + +const testSuiteName = 'init-vsam'; +describe(`${testSuiteName}`, () => { + let testRunner: RemoteTestRunner; + let cfgYaml: ZoweYamlType; + let cleanupDatasets: TestManagedFile[] = []; // a list of datasets deleted after every test + + beforeAll(() => { + testRunner = new RemoteTestRunner(testSuiteName); + }); + beforeEach(() => { + cfgYaml = ZoweYaml.basicZoweYaml(); + }); + + afterEach(async () => { + if (TEST_COLLECT_SPOOL) { + await testRunner.collectSpool(); + } + // re-created in every `init vsam` based on changes to zowe yaml command... + const jcllib: TestManagedFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + + // try to delete everything we know about + await TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); + cleanupDatasets = []; + }); + + describe('(SHORT)', () => { + it('disable cfgmgr', async () => { + cfgYaml.zowe.useConfigmgr = false; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(60); // 60 is expected... + }); + + it('BAD: bad ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); + }); + + it('GOOD: simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... + }); + }); + + describe('(LONG)', () => { + it('creates vsam', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); + cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: FileType.DS_VSAM }); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... }); + }); + }); +}); diff --git a/tests/system-integration/src/__tests__/init/vsam.test.ts b/tests/system-integration/src/__tests__/init/vsam.test.ts index d7d570dd57..9a31b3588e 100644 --- a/tests/system-integration/src/__tests__/init/vsam.test.ts +++ b/tests/system-integration/src/__tests__/init/vsam.test.ts @@ -12,16 +12,16 @@ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig' import ZoweYamlType from '../../types/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; -import { DatasetType, TestAwareFiles, TestManagedDataset } from '../../zos/TestAwareFiles'; +import { FileType, TestAwareFiles, TestManagedFile } from '../../zos/TestAwareFiles'; const testSuiteName = 'init-vsam'; -describe(testSuiteName, () => { +describe(`${testSuiteName}`, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; - let cleanupDatasets: TestManagedDataset[] = []; // a list of datasets deleted after every test + let cleanupDatasets: TestManagedFile[] = []; // a list of datasets deleted after every test beforeAll(() => { - testRunner = new RemoteTestRunner('init-vsam'); + testRunner = new RemoteTestRunner(testSuiteName); }); beforeEach(() => { cfgYaml = ZoweYaml.basicZoweYaml(); @@ -35,41 +35,45 @@ describe(testSuiteName, () => { await testRunner.collectSpool(); } // re-created in every `init vsam` based on changes to zowe yaml command... - const jcllib: TestManagedDataset = { name: REMOTE_SYSTEM_INFO.jcllib, type: DatasetType.NON_CLUSTER }; + const jcllib: TestManagedFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; // try to delete everything we know about await TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); cleanupDatasets = []; }); - it('disable cfgmgr', async () => { - cfgYaml.zowe.useConfigmgr = false; - const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(60); // 60 is expected... - }); + describe('(SHORT)', () => { + it('disable cfgmgr', async () => { + cfgYaml.zowe.useConfigmgr = false; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(60); // 60 is expected... + }); - it('BAD: bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; - const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); - }); + it('BAD: bad ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(231); + }); - it('GOOD: simple --dry-run', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... + it('GOOD: simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... + }); }); - fit('creates vsam', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... }); - cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: DatasetType.VSAM }); + describe('(LONG)', () => { + it('creates vsam', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); + cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: FileType.DS_VSAM }); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); // 60 is expected... }); + }); }); }); diff --git a/tests/system-integration/src/config/TestConfig.ts b/tests/system-integration/src/config/TestConfig.ts index 110818f2ec..babb67d8e8 100644 --- a/tests/system-integration/src/config/TestConfig.ts +++ b/tests/system-integration/src/config/TestConfig.ts @@ -13,6 +13,7 @@ import * as fs from 'fs-extra'; import * as yaml from 'yaml'; import yn from 'yn'; import { findDirWalkingUpOrThrow } from '../utils'; +import ZoweYamlType from '../types/ZoweYamlType'; class ConfigItem { public readonly name: string; public readonly required: boolean; @@ -43,6 +44,7 @@ const configFields: ConfigItem[] = [ new ConfigItem('jfrog_user', false), new ConfigItem('jfrog_token', false), new ConfigItem('collect_test_spool', false, true), + new ConfigItem('zowe_yaml_overrides', false), ]; export const REPO_ROOT_DIR: string = findDirWalkingUpOrThrow('zowe-install-packaging'); @@ -53,13 +55,14 @@ const configData = getConfig(configFile); export const THIS_TEST_BASE_YAML: string = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'zowe.yaml.base'); export const TEST_OUTPUT_DIR: string = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'output'); export const INSTALL_TEST_ROOT_DIR: string = path.resolve(__dirname, '../'); -export const TEST_DATASETS_LINGERING_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'lingering_ds.txt'); +export const LINGERING_REMOTE_FILES_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'lingering_ds.txt'); export const TEST_JOBS_RUN_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'jobs-run.txt'); export const DOWNLOAD_ZOWE_TOOLS = yn(configData.download_zowe_tools, { default: true }); export const DOWNLOAD_CONFIGMGR = yn(configData.download_configmgr, { default: true }); export const TEST_DATASETS_HLQ = configData.test_ds_hlq || configData.zos_user + '.ZWETESTS'; export const REMOTE_SETUP = yn(configData.remote_setup, { default: true }); export const REMOTE_TEARDOWN = yn(configData.remote_teardown, { default: true }); +export const ZOWE_YAML_OVERRIDES = configData.zowe_yaml_overrides; export const TEST_COLLECT_SPOOL = yn(configData.collect_test_spool); export const JFROG_CREDENTIALS = { user: configData.jfrog_user, @@ -77,6 +80,8 @@ export const REMOTE_SYSTEM_INFO = { jcllib: `${configData.test_ds_hlq}.JCLLIB`, szweload: `${configData.test_ds_hlq}.SZWELOAD`, ussTestDir: configData.remote_test_dir, + hostname: configData.zos_host, + zosmfPort: configData.zosmf_port, }; export const REMOTE_CONNECTION_CFG = { @@ -107,6 +112,7 @@ type TestConfigData = { jfrog_user: string; jfrog_token: string; collect_test_spool: string; + zowe_yaml_overrides: Partial; }; function getConfig(configFile: string): TestConfigData { diff --git a/tests/system-integration/src/globalSetup.ts b/tests/system-integration/src/globalSetup.ts index 6fc6033a5c..51ec243215 100644 --- a/tests/system-integration/src/globalSetup.ts +++ b/tests/system-integration/src/globalSetup.ts @@ -8,7 +8,7 @@ * Copyright Contributors to the Zowe Project. */ -import * as uss from './uss'; +import * as uss from './zos/Uss'; import * as _ from 'lodash'; import * as path from 'path'; import * as files from '@zowe/zos-files-for-zowe-sdk'; @@ -19,20 +19,20 @@ import { REMOTE_SETUP, REMOTE_SYSTEM_INFO, REPO_ROOT_DIR, - TEST_DATASETS_LINGERING_FILE, + LINGERING_REMOTE_FILES_FILE, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR, THIS_TEST_BASE_YAML, THIS_TEST_ROOT_DIR, + ZOWE_YAML_OVERRIDES, } from './config/TestConfig'; import * as fs from 'fs-extra'; -import { getZosmfSession } from './zowe'; +import { getZosmfSession } from './zos/zowe'; import * as yaml from 'yaml'; import ZoweYamlType from './types/ZoweYamlType'; import { JfrogClient } from 'jfrog-client-js'; import { processManifestVersion } from './utils'; -import { exec, execSync } from 'child_process'; -import { cwd } from 'process'; +import { execSync } from 'child_process'; const zosmfSession = getZosmfSession(); @@ -51,7 +51,11 @@ function setupBaseYaml() { // zoweYaml.zowe.setup.dataset.loadlib = REMOTE_SYSTEM_INFO.szweexec; // zoweYaml.node.home = systemDefaults.zos_node_home; // zoweYaml.zowe.runtimeDirectory = systemDefaults. - fs.writeFileSync(THIS_TEST_BASE_YAML, yaml.stringify(zoweYaml)); + + // + const finalYaml = _.merge({}, zoweYaml, ZOWE_YAML_OVERRIDES); + + fs.writeFileSync(THIS_TEST_BASE_YAML, yaml.stringify(finalYaml)); } const jf = new JfrogClient({ @@ -108,7 +112,7 @@ module.exports = async () => { } fs.mkdirpSync(`${THIS_TEST_ROOT_DIR}/.build`); setupBaseYaml(); - fs.rmSync(TEST_DATASETS_LINGERING_FILE, { force: true }); + fs.rmSync(LINGERING_REMOTE_FILES_FILE, { force: true }); fs.rmSync(TEST_JOBS_RUN_FILE, { force: true }); fs.rmSync(TEST_OUTPUT_DIR, { force: true, recursive: true }); fs.mkdirpSync(TEST_OUTPUT_DIR); @@ -261,6 +265,9 @@ module.exports = async () => { console.log(`Unpacking ncert.pax from zowe-install-packaging-tools and placing it in bin/utils/...`); await uss.runCommand(`pax -ppx -rf ncert.pax -s#^#./bin/utils/ncert/#g`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); + console.log(`Compiling Java utilities in bin/utils using ${REMOTE_SYSTEM_INFO.zosJavaHome}...`); + await uss.runCommand(`${REMOTE_SYSTEM_INFO.zosJavaHome}/bin/javac *.java`, `${REMOTE_SYSTEM_INFO.ussTestDir}/bin/utils`); + console.log(`Uploading sample JCL from files/SZWESAMP to ${REMOTE_SYSTEM_INFO.szwesamp}...`); await files.Upload.dirToPds(zosmfSession, `${REPO_ROOT_DIR}/files/SZWESAMP`, REMOTE_SYSTEM_INFO.szwesamp, { binary: false, diff --git a/tests/system-integration/src/globalTeardown.ts b/tests/system-integration/src/globalTeardown.ts index a065986440..ca0f044215 100644 --- a/tests/system-integration/src/globalTeardown.ts +++ b/tests/system-integration/src/globalTeardown.ts @@ -8,17 +8,11 @@ * Copyright Contributors to the Zowe Project. */ -import { - REMOTE_SYSTEM_INFO, - REMOTE_TEARDOWN, - TEST_DATASETS_LINGERING_FILE, - TEST_JOBS_RUN_FILE as TEST_JOBS_TRACKING_FILE, -} from './config/TestConfig'; -import * as uss from './uss'; +import { REMOTE_TEARDOWN, LINGERING_REMOTE_FILES_FILE, TEST_JOBS_RUN_FILE } from './config/TestConfig'; import * as fs from 'fs-extra'; import * as jobs from '@zowe/zos-jobs-for-zowe-sdk'; -import { getZosmfSession } from './zowe'; -import { DatasetType, TestAwareFiles, TestManagedDataset } from './zos/TestAwareFiles'; +import { getZosmfSession } from './zos/zowe'; +import { TestAwareFiles, TestManagedFile } from './zos/TestAwareFiles'; module.exports = async () => { if (!REMOTE_TEARDOWN) { return; @@ -26,12 +20,15 @@ module.exports = async () => { // await uss.runCommand(`rm -rf ${REMOTE_SYSTEM_INFO.ussTestDir}`); - if (fs.existsSync(`${TEST_DATASETS_LINGERING_FILE}`)) { - const dsList = fs.readFileSync(`${TEST_DATASETS_LINGERING_FILE}`, 'utf8').split('\n'); - const dsDeletes: TestManagedDataset[] = dsList.map((dsEntry) => { + if (fs.existsSync(`${LINGERING_REMOTE_FILES_FILE}`)) { + const dsList = fs + .readFileSync(`${LINGERING_REMOTE_FILES_FILE}`, 'utf8') + .split('\n') + .filter((line) => line.trim().length > 0); + const dsDeletes: TestManagedFile[] = dsList.map((dsEntry) => { const dsPieces = dsEntry.split(':'); const enumVal = Number(dsPieces[1]); - const ds: TestManagedDataset = { + const ds: TestManagedFile = { name: dsPieces[0], type: enumVal, }; @@ -41,8 +38,11 @@ module.exports = async () => { await TestAwareFiles.deleteAll(dsDeletes); } - if (fs.existsSync(`${TEST_JOBS_TRACKING_FILE}`)) { - const jobList = fs.readFileSync(`${TEST_JOBS_TRACKING_FILE}`, 'utf8').split('\n'); + if (fs.existsSync(`${TEST_JOBS_RUN_FILE}`)) { + const jobList = fs + .readFileSync(`${TEST_JOBS_RUN_FILE}`, 'utf8') + .split('\n') + .filter((line) => line.trim().length > 0); for (const job of jobList) { const jobPieces = job.split(':'); const jobName = jobPieces[0]; diff --git a/tests/system-integration/src/zos/RemoteTestRunner.ts b/tests/system-integration/src/zos/RemoteTestRunner.ts index 65829a0146..25cc99ddc2 100644 --- a/tests/system-integration/src/zos/RemoteTestRunner.ts +++ b/tests/system-integration/src/zos/RemoteTestRunner.ts @@ -9,8 +9,8 @@ */ import { Session } from '@zowe/imperative'; -import { getZosmfSession } from '../zowe'; -import * as uss from '../uss'; +import { getZosmfSession } from './zowe'; +import * as uss from './Uss'; import ZoweYamlType from '../types/ZoweYamlType'; import { REMOTE_SYSTEM_INFO, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR } from '../config/TestConfig'; import * as files from '@zowe/zos-files-for-zowe-sdk'; @@ -22,6 +22,7 @@ export class RemoteTestRunner { private readonly spoolOutputTemplate: string; private readonly session: Session; private trackedJobs: jobs.IDownloadAllSpoolContentParms[] = []; + private cleanFns: ((stdout: string) => string)[] = []; constructor(testGroup: string) { this.session = getZosmfSession(); @@ -54,8 +55,18 @@ export class RemoteTestRunner { this.trackedJobs = []; } + public addCleanFn(replaceFn: (output: string) => string) { + this.cleanFns.push(replaceFn); + } + private cleanOutput(stdout: string): string { - return stdout + let cleanedOutput = stdout; + // user-supplied + this.cleanFns.forEach((fn) => { + cleanedOutput = fn(cleanedOutput); + }); + // built-in + return cleanedOutput .replace(/(JOB[0-9]{5})/gim, 'JOB00000') .replaceAll(`${REMOTE_SYSTEM_INFO.prefix}`, 'TEST.DATASET.PFX') .replaceAll(`${this.session.ISession.user}`, 'TESTUSR0') @@ -63,6 +74,8 @@ export class RemoteTestRunner { .replaceAll(REMOTE_SYSTEM_INFO.volume, 'TSTVOL') .replaceAll(REMOTE_SYSTEM_INFO.zosJavaHome, '/test/java/home') .replaceAll(REMOTE_SYSTEM_INFO.zosNodeHome, '/test/node/home') + .replaceAll(REMOTE_SYSTEM_INFO.hostname, 'some.test.hostname') + .replaceAll(REMOTE_SYSTEM_INFO.zosmfPort, '12321') .replaceAll(REMOTE_SYSTEM_INFO.ussTestDir, '/test/dir'); } @@ -102,7 +115,7 @@ export class RemoteTestRunner { // for each match, 0=full matched string, 1=jobname, 2=jobid, 3=rc for (const match of matches) { - fs.appendFileSync(TEST_JOBS_RUN_FILE, `${match[1]}:${match[2]}`); + fs.appendFileSync(TEST_JOBS_RUN_FILE, `${match[1]}:${match[2]}\n`); this.trackedJobs.push({ jobname: match[1], jobid: match[2], diff --git a/tests/system-integration/src/zos/TestAwareFiles.ts b/tests/system-integration/src/zos/TestAwareFiles.ts index af781801e0..904db57e03 100644 --- a/tests/system-integration/src/zos/TestAwareFiles.ts +++ b/tests/system-integration/src/zos/TestAwareFiles.ts @@ -9,59 +9,76 @@ */ import * as fs from 'fs-extra'; -import { getZosmfSession } from '../zowe'; +import { getZosmfSession } from './zowe'; import * as files from '@zowe/zos-files-for-zowe-sdk'; -import { TEST_DATASETS_LINGERING_FILE } from '../config/TestConfig'; +import { LINGERING_REMOTE_FILES_FILE } from '../config/TestConfig'; export class TestAwareFiles { private static readonly session = getZosmfSession(); constructor() {} - public static async deleteAll(datasets: TestManagedDataset[]) { - const deleteOps: DeleteDs[] = []; - datasets.forEach((dataset) => { - if (dataset.type === DatasetType.VSAM) { - deleteOps.push({ ds: dataset, action: files.Delete.vsam(this.session, dataset.name, { purge: true }) }); - } else if (dataset.type === DatasetType.ZFS) { - deleteOps.push({ ds: dataset, action: files.Delete.zfs(this.session, dataset.name, {}) }); - } else if (dataset.type === DatasetType.NON_CLUSTER) { - deleteOps.push({ ds: dataset, action: files.Delete.dataSet(this.session, dataset.name, {}) }); + public static async deleteAll(datasets: TestManagedFile[]) { + const deleteOps: DeleteFile[] = []; + datasets.forEach((testFile) => { + console.log(`Cleaning up ${testFile.name}`); + let delPromise; + switch (testFile.type) { + case FileType.DS_VSAM: + delPromise = files.Delete.vsam(this.session, testFile.name, { purge: true }); + break; + case FileType.DS_ZFS: + delPromise = files.Delete.zfs(this.session, testFile.name, {}); + break; + case FileType.DS_NON_CLUSTER: + delPromise = files.Delete.dataSet(this.session, testFile.name, {}); + break; + case FileType.USS_FILE: + delPromise = files.Delete.ussFile(this.session, testFile.name, false); + break; + case FileType.USS_DIR: + delPromise = files.Delete.ussFile(this.session, testFile.name, true); + break; } + deleteOps.push({ file: testFile, action: delPromise }); }); for (const dsDelete of deleteOps) { let res = { success: false }; try { res = await dsDelete.action; } catch (error) { - // if error message indicates 404, dataset didn't exist to be deleted. + // if error message indicates 404, file didn't exist to be deleted. if (error?.mDetails?.msg && error.mDetails.msg.includes('status 404')) { - res.success = true; // consider dataset deleted. + res.success = true; // consider file deleted. } } if (!res.success) { - console.log(`Issue deleting ${dsDelete.ds.name}. Will try again during teardown.`); - fs.appendFileSync(TEST_DATASETS_LINGERING_FILE, `${dsDelete.ds.name}:${dsDelete.ds.type}\n`); + console.log(`Issue deleting ${dsDelete.file.name}. Will try again during teardown.`); + fs.appendFileSync(LINGERING_REMOTE_FILES_FILE, `${dsDelete.file.name}:${dsDelete.file.type}\n`); } } } } -type DeleteDs = { - ds: TestManagedDataset; +type DeleteFile = { + file: TestManagedFile; action: Promise; }; -export type TestManagedDataset = { +export type TestManagedFile = { name: string; - type: DatasetType; + type: FileType; }; -// Not sure why eslint was flagging these? -export enum DatasetType { +// why is eslint flagging these? +export enum FileType { // eslint-disable-next-line no-unused-vars - NON_CLUSTER, + DS_NON_CLUSTER, // eslint-disable-next-line no-unused-vars - VSAM, + DS_VSAM, // eslint-disable-next-line no-unused-vars - ZFS, + DS_ZFS, + // eslint-disable-next-line no-unused-vars + USS_FILE, + // eslint-disable-next-line no-unused-vars + USS_DIR, } diff --git a/tests/system-integration/src/uss.ts b/tests/system-integration/src/zos/Uss.ts similarity index 83% rename from tests/system-integration/src/uss.ts rename to tests/system-integration/src/zos/Uss.ts index 8c1d00b04d..158c663b1a 100644 --- a/tests/system-integration/src/uss.ts +++ b/tests/system-integration/src/zos/Uss.ts @@ -8,25 +8,23 @@ * Copyright Contributors to the Zowe Project. */ -import { REMOTE_CONNECTION_CFG } from './config/TestConfig'; +import { REMOTE_CONNECTION_CFG } from '../config/TestConfig'; import { Shell, SshSession } from '@zowe/zos-uss-for-zowe-sdk'; -function getSession(): SshSession { - return new SshSession({ +export async function runCommand(command: string, cwd: string = '~') { + const session = new SshSession({ hostname: REMOTE_CONNECTION_CFG.host, port: REMOTE_CONNECTION_CFG.ssh_port, user: REMOTE_CONNECTION_CFG.user, password: REMOTE_CONNECTION_CFG.password, }); -} -export async function runCommand(command: string, cwd: string = '~') { - const session = getSession(); let stdout = ''; const rc = await Shell.executeSshCwd(session, command, cwd, (data) => { if (data.trim()) { stdout += data; } + console.log(stdout); }); return { data: stdout, rc: rc }; } diff --git a/tests/system-integration/src/zowe.ts b/tests/system-integration/src/zos/zowe.ts similarity index 93% rename from tests/system-integration/src/zowe.ts rename to tests/system-integration/src/zos/zowe.ts index dc5f575128..969cf12b2f 100644 --- a/tests/system-integration/src/zowe.ts +++ b/tests/system-integration/src/zos/zowe.ts @@ -9,7 +9,7 @@ */ import { ConnectionPropsForSessCfg, Session } from '@zowe/imperative'; -import { REMOTE_CONNECTION_CFG } from './config/TestConfig'; +import { REMOTE_CONNECTION_CFG } from '../config/TestConfig'; export function getZosmfSession(): Session { const sessCfg: unknown = { From 340e977352a00c59f4645f07276193add518f738 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 24 May 2024 13:19:48 -0400 Subject: [PATCH 07/21] add defaults.yaml to system setup, adjust class names.. Signed-off-by: MarkAckert --- .../init/__snapshots__/generate.test.ts.snap | 234 ++++++++++++++++++ .../src/__tests__/init/apfauth.test.ts | 4 +- .../src/__tests__/init/certificate.test.ts | 8 +- .../{generate.tests.ts => generate.test.ts} | 34 +-- .../src/__tests__/init/vsam.test.ts | 8 +- tests/system-integration/src/globalSetup.ts | 11 + .../system-integration/src/globalTeardown.ts | 8 +- .../src/types/ZoweYamlType.ts | 30 +-- .../{TestAwareFiles.ts => TestFileActions.ts} | 9 +- tests/system-integration/src/zos/Uss.ts | 1 - 10 files changed, 291 insertions(+), 56 deletions(-) create mode 100644 tests/system-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap rename tests/system-integration/src/__tests__/init/{generate.tests.ts => generate.test.ts} (63%) rename tests/system-integration/src/zos/{TestAwareFiles.ts => TestFileActions.ts} (92%) diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap new file mode 100644 index 0000000000..ccdd344cb5 --- /dev/null +++ b/tests/system-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap @@ -0,0 +1,234 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`init-generate (SHORT) bad ds prefix 1`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) +ERROR: ZWEL0143E Cannot find data set member 'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." +`; + +exports[`init-generate (SHORT) disable cfgmgr 1`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully" +`; + +exports[`init-generate (SHORT) simple --dry-run 1`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly." +`; diff --git a/tests/system-integration/src/__tests__/init/apfauth.test.ts b/tests/system-integration/src/__tests__/init/apfauth.test.ts index 28466916c1..24a1a43e39 100644 --- a/tests/system-integration/src/__tests__/init/apfauth.test.ts +++ b/tests/system-integration/src/__tests__/init/apfauth.test.ts @@ -12,7 +12,7 @@ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig' import ZoweYamlType from '../../types/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; -import { FileType, TestAwareFiles as TestFileActions, TestManagedFile as TestFile } from '../../zos/TestAwareFiles'; +import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; const testSuiteName = 'init-apfauth'; describe(`${testSuiteName}`, () => { @@ -35,7 +35,7 @@ describe(`${testSuiteName}`, () => { const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; // try to delete everything we know about - // await TestFileActions.deleteAll([...cleanupDatasets, jcllib]); + await TestFileActions.deleteAll([...cleanupDatasets, jcllib]); cleanupDatasets = []; }); diff --git a/tests/system-integration/src/__tests__/init/certificate.test.ts b/tests/system-integration/src/__tests__/init/certificate.test.ts index 2a635862f2..6c8da20ae7 100644 --- a/tests/system-integration/src/__tests__/init/certificate.test.ts +++ b/tests/system-integration/src/__tests__/init/certificate.test.ts @@ -12,13 +12,13 @@ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig' import ZoweYamlType from '../../types/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; -import { FileType, TestAwareFiles, TestManagedFile } from '../../zos/TestAwareFiles'; +import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; const testSuiteName = 'init-cert'; describe(`${testSuiteName}`, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; - let cleanupFiles: TestManagedFile[] = []; // a list of datasets deleted after every test + let cleanupFiles: TestFile[] = []; // a list of datasets deleted after every test beforeAll(() => { testRunner = new RemoteTestRunner(testSuiteName); @@ -33,10 +33,10 @@ describe(`${testSuiteName}`, () => { await testRunner.collectSpool(); } // re-created in every `init` subcommand based on changes to zowe yaml command... - const jcllib: TestManagedFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; // try to delete everything we know about - await TestAwareFiles.deleteAll([...cleanupFiles, jcllib]); + await TestFileActions.deleteAll([...cleanupFiles, jcllib]); cleanupFiles = []; }); diff --git a/tests/system-integration/src/__tests__/init/generate.tests.ts b/tests/system-integration/src/__tests__/init/generate.test.ts similarity index 63% rename from tests/system-integration/src/__tests__/init/generate.tests.ts rename to tests/system-integration/src/__tests__/init/generate.test.ts index e94997d458..f44813ac79 100644 --- a/tests/system-integration/src/__tests__/init/generate.tests.ts +++ b/tests/system-integration/src/__tests__/init/generate.test.ts @@ -12,13 +12,13 @@ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig' import ZoweYamlType from '../../types/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; -import { FileType, TestAwareFiles, TestManagedFile } from '../../zos/TestAwareFiles'; +import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; -const testSuiteName = 'init-vsam'; +const testSuiteName = 'init-generate'; describe(`${testSuiteName}`, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; - let cleanupDatasets: TestManagedFile[] = []; // a list of datasets deleted after every test + let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test beforeAll(() => { testRunner = new RemoteTestRunner(testSuiteName); @@ -31,46 +31,38 @@ describe(`${testSuiteName}`, () => { if (TEST_COLLECT_SPOOL) { await testRunner.collectSpool(); } - // re-created in every `init vsam` based on changes to zowe yaml command... - const jcllib: TestManagedFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + // re-created in every `init generate` based on changes to zowe yaml command... + const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; // try to delete everything we know about - await TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); + await TestFileActions.deleteAll([...cleanupDatasets, jcllib]); cleanupDatasets = []; }); describe('(SHORT)', () => { it('disable cfgmgr', async () => { cfgYaml.zowe.useConfigmgr = false; - const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); + const result = await testRunner.runZweTest(cfgYaml, 'init generate'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(60); // 60 is expected... }); - it('BAD: bad ds prefix', async () => { + it('bad ds prefix', async () => { cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; - const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + const result = await testRunner.runZweTest(cfgYaml, 'init generate --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); + expect(result.rc).toBe(143); }); - it('GOOD: simple --dry-run', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + it('simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init generate --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(0); // 60 is expected... }); }); - describe('(LONG)', () => { - it('creates vsam', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); - cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: FileType.DS_VSAM }); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... }); - }); - }); + describe('(LONG)', () => {}); }); diff --git a/tests/system-integration/src/__tests__/init/vsam.test.ts b/tests/system-integration/src/__tests__/init/vsam.test.ts index 9a31b3588e..d4c0b5ed0e 100644 --- a/tests/system-integration/src/__tests__/init/vsam.test.ts +++ b/tests/system-integration/src/__tests__/init/vsam.test.ts @@ -12,13 +12,13 @@ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig' import ZoweYamlType from '../../types/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; -import { FileType, TestAwareFiles, TestManagedFile } from '../../zos/TestAwareFiles'; +import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; const testSuiteName = 'init-vsam'; describe(`${testSuiteName}`, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; - let cleanupDatasets: TestManagedFile[] = []; // a list of datasets deleted after every test + let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test beforeAll(() => { testRunner = new RemoteTestRunner(testSuiteName); @@ -35,10 +35,10 @@ describe(`${testSuiteName}`, () => { await testRunner.collectSpool(); } // re-created in every `init vsam` based on changes to zowe yaml command... - const jcllib: TestManagedFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; // try to delete everything we know about - await TestAwareFiles.deleteAll([...cleanupDatasets, jcllib]); + await TestFileActions.deleteAll([...cleanupDatasets, jcllib]); cleanupDatasets = []; }); diff --git a/tests/system-integration/src/globalSetup.ts b/tests/system-integration/src/globalSetup.ts index 51ec243215..d0c5f9b6ec 100644 --- a/tests/system-integration/src/globalSetup.ts +++ b/tests/system-integration/src/globalSetup.ts @@ -238,6 +238,17 @@ module.exports = async () => { includeHidden: true, }); + console.log(`Uploading ${REPO_ROOT_DIR}/files/defaults.yaml to ${REMOTE_SYSTEM_INFO.ussTestDir}...`); + await uss.runCommand(`mkdir -p ${REMOTE_SYSTEM_INFO.ussTestDir}/files`); + await files.Upload.fileToUssFile( + zosmfSession, + `${REPO_ROOT_DIR}/files/defaults.yaml`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/files/defaults.yaml`, + { + binary: false, + }, + ); + await createPds(REMOTE_SYSTEM_INFO.szweexec, { primary: 5, secondary: 1, diff --git a/tests/system-integration/src/globalTeardown.ts b/tests/system-integration/src/globalTeardown.ts index ca0f044215..11ba28914f 100644 --- a/tests/system-integration/src/globalTeardown.ts +++ b/tests/system-integration/src/globalTeardown.ts @@ -12,7 +12,7 @@ import { REMOTE_TEARDOWN, LINGERING_REMOTE_FILES_FILE, TEST_JOBS_RUN_FILE } from import * as fs from 'fs-extra'; import * as jobs from '@zowe/zos-jobs-for-zowe-sdk'; import { getZosmfSession } from './zos/zowe'; -import { TestAwareFiles, TestManagedFile } from './zos/TestAwareFiles'; +import { TestFileActions, TestFile } from './zos/TestFileActions'; module.exports = async () => { if (!REMOTE_TEARDOWN) { return; @@ -25,17 +25,17 @@ module.exports = async () => { .readFileSync(`${LINGERING_REMOTE_FILES_FILE}`, 'utf8') .split('\n') .filter((line) => line.trim().length > 0); - const dsDeletes: TestManagedFile[] = dsList.map((dsEntry) => { + const dsDeletes: TestFile[] = dsList.map((dsEntry) => { const dsPieces = dsEntry.split(':'); const enumVal = Number(dsPieces[1]); - const ds: TestManagedFile = { + const ds: TestFile = { name: dsPieces[0], type: enumVal, }; return ds; }); - await TestAwareFiles.deleteAll(dsDeletes); + await TestFileActions.deleteAll(dsDeletes); } if (fs.existsSync(`${TEST_JOBS_RUN_FILE}`)) { diff --git a/tests/system-integration/src/types/ZoweYamlType.ts b/tests/system-integration/src/types/ZoweYamlType.ts index 5603640969..ec242fe501 100644 --- a/tests/system-integration/src/types/ZoweYamlType.ts +++ b/tests/system-integration/src/types/ZoweYamlType.ts @@ -173,7 +173,7 @@ const zoweSchema = zoweYamlSchema as { description: 'Holds Zowe PARMLIB members for plugins'; properties: { zis: { - $ref: '/schemas/v2/server-common#zoweDatasetMember'; + $ref: '/schemas/v2/server-common#zisParmlibMember'; description: 'PARMLIB member used by ZIS'; }; }; @@ -322,31 +322,31 @@ const zoweSchema = zoweYamlSchema as { description: 'PKCS#12 keystore settings'; properties: { directory: { - $ref: '/schemas/v2/server-common#zowePath'; + type: ['string', 'null']; description: 'Keystore directory'; }; name: { - type: 'string'; + type: ['string', 'null']; description: 'Certificate alias name. Note: please use all lower cases as alias.'; default: 'localhost'; }; password: { - type: 'string'; + type: ['string', 'null']; description: 'Keystore password'; default: 'password'; }; caAlias: { - type: 'string'; + type: ['string', 'null']; description: 'Alias name of self-signed certificate authority. Note: please use all lower cases as alias.'; default: 'local_ca'; }; caPassword: { - type: 'string'; + type: ['string', 'null']; description: 'Password of keystore stored self-signed certificate authority.'; default: 'local_ca_password'; }; lock: { - type: 'boolean'; + type: ['boolean', 'null']; description: 'Whether to restrict the permissions of the keystore after creation'; }; import: { @@ -446,37 +446,37 @@ const zoweSchema = zoweYamlSchema as { description: 'Certificate distinguish name'; properties: { caCommonName: { - type: 'string'; + type: ['string', 'null']; description: 'Common name of certificate authority generated by Zowe.'; }; commonName: { - type: 'string'; + type: ['string', 'null']; description: 'Common name of certificate generated by Zowe.'; }; orgUnit: { - type: 'string'; + type: ['string', 'null']; description: 'Organization unit of certificate generated by Zowe.'; }; org: { - type: 'string'; + type: ['string', 'null']; description: 'Organization of certificate generated by Zowe.'; }; locality: { - type: 'string'; + type: ['string', 'null']; description: 'Locality of certificate generated by Zowe. This is usually the city name.'; }; state: { - type: 'string'; + type: ['string', 'null']; description: 'State of certificate generated by Zowe. You can also put province name here.'; }; country: { - type: 'string'; + type: ['string', 'null']; description: '2 letters country code of certificate generated by Zowe.'; }; }; }; validity: { - type: 'integer'; + type: ['integer', 'null']; description: 'Validity days for Zowe generated certificates'; default: 3650; }; diff --git a/tests/system-integration/src/zos/TestAwareFiles.ts b/tests/system-integration/src/zos/TestFileActions.ts similarity index 92% rename from tests/system-integration/src/zos/TestAwareFiles.ts rename to tests/system-integration/src/zos/TestFileActions.ts index 904db57e03..347349d0af 100644 --- a/tests/system-integration/src/zos/TestAwareFiles.ts +++ b/tests/system-integration/src/zos/TestFileActions.ts @@ -12,15 +12,14 @@ import * as fs from 'fs-extra'; import { getZosmfSession } from './zowe'; import * as files from '@zowe/zos-files-for-zowe-sdk'; import { LINGERING_REMOTE_FILES_FILE } from '../config/TestConfig'; -export class TestAwareFiles { +export class TestFileActions { private static readonly session = getZosmfSession(); constructor() {} - public static async deleteAll(datasets: TestManagedFile[]) { + public static async deleteAll(datasets: TestFile[]) { const deleteOps: DeleteFile[] = []; datasets.forEach((testFile) => { - console.log(`Cleaning up ${testFile.name}`); let delPromise; switch (testFile.type) { case FileType.DS_VSAM: @@ -60,11 +59,11 @@ export class TestAwareFiles { } type DeleteFile = { - file: TestManagedFile; + file: TestFile; action: Promise; }; -export type TestManagedFile = { +export type TestFile = { name: string; type: FileType; }; diff --git a/tests/system-integration/src/zos/Uss.ts b/tests/system-integration/src/zos/Uss.ts index 158c663b1a..b195e102e8 100644 --- a/tests/system-integration/src/zos/Uss.ts +++ b/tests/system-integration/src/zos/Uss.ts @@ -24,7 +24,6 @@ export async function runCommand(command: string, cwd: string = '~') { if (data.trim()) { stdout += data; } - console.log(stdout); }); return { data: stdout, rc: rc }; } From 3fb88b43c03b3526bda1b3e925fe99b21d803c3c Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 31 May 2024 12:34:47 -0400 Subject: [PATCH 08/21] refactors and github action setup Signed-off-by: MarkAckert --- .github/scripts/cicd_test/make_matrix.sh | 2 + .github/workflows/zwe-integration-tests.yml | 399 +++--------------- .../resources/test_config.yml | 29 -- .../init/__snapshots__/vsam.test.ts.snap | 192 --------- .../.eslintrc.js | 0 .../.gitignore | 0 .../.prettierrc.json | 0 .../README.md | 10 +- .../jest.config.ts | 0 .../package-lock.json | 203 +++++++-- .../package.json | 11 +- .../resources/convert_to_ebcdic.sh | 0 .../resources/test_config.yml | 63 +++ .../init/__snapshots__/apfauth.test.ts.snap | 3 +- .../init/__snapshots__/canary.test.ts.snap | 0 .../__snapshots__/certificate.test.ts.snap | 0 .../init/__snapshots__/generate.test.ts.snap | 0 .../init/__snapshots__/vsam.test.ts.snap | 379 +++++++++++++++++ .../src/__tests__/init/apfauth.test.ts | 2 +- .../src/__tests__/init/canary.test.ts | 0 .../src/__tests__/init/certificate.test.ts | 2 +- .../src/__tests__/init/composite.test.ts} | 4 + .../src/__tests__/init/generate.test.ts | 2 +- .../src/__tests__/init/mvs.test.ts} | 3 + .../src/__tests__/init/security.test.ts} | 3 + .../src/__tests__/init/stc.test.ts} | 3 + .../src/__tests__/init/vsam.test.ts | 7 +- .../src/config/TestConfig.ts | 4 +- .../src/config/ZoweYaml.ts | 2 +- .../src/config}/ZoweYamlType.ts | 0 .../src/globalSetup.ts | 2 +- .../src/globalTeardown.ts | 0 .../src/utils.ts | 0 .../src/zos/RemoteTestRunner.ts | 2 +- .../src/zos/TestFileActions.ts | 0 .../src/zos/Uss.ts | 0 .../src/zos/zowe.ts | 0 .../tsconfig.json | 0 38 files changed, 708 insertions(+), 619 deletions(-) delete mode 100644 tests/system-integration/resources/test_config.yml delete mode 100644 tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap rename tests/{system-integration => zwe-remote-integration}/.eslintrc.js (100%) rename tests/{system-integration => zwe-remote-integration}/.gitignore (100%) rename tests/{system-integration => zwe-remote-integration}/.prettierrc.json (100%) rename tests/{system-integration => zwe-remote-integration}/README.md (53%) rename tests/{system-integration => zwe-remote-integration}/jest.config.ts (100%) rename tests/{system-integration => zwe-remote-integration}/package-lock.json (98%) rename tests/{system-integration => zwe-remote-integration}/package.json (90%) rename tests/{system-integration => zwe-remote-integration}/resources/convert_to_ebcdic.sh (100%) create mode 100644 tests/zwe-remote-integration/resources/test_config.yml rename tests/{system-integration => zwe-remote-integration}/src/__tests__/init/__snapshots__/apfauth.test.ts.snap (66%) rename tests/{system-integration => zwe-remote-integration}/src/__tests__/init/__snapshots__/canary.test.ts.snap (100%) rename tests/{system-integration => zwe-remote-integration}/src/__tests__/init/__snapshots__/certificate.test.ts.snap (100%) rename tests/{system-integration => zwe-remote-integration}/src/__tests__/init/__snapshots__/generate.test.ts.snap (100%) create mode 100644 tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap rename tests/{system-integration => zwe-remote-integration}/src/__tests__/init/apfauth.test.ts (98%) rename tests/{system-integration => zwe-remote-integration}/src/__tests__/init/canary.test.ts (100%) rename tests/{system-integration => zwe-remote-integration}/src/__tests__/init/certificate.test.ts (98%) rename tests/{system-integration/src/__tests__/init/security.tests.ts => zwe-remote-integration/src/__tests__/init/composite.test.ts} (71%) rename tests/{system-integration => zwe-remote-integration}/src/__tests__/init/generate.test.ts (97%) rename tests/{system-integration/src/__tests__/init/composite.tests.ts => zwe-remote-integration/src/__tests__/init/mvs.test.ts} (73%) rename tests/{system-integration/src/__tests__/init/mvs.tests.ts => zwe-remote-integration/src/__tests__/init/security.test.ts} (72%) rename tests/{system-integration/src/__tests__/init/stc.tests.ts => zwe-remote-integration/src/__tests__/init/stc.test.ts} (73%) rename tests/{system-integration => zwe-remote-integration}/src/__tests__/init/vsam.test.ts (93%) rename tests/{system-integration => zwe-remote-integration}/src/config/TestConfig.ts (98%) rename tests/{system-integration => zwe-remote-integration}/src/config/ZoweYaml.ts (94%) rename tests/{system-integration/src/types => zwe-remote-integration/src/config}/ZoweYamlType.ts (100%) rename tests/{system-integration => zwe-remote-integration}/src/globalSetup.ts (99%) rename tests/{system-integration => zwe-remote-integration}/src/globalTeardown.ts (100%) rename tests/{system-integration => zwe-remote-integration}/src/utils.ts (100%) rename tests/{system-integration => zwe-remote-integration}/src/zos/RemoteTestRunner.ts (98%) rename tests/{system-integration => zwe-remote-integration}/src/zos/TestFileActions.ts (100%) rename tests/{system-integration => zwe-remote-integration}/src/zos/Uss.ts (100%) rename tests/{system-integration => zwe-remote-integration}/src/zos/zowe.ts (100%) rename tests/{system-integration => zwe-remote-integration}/tsconfig.json (100%) diff --git a/.github/scripts/cicd_test/make_matrix.sh b/.github/scripts/cicd_test/make_matrix.sh index 7a32aa75f6..467eb67e12 100644 --- a/.github/scripts/cicd_test/make_matrix.sh +++ b/.github/scripts/cicd_test/make_matrix.sh @@ -12,6 +12,8 @@ case $install_test_choice in +"ZWE CI Build") ;; +"ZWE Full Tests") ;; "Convenience Pax") test_file="$CONVENIENCE_PAX_TESTFILE" ;; diff --git a/.github/workflows/zwe-integration-tests.yml b/.github/workflows/zwe-integration-tests.yml index 4176c175dd..7dabae764d 100644 --- a/.github/workflows/zwe-integration-tests.yml +++ b/.github/workflows/zwe-integration-tests.yml @@ -1,5 +1,10 @@ -name: Zowe CICD Integration Tests +name: Zwe Remote Integration Tests + +permissions: read-all + on: + pull_request: + types: [opened, synchronize] workflow_dispatch: inputs: test-server: @@ -12,36 +17,14 @@ on: - zzow06 - zzow07 - zzow08 - - zzow06,zzow07,zzow08 - install-test: + zwe-test: description: 'Choose Zwe Test' type: choice required: true - default: Convenience Pax + default: CI Build options: - - Convenience Pax - - SMPE FMID - - SMPE PTF - - Extensions - - Keyring - - z/OS node v18 - - Non-strict Verify External Certificate - - Install PTF Twice - - VSAM Caching Storage Method - - Infinispan Caching Storage Method - - Config Manager - - Generate API Documentation - - Zowe Nightly Tests - - Zowe Release Tests - custom-zowe-artifactory-pattern-or-build-number: - description: 'Custom Zowe Artifactory Pattern or Build Number:' - required: false - custom-extension-list: - description: 'Custom Extension List:' - required: false - # FIXME: too slow to test 2, temporarily only test 1 - # default: 'sample-node-api;sample-trial-app' - default: 'sample-node-api' + - ZWE CI Build + - ZWE Full Tests RANDOM_DISPATCH_EVENT_ID: description: 'random dispatch event id' required: false @@ -50,35 +33,7 @@ on: # create a new branch to overwrite following defaults if necessary env: # constants - INSTALL_TEST_PATH: tests/installation - SANITY_TEST_PATH: tests/sanity - DEFAULT_ZOWE_PAX_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/*zowe*{branch-name}*.pax - DEFAULT_ZOWE_SMPE_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/*zowe-smpe*{branch-name}*.zip - DEFAULT_ZOWE_CLI_ARTIFACTORY_PATTERN: PLACE_HOLDER/org/zowe/cli/zowe-cli-package/*zowe-cli-package-2*.zip - DEFAULT_ZOWE_EXT_ARTIFACTORY_PATTERN: libs-snapshot-local/org/zowe/{ext-name}/*/{ext-name}-*.pax - - # below block can be overwritten, adjusted by DevOps only - # ZOS_NODE_VERSION more to choose from: v16.20.1, v18.16.0 - ZOS_NODE_VERSION: v16.20.1 - CLIENT_NODE_VERSION: v12.18.3 - INSTALL_TEST_DEBUG_INFORMATION: zowe-install-test:* - SANITY_TEST_DEBUG_INFORMATION: zowe-sanity-test:* - - # catalogue of files associated with install test configurations - CONVENIENCE_PAX_TESTFILE: basic/install.ts - SMPE_FMID_TESTFILE: basic/install-fmid.ts - SMPE_PTF_TESTFILE: basic/install-ptf.ts - EXTENSIONS_TESTFILE: basic/install-ext.ts - KEYRING_TESTFILE: extended/keyring.ts - ZOS_NODE_V18_TESTFILE: extended/node-versions/node-v18.ts - NON_STRICT_VERIFY_EXTERNAL_CERTIFICATE_TESTFILE: extended/certificates/nonstrict-verify-external-certificate.ts - INSTALL_PTF_TWICE_TESTFILE: extended/install-ptf-two-times.ts - VSAM_CACHING_STORAGE_METHOD_TESTFILE: extended/caching-storages/vsam-storage.ts - INFINISPAN_CACHING_STORAGE_METHOD_TESTFILE: extended/caching-storages/infinispan-storage.ts - CONFIG_MANAGER_TESTFILE: extended/config-manager/enable-config-manager.ts - GENERAL_API_DOCUMENTATION_TESTFILE: basic/install-api-gen.ts - ZOWE_NIGHTLY_TESTS_FULL: basic/install.ts(all);basic/install-ptf.ts(all) - ZOWE_RELEASE_TESTS_FULL: basic/install.ts(all);basic/install-ptf.ts(all);basic/install-ext.ts(any);extended/keyring.ts(all);extended/node-versions/node-v18.ts(zzow08):extended/certificates/nonstrict-verify-external-certificate.ts(any);extended/caching-storages/infinispan-storage.ts(any);extended/config-manager/enable-config-manager.ts(any) + ZWE_TEST_PATH: tests/zwe-remote-integration jobs: display-dispatch-event-id: @@ -112,7 +67,7 @@ jobs: source make_matrix.sh env: test_server: ${{ github.event.inputs.test-server }} - install_test_choice: ${{ github.event.inputs.install-test }} + install_test_choice: ${{ github.event.inputs.zwe-test }} outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} @@ -130,7 +85,7 @@ jobs: - name: '[Prep 2] Setup Node' uses: actions/setup-node@v3 with: - node-version: '18' + node-version: '20' - name: '[Prep 3] Cache node modules' uses: actions/cache@v2 @@ -155,102 +110,23 @@ jobs: - name: '[Prep 6] Prepare workflow' uses: zowe-actions/shared-actions/prepare-workflow@main - - name: '[Prep 7] Additional Prep work' - id: more-test-prep - run: | - cd .github/scripts/cicd_test/prep7_more_test_prep - chmod +x *.sh - source 00_init.sh - source 01_helper_functions.sh - source 02_process_zowe_art_pattern.sh - source 03_process_test_server.sh - source 04_process_cli_art_pattern.sh - source 05_process_ext_list.sh - source 06_process_outputs.sh - env: - CURRENT_BRANCH: ${{ env.CURRENT_BRANCH }} - MATRIX_TEST: ${{ matrix.test }} - MATRIX_SERVER: ${{ matrix.server }} - INPUT_CUSTOM_ZOWE_ART_PAT_OR_BLDNUM: ${{ github.event.inputs.custom-zowe-artifactory-pattern-or-build-number }} - CUSTOM_ZOWE_CLI_ARTIFACTORY_PATTERN: ${{ github.event.inputs.custom-zowe-cli-artifactory-pattern }} - CUSTOM_EXTENSION_LIST: ${{ github.event.inputs.custom-extension-list }} - - - name: '[Setup 1] Project Setup 1' - working-directory: ${{ env.INSTALL_TEST_PATH }} + - name: '[Setup 1] Test Project Install' + working-directory: ${{ env.ZWE_TEST_PATH }} run: | npm ci - npm run build - - name: '[Setup 2] Project Setup 2' - working-directory: ${{ env.SANITY_TEST_PATH }} + # Error on this step is likely a schema mismatch. See test README + - name: '[Setup 2] Test Project Build' + working-directory: ${{ env.ZWE_TEST_PATH }} run: | - npm ci + npm run build - name: '[Lint 1] Lint 1' timeout-minutes: 2 - working-directory: ${{ env.INSTALL_TEST_PATH }} - run: | - npm run lint - - - name: '[Lint 2] Lint 2' - timeout-minutes: 2 - working-directory: ${{ env.SANITY_TEST_PATH }} + working-directory: ${{ env.ZWE_TEST_PATH }} run: | npm run lint - - name: '[Download 1] Download zowe.pax or smpe-zowe.zip' - uses: zowe-actions/shared-actions/jfrog-download@main - with: - source-path-or-pattern: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} - default-target-path: ${{ runner.temp }}/zowe/ - extra-options: --flat=true - expected-count: 1 - - - name: '[Download 2] Download cli package' - uses: zowe-actions/shared-actions/jfrog-download@main - with: - source-path-or-pattern: ${{ steps.more-test-prep.outputs.ZOWE_CLI_ARTIFACTORY_FINAL }} - default-target-path: ${{ runner.temp }}/cli/ - extra-options: --flat=true --explode=true - expected-count: 1 - - - name: '[Install] Install CLI' - timeout-minutes: 10 - working-directory: ${{ runner.temp }}/cli - run: npm install -g zowe-cli*.tgz - - - name: '[Comment] Post comments on PR about what tests are gonna be run' - uses: actions/github-script@v5 - id: create-comment - if: startsWith(env.CURRENT_BRANCH, 'PR-') - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - var installTest = "${{ github.event.inputs.install-test }}" - if (installTest == '') { - // if null, this is very likely to be triggered by pr auto test - installTest = 'Convenience Pax' - } - - var prNum='${{ env.CURRENT_BRANCH }}'.split('-')[1] - - var body=`Test workflow ${context.runNumber} is started.\n` - body += `Running install test: ${installTest} \n` - body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` - body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` - body += `Acquiring the test server lock first, please wait... \n ` - body += `ETA: unknown (This ETA will get updated once the machine lock is acquired) \n` - body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` - - const { data: comment } = await github.rest.issues.createComment({ - issue_number: prNum, - owner: context.repo.owner, - repo: context.repo.repo, - body: body - }); - - return comment.id; - - name: '[LOCK] Lock marist servers' uses: zowe-actions/shared-actions/lock-resource@main with: @@ -258,112 +134,50 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} lock-resource-name: zowe-zwe-system-test-${{ steps.more-test-prep.outputs.TEST_SERVER }}-lock lock-avg-retry-interval: 60 - - - name: '[Comment] Update comment after lock is acquired' - uses: actions/github-script@v5 - if: steps.create-comment.outputs.result != '' - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - var installTest = "${{ github.event.inputs.install-test }}" - var eta - if (installTest == '') { - // if null, this is very likely to be triggered by pr auto test - installTest = 'Convenience Pax' - } - - // get ETA for each test run - switch(installTest) { - case 'Convenience Pax': - eta = 53 - break; - case 'SMPE PTF': - eta = 68 - break; - case 'Extensions': - eta = 67 - break; - case 'Keyring': - eta = 53 - break; - case 'z/OS node v18': - eta = 45 - break; - case 'Infinispan Caching Storage Method': - eta = 51 - break; - case 'VSAM Caching Storage Method': - eta = 51 - break; - case 'Non-strict Verify External Certificate': - eta = 51 - break; - case 'Zowe Release Tests': - eta = 376 - break; - default: - } - - var expectedTimeString - if (eta != '') { - const finish_time = new Date(new Date().getTime() + eta*60*1000); - const finish_time_EST = finish_time.toLocaleString('en-CA', { timeZone: 'Canada/Eastern' }).split(', ')[1] + " EST" - const finish_time_CET = finish_time.toLocaleString('en-EU', { timeZone: 'Europe/Prague' }).split(', ')[1] + " CET" - const finish_time_UTC = finish_time.toLocaleString('en-GB', { timeZone: 'Europe/London' }).split(', ')[1] + " GMT" - const finish_time_PST = finish_time.toLocaleString('en-US', { timeZone: 'America/Los_Angeles' }).split(', ')[1] + " PST" - expectedTimeString = `Check back around: \n ${finish_time_EST} | ${finish_time_CET} | ${finish_time_UTC} | ${finish_time_PST} \n` - } - else { - eta = 'unknown' - } - - var body=`Test workflow ${context.runNumber} is started.\n` - body += `Running install test: ${installTest} \n` - body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` - body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` - body += `Lock acquired, start the test now, please wait... \n ` - body += `ETA: ${eta} mins \n` - if (expectedTimeString != '') { - body += `${expectedTimeString} \n` - } - body += `Result: (will get updated once test is finished) \n` - body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` - - github.rest.issues.updateComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: ${{ steps.create-comment.outputs.result }}, - body: body - }); - name: '[Test] Test starts from here' + if: ${{ github.event.inputs.zwe-test == 'ZWE CI Build' }} timeout-minutes: 180 - working-directory: ${{ env.INSTALL_TEST_PATH }} - run: npm test -- --testPathPattern --detectOpenHandles dist/__tests__/$(echo "${{ matrix.test }}" | sed "s/.ts/.js/g") + working-directory: ${{ env.ZWE_TEST_PATH }} + run: npm run test:ci env: ANSIBLE_FORCE_COLOR: true TEST_SERVER: ${{ steps.more-test-prep.outputs.TEST_SERVER_NICKNAME }} - ZOWE_BUILD_LOCAL: "${{ runner.temp }}/zowe/${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL_FILENAME }}" - ZOWE_DOCKER_URL: ${{ steps.more-test-prep.outputs.ZOWE_TP_DOCKER_ARTIFACTORY_URL }} - EXTENSIONS_LIST: ${{ steps.more-test-prep.outputs.EXTENSION_LIST }} - SANITY_TEST_DEBUG: ${{ env.SANITY_TEST_DEBUG_INFORMATION }} - DEBUG: ${{ env.INSTALL_TEST_DEBUG_INFORMATION }} - SSH_HOST: ${{ secrets.SSH_HOST }} + ZOS_HOST: ${{ secrets.SSH_HOST }} SSH_PORT: ${{ secrets.SSH_PORT }} - SSH_USER: ${{ secrets.SSH_USER }} - SSH_PASSWORD: ${{ secrets.SSH_PASSWORD }} - OKTA_HOSTNAME: ${{ secrets.OKTA_HOSTNAME }} - OKTA_CLIENT_ID: ${{ secrets.OKTA_CLIENT_ID }} - OKTA_CLIENT_SECRET: ${{ secrets.OKTA_CLIENT_SECRET }} - OKTA_USER: ${{ secrets.OKTA_USER }} - OKTA_PASSWORD: ${{ secrets.OKTA_PASSWORD }} - OIDC_REGISTRY: ${{ secrets.OIDC_REGISTRY }} - ZOS_NODE_HOME: ${{ steps.more-test-prep.outputs.NODE_HOME_PATTERN }} - # # ANSIBLE_VERBOSE: -vvv - + ZOS_USER: ${{ secrets.SSH_USER }} + ZOS_PASSWORD: ${{ secrets.SSH_PASSWORD }} + ZOSMF_PORT: 10443 + ZOS_JAVA_HOME: /ZOWE/node/J8.0_64 + ZOS_NODE_HOME: /ZOWE/node/node-v18.16.0 + REJECT_UNAUTHORIZED: false + REMOTE_TEST_DIR: /ZOWE/zwe-integration + TEST_VOLUME: ZOS003 + JFROG_TOKEN: ${{ secrets.JF_ARTIFACTORY_TOKEN }} + + - name: '[Test] Test starts from here' + if: ${{ github.event.inputs.zwe-test == 'ZWE Full Tests' }} + timeout-minutes: 180 + working-directory: ${{ env.ZWE_TEST_PATH }} + run: npm run test:extended + env: + ANSIBLE_FORCE_COLOR: true + TEST_SERVER: ${{ steps.more-test-prep.outputs.TEST_SERVER_NICKNAME }} + ZOS_HOST: ${{ secrets.SSH_HOST }} + SSH_PORT: ${{ secrets.SSH_PORT }} + ZOS_USER: ${{ secrets.SSH_USER }} + ZOS_PASSWORD: ${{ secrets.SSH_PASSWORD }} + ZOSMF_PORT: 10443 + ZOS_JAVA_HOME: /ZOWE/node/J8.0_64 + ZOS_NODE_HOME: /ZOWE/node/node-v18.16.0 + REJECT_UNAUTHORIZED: false + REMOTE_TEST_DIR: /ZOWE/zwe-integration + TEST_VOLUME: ZOS003 + JFROG_TOKEN: ${{ secrets.JF_ARTIFACTORY_TOKEN }} + - name: '[After Test 1] Prepare to upload test report' if: always() - working-directory: ${{ env.INSTALL_TEST_PATH }} + working-directory: ${{ env.ZWE_TEST_PATH }} run: | echo CURRENT_TIME=$(date +%s) >> $GITHUB_ENV echo TEST_NAME=$(echo "${{ matrix.test }}" | sed 's#.*\/##g') >> $GITHUB_ENV @@ -372,104 +186,5 @@ jobs: if: always() uses: actions/upload-artifact@v3 with: - name: InstallTestReports-${{ env.TEST_NAME }}-${{ steps.more-test-prep.outputs.TEST_SERVER_NICKNAME }}-${{ github.run_id }}-${{ env.CURRENT_TIME }} - path: ${{ env.INSTALL_TEST_PATH }}/reports/ - - - name: '[Comment] Update PR comment to indicate test succeeded' - uses: actions/github-script@v5 - if: steps.create-comment.outputs.result != '' && success() - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - var installTest = "${{ github.event.inputs.install-test }}" - var eta - if (installTest == '') { - // if null, this is very likely to be triggered by pr auto test - installTest = 'Convenience Pax' - } - - var body=`Test workflow ${context.runNumber} is started.\n` - body += `Running install test: ${installTest} \n` - body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` - body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` - body += `Result: SUCCESS \n` - body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` - - github.rest.issues.updateComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: ${{ steps.create-comment.outputs.result }}, - body: body - }); - - - name: '[Comment] Update PR comment to indicate test failed' - uses: actions/github-script@v5 - if: steps.create-comment.outputs.result != '' && failure() - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - var installTest = "${{ github.event.inputs.install-test }}" - var eta - if (installTest == '') { - // if null, this is very likely to be triggered by pr auto test - installTest = 'Convenience Pax' - } - - var body=`Test workflow ${context.runNumber} is started.\n` - body += `Running install test: ${installTest} \n` - body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` - body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` - body += `Result: FAILURE \n` - body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` - - github.rest.issues.updateComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: ${{ steps.create-comment.outputs.result }}, - body: body - }); - - - name: '[Comment] Update PR comment to indicate test cancelled' - uses: actions/github-script@v5 - if: steps.create-comment.outputs.result != '' && cancelled() - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - var installTest = "${{ github.event.inputs.install-test }}" - var eta - if (installTest == '') { - // if null, this is very likely to be triggered by pr auto test - installTest = 'Convenience Pax' - } - - var body=`Test workflow ${context.runNumber} is started.\n` - body += `Running install test: ${installTest} \n` - body += `The zowe artifact being used by this test workflow: ${{ steps.more-test-prep.outputs.ZOWE_ARTIFACTORY_FINAL }} \n` - body += `Running on machine: ${{ steps.more-test-prep.outputs.TEST_SERVER }} \n` - body += `Result: CANCELLED \n` - body += `Link to workflow run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` - - github.rest.issues.updateComment({ - owner: context.repo.owner, - repo: context.repo.repo, - comment_id: ${{ steps.create-comment.outputs.result }}, - body: body - }); - - # keep-curl: - # runs-on: ubuntu-latest - # needs: make-matrix - # strategy: - # matrix: ${{ fromJson(needs.make-matrix.outputs.matrix) }} - # fail-fast: false - # environment: ${{ matrix.server }} - # steps: - # - name: curl gateway - # timeout-minutes: 180 - # run: | - # sleep 30m - - # while sleep 5; - # do - # curl -k -s -S https://${{ secrets.SSH_HOST }}:7554 1>/dev/null || true; - # done + name: ZweTestReports-${{ env.TEST_NAME }}-${{ steps.more-test-prep.outputs.TEST_SERVER_NICKNAME }}-${{ github.run_id }}-${{ env.CURRENT_TIME }} + path: ${{ env.ZWE_TEST_PATH }}/reports/ diff --git a/tests/system-integration/resources/test_config.yml b/tests/system-integration/resources/test_config.yml deleted file mode 100644 index 307e8888b5..0000000000 --- a/tests/system-integration/resources/test_config.yml +++ /dev/null @@ -1,29 +0,0 @@ -# These below variables can be replaced -zos_host: -zos_user: -zos_password: -ssh_port: -zosmf_port: -remote_test_dir: -zos_java_home: -zos_node_home: -remote_setup: false -remote_teardown: false -test_ds_hlq: -test_volume: -zosmf_reject_unauthorized: -download_configmgr: true -download_zowe_tools: true -jfrog_user: -jfrog_token: -collect_test_spool: true - -### Always overrides any computed values in globalSetup. -### Only use to debug or write tests initially; -### these values are __not__ substituted in command response snapshots. -#zowe_yaml_overrides: -# zowe: -# setup: -# zOSMF: -# host: some-other.host.value -# port: 10443 diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap deleted file mode 100644 index 3534edc1b2..0000000000 --- a/tests/system-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ /dev/null @@ -1,192 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`init-vsam (SHORT) BAD: bad ds prefix 1`] = ` -" -$ Temporary directory '/tmp/.zweenv-0000' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -------------------------------------------------------------------------------- ->> Initialize Zowe custom data sets - -cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) -Error ZWETODOE: TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER) could not be copied. Review other error output from the 'cp' command. -ERROR: Error ZWEL0999E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER) before running this command." -`; - -exports[`init-vsam (SHORT) GOOD: simple --dry-run 1`] = ` -" -$ Temporary directory '/tmp/.zweenv-0000' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -------------------------------------------------------------------------------- ->> Initialize Zowe custom data sets - -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) ---- JCL Content --- -//ZWECSVSM JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* Zowe Open Source Project -//* This JCL creates the VSAM data set for the Caching Service. -//* -//* -//* CAUTION: This is neither a JCL procedure nor a complete job. -//* Before using this JCL, you will have to make the following -//* modifications: -//* -//* 1) Add job name and job parameters to the JOB statement, to -//* meet your system requirements. -//* -//* When using RLS, customize the definitions in the RLS DD: -//* -//* 5) Optionally, change LOG option NONE to UNDO or ALL to set the -//* desired recovery options for the RLS VSAM. -//* -//* -//* Note(s): -//* -//* 1. This job should complete with return code 0. -//* -//******************************************************************** -//* -//ALLOC EXEC PGM=IDCAMS,REGION=0M -//SYSPRINT DD SYSOUT=* -//SYSIN DD * - DEFINE CLUSTER - - (NAME(TEST.DATASET.PFX.VSAMTEST) - -// DD DDNAME=NONRLS -// DD * - REC(80 20) - - INDEXED) - - DATA(NAME(TEST.DATASET.PFX.VSAMTEST.DATA) - - RECSZ(4096 4096) - - UNIQUE - - KEYS(128 0)) - - INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - - UNIQUE) -//RLS DD * - STORCLAS() - - LOG(NONE) - -//NONRLS DD * - VOLUME(TSTVOL) - - SHAREOPTIONS(2 3) - -//* ---- End of JCL --- -JCL not submitted, command run with "--dry-run" flag. -To perform command, re-run command without "--dry-run" flag, or submit the JCL directly - ->> Command run successfully. - - ->> Zowe Caching Service VSAM storage is created successfully. -" -`; - -exports[`init-vsam (SHORT) disable cfgmgr 1`] = ` -" -$ Error ZWEL0316E: Command requires zowe.useConfigmgr=true to use." -`; diff --git a/tests/system-integration/.eslintrc.js b/tests/zwe-remote-integration/.eslintrc.js similarity index 100% rename from tests/system-integration/.eslintrc.js rename to tests/zwe-remote-integration/.eslintrc.js diff --git a/tests/system-integration/.gitignore b/tests/zwe-remote-integration/.gitignore similarity index 100% rename from tests/system-integration/.gitignore rename to tests/zwe-remote-integration/.gitignore diff --git a/tests/system-integration/.prettierrc.json b/tests/zwe-remote-integration/.prettierrc.json similarity index 100% rename from tests/system-integration/.prettierrc.json rename to tests/zwe-remote-integration/.prettierrc.json diff --git a/tests/system-integration/README.md b/tests/zwe-remote-integration/README.md similarity index 53% rename from tests/system-integration/README.md rename to tests/zwe-remote-integration/README.md index d9ba4ebc1c..baa6d39480 100644 --- a/tests/system-integration/README.md +++ b/tests/zwe-remote-integration/README.md @@ -1,17 +1,19 @@ # Zowe System-Integration Test -Runs integration tests for components in the zowe-install-packaging repository which require a backend system to execute. +Runs integration-style tests for the `zwe` command line utility. The `zwe` tool requires a backend system to run these tests and some tests may modify system state as part of their execution. (TODO: more information on system state changes / accepted tests, e.g. dataset creation happens but security manager updates will not) -## Programming Language And Main Testing Method +## Programming Languages, Tools, Pre-Reqs - Node.js, with recommended [v20.x LTS](https://nodejs.org/docs/latest-v20.x/api/index.html) - [Jest](https://jestjs.io/) +- Requires `tar` and `unzip` on the command line +- Makes heavy use of [@zowe/cli](https://github.com/zowe/zowe-cli) Node SDKs ## Testing Behaviors & Limitations -These tests currently work by uploading the `zwe` command line tool as it currently exists in this repo; i.e. not from a PAX file. This means that certain capabilities which require compiled java files in the `/bin/utils` dir will not work. +These tests currently work by deploying a working `zwe` command line tool to a remote system, using the `zwe` component as-is from this repo; i.e. not from a pre-built PAX file. All of `zwe`'s dependencies will be set in place on the remote system as part of setup. -These tests expect a valid configmgr PAX file to exist under a `.build` directory in the test directory (`tests/system-integration/.build/cfgmgr*pax`). The automated workflow will download configmgr using the `manifest.json.template`` in the root directory. +Each test runs a given `zwe` command and compares both stdout and return codes to pre ## Run Test Cases On Your Local diff --git a/tests/system-integration/jest.config.ts b/tests/zwe-remote-integration/jest.config.ts similarity index 100% rename from tests/system-integration/jest.config.ts rename to tests/zwe-remote-integration/jest.config.ts diff --git a/tests/system-integration/package-lock.json b/tests/zwe-remote-integration/package-lock.json similarity index 98% rename from tests/system-integration/package-lock.json rename to tests/zwe-remote-integration/package-lock.json index 59cc7f2148..498a45332f 100644 --- a/tests/system-integration/package-lock.json +++ b/tests/zwe-remote-integration/package-lock.json @@ -8,10 +8,6 @@ "name": "@zowe/installation-test", "version": "0.9.0", "license": "EPL-2.0", - "dependencies": { - "json-schema-to-ts": "^3.1.0", - "node-jq": "^4.3.1" - }, "devDependencies": { "@jest/globals": "^29.7.0", "@types/debug": "4.1.12", @@ -41,7 +37,9 @@ "jest": "29.7.0", "jest-junit": "16.0.0", "jfrog-client-js": "^2.8.0", + "json-schema-to-ts": "^3.1.0", "lodash": "^4.17.21", + "node-jq": "^4.3.1", "prettier": "3.2.5", "semver": "^7.6.2", "ts-jest": "29.1.2", @@ -587,6 +585,7 @@ "version": "7.24.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -772,12 +771,14 @@ "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true }, "node_modules/@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -1746,6 +1747,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -1753,12 +1755,14 @@ "node_modules/@sideway/formula": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true }, "node_modules/@sigstore/bundle": { "version": "2.3.1", @@ -3306,6 +3310,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -3334,6 +3339,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", + "dev": true, "dependencies": { "decompress": "^4.0.0", "download": "^6.2.2", @@ -3349,6 +3355,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -3359,6 +3366,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "dev": true, "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -3376,6 +3384,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, "engines": { "node": ">=4" } @@ -3384,6 +3393,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3392,6 +3402,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -3401,6 +3412,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, "dependencies": { "path-key": "^2.0.0" }, @@ -3412,6 +3424,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, "engines": { "node": ">=4" } @@ -3420,6 +3433,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, @@ -3431,6 +3445,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3439,6 +3454,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true, "engines": { "node": ">=4" } @@ -3447,6 +3463,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==", + "dev": true, "dependencies": { "temp-dir": "^1.0.0", "uuid": "^3.0.1" @@ -3460,6 +3477,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, "bin": { "uuid": "bin/uuid" } @@ -3468,6 +3486,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -3478,12 +3497,14 @@ "node_modules/bin-build/node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true }, "node_modules/bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -3567,6 +3588,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -3590,6 +3612,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" @@ -3598,12 +3621,14 @@ "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, "engines": { "node": "*" } @@ -3611,7 +3636,8 @@ "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true }, "node_modules/buffer-from": { "version": "1.1.2", @@ -3738,6 +3764,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "dev": true, "dependencies": { "get-proxy": "^2.0.0", "isurl": "^1.0.0-alpha5", @@ -3903,7 +3930,8 @@ "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/comment-json": { "version": "4.1.1", @@ -3932,6 +3960,7 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -3941,6 +3970,7 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, "dependencies": { "safe-buffer": "5.2.1" }, @@ -3957,7 +3987,8 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true }, "node_modules/cpu-features": { "version": "0.0.9", @@ -4066,6 +4097,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, "dependencies": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -4084,6 +4116,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, "dependencies": { "mimic-response": "^1.0.0" }, @@ -4095,6 +4128,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, "dependencies": { "file-type": "^5.2.0", "is-stream": "^1.1.0", @@ -4108,6 +4142,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4116,6 +4151,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, "dependencies": { "decompress-tar": "^4.1.0", "file-type": "^6.1.0", @@ -4131,6 +4167,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, "engines": { "node": ">=4" } @@ -4139,6 +4176,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4147,6 +4185,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, "dependencies": { "decompress-tar": "^4.1.1", "file-type": "^5.2.0", @@ -4160,6 +4199,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4168,6 +4208,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "dev": true, "dependencies": { "file-type": "^3.8.0", "get-stream": "^2.2.0", @@ -4182,6 +4223,7 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4190,6 +4232,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dev": true, "dependencies": { "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" @@ -4202,6 +4245,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, "dependencies": { "pify": "^3.0.0" }, @@ -4213,6 +4257,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, "engines": { "node": ">=4" } @@ -4328,6 +4373,7 @@ "version": "6.2.5", "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "dev": true, "dependencies": { "caw": "^2.0.0", "content-disposition": "^0.5.2", @@ -4349,6 +4395,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, "engines": { "node": ">=4" } @@ -4357,6 +4404,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, "dependencies": { "pify": "^3.0.0" }, @@ -4368,6 +4416,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, "engines": { "node": ">=4" } @@ -4375,7 +4424,8 @@ "node_modules/duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true }, "node_modules/eastasianwidth": { "version": "0.2.0", @@ -4423,6 +4473,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { "once": "^1.4.0" } @@ -4880,6 +4931,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, "dependencies": { "mime-db": "^1.28.0" }, @@ -4891,6 +4943,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, "dependencies": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" @@ -4980,6 +5033,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, "dependencies": { "pend": "~1.2.0" } @@ -5000,6 +5054,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true, "engines": { "node": ">=4" } @@ -5008,6 +5063,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, "engines": { "node": ">=4" } @@ -5016,6 +5072,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "dev": true, "dependencies": { "filename-reserved-regex": "^2.0.0", "strip-outer": "^1.0.0", @@ -5140,7 +5197,8 @@ "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true }, "node_modules/fs-extra": { "version": "11.2.0", @@ -5229,6 +5287,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "dev": true, "dependencies": { "npm-conf": "^1.1.0" }, @@ -5341,6 +5400,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, "dependencies": { "decompress-response": "^3.2.0", "duplexer3": "^0.1.4", @@ -5365,6 +5425,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, "engines": { "node": ">=4" } @@ -5373,6 +5434,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5380,7 +5442,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -5411,6 +5474,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true, "engines": { "node": "*" } @@ -5419,6 +5483,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, "dependencies": { "has-symbol-support-x": "^1.4.1" }, @@ -5540,6 +5605,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -5644,12 +5710,14 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/ip-address": { "version": "9.0.5", @@ -5733,6 +5801,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", + "dev": true, "dependencies": { "is-glob": "^2.0.0" }, @@ -5744,6 +5813,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5752,6 +5822,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dev": true, "dependencies": { "is-extglob": "^1.0.0" }, @@ -5769,7 +5840,8 @@ "node_modules/is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==" + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "dev": true }, "node_modules/is-number": { "version": "7.0.0", @@ -5784,6 +5856,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5801,6 +5874,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5809,6 +5883,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5829,6 +5904,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", + "dev": true, "dependencies": { "is-invalid-path": "^0.1.0" }, @@ -5839,12 +5915,14 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -5916,6 +5994,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, "dependencies": { "has-to-string-tag-x": "^1.2.0", "is-object": "^1.0.1" @@ -6553,6 +6632,7 @@ "version": "17.13.1", "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.1.tgz", "integrity": "sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==", + "dev": true, "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", @@ -6614,6 +6694,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.0.tgz", "integrity": "sha512-UeVN/ery4/JeXI8h4rM8yZPxsH+KqPi/84qFxHfTGHZnWnK9D0UU9ZGYO+6XAaJLqCWMiks+ARuFOKAiSxJCHA==", + "dev": true, "dependencies": { "@babel/runtime": "^7.18.3", "ts-algebra": "^2.0.0" @@ -6802,6 +6883,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6936,6 +7018,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -6965,6 +7048,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, "engines": { "node": ">=4" } @@ -7261,6 +7345,7 @@ "version": "2.1.9", "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz", "integrity": "sha512-FSvAol2Z8UP191sZtsUZwHIN0eGoGue3uEXGdWIH5228e9KH1YHXT7fN8Oa33UGf+FbqGTQg3sJfrRGzmVCaJA==", + "dev": true, "bin": { "ndh": "bin/ndh" }, @@ -7362,6 +7447,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/node-jq/-/node-jq-4.3.1.tgz", "integrity": "sha512-5iU9L/7j8ZNHwhxDRJXgyza6JnEKqdkNcJ9+ul5HZnhConhg/v9JdvA9agJ8XA+qBgGr1MK/MeHDrdK1tL2QAA==", + "dev": true, "hasInstallScript": true, "dependencies": { "bin-build": "^3.0.0", @@ -7465,6 +7551,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, "dependencies": { "config-chain": "^1.1.11", "pify": "^3.0.0" @@ -7477,6 +7564,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, "engines": { "node": ">=4" } @@ -7709,6 +7797,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7717,6 +7806,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -7767,6 +7857,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true, "engines": { "node": ">=4" } @@ -7775,6 +7866,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", + "dev": true, "dependencies": { "p-timeout": "^1.1.1" }, @@ -7786,6 +7878,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, "engines": { "node": ">=4" } @@ -7840,6 +7933,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==", + "dev": true, "dependencies": { "p-reduce": "^1.0.0" }, @@ -7851,6 +7945,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==", + "dev": true, "engines": { "node": ">=4" } @@ -7859,6 +7954,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "dev": true, "dependencies": { "p-finally": "^1.0.0" }, @@ -8082,7 +8178,8 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -8106,6 +8203,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8114,6 +8212,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8122,6 +8221,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, "dependencies": { "pinkie": "^2.0.0" }, @@ -8215,6 +8315,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8299,7 +8400,8 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "node_modules/progress": { "version": "2.0.3", @@ -8348,12 +8450,14 @@ "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true }, "node_modules/punycode": { "version": "2.3.1", @@ -8506,6 +8610,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8519,7 +8624,8 @@ "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/readline-sync": { "version": "1.4.10", @@ -8534,7 +8640,8 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true }, "node_modules/regexpp": { "version": "3.2.0", @@ -8699,6 +8806,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -8730,6 +8838,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, "dependencies": { "commander": "^2.8.1" }, @@ -8781,7 +8890,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/sigstore": { "version": "2.3.0", @@ -8861,6 +8971,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, "dependencies": { "is-plain-obj": "^1.0.0" }, @@ -8872,6 +8983,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "dev": true, "dependencies": { "sort-keys": "^1.0.0" }, @@ -9056,6 +9168,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -9063,7 +9176,8 @@ "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/string-length": { "version": "4.0.2", @@ -9147,6 +9261,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, "dependencies": { "is-natural-number": "^4.0.1" } @@ -9155,6 +9270,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9163,6 +9279,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, "engines": { "node": ">=6" } @@ -9183,6 +9300,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, "dependencies": { "escape-string-regexp": "^1.0.2" }, @@ -9194,6 +9312,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -9260,6 +9379,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -9320,6 +9440,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, "engines": { "node": ">=8" } @@ -9328,6 +9449,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-3.0.0.tgz", "integrity": "sha512-uNFCg478XovRi85iD42egu+eSFUmmka750Jy7L5tfHI5hQKKtbPnxaSaXAbBqCDYrw3wx4tXjKwci4/QmsZJxw==", + "dev": true, "dependencies": { "temp-dir": "^2.0.0", "uuid": "^3.3.2" @@ -9341,6 +9463,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, "bin": { "uuid": "bin/uuid" } @@ -9390,12 +9513,14 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9409,7 +9534,8 @@ "node_modules/to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true }, "node_modules/to-fast-properties": { "version": "2.0.0", @@ -9436,6 +9562,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, "dependencies": { "escape-string-regexp": "^1.0.2" }, @@ -9447,6 +9574,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -9454,7 +9582,8 @@ "node_modules/ts-algebra": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", - "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==" + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "dev": true }, "node_modules/ts-api-utils": { "version": "1.3.0", @@ -9597,6 +9726,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -9667,6 +9797,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -9763,6 +9894,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "dev": true, "dependencies": { "prepend-http": "^1.0.1" }, @@ -9774,6 +9906,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", + "dev": true, "engines": { "node": ">= 4" } @@ -9781,7 +9914,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/uuid": { "version": "8.3.2", @@ -9925,7 +10059,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -9972,6 +10107,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, "engines": { "node": ">=0.4" } @@ -10059,6 +10195,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/tests/system-integration/package.json b/tests/zwe-remote-integration/package.json similarity index 90% rename from tests/system-integration/package.json rename to tests/zwe-remote-integration/package.json index 0a9e9a68c8..7d5d746cd7 100644 --- a/tests/system-integration/package.json +++ b/tests/zwe-remote-integration/package.json @@ -41,16 +41,15 @@ "typescript": "5.4.5", "xml2js": "0.6.2", "yaml": "^2.4.2", - "yn": "4.0.0" + "yn": "4.0.0", + "json-schema-to-ts": "^3.1.0", + "node-jq": "^4.3.1" }, "scripts": { "build": "tsc", - "test": "jest --no-colors --runInBand", + "test:ci": "jest --no-colors --runInBand --testNamePattern=\".*(CI).*\"", + "test:extended": "jest --no-colors --runInBand", "merge-reports": "node dist/merge-test-reports.js", "lint": "eslint ." - }, - "dependencies": { - "json-schema-to-ts": "^3.1.0", - "node-jq": "^4.3.1" } } diff --git a/tests/system-integration/resources/convert_to_ebcdic.sh b/tests/zwe-remote-integration/resources/convert_to_ebcdic.sh similarity index 100% rename from tests/system-integration/resources/convert_to_ebcdic.sh rename to tests/zwe-remote-integration/resources/convert_to_ebcdic.sh diff --git a/tests/zwe-remote-integration/resources/test_config.yml b/tests/zwe-remote-integration/resources/test_config.yml new file mode 100644 index 0000000000..172fa81ff9 --- /dev/null +++ b/tests/zwe-remote-integration/resources/test_config.yml @@ -0,0 +1,63 @@ +####################################################################### +# This program and the accompanying materials are made available +# under the terms of the Eclipse Public License v2.0 which +# accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-v20.html +# +# SPDX-License-Identifier: EPL-2.0 +# +# Copyright Contributors to the Zowe Project. 2018, 2024 +####################################################################### + +###### +# This file should be copied and modified in a custom_config.yml to prevent committing config data. +## Set the test suite to run use custom_config.yml with env TEST_CONFIG_FILE=./path/to/custom_config.yml +## +## Any variable below can be specified and superseded by an env of the same name, +## i.e. ZOS_HOST=some.host.name +## This is useful for sensitive fields such as ZOS_PASSWORD +## +###### + +# Host to run the test on and associated params +zos_host: +zos_user: +zos_password: +ssh_port: +zosmf_port: +# Remote USS dir where all data will be stored. Recommend mounting a ZFS; automation will not check. +remote_test_dir: +# Required fields; this suite will not attempt to auto-detect Java/Node homes +zos_java_home: +zos_node_home: + +# remote_setup is required for first-time runs and can be disabled afterwards to speed up test dev/iteration. +remote_setup: true +# remote_teardown purges job logs and removes any lingering datasets; not strictly required to run. +remote_teardown: true +# All test suite and test case datasets are created under the below HLQ +test_ds_hlq: +# All test suite and test case datasets use the volume specified below +test_volume: +zosmf_reject_unauthorized: +# Download configmgr and zowe-install-packaging-tools using the manifest.json in this repo. +## If set to false, you can use a custom build of either artifact by placing them in the .build/ dir +download_configmgr: true +download_zowe_tools: true +# Required if download_configmgr or download_zowe_tools is true. (You may request an ID from Systems Squad) +jfrog_user: +jfrog_token: +# Collects spool after every test and downloads it to the .build/output//spool dir. +collect_test_spool: true + +# zowe_yaml_overrides is primarily for debug or environment specific purposes. +# Be cautious; this may invalidate test case snapshot results +### Always overrides any computed values in globalSetup. +### Only use to debug or write tests initially; +### these values are __not__ substituted in command response snapshots. +#zowe_yaml_overrides: +# zowe: +# setup: +# zOSMF: +# host: some-other.host.value +# port: 10443 diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap similarity index 66% rename from tests/system-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap rename to tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap index 262581980e..00b6e8a114 100644 --- a/tests/system-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap @@ -8,8 +8,7 @@ Zowe will remove it on success, but if zwe exits with a non-zero code manual cle >> APF authorize load libraries cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) -Error ZWETODOE: TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER) could not be copied. Review other error output from the 'cp' command. -ERROR: Error ZWEL0999E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER) before running this command." +ERROR: ZWEL0143E Cannot find data set member 'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." `; exports[`init-apfauth (SHORT) apf disable cfgmgr 1`] = ` diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap similarity index 100% rename from tests/system-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap rename to tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap similarity index 100% rename from tests/system-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap rename to tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap diff --git a/tests/system-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap similarity index 100% rename from tests/system-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap rename to tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap new file mode 100644 index 0000000000..99d28a4e60 --- /dev/null +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -0,0 +1,379 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`init-vsam (LONG) creates vsam 1`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(TEST.DATASET.PFX.VSAMTEST) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(TEST.DATASET.PFX.VSAMTEST.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(TSTVOL) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +Submitting Job ZWECSVSM +Job ZWECSVSM(JOB00000) completed with RC=0 + +>> Zowe Caching Service VSAM storage is created successfully. +" +`; + +exports[`init-vsam (SHORT) BAD: bad ds prefix 1`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) +ERROR: ZWEL0143E Cannot find data set member 'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." +`; + +exports[`init-vsam (SHORT) GOOD: simple --dry-run 1`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(TEST.DATASET.PFX.VSAMTEST) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(TEST.DATASET.PFX.VSAMTEST.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(TSTVOL) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe Caching Service VSAM storage is created successfully. +" +`; diff --git a/tests/system-integration/src/__tests__/init/apfauth.test.ts b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts similarity index 98% rename from tests/system-integration/src/__tests__/init/apfauth.test.ts rename to tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts index 24a1a43e39..86550a58f6 100644 --- a/tests/system-integration/src/__tests__/init/apfauth.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts @@ -9,7 +9,7 @@ */ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; -import ZoweYamlType from '../../types/ZoweYamlType'; +import ZoweYamlType from '../../config/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; diff --git a/tests/system-integration/src/__tests__/init/canary.test.ts b/tests/zwe-remote-integration/src/__tests__/init/canary.test.ts similarity index 100% rename from tests/system-integration/src/__tests__/init/canary.test.ts rename to tests/zwe-remote-integration/src/__tests__/init/canary.test.ts diff --git a/tests/system-integration/src/__tests__/init/certificate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts similarity index 98% rename from tests/system-integration/src/__tests__/init/certificate.test.ts rename to tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts index 6c8da20ae7..8e4c188e54 100644 --- a/tests/system-integration/src/__tests__/init/certificate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts @@ -9,7 +9,7 @@ */ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; -import ZoweYamlType from '../../types/ZoweYamlType'; +import ZoweYamlType from '../../config/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; diff --git a/tests/system-integration/src/__tests__/init/security.tests.ts b/tests/zwe-remote-integration/src/__tests__/init/composite.test.ts similarity index 71% rename from tests/system-integration/src/__tests__/init/security.tests.ts rename to tests/zwe-remote-integration/src/__tests__/init/composite.test.ts index 567479c4b2..87d2bc02bf 100644 --- a/tests/system-integration/src/__tests__/init/security.tests.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/composite.test.ts @@ -7,3 +7,7 @@ * * Copyright Contributors to the Zowe Project. */ + +const testSuiteName = 'init-composite'; +describe(`${testSuiteName}`, () => {}); +export {}; // remove when tests are written diff --git a/tests/system-integration/src/__tests__/init/generate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts similarity index 97% rename from tests/system-integration/src/__tests__/init/generate.test.ts rename to tests/zwe-remote-integration/src/__tests__/init/generate.test.ts index f44813ac79..fd8a6de7a9 100644 --- a/tests/system-integration/src/__tests__/init/generate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts @@ -9,7 +9,7 @@ */ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; -import ZoweYamlType from '../../types/ZoweYamlType'; +import ZoweYamlType from '../../config/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; diff --git a/tests/system-integration/src/__tests__/init/composite.tests.ts b/tests/zwe-remote-integration/src/__tests__/init/mvs.test.ts similarity index 73% rename from tests/system-integration/src/__tests__/init/composite.tests.ts rename to tests/zwe-remote-integration/src/__tests__/init/mvs.test.ts index 19cc91fd06..31e2839514 100644 --- a/tests/system-integration/src/__tests__/init/composite.tests.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/mvs.test.ts @@ -8,3 +8,6 @@ * Copyright Contributors to the Zowe Project. */ +const testSuiteName = 'init-mvs'; +describe(`${testSuiteName}`, () => {}); +export {}; // remove when tests are written diff --git a/tests/system-integration/src/__tests__/init/mvs.tests.ts b/tests/zwe-remote-integration/src/__tests__/init/security.test.ts similarity index 72% rename from tests/system-integration/src/__tests__/init/mvs.tests.ts rename to tests/zwe-remote-integration/src/__tests__/init/security.test.ts index 19cc91fd06..c55e0d6f85 100644 --- a/tests/system-integration/src/__tests__/init/mvs.tests.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/security.test.ts @@ -8,3 +8,6 @@ * Copyright Contributors to the Zowe Project. */ +const testSuiteName = 'init-security'; +describe(`${testSuiteName}`, () => {}); +export {}; // remove when tests are written diff --git a/tests/system-integration/src/__tests__/init/stc.tests.ts b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts similarity index 73% rename from tests/system-integration/src/__tests__/init/stc.tests.ts rename to tests/zwe-remote-integration/src/__tests__/init/stc.test.ts index 19cc91fd06..e73229917d 100644 --- a/tests/system-integration/src/__tests__/init/stc.tests.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts @@ -8,3 +8,6 @@ * Copyright Contributors to the Zowe Project. */ +const testSuiteName = 'init-stc'; +describe(`${testSuiteName}`, () => {}); +export {}; // remove when tests are written diff --git a/tests/system-integration/src/__tests__/init/vsam.test.ts b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts similarity index 93% rename from tests/system-integration/src/__tests__/init/vsam.test.ts rename to tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts index d4c0b5ed0e..160f16a23e 100644 --- a/tests/system-integration/src/__tests__/init/vsam.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts @@ -9,7 +9,7 @@ */ import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; -import ZoweYamlType from '../../types/ZoweYamlType'; +import ZoweYamlType from '../../config/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweYaml } from '../../config/ZoweYaml'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; @@ -43,13 +43,14 @@ describe(`${testSuiteName}`, () => { }); describe('(SHORT)', () => { - it('disable cfgmgr', async () => { + /* it('disable cfgmgr', async () => { cfgYaml.zowe.useConfigmgr = false; const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); + cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: FileType.DS_VSAM }); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(60); // 60 is expected... - }); + });*/ it('BAD: bad ds prefix', async () => { cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; diff --git a/tests/system-integration/src/config/TestConfig.ts b/tests/zwe-remote-integration/src/config/TestConfig.ts similarity index 98% rename from tests/system-integration/src/config/TestConfig.ts rename to tests/zwe-remote-integration/src/config/TestConfig.ts index babb67d8e8..6256c55868 100644 --- a/tests/system-integration/src/config/TestConfig.ts +++ b/tests/zwe-remote-integration/src/config/TestConfig.ts @@ -13,7 +13,7 @@ import * as fs from 'fs-extra'; import * as yaml from 'yaml'; import yn from 'yn'; import { findDirWalkingUpOrThrow } from '../utils'; -import ZoweYamlType from '../types/ZoweYamlType'; +import ZoweYamlType from './ZoweYamlType'; class ConfigItem { public readonly name: string; public readonly required: boolean; @@ -48,7 +48,7 @@ const configFields: ConfigItem[] = [ ]; export const REPO_ROOT_DIR: string = findDirWalkingUpOrThrow('zowe-install-packaging'); -export const THIS_TEST_ROOT_DIR: string = findDirWalkingUpOrThrow('system-integration'); // JEST runs in the src dir +export const THIS_TEST_ROOT_DIR: string = findDirWalkingUpOrThrow('zwe-remote-integration'); // JEST runs in the src dir const configFile = process.env['TEST_CONFIG_FILE'] || `${THIS_TEST_ROOT_DIR}/resources/test_config.yml`; const configData = getConfig(configFile); diff --git a/tests/system-integration/src/config/ZoweYaml.ts b/tests/zwe-remote-integration/src/config/ZoweYaml.ts similarity index 94% rename from tests/system-integration/src/config/ZoweYaml.ts rename to tests/zwe-remote-integration/src/config/ZoweYaml.ts index 9f82adf271..61219b5827 100644 --- a/tests/system-integration/src/config/ZoweYaml.ts +++ b/tests/zwe-remote-integration/src/config/ZoweYaml.ts @@ -11,7 +11,7 @@ import * as yaml from 'yaml'; import { THIS_TEST_BASE_YAML } from './TestConfig'; import * as fs from 'fs-extra'; -import ZoweYamlType from '../types/ZoweYamlType'; +import ZoweYamlType from './ZoweYamlType'; export class ZoweYaml { /* public updateField(field: string, value: string) { diff --git a/tests/system-integration/src/types/ZoweYamlType.ts b/tests/zwe-remote-integration/src/config/ZoweYamlType.ts similarity index 100% rename from tests/system-integration/src/types/ZoweYamlType.ts rename to tests/zwe-remote-integration/src/config/ZoweYamlType.ts diff --git a/tests/system-integration/src/globalSetup.ts b/tests/zwe-remote-integration/src/globalSetup.ts similarity index 99% rename from tests/system-integration/src/globalSetup.ts rename to tests/zwe-remote-integration/src/globalSetup.ts index d0c5f9b6ec..362d87e465 100644 --- a/tests/system-integration/src/globalSetup.ts +++ b/tests/zwe-remote-integration/src/globalSetup.ts @@ -29,7 +29,7 @@ import { import * as fs from 'fs-extra'; import { getZosmfSession } from './zos/zowe'; import * as yaml from 'yaml'; -import ZoweYamlType from './types/ZoweYamlType'; +import ZoweYamlType from './config/ZoweYamlType'; import { JfrogClient } from 'jfrog-client-js'; import { processManifestVersion } from './utils'; import { execSync } from 'child_process'; diff --git a/tests/system-integration/src/globalTeardown.ts b/tests/zwe-remote-integration/src/globalTeardown.ts similarity index 100% rename from tests/system-integration/src/globalTeardown.ts rename to tests/zwe-remote-integration/src/globalTeardown.ts diff --git a/tests/system-integration/src/utils.ts b/tests/zwe-remote-integration/src/utils.ts similarity index 100% rename from tests/system-integration/src/utils.ts rename to tests/zwe-remote-integration/src/utils.ts diff --git a/tests/system-integration/src/zos/RemoteTestRunner.ts b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts similarity index 98% rename from tests/system-integration/src/zos/RemoteTestRunner.ts rename to tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts index 25cc99ddc2..87f7c38c69 100644 --- a/tests/system-integration/src/zos/RemoteTestRunner.ts +++ b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts @@ -11,7 +11,7 @@ import { Session } from '@zowe/imperative'; import { getZosmfSession } from './zowe'; import * as uss from './Uss'; -import ZoweYamlType from '../types/ZoweYamlType'; +import ZoweYamlType from '../config/ZoweYamlType'; import { REMOTE_SYSTEM_INFO, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR } from '../config/TestConfig'; import * as files from '@zowe/zos-files-for-zowe-sdk'; import * as fs from 'fs-extra'; diff --git a/tests/system-integration/src/zos/TestFileActions.ts b/tests/zwe-remote-integration/src/zos/TestFileActions.ts similarity index 100% rename from tests/system-integration/src/zos/TestFileActions.ts rename to tests/zwe-remote-integration/src/zos/TestFileActions.ts diff --git a/tests/system-integration/src/zos/Uss.ts b/tests/zwe-remote-integration/src/zos/Uss.ts similarity index 100% rename from tests/system-integration/src/zos/Uss.ts rename to tests/zwe-remote-integration/src/zos/Uss.ts diff --git a/tests/system-integration/src/zos/zowe.ts b/tests/zwe-remote-integration/src/zos/zowe.ts similarity index 100% rename from tests/system-integration/src/zos/zowe.ts rename to tests/zwe-remote-integration/src/zos/zowe.ts diff --git a/tests/system-integration/tsconfig.json b/tests/zwe-remote-integration/tsconfig.json similarity index 100% rename from tests/system-integration/tsconfig.json rename to tests/zwe-remote-integration/tsconfig.json From 55c9f1e562f614acc10e58ab7f76826fd1253966 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 31 May 2024 12:54:32 -0400 Subject: [PATCH 09/21] class name fix, matrix update Signed-off-by: MarkAckert --- .github/scripts/cicd_test/make_matrix.sh | 8 ++++++-- tests/zwe-remote-integration/src/globalSetup.ts | 4 ++-- tests/zwe-remote-integration/src/globalTeardown.ts | 4 ++-- tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts | 6 +++--- tests/zwe-remote-integration/src/zos/TestFileActions.ts | 4 ++-- .../src/zos/{zowe.ts => ZosmfSession.ts} | 2 +- 6 files changed, 16 insertions(+), 12 deletions(-) rename tests/zwe-remote-integration/src/zos/{zowe.ts => ZosmfSession.ts} (95%) diff --git a/.github/scripts/cicd_test/make_matrix.sh b/.github/scripts/cicd_test/make_matrix.sh index 467eb67e12..ed54820b5d 100644 --- a/.github/scripts/cicd_test/make_matrix.sh +++ b/.github/scripts/cicd_test/make_matrix.sh @@ -12,8 +12,12 @@ case $install_test_choice in -"ZWE CI Build") ;; -"ZWE Full Tests") ;; +"ZWE CI Build") + test_file="dummy_not_used" + ;; +"ZWE Full Tests") + test_file="dummy_not_used" + ;; "Convenience Pax") test_file="$CONVENIENCE_PAX_TESTFILE" ;; diff --git a/tests/zwe-remote-integration/src/globalSetup.ts b/tests/zwe-remote-integration/src/globalSetup.ts index 362d87e465..0b6be55bd0 100644 --- a/tests/zwe-remote-integration/src/globalSetup.ts +++ b/tests/zwe-remote-integration/src/globalSetup.ts @@ -27,14 +27,14 @@ import { ZOWE_YAML_OVERRIDES, } from './config/TestConfig'; import * as fs from 'fs-extra'; -import { getZosmfSession } from './zos/zowe'; +import { getSession } from './zos/ZosmfSession'; import * as yaml from 'yaml'; import ZoweYamlType from './config/ZoweYamlType'; import { JfrogClient } from 'jfrog-client-js'; import { processManifestVersion } from './utils'; import { execSync } from 'child_process'; -const zosmfSession = getZosmfSession(); +const zosmfSession = getSession(); function setupBaseYaml() { console.log(`Using example-zowe.yaml as base for future zowe.yaml modifications...`); diff --git a/tests/zwe-remote-integration/src/globalTeardown.ts b/tests/zwe-remote-integration/src/globalTeardown.ts index 11ba28914f..5a717c2d5d 100644 --- a/tests/zwe-remote-integration/src/globalTeardown.ts +++ b/tests/zwe-remote-integration/src/globalTeardown.ts @@ -11,7 +11,7 @@ import { REMOTE_TEARDOWN, LINGERING_REMOTE_FILES_FILE, TEST_JOBS_RUN_FILE } from './config/TestConfig'; import * as fs from 'fs-extra'; import * as jobs from '@zowe/zos-jobs-for-zowe-sdk'; -import { getZosmfSession } from './zos/zowe'; +import { getSession } from './zos/ZosmfSession'; import { TestFileActions, TestFile } from './zos/TestFileActions'; module.exports = async () => { if (!REMOTE_TEARDOWN) { @@ -48,7 +48,7 @@ module.exports = async () => { const jobName = jobPieces[0]; const jobId = jobPieces[1]; console.log('Purging ' + job); - await jobs.DeleteJobs.deleteJob(getZosmfSession(), jobName, jobId); + await jobs.DeleteJobs.deleteJob(getSession(), jobName, jobId); } } diff --git a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts index 87f7c38c69..f528e82c1a 100644 --- a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts +++ b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts @@ -9,7 +9,7 @@ */ import { Session } from '@zowe/imperative'; -import { getZosmfSession } from './zowe'; +import { getSession } from './ZosmfSession'; import * as uss from './Uss'; import ZoweYamlType from '../config/ZoweYamlType'; import { REMOTE_SYSTEM_INFO, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR } from '../config/TestConfig'; @@ -25,7 +25,7 @@ export class RemoteTestRunner { private cleanFns: ((stdout: string) => string)[] = []; constructor(testGroup: string) { - this.session = getZosmfSession(); + this.session = getSession(); this.yamlOutputTemplate = `${TEST_OUTPUT_DIR}/${testGroup}/{{ testInstance }}/yaml`; this.spoolOutputTemplate = `${TEST_OUTPUT_DIR}/${testGroup}//{{ testInstance }}/spool`; } @@ -46,7 +46,7 @@ export class RemoteTestRunner { const spoolOutputDir = this.spoolOutputTemplate.replace('{{ testInstance }}', testName); fs.mkdirpSync(spoolOutputDir); for (const job of this.trackedJobs) { - await jobs.DownloadJobs.downloadAllSpoolContentCommon(getZosmfSession(), { + await jobs.DownloadJobs.downloadAllSpoolContentCommon(getSession(), { ...job, outDir: spoolOutputDir, extension: '.txt', // arbitrarily chosen to keep things readable... diff --git a/tests/zwe-remote-integration/src/zos/TestFileActions.ts b/tests/zwe-remote-integration/src/zos/TestFileActions.ts index 347349d0af..cdb2c2d0b2 100644 --- a/tests/zwe-remote-integration/src/zos/TestFileActions.ts +++ b/tests/zwe-remote-integration/src/zos/TestFileActions.ts @@ -9,11 +9,11 @@ */ import * as fs from 'fs-extra'; -import { getZosmfSession } from './zowe'; +import { getSession } from './ZosmfSession'; import * as files from '@zowe/zos-files-for-zowe-sdk'; import { LINGERING_REMOTE_FILES_FILE } from '../config/TestConfig'; export class TestFileActions { - private static readonly session = getZosmfSession(); + private static readonly session = getSession(); constructor() {} diff --git a/tests/zwe-remote-integration/src/zos/zowe.ts b/tests/zwe-remote-integration/src/zos/ZosmfSession.ts similarity index 95% rename from tests/zwe-remote-integration/src/zos/zowe.ts rename to tests/zwe-remote-integration/src/zos/ZosmfSession.ts index 969cf12b2f..8005397cd0 100644 --- a/tests/zwe-remote-integration/src/zos/zowe.ts +++ b/tests/zwe-remote-integration/src/zos/ZosmfSession.ts @@ -11,7 +11,7 @@ import { ConnectionPropsForSessCfg, Session } from '@zowe/imperative'; import { REMOTE_CONNECTION_CFG } from '../config/TestConfig'; -export function getZosmfSession(): Session { +export function getSession(): Session { const sessCfg: unknown = { hostname: REMOTE_CONNECTION_CFG.host, port: REMOTE_CONNECTION_CFG.zosmf_port, From 8e016a7700157905caac64db5a9847f2f14c79b7 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 31 May 2024 12:55:34 -0400 Subject: [PATCH 10/21] update zoweyamltype with new schema Signed-off-by: MarkAckert --- .../zwe-remote-integration/src/config/ZoweYamlType.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/zwe-remote-integration/src/config/ZoweYamlType.ts b/tests/zwe-remote-integration/src/config/ZoweYamlType.ts index ec242fe501..b054053b75 100644 --- a/tests/zwe-remote-integration/src/config/ZoweYamlType.ts +++ b/tests/zwe-remote-integration/src/config/ZoweYamlType.ts @@ -516,8 +516,14 @@ const zoweSchema = zoweYamlSchema as { description: 'Storage class name if you are using VSAM in RLS mode'; }; name: { - $ref: '/schemas/v2/server-common#zoweDatasetVsam'; - description: 'Data set name. Must match components.caching-service.storage.vsam.name'; + anyOf: [ + { type: 'null' }, + { type: 'string'; maxLength: 0 }, + { + $ref: '/schemas/v2/server-common#zoweDatasetVsam'; + description: 'Data set name. Must match components.caching-service.storage.vsam.name'; + }, + ]; }; }; }; From 22d55bec91c087c54f19f4c162f023863ccd1318 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Thu, 20 Jun 2024 11:42:55 -0400 Subject: [PATCH 11/21] checkpoint Signed-off-by: MarkAckert --- .github/workflows/zwe-integration-tests.yml | 30 +++++++++++++++---- .../init/__snapshots__/vsam.test.ts.snap | 10 +++++-- .../src/__tests__/init/apfauth.test.ts | 3 +- .../src/__tests__/init/certificate.test.ts | 2 +- .../{composite.test.ts => composite.tests.ts} | 0 .../src/__tests__/init/generate.test.ts | 2 +- .../init/{mvs.test.ts => mvs.tests.ts} | 0 .../{security.test.ts => security.tests.ts} | 0 .../init/{stc.test.ts => stc.tests.ts} | 0 .../src/__tests__/init/vsam.test.ts | 8 ++--- .../zwe-remote-integration/src/globalSetup.ts | 4 ++- 11 files changed, 42 insertions(+), 17 deletions(-) rename tests/zwe-remote-integration/src/__tests__/init/{composite.test.ts => composite.tests.ts} (100%) rename tests/zwe-remote-integration/src/__tests__/init/{mvs.test.ts => mvs.tests.ts} (100%) rename tests/zwe-remote-integration/src/__tests__/init/{security.test.ts => security.tests.ts} (100%) rename tests/zwe-remote-integration/src/__tests__/init/{stc.test.ts => stc.tests.ts} (100%) diff --git a/.github/workflows/zwe-integration-tests.yml b/.github/workflows/zwe-integration-tests.yml index 7dabae764d..dd60c50c9f 100644 --- a/.github/workflows/zwe-integration-tests.yml +++ b/.github/workflows/zwe-integration-tests.yml @@ -13,7 +13,7 @@ on: required: true default: 'Any zzow servers' options: - - Any zzow servers + - Any_zzow_servers - zzow06 - zzow07 - zzow08 @@ -23,8 +23,8 @@ on: required: true default: CI Build options: - - ZWE CI Build - - ZWE Full Tests + - ZWE_CI_Build + - ZWE_Full_Tests RANDOM_DISPATCH_EVENT_ID: description: 'random dispatch event id' required: false @@ -43,6 +43,24 @@ jobs: - name: RANDOM_DISPATCH_EVENT_ID is ${{ github.event.inputs.RANDOM_DISPATCH_EVENT_ID }} run: echo "prints random dispatch event id sent from workflow dispatch event" + set-test-vars: + runs-on: ubuntu-latest + outputs: + test-suite: + test-server: + steps: + - name: 'Set vars for manually triggered workflow' + if: github.event_name == 'workflow_dispatch' + run: | + echo "test-suite=${{ github.event.inputs.zwe-test }}" >> $GITHUB_OUTPUT + echo "test-server=${{ github.event.inputs.test-server }}" >> $GITHUB_OUTPUT + + - name: 'Set vars for automated PR trigger' + if: github.event_name != 'workflow_dispatch' + run: | + echo "test-suite=ZWE_CI_Build" >> $GITHUB_OUTPUT + echo "test-server=Any_zzow_servers" >> $GITHUB_OUTPUT + check-permission: runs-on: ubuntu-latest steps: @@ -54,7 +72,7 @@ jobs: make-matrix: runs-on: ubuntu-latest - needs: check-permission + needs: [set-test-vars, check-permission] steps: - name: '[Prep 1] Checkout' uses: actions/checkout@v2 @@ -66,8 +84,8 @@ jobs: chmod +x make_matrix.sh source make_matrix.sh env: - test_server: ${{ github.event.inputs.test-server }} - install_test_choice: ${{ github.event.inputs.zwe-test }} + test_server: ${{ steps.set-test-vars.outputs.test-server }} + install_test_choice: ${{ steps.set-test-vars.outputs.test-suite }} outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index 99d28a4e60..82c9841f28 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -80,10 +80,13 @@ $$ //* Overridden by the higher entries. //* PARMLIB member must be named "ZWEYAML" //* +//* Do not remove the defaults.yaml entry. +//* //* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB //* FILE /the/zowe/defaults.yaml //MYCONFIG DD *,DLM=$$ FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml $$ //CMGROUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* @@ -168,7 +171,7 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - UNIQUE) //RLS DD * - STORCLAS() - + STORCLAS({zowe.setup.vsam.storageClass}) - LOG(NONE) - //NONRLS DD * VOLUME(TSTVOL) - @@ -273,10 +276,13 @@ $$ //* Overridden by the higher entries. //* PARMLIB member must be named "ZWEYAML" //* +//* Do not remove the defaults.yaml entry. +//* //* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB //* FILE /the/zowe/defaults.yaml //MYCONFIG DD *,DLM=$$ FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml $$ //CMGROUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* @@ -361,7 +367,7 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - UNIQUE) //RLS DD * - STORCLAS() - + STORCLAS({zowe.setup.vsam.storageClass}) - LOG(NONE) - //NONRLS DD * VOLUME(TSTVOL) - diff --git a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts index 86550a58f6..348925d211 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts @@ -43,7 +43,6 @@ describe(`${testSuiteName}`, () => { describe('(SHORT)', () => { it('apf disable cfgmgr', async () => { - cfgYaml.zowe.useConfigmgr = false; const result = await testRunner.runZweTest(cfgYaml, 'init apfauth'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); @@ -51,7 +50,7 @@ describe(`${testSuiteName}`, () => { }); it('apf bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD3.ZWETEST.NOEXIST'; const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); diff --git a/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts index 8e4c188e54..ecca0246cd 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts @@ -51,7 +51,7 @@ describe(`${testSuiteName}`, () => { /* it('cert bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD3.ZWETEST.NOEXIST'; const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); diff --git a/tests/zwe-remote-integration/src/__tests__/init/composite.test.ts b/tests/zwe-remote-integration/src/__tests__/init/composite.tests.ts similarity index 100% rename from tests/zwe-remote-integration/src/__tests__/init/composite.test.ts rename to tests/zwe-remote-integration/src/__tests__/init/composite.tests.ts diff --git a/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts index fd8a6de7a9..589f35e5ac 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts @@ -49,7 +49,7 @@ describe(`${testSuiteName}`, () => { }); it('bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD3.ZWETEST.NOEXIST'; const result = await testRunner.runZweTest(cfgYaml, 'init generate --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); diff --git a/tests/zwe-remote-integration/src/__tests__/init/mvs.test.ts b/tests/zwe-remote-integration/src/__tests__/init/mvs.tests.ts similarity index 100% rename from tests/zwe-remote-integration/src/__tests__/init/mvs.test.ts rename to tests/zwe-remote-integration/src/__tests__/init/mvs.tests.ts diff --git a/tests/zwe-remote-integration/src/__tests__/init/security.test.ts b/tests/zwe-remote-integration/src/__tests__/init/security.tests.ts similarity index 100% rename from tests/zwe-remote-integration/src/__tests__/init/security.test.ts rename to tests/zwe-remote-integration/src/__tests__/init/security.tests.ts diff --git a/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts b/tests/zwe-remote-integration/src/__tests__/init/stc.tests.ts similarity index 100% rename from tests/zwe-remote-integration/src/__tests__/init/stc.test.ts rename to tests/zwe-remote-integration/src/__tests__/init/stc.tests.ts diff --git a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts index 160f16a23e..599019b16c 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts @@ -53,18 +53,18 @@ describe(`${testSuiteName}`, () => { });*/ it('BAD: bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD6.ZWETEST.NOEXIST'; + cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD3.ZWETEST.NOEXIST'; const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); + expect(result.rc).toBe(143); }); it('GOOD: simple --dry-run', async () => { const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... + expect(result.rc).toBe(0); }); }); @@ -74,7 +74,7 @@ describe(`${testSuiteName}`, () => { cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: FileType.DS_VSAM }); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... }); + expect(result.rc).toBe(0); }); }); }); diff --git a/tests/zwe-remote-integration/src/globalSetup.ts b/tests/zwe-remote-integration/src/globalSetup.ts index 0b6be55bd0..e51b90bfea 100644 --- a/tests/zwe-remote-integration/src/globalSetup.ts +++ b/tests/zwe-remote-integration/src/globalSetup.ts @@ -141,7 +141,7 @@ module.exports = async () => { throw new Error('Could not locate zowe-utility-tools zip in the .build directory'); } - console.log('Setting up remote server...'); + console.log(`Setting up remote server on ${REMOTE_SYSTEM_INFO.hostname}...`); await uss.runCommand(`mkdir -p ${REMOTE_SYSTEM_INFO.ussTestDir}`); console.log(`Uploading ${configmgrPax} to ${REMOTE_SYSTEM_INFO.ussTestDir}/configmgr.pax ...`); @@ -231,6 +231,8 @@ module.exports = async () => { console.log(`Converting everything in ${REMOTE_SYSTEM_INFO.ussTestDir}/bin to EBCDIC...`); await uss.runCommand(`chmod +x convert_to_ebcdic.sh && ./convert_to_ebcdic.sh`, REMOTE_SYSTEM_INFO.ussTestDir); + await uss.runCommand(`chmod 755 ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/zwe && ` + + `chmod 755 ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/utils/opercmd.rex `, REMOTE_SYSTEM_INFO.ussTestDir); console.log(`Uploading ${REPO_ROOT_DIR}/schemas to ${REMOTE_SYSTEM_INFO.ussTestDir}/schemas...`); await files.Upload.dirToUSSDirRecursive(zosmfSession, `${REPO_ROOT_DIR}/schemas`, `${REMOTE_SYSTEM_INFO.ussTestDir}/schemas/`, { From 5c37c0b639e82ac4e9220da72a36ec36de0b9b7c Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Tue, 2 Jul 2024 11:57:02 -0400 Subject: [PATCH 12/21] checkpoint - wip Signed-off-by: MarkAckert --- bin/commands/init/apfauth/.errors | 1 + bin/commands/init/apfauth/index.ts | 8 + bin/libs/zos.ts | 2 +- tests/zwe-remote-integration/.gitignore | 2 +- .../init/__snapshots__/apfauth.test.ts.snap | 474 +++++++++++++- .../init/__snapshots__/canary.test.ts.snap | 12 +- .../__snapshots__/certificate.test.ts.snap | 22 +- .../init/__snapshots__/generate.test.ts.snap | 589 +++++++++++++++++- .../init/__snapshots__/vsam.test.ts.snap | 4 +- .../src/__tests__/init/apfauth.test.ts | 51 +- .../src/__tests__/init/canary.test.ts | 10 +- .../src/__tests__/init/certificate.test.ts | 50 +- .../src/__tests__/init/generate.test.ts | 39 +- .../src/__tests__/init/vsam.test.ts | 16 +- .../src/config/TestConfig.ts | 5 +- .../src/config/{ZoweYaml.ts => ZoweConfig.ts} | 14 +- .../zwe-remote-integration/src/globalSetup.ts | 29 +- .../src/zos/RemoteTestRunner.ts | 83 ++- 18 files changed, 1303 insertions(+), 108 deletions(-) rename tests/zwe-remote-integration/src/config/{ZoweYaml.ts => ZoweConfig.ts} (63%) diff --git a/bin/commands/init/apfauth/.errors b/bin/commands/init/apfauth/.errors index cf0c1d2030..d3b635b18d 100644 --- a/bin/commands/init/apfauth/.errors +++ b/bin/commands/init/apfauth/.errors @@ -1,2 +1,3 @@ ZWEL0157E|157|%s (%s) is not defined in Zowe YAML configuration file. ZWEL0319E|319|zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL ${prefix}.SZWESAMP(ZWEGENER) before running this command. +ZWEL0320E|320|The dataset specified in '%s' does not exist. diff --git a/bin/commands/init/apfauth/index.ts b/bin/commands/init/apfauth/index.ts index 3b750245c9..50df9a5e33 100644 --- a/bin/commands/init/apfauth/index.ts +++ b/bin/commands/init/apfauth/index.ts @@ -49,6 +49,14 @@ export function execute() { let result1 = zosDs.isDatasetSmsManaged(ZOWE_CONFIG.zowe.setup.dataset.authLoadlib); let result2 = zosDs.isDatasetSmsManaged(ZOWE_CONFIG.zowe.setup.dataset.authPluginLib); + + if (result1.rc != 0) { + common.printErrorAndExit(`Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authLoadlib' does not exist.`, undefined, 320); + } + if (result2.rc != 0) { + common.printErrorAndExit(`Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authPluginLib' does not exist.`, undefined, 320); + } + if (!result1.smsManaged || !result2.smsManaged) { const COMMAND_LIST = std.getenv('ZWE_CLI_COMMANDS_LIST'); const tmpfile = fs.createTmpFile(`zwe ${COMMAND_LIST}`.replace(new RegExp('\ ', 'g'), '-')); diff --git a/bin/libs/zos.ts b/bin/libs/zos.ts index e658fcc637..d1289b4627 100644 --- a/bin/libs/zos.ts +++ b/bin/libs/zos.ts @@ -18,7 +18,7 @@ import * as zosDataset from './zos-dataset'; import * as initGenerate from '../commands/init/generate/index'; export function tsoCommand(...args:string[]): { rc: number, out: string } { - let message = "tsocmd " + '"' + args.join(' ') + '"'; + let message = "tsocmd " + '"' + args.join(' ') + '" < /dev/null'; common.printDebug('- '+message); //we echo at the end to avoid a configmgr quirk where trying to read stdout when empty can hang waiting for bytes const result = shell.execOutSync('sh', '-c', `${message} 2>&1 && echo '.'`); diff --git a/tests/zwe-remote-integration/.gitignore b/tests/zwe-remote-integration/.gitignore index ff675b7ea5..e23470f789 100644 --- a/tests/zwe-remote-integration/.gitignore +++ b/tests/zwe-remote-integration/.gitignore @@ -1,4 +1,4 @@ .build/* lib/ reports/* -resources/custom_config.yml +resources/custom_config* diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap index 00b6e8a114..e42c6b5fcd 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap @@ -1,17 +1,481 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`init-apfauth (SHORT) apf bad ds prefix 1`] = ` +exports[`init-apfauth (LONG) apf bad ds prefix 1`] = ` " $ Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. ------------------------------------------------------------------------------- >> APF authorize load libraries -cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) -ERROR: ZWEL0143E Cannot find data set member 'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Do not remove the defaults.yaml entry. +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=2 +Zowe JCL generated with errors, check job log. Job completion code=(S04C, Job completion text=ABENDED +ERROR: Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." `; -exports[`init-apfauth (SHORT) apf disable cfgmgr 1`] = ` +exports[`init-apfauth (SHORT) apf bad authPluginLib 1`] = ` " -$ Error ZWEL0316E: Command requires zowe.useConfigmgr=true to use." +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> APF authorize load libraries + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Do not remove the defaults.yaml entry. +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=2 +Zowe JCL generated with errors, check job log. Job completion code=(S04C, Job completion text=ABENDED +ERROR: Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." +`; + +exports[`init-apfauth (SHORT) apf bad authPluginLib 2`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> APF authorize load libraries + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Do not remove the defaults.yaml entry. +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=2 +Zowe JCL generated with errors, check job log. Job completion code=(S04C, Job completion text=ABENDED +ERROR: Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." +`; + +exports[`init-apfauth (SHORT) apf simple --dry-run 1`] = ` +" +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> APF authorize load libraries + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Do not remove the defaults.yaml entry. +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=2 +Zowe JCL generated with errors, check job log. Job completion code=(S04C, Job completion text=ABENDED +ERROR: Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." `; diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap index 73f942f628..04d96e7069 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap @@ -1,6 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Canary tests a test 1`] = ` +exports[`canary run echo 1`] = ` +" +$ hi" +`; + +exports[`canary run zwe help 1`] = ` " $ zwe @@ -54,8 +59,3 @@ Example(s) zwe start -c /path/to/zowe.yaml" `; - -exports[`Canary tests run echo 1`] = ` -" -$ hi" -`; diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap index f43ca693ad..daff63d376 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap @@ -1,7 +1,23 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`init-cert (SHORT) cert disable cfgmgr 1`] = ` +exports[`init-cert (LONG) cert bad hostname 1`] = ` " -$ Error ZWEL0316E: Command requires zowe.useConfigmgr=true to use. -Error ZWEL0999E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." +$ ------------------------------------------------------------------------------- +>> Creating certificate authority "local_ca" + +Error ZWEL0158E: Keystore "/test/dir/local_ca/local_ca.keystore.p12" already exists." +`; + +exports[`init-cert (LONG) cert bad hostname 2`] = ` +" +$ * Output: + Error: error reading input file: ENOENT: no such file or directory, open '/tmp/zwe-16698/.zowe-merged.yaml' +Error ZWEL0157E: Certificate type (zowe.setup.certificate.type) is not defined in Zowe YAML configuration file. +rm: FSUM9195 cannot unlink entry "/tmp/zwe-16698/.zowe-merged.yaml": EDC5129I No such file or directory. (errno2=0x0594003D)" +`; + +exports[`init-cert (SHORT) cert dry-run 1`] = ` +" +$ Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command. +rm: FSUM9195 cannot unlink entry "/tmp/zwe-26063/.zowe-merged.yaml": EDC5129I No such file or directory. (errno2=0x0594003D)" `; diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap index ccdd344cb5..4aeefc022f 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap @@ -1,8 +1,581 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`init-generate (SHORT) BAD: invalid format defaults.yaml 1`] = ` +" +$ Pre-load +Load status: 0 +Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Do not remove the defaults.yaml entry. +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(TEST.DATASET.PFX.VSAM) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(TSTVOL) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe Caching Service VSAM storage is created successfully. +" +`; + +exports[`init-generate (SHORT) BAD: invalid value defaults.yaml 1`] = ` +" +$ Pre-load +Load status: 0 +Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Do not remove the defaults.yaml entry. +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(TEST.DATASET.PFX.VSAM) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(TSTVOL) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe Caching Service VSAM storage is created successfully. +" +`; + +exports[`init-generate (SHORT) BAD: missing defaults.yaml 1`] = ` +" +$ Pre-load +ZWEL0318E - failed to read '/test/dir/files/defaults.yaml' - EDC5129I No such file or directory. (errno2=0x05620062) +Load status: 0 +Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Do not remove the defaults.yaml entry. +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /the/zowe/defaults.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(TEST.DATASET.PFX.VSAM) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(TSTVOL) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe Caching Service VSAM storage is created successfully. +" +`; + exports[`init-generate (SHORT) bad ds prefix 1`] = ` " -$ Temporary directory '/tmp/.zweenv-0000' created. +$ Pre-load +Load status: 0 +Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) ERROR: ZWEL0143E Cannot find data set member 'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." @@ -10,7 +583,9 @@ ERROR: ZWEL0143E Cannot find data set member 'TEST.DATASET.PFX.NOEXIST.SZWESAMP( exports[`init-generate (SHORT) disable cfgmgr 1`] = ` " -$ Temporary directory '/tmp/.zweenv-0000' created. +$ Pre-load +Load status: 0 +Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) --- JCL content --- @@ -85,10 +660,13 @@ $$ //* Overridden by the higher entries. //* PARMLIB member must be named "ZWEYAML" //* +//* Do not remove the defaults.yaml entry. +//* //* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB //* FILE /the/zowe/defaults.yaml //MYCONFIG DD *,DLM=$$ FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml $$ //CMGROUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* @@ -123,7 +701,9 @@ Zowe JCL generated successfully" exports[`init-generate (SHORT) simple --dry-run 1`] = ` " -$ Temporary directory '/tmp/.zweenv-0000' created. +$ Pre-load +Load status: 0 +Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) --- JCL content --- @@ -198,10 +778,13 @@ $$ //* Overridden by the higher entries. //* PARMLIB member must be named "ZWEYAML" //* +//* Do not remove the defaults.yaml entry. +//* //* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB //* FILE /the/zowe/defaults.yaml //MYCONFIG DD *,DLM=$$ FILE /test/dir/zowe.test.yaml +FILE /test/dir/files/defaults.yaml $$ //CMGROUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index 82c9841f28..234714bd57 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -171,7 +171,7 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - UNIQUE) //RLS DD * - STORCLAS({zowe.setup.vsam.storageClass}) - + STORCLAS() - LOG(NONE) - //NONRLS DD * VOLUME(TSTVOL) - @@ -367,7 +367,7 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - UNIQUE) //RLS DD * - STORCLAS({zowe.setup.vsam.storageClass}) - + STORCLAS() - LOG(NONE) - //NONRLS DD * VOLUME(TSTVOL) - diff --git a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts index 348925d211..136cd62656 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts @@ -8,10 +8,10 @@ * Copyright Contributors to the Zowe Project. */ -import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; +import { REMOTE_SYSTEM_INFO } from '../../config/TestConfig'; import ZoweYamlType from '../../config/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; -import { ZoweYaml } from '../../config/ZoweYaml'; +import { ZoweConfig } from '../../config/ZoweConfig'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; const testSuiteName = 'init-apfauth'; @@ -24,51 +24,58 @@ describe(`${testSuiteName}`, () => { testRunner = new RemoteTestRunner(testSuiteName); }); beforeEach(() => { - cfgYaml = ZoweYaml.basicZoweYaml(); + cfgYaml = ZoweConfig.getZoweYaml(); }); afterEach(async () => { - if (TEST_COLLECT_SPOOL) { - await testRunner.collectSpool(); - } - // re-created in every `init` subcommand based on changes to zowe yaml command... - const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; - - // try to delete everything we know about - await TestFileActions.deleteAll([...cleanupDatasets, jcllib]); + await testRunner.postTest(); + await TestFileActions.deleteAll(cleanupDatasets); cleanupDatasets = []; }); - describe('(LONG)', () => {}); + describe('(LONG)', () => { + beforeEach(async () => { + // re-created in every `init` subcommand based on changes to zowe yaml command... + const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + // try to delete everything we know about + await TestFileActions.deleteAll([jcllib]); + }); - describe('(SHORT)', () => { - it('apf disable cfgmgr', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init apfauth'); + it('apf bad ds prefix', async () => { + cfgYaml.zowe.setup.dataset.jcllib = 'ZOWEAD3.ZWETEST.NOEXIST'; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(60); // 60 is expected error code... + expect(result.rc).toBe(231); }); + }); - it('apf bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD3.ZWETEST.NOEXIST'; + describe('(SHORT)', () => { + beforeAll(() => { + testRunner.runZweTest(cfgYaml, 'init generate'); + }); + + it('apf bad authLoadLib', async () => { + cfgYaml.zowe.setup.dataset.authLoadlib = 'DOES.NOT.EXIST'; const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(231); }); - it('apf dry-run', async () => { + it('apf bad authPluginLib', async () => { + cfgYaml.zowe.setup.dataset.authPluginLib = 'DOES.NOT.EXIST'; const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(231); - }, 400000); + }); - /* it('apf simple --dry-run', async () => { + it('apf simple --dry-run', async () => { const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... + expect(result.rc).toBe(60); // 60 is expected... }); /* it('apf security-dry-run', async () => { diff --git a/tests/zwe-remote-integration/src/__tests__/init/canary.test.ts b/tests/zwe-remote-integration/src/__tests__/init/canary.test.ts index cd1a5a3c4f..20269474af 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/canary.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/canary.test.ts @@ -9,12 +9,12 @@ */ import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; -import { ZoweYaml } from '../../config/ZoweYaml'; +import { ZoweConfig } from '../../config/ZoweConfig'; /** * Make sure the test suite and remote system are working as expected */ -const testSuiteName = 'Canary tests'; +const testSuiteName = 'canary'; describe(testSuiteName, () => { let testRunner: RemoteTestRunner; beforeAll(() => { @@ -22,7 +22,7 @@ describe(testSuiteName, () => { }); it('run echo', async () => { - const cfgYaml = ZoweYaml.basicZoweYaml(); + const cfgYaml = ZoweConfig.getZoweYaml(); cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; const result = await testRunner.runRaw('echo "hi"'); expect(result.rc).toBe(0); @@ -30,8 +30,8 @@ describe(testSuiteName, () => { expect(result.stdout).toMatchSnapshot(); }); - it('a test', async () => { - const cfgYaml = ZoweYaml.basicZoweYaml(); + it('run zwe help', async () => { + const cfgYaml = ZoweConfig.getZoweYaml(); cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; const result = await testRunner.runZweTest(cfgYaml, '--help'); expect(result.rc).toBe(100); // 100 is expected... diff --git a/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts index ecca0246cd..60201841e7 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts @@ -8,42 +8,38 @@ * Copyright Contributors to the Zowe Project. */ -import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; +import { REMOTE_SYSTEM_INFO } from '../../config/TestConfig'; import ZoweYamlType from '../../config/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; -import { ZoweYaml } from '../../config/ZoweYaml'; +import { ZoweConfig } from '../../config/ZoweConfig'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; const testSuiteName = 'init-cert'; describe(`${testSuiteName}`, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; - let cleanupFiles: TestFile[] = []; // a list of datasets deleted after every test + const cleanupFiles: TestFile[] = []; // a list of datasets deleted after every test beforeAll(() => { testRunner = new RemoteTestRunner(testSuiteName); }); - beforeEach(() => { - cfgYaml = ZoweYaml.basicZoweYaml(); + cfgYaml = ZoweConfig.getZoweYaml(); }); afterEach(async () => { - if (TEST_COLLECT_SPOOL) { - await testRunner.collectSpool(); - } - // re-created in every `init` subcommand based on changes to zowe yaml command... - const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; - - // try to delete everything we know about - await TestFileActions.deleteAll([...cleanupFiles, jcllib]); - cleanupFiles = []; + await testRunner.postTest(); + await TestFileActions.deleteAll(cleanupDatasets); + cleanupDatasets = []; }); describe('(SHORT)', () => { - it('cert disable cfgmgr', async () => { - cfgYaml.zowe.useConfigmgr = false; - const result = await testRunner.runZweTest(cfgYaml, 'init certificate'); + beforeAll(() => { + testRunner.runZweTest(cfgYaml, 'init generate'); + }); + + it('cert dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(231); // 231 is expected error code...? @@ -91,24 +87,6 @@ describe(`${testSuiteName}`, () => { expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(231); // 231 is expected error code...? - }, 180000); - - it('cert enable cfgmgr', async () => { - cfgYaml.zowe.useConfigmgr = true; - const result = await testRunner.runZweTest(cfgYaml, 'init certificate'); - cleanupFiles.push( - { - name: cfgYaml.zowe.setup.certificate.pkcs12.directory + '/local_ca/', - type: FileType.USS_DIR, - }, - { - name: cfgYaml.zowe.setup.certificate.pkcs12.directory + '/localhost/', - type: FileType.USS_DIR, - }, - ); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); // 231 is expected error code...? - }, 180000); + }); }); }); diff --git a/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts index 589f35e5ac..320da91091 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts @@ -8,29 +8,30 @@ * Copyright Contributors to the Zowe Project. */ -import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; +import { REMOTE_SYSTEM_INFO } from '../../config/TestConfig'; import ZoweYamlType from '../../config/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; -import { ZoweYaml } from '../../config/ZoweYaml'; +import { ZoweConfig } from '../../config/ZoweConfig'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; const testSuiteName = 'init-generate'; describe(`${testSuiteName}`, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; + let defaultCfgYaml: ZoweYamlType; let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test beforeAll(() => { testRunner = new RemoteTestRunner(testSuiteName); }); beforeEach(() => { - cfgYaml = ZoweYaml.basicZoweYaml(); + cfgYaml = ZoweConfig.getZoweYaml(); + defaultCfgYaml = ZoweConfig.getDefaultsYaml(); }); afterEach(async () => { - if (TEST_COLLECT_SPOOL) { - await testRunner.collectSpool(); - } + await testRunner.postTest(); + // re-created in every `init generate` based on changes to zowe yaml command... const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; @@ -62,6 +63,32 @@ describe(`${testSuiteName}`, () => { expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(0); // 60 is expected... }); + + it('BAD: missing defaults.yaml', async () => { + await testRunner.removeFileForTest('files/defaults.yaml'); + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); // FIXME: the snapshot indicates processing continues when it shouldn't + expect(result.rc).not.toBe(0); + }); + + it('BAD: invalid value defaults.yaml', async () => { + // @ts-expect-error intentionally setting an incorrect value + defaultCfgYaml.zowe.configmgr.validation = 'WRONG_VALUE'; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); // FIXME: the snapshot indicates processing continues when it shouldn't + expect(result.rc).not.toBe(0); + }); + + it('BAD: invalid format defaults.yaml', async () => { + // @ts-expect-error invalid yaml format + defaultCfgYaml.zowe = '....\n somefield:\n #another:\n' + defaultCfgYaml.zowe; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); // FIXME: the snapshot indicates processing continues when it shouldn't + expect(result.rc).not.toBe(0); + }); }); describe('(LONG)', () => {}); diff --git a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts index 599019b16c..95579fe596 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts @@ -8,10 +8,10 @@ * Copyright Contributors to the Zowe Project. */ -import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL } from '../../config/TestConfig'; +import { REMOTE_SYSTEM_INFO } from '../../config/TestConfig'; import ZoweYamlType from '../../config/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; -import { ZoweYaml } from '../../config/ZoweYaml'; +import { ZoweConfig } from '../../config/ZoweConfig'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; const testSuiteName = 'init-vsam'; @@ -24,16 +24,15 @@ describe(`${testSuiteName}`, () => { testRunner = new RemoteTestRunner(testSuiteName); }); beforeEach(() => { - cfgYaml = ZoweYaml.basicZoweYaml(); + cfgYaml = ZoweConfig.getZoweYaml(); // customizations for all vsam tests cfgYaml.zowe.setup.vsam.name = REMOTE_SYSTEM_INFO.prefix + '.VSAMTEST'; cfgYaml.zowe.setup.vsam.volume = REMOTE_SYSTEM_INFO.volume; }); afterEach(async () => { - if (TEST_COLLECT_SPOOL) { - await testRunner.collectSpool(); - } + await testRunner.postTest(); + // re-created in every `init vsam` based on changes to zowe yaml command... const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; @@ -57,14 +56,15 @@ describe(`${testSuiteName}`, () => { const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(143); + expect(result.rc).not.toBe(0); + expect(result.rc).toBe(143); // is this useful or not 0 enough? }); it('GOOD: simple --dry-run', async () => { const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); + expect(result.rc).toBe(0); }); }); diff --git a/tests/zwe-remote-integration/src/config/TestConfig.ts b/tests/zwe-remote-integration/src/config/TestConfig.ts index 6256c55868..7d7e1c1ef1 100644 --- a/tests/zwe-remote-integration/src/config/TestConfig.ts +++ b/tests/zwe-remote-integration/src/config/TestConfig.ts @@ -52,7 +52,8 @@ export const THIS_TEST_ROOT_DIR: string = findDirWalkingUpOrThrow('zwe-remote-in const configFile = process.env['TEST_CONFIG_FILE'] || `${THIS_TEST_ROOT_DIR}/resources/test_config.yml`; const configData = getConfig(configFile); -export const THIS_TEST_BASE_YAML: string = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'zowe.yaml.base'); +export const THIS_TEST_BASE_ZOWE_YAML: string = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'zowe.yaml.base'); +export const THIS_TEST_BASE_DEFAULTS_YAML: string = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'defaults.yaml.base'); export const TEST_OUTPUT_DIR: string = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'output'); export const INSTALL_TEST_ROOT_DIR: string = path.resolve(__dirname, '../'); export const LINGERING_REMOTE_FILES_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'lingering_ds.txt'); @@ -79,6 +80,8 @@ export const REMOTE_SYSTEM_INFO = { szwesamp: `${configData.test_ds_hlq}.SZWESAMP`, jcllib: `${configData.test_ds_hlq}.JCLLIB`, szweload: `${configData.test_ds_hlq}.SZWELOAD`, + authLoadLib: `${configData.test_ds_hlq}.SZWELOAD`, + authPluginLib: `${configData.test_ds_hlq}.ZWESAPL`, ussTestDir: configData.remote_test_dir, hostname: configData.zos_host, zosmfPort: configData.zosmf_port, diff --git a/tests/zwe-remote-integration/src/config/ZoweYaml.ts b/tests/zwe-remote-integration/src/config/ZoweConfig.ts similarity index 63% rename from tests/zwe-remote-integration/src/config/ZoweYaml.ts rename to tests/zwe-remote-integration/src/config/ZoweConfig.ts index 61219b5827..87cd7f241b 100644 --- a/tests/zwe-remote-integration/src/config/ZoweYaml.ts +++ b/tests/zwe-remote-integration/src/config/ZoweConfig.ts @@ -9,11 +9,11 @@ */ import * as yaml from 'yaml'; -import { THIS_TEST_BASE_YAML } from './TestConfig'; +import { THIS_TEST_BASE_DEFAULTS_YAML, THIS_TEST_BASE_ZOWE_YAML } from './TestConfig'; import * as fs from 'fs-extra'; import ZoweYamlType from './ZoweYamlType'; -export class ZoweYaml { +export class ZoweConfig { /* public updateField(field: string, value: string) { // this.zoweYaml[field] = value; }*/ @@ -24,9 +24,15 @@ export class ZoweYaml { * * @returns ZoweYaml JSON Object */ - static basicZoweYaml(): ZoweYamlType { - const fileContents = fs.readFileSync(THIS_TEST_BASE_YAML, 'utf8'); + static getZoweYaml(): ZoweYamlType { + const fileContents = fs.readFileSync(THIS_TEST_BASE_ZOWE_YAML, 'utf8'); const zoweYaml = yaml.parse(fileContents); return zoweYaml as ZoweYamlType; } + + static getDefaultsYaml(): ZoweYamlType { + const fileContents = fs.readFileSync(THIS_TEST_BASE_DEFAULTS_YAML, 'utf8'); + const defaultsYaml = yaml.parse(fileContents); + return defaultsYaml as ZoweYamlType; + } } diff --git a/tests/zwe-remote-integration/src/globalSetup.ts b/tests/zwe-remote-integration/src/globalSetup.ts index e51b90bfea..a6a9fd1bbb 100644 --- a/tests/zwe-remote-integration/src/globalSetup.ts +++ b/tests/zwe-remote-integration/src/globalSetup.ts @@ -22,9 +22,10 @@ import { LINGERING_REMOTE_FILES_FILE, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR, - THIS_TEST_BASE_YAML, + THIS_TEST_BASE_ZOWE_YAML, THIS_TEST_ROOT_DIR, ZOWE_YAML_OVERRIDES, + THIS_TEST_BASE_DEFAULTS_YAML, } from './config/TestConfig'; import * as fs from 'fs-extra'; import { getSession } from './zos/ZosmfSession'; @@ -48,6 +49,8 @@ function setupBaseYaml() { zoweYaml.zowe.setup.vsam.name = REMOTE_SYSTEM_INFO.prefix + '.VSAM'; zoweYaml.zowe.setup.vsam.volume = REMOTE_SYSTEM_INFO.volume; zoweYaml.zowe.setup.certificate.pkcs12.directory = REMOTE_SYSTEM_INFO.ussTestDir; + zoweYaml.zowe.setup.dataset.authLoadlib = REMOTE_SYSTEM_INFO.authLoadLib; + zoweYaml.zowe.setup.dataset.authPluginLib = REMOTE_SYSTEM_INFO.authPluginLib; // zoweYaml.zowe.setup.dataset.loadlib = REMOTE_SYSTEM_INFO.szweexec; // zoweYaml.node.home = systemDefaults.zos_node_home; // zoweYaml.zowe.runtimeDirectory = systemDefaults. @@ -55,7 +58,11 @@ function setupBaseYaml() { // const finalYaml = _.merge({}, zoweYaml, ZOWE_YAML_OVERRIDES); - fs.writeFileSync(THIS_TEST_BASE_YAML, yaml.stringify(finalYaml)); + fs.writeFileSync(THIS_TEST_BASE_ZOWE_YAML, yaml.stringify(finalYaml)); + + console.log(`Using files/defaults.yaml as base for future defaults.yaml modifications...`); + const defaultsYaml: ZoweYamlType = yaml.parse(fs.readFileSync(`${REPO_ROOT_DIR}/files/defaults.yaml`, 'utf8')) as ZoweYamlType; + fs.writeFileSync(THIS_TEST_BASE_DEFAULTS_YAML, yaml.stringify(defaultsYaml)); } const jf = new JfrogClient({ @@ -231,8 +238,10 @@ module.exports = async () => { console.log(`Converting everything in ${REMOTE_SYSTEM_INFO.ussTestDir}/bin to EBCDIC...`); await uss.runCommand(`chmod +x convert_to_ebcdic.sh && ./convert_to_ebcdic.sh`, REMOTE_SYSTEM_INFO.ussTestDir); - await uss.runCommand(`chmod 755 ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/zwe && ` + - `chmod 755 ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/utils/opercmd.rex `, REMOTE_SYSTEM_INFO.ussTestDir); + await uss.runCommand( + `chmod 755 ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/zwe && ` + `chmod 755 ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/utils/opercmd.rex `, + REMOTE_SYSTEM_INFO.ussTestDir, + ); console.log(`Uploading ${REPO_ROOT_DIR}/schemas to ${REMOTE_SYSTEM_INFO.ussTestDir}/schemas...`); await files.Upload.dirToUSSDirRecursive(zosmfSession, `${REPO_ROOT_DIR}/schemas`, `${REMOTE_SYSTEM_INFO.ussTestDir}/schemas/`, { @@ -265,6 +274,18 @@ module.exports = async () => { lrecl: 0, secondary: 1, }); + await createPds(REMOTE_SYSTEM_INFO.authLoadLib, { + primary: 5, + recfm: 'U', + lrecl: 0, + secondary: 1, + }); + await createPds(REMOTE_SYSTEM_INFO.authPluginLib, { + primary: 5, + recfm: 'U', + lrecl: 0, + secondary: 1, + }); console.log(`Unpacking configmgr and placing it in bin/utils ...`); await uss.runCommand(`pax -ppx -rf configmgr.pax && mv configmgr bin/utils/`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); diff --git a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts index f528e82c1a..5e931c34b9 100644 --- a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts +++ b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts @@ -12,20 +12,33 @@ import { Session } from '@zowe/imperative'; import { getSession } from './ZosmfSession'; import * as uss from './Uss'; import ZoweYamlType from '../config/ZoweYamlType'; -import { REMOTE_SYSTEM_INFO, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR } from '../config/TestConfig'; +import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR } from '../config/TestConfig'; import * as files from '@zowe/zos-files-for-zowe-sdk'; import * as fs from 'fs-extra'; import * as YAML from 'yaml'; import * as jobs from '@zowe/zos-jobs-for-zowe-sdk'; +import { basename } from 'path'; + +/** + * RemoteTestRunner is a class which drives actions on the backend test environment and + * contains utility functions which are helpful in context of those tests. Utility + * functions include collecting relevant spool, removing backend files and later restoring them, + * and cleaning output returned from the test system so it contains no environment-specific + * references. + */ export class RemoteTestRunner { + private readonly REMOTE_TEST_TMP_DIR: string = `${REMOTE_SYSTEM_INFO.ussTestDir}/test_tmp`; private readonly yamlOutputTemplate: string; + private readonly tmpDir: string; private readonly spoolOutputTemplate: string; private readonly session: Session; + private trackedFiles: TrackedFile[] = []; private trackedJobs: jobs.IDownloadAllSpoolContentParms[] = []; private cleanFns: ((stdout: string) => string)[] = []; constructor(testGroup: string) { this.session = getSession(); + this.tmpDir = `${TEST_OUTPUT_DIR}/${testGroup}/tmp`; this.yamlOutputTemplate = `${TEST_OUTPUT_DIR}/${testGroup}/{{ testInstance }}/yaml`; this.spoolOutputTemplate = `${TEST_OUTPUT_DIR}/${testGroup}//{{ testInstance }}/spool`; } @@ -41,6 +54,35 @@ export class RemoteTestRunner { }; } + /** + * Collects spool, restores files tracked by #removeFileForTest, and cleans up local work dirs + */ + public async postTest() { + if (TEST_COLLECT_SPOOL) { + await this.collectSpool(); + } + await this.restoreFiles(); + fs.rmSync(this.tmpDir, { recursive: true, force: true }); + } + + public async readFile( + filePath: string, + isBinary: boolean = false, + readContent: boolean = true, + cwd: string = REMOTE_SYSTEM_INFO.ussTestDir, + ): Promise<{ content: string; file: string }> { + const tmpFile = `${this.tmpDir}/${expect.getState().currentTestName}/${basename(filePath)}`; + await files.Download.ussFile(this.session, `${cwd}/${filePath}`, { file: tmpFile, binary: isBinary }); + let content; + if (readContent) { + content = fs.readFileSync(tmpFile).toString(); + } + return { + content: content, + file: tmpFile, + }; + } + public async collectSpool() { const testName = expect.getState().currentTestName.replace(/\s/g, '_'); const spoolOutputDir = this.spoolOutputTemplate.replace('{{ testInstance }}', testName); @@ -55,6 +97,23 @@ export class RemoteTestRunner { this.trackedJobs = []; } + public async restoreFiles() { + for (const trackedFile of this.trackedFiles) { + await this.runRaw(`mv ${trackedFile.tmpFile} ${trackedFile.srcFile}`); + } + this.trackedFiles = []; + } + + public async removeFileForTest(filePath: string) { + const flattenedTmpName = filePath.replaceAll('/', '_'); + await this.runRaw(`mkdir -p ${this.REMOTE_TEST_TMP_DIR}`); + await this.runRaw(`mv ${filePath} ${this.REMOTE_TEST_TMP_DIR}/${flattenedTmpName}`); + this.trackedFiles.push({ + srcFile: filePath, + tmpFile: `${this.REMOTE_TEST_TMP_DIR}/${flattenedTmpName}`, + }); + } + public addCleanFn(replaceFn: (output: string) => string) { this.cleanFns.push(replaceFn); } @@ -79,6 +138,23 @@ export class RemoteTestRunner { .replaceAll(REMOTE_SYSTEM_INFO.ussTestDir, '/test/dir'); } + public async runZweTestWithDefaults(zoweYaml: ZoweYamlType, defaultYaml: ZoweYamlType, cwd: string = REMOTE_SYSTEM_INFO.ussTestDir) { + const testName = expect.getState().currentTestName.replace(/\s/g, '_').substring(0, 40); + const stringDefaultYaml = YAML.stringify(defaultYaml); + const yamlOutputDir = this.yamlOutputTemplate.replace('{{ testInstance }}', testName); + await this.removeFileForTest('files/defaults.yaml'); + fs.writeFileSync(`${yamlOutputDir}/defaults.yaml.${testName}`, stringDefaultYaml); + await files.Upload.fileToUssFile( + this.session, + `${yamlOutputDir}/defaults.yaml.${testName}`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/files/defaults.yaml`, + { + binary: false, + }, + ); + await this.runZweTest(zoweYaml, cwd); + } + /** * * @param zoweYaml @@ -133,6 +209,11 @@ export class RemoteTestRunner { } } +type TrackedFile = { + srcFile: string; + tmpFile: string; +}; + export type TestOutput = { stdout: string; cleanedStdout: string; From 862aac5391ecb1ef9b21d1e9bdbb48330de4dced Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 3 Jul 2024 13:57:51 -0400 Subject: [PATCH 13/21] small refactors, more vsam tests Signed-off-by: MarkAckert --- tests/zwe-remote-integration/jest.config.ts | 2 +- .../init/__snapshots__/apfauth.test.ts.snap | 387 ++---------------- .../init/__snapshots__/vsam.test.ts.snap | 213 ++-------- .../src/__tests__/init/apfauth.test.ts | 55 ++- .../src/__tests__/init/vsam.test.ts | 207 +++++++++- .../src/config/TestConfig.ts | 3 + .../zwe-remote-integration/src/globalSetup.ts | 37 +- tests/zwe-remote-integration/src/zos/Files.ts | 50 +++ .../src/zos/RemoteTestRunner.ts | 4 +- 9 files changed, 363 insertions(+), 595 deletions(-) create mode 100644 tests/zwe-remote-integration/src/zos/Files.ts diff --git a/tests/zwe-remote-integration/jest.config.ts b/tests/zwe-remote-integration/jest.config.ts index 7dd26d4014..e711c3f0b3 100644 --- a/tests/zwe-remote-integration/jest.config.ts +++ b/tests/zwe-remote-integration/jest.config.ts @@ -29,7 +29,7 @@ const config: Config = { }, ], ], - testTimeout: 70000, + testTimeout: 120000, transform: { '^.+\\.(t|j)sx?$': ['ts-jest', { isolatedModules: true }], }, diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap index e42c6b5fcd..45e007b566 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap @@ -7,240 +7,31 @@ Zowe will remove it on success, but if zwe exits with a non-zero code manual cle ------------------------------------------------------------------------------- >> APF authorize load libraries -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Do not remove the defaults.yaml entry. -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=2 -Zowe JCL generated with errors, check job log. Job completion code=(S04C, Job completion text=ABENDED -ERROR: Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." +cp: FSUM6258 cannot open file "//'BAD.DS.PREFIX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) +ERROR: ZWEL0143E Cannot find data set member 'BAD.DS.PREFIX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." `; -exports[`init-apfauth (SHORT) apf bad authPluginLib 1`] = ` +exports[`init-apfauth (LONG) apf empty ds prefix 1`] = ` " -$ Temporary directory '/tmp/.zweenv-0000' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -------------------------------------------------------------------------------- ->> APF authorize load libraries - -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Do not remove the defaults.yaml entry. -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) +$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/prefix; expecting type 'string'" +`; ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=2 -Zowe JCL generated with errors, check job log. Job completion code=(S04C, Job completion text=ABENDED -ERROR: Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." +exports[`init-apfauth (LONG) apf empty jcllib 1`] = ` +" +$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/jcllib; expecting type 'string'" `; -exports[`init-apfauth (SHORT) apf bad authPluginLib 2`] = ` +exports[`init-apfauth (SHORT) apf bad authLoadLib 1`] = ` " $ Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. @@ -355,127 +146,39 @@ noverbose - --- End of JCL --- Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=2 -Zowe JCL generated with errors, check job log. Job completion code=(S04C, Job completion text=ABENDED -ERROR: Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully +ERROR: * Exit code: 8 +ERROR: * Output: +ERROR: listds 'DOES.NOT.EXIST' label + DOES.NOT.EXIST + IKJ58503I DATA SET 'DOES.NOT.EXIST' NOT IN CATALOG +ERROR: Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authLoadlib' does not exist." `; -exports[`init-apfauth (SHORT) apf simple --dry-run 1`] = ` +exports[`init-apfauth (SHORT) apf bad authPluginLib 1`] = ` " $ Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. ------------------------------------------------------------------------------- >> APF authorize load libraries -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Do not remove the defaults.yaml entry. -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) +ERROR: * Exit code: 8 +ERROR: * Output: +ERROR: listds 'DOES.NOT.EXIST' label + DOES.NOT.EXIST + IKJ58503I DATA SET 'DOES.NOT.EXIST' NOT IN CATALOG +ERROR: Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authPluginLib' does not exist." +`; ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=2 -Zowe JCL generated with errors, check job log. Job completion code=(S04C, Job completion text=ABENDED -ERROR: Error ZWEL0319E: zowe.setup.dataset.jcllib does not exist, cannot run. Run 'zwe init', 'zwe init generate', or submit JCL TEST.DATASET.PFX.SZWESAMP(ZWEGENER) before running this command." +exports[`init-apfauth (SHORT) apf empty jcllib post-generate 1`] = ` +" +$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/jcllib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/jcllib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/jcllib" `; diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index 234714bd57..c2171bf573 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -185,201 +185,52 @@ Job ZWECSVSM(JOB00000) completed with RC=0 " `; -exports[`init-vsam (SHORT) BAD: bad ds prefix 1`] = ` +exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 1`] = ` +" +$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/vsam + type 'null' not permitted at /zowe/setup/vsam/storageClass; expecting type 'string'" +`; + +exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 2`] = ` " $ Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets -cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) -ERROR: ZWEL0143E Cannot find data set member 'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not defined in Zowe YAML configuration file." +`; + +exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 3`] = ` +" +$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/vsam + type 'null' not permitted at /zowe/setup/vsam/storageClass; expecting type 'string'" `; -exports[`init-vsam (SHORT) GOOD: simple --dry-run 1`] = ` +exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 4`] = ` " $ Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Do not remove the defaults.yaml entry. -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) ---- JCL Content --- -//ZWECSVSM JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* Zowe Open Source Project -//* This JCL creates the VSAM data set for the Caching Service. -//* -//* -//* CAUTION: This is neither a JCL procedure nor a complete job. -//* Before using this JCL, you will have to make the following -//* modifications: -//* -//* 1) Add job name and job parameters to the JOB statement, to -//* meet your system requirements. -//* -//* When using RLS, customize the definitions in the RLS DD: -//* -//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the -//* desired recovery options for the RLS VSAM. -//* -//* -//* Note(s): -//* -//* 1. This job should complete with return code 0. -//* -//******************************************************************** -//* -//ALLOC EXEC PGM=IDCAMS,REGION=0M -//SYSPRINT DD SYSOUT=* -//SYSIN DD * - DEFINE CLUSTER - - (NAME(TEST.DATASET.PFX.VSAMTEST) - -// DD DDNAME=NONRLS -// DD * - REC(80 20) - - INDEXED) - - DATA(NAME(TEST.DATASET.PFX.VSAMTEST.DATA) - - RECSZ(4096 4096) - - UNIQUE - - KEYS(128 0)) - - INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - - UNIQUE) -//RLS DD * - STORCLAS() - - LOG(NONE) - -//NONRLS DD * - VOLUME(TSTVOL) - - SHAREOPTIONS(2 3) - -//* ---- End of JCL --- -JCL not submitted, command run with "--dry-run" flag. -To perform command, re-run command without "--dry-run" flag, or submit the JCL directly - ->> Command run successfully. - +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not defined in Zowe YAML configuration file." +`; ->> Zowe Caching Service VSAM storage is created successfully. +exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 5`] = ` " +$ Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not defined in Zowe YAML configuration file." `; diff --git a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts index 136cd62656..4f6e083778 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts @@ -22,6 +22,7 @@ describe(`${testSuiteName}`, () => { beforeAll(() => { testRunner = new RemoteTestRunner(testSuiteName); + cfgYaml = ZoweConfig.getZoweYaml(); // init }); beforeEach(() => { cfgYaml = ZoweConfig.getZoweYaml(); @@ -41,26 +42,59 @@ describe(`${testSuiteName}`, () => { await TestFileActions.deleteAll([jcllib]); }); + it('apf empty jcllib', async () => { + cfgYaml.zowe.setup.dataset.jcllib = null; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + + it('apf empty ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = null; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + it('apf bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.jcllib = 'ZOWEAD3.ZWETEST.NOEXIST'; + cfgYaml.zowe.setup.dataset.prefix = 'BAD.DS.PREFIX.NOEXIST'; const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); + expect(result.rc).toBe(143); }); }); describe('(SHORT)', () => { - beforeAll(() => { - testRunner.runZweTest(cfgYaml, 'init generate'); + beforeAll(async () => { + await testRunner.runZweTest(cfgYaml, 'init generate'); + }); + it('apf empty jcllib post-generate', async () => { + cfgYaml.zowe.setup.dataset.jcllib = ''; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); }); + /* + // not working, not covered + it('apf sms-managed authLoadLib', async () => { + cfgYaml.zowe.setup.dataset.authLoadlib = smsDataset; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + });*/ + it('apf bad authLoadLib', async () => { cfgYaml.zowe.setup.dataset.authLoadlib = 'DOES.NOT.EXIST'; const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); + expect(result.rc).toBe(64); }); it('apf bad authPluginLib', async () => { @@ -68,21 +102,14 @@ describe(`${testSuiteName}`, () => { const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); + expect(result.rc).toBe(64); }); it('apf simple --dry-run', async () => { const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(60); // 60 is expected... + expect(result.rc).toBe(0); // 60 is expected... }); - - /* it('apf security-dry-run', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --security-dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... }); - });*/ }); }); diff --git a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts index 95579fe596..027fc12ea7 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts @@ -22,6 +22,7 @@ describe(`${testSuiteName}`, () => { beforeAll(() => { testRunner = new RemoteTestRunner(testSuiteName); + cfgYaml = ZoweConfig.getZoweYaml(); }); beforeEach(() => { cfgYaml = ZoweConfig.getZoweYaml(); @@ -32,46 +33,210 @@ describe(`${testSuiteName}`, () => { afterEach(async () => { await testRunner.postTest(); + await TestFileActions.deleteAll(cleanupDatasets); + cleanupDatasets = []; + }); - // re-created in every `init vsam` based on changes to zowe yaml command... - const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + describe('(LONG)', () => { + beforeEach(async () => { + // re-created in every `init` subcommand based on changes to zowe yaml command... + const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + // try to delete everything we know about + await TestFileActions.deleteAll([jcllib]); + }); - // try to delete everything we know about - await TestFileActions.deleteAll([...cleanupDatasets, jcllib]); - cleanupDatasets = []; + it('creates vsam', async () => { + cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: FileType.DS_VSAM }); + const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); }); describe('(SHORT)', () => { - /* it('disable cfgmgr', async () => { - cfgYaml.zowe.useConfigmgr = false; - const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); - cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: FileType.DS_VSAM }); + beforeAll(async () => { + await testRunner.runZweTest(cfgYaml, 'init generate'); + }); + + it('skip non-vsam caching service', async () => { + // @ts-expect-error dynamic property access not in schema + cfgYaml.components['caching-service'].storage.mode = 'INFINISPAN'; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + + it('skip undefined caching service', async () => { + cfgYaml.components = null; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + + it('unset ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = null; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(143); + }); + + it('unset jcllib', async () => { + cfgYaml.zowe.setup.dataset.prefix = null; + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(143); + }); + + it('invalid NONRLS configurations', async () => { + cfgYaml.zowe.setup.vsam.mode = 'NONRLS'; + + // null(empty) vol + cfgYaml.zowe.setup.vsam.volume = null; + cfgYaml.zowe.setup.vsam.name = 'SOME.VSAM.NAME'; + let result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + // empty(str) vol + cfgYaml.zowe.setup.vsam.volume = ''; + cfgYaml.zowe.setup.vsam.name = 'SOME.VSAM.NAME'; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(157); + + // null(empty) name + cfgYaml.zowe.setup.vsam.volume = 'SOMEVOL'; + cfgYaml.zowe.setup.vsam.name = null; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(60); // 60 is expected... - });*/ + expect(result.rc).toBe(157); - it('BAD: bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD3.ZWETEST.NOEXIST'; + // empty(str) name + cfgYaml.zowe.setup.vsam.volume = 'SOMEVOL'; + cfgYaml.zowe.setup.vsam.name = ''; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(157); + + // null(empty) both + cfgYaml.zowe.setup.vsam.volume = null; + cfgYaml.zowe.setup.vsam.name = null; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + // empty(str) both + cfgYaml.zowe.setup.vsam.volume = ''; + cfgYaml.zowe.setup.vsam.name = ''; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(157); + + // valid RLS config (invalid for NONRLS) + cfgYaml.zowe.setup.vsam.volume = ''; + cfgYaml.zowe.setup.vsam.storageClass = 'STG1'; + cfgYaml.zowe.setup.vsam.name = 'SOME.VSAM.NAME'; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(157); + }); + + it('valid NONRLS configurations', async () => { + cfgYaml.zowe.setup.vsam.mode = 'NONRLS'; + cfgYaml.zowe.setup.vsam.volume = 'VOL001'; + cfgYaml.zowe.setup.vsam.name = 'SOME.VSAM.NAME'; const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).not.toBe(0); - expect(result.rc).toBe(143); // is this useful or not 0 enough? + expect(result.rc).toBe(0); }); - it('GOOD: simple --dry-run', async () => { + it('invalid RLS configurations', async () => { + cfgYaml.zowe.setup.vsam.mode = 'RLS'; + + // null(empty) stgClass + cfgYaml.zowe.setup.vsam.storageClass = null; + cfgYaml.zowe.setup.vsam.name = 'SOME.VSAM.NAME'; + let result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + // empty(str) stgClass + cfgYaml.zowe.setup.vsam.storageClass = ''; + cfgYaml.zowe.setup.vsam.name = 'SOME.VSAM.NAME'; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(157); + + // checking null / empty same same logic as NONRLS + + // null(empty) both + cfgYaml.zowe.setup.vsam.storageClass = null; + cfgYaml.zowe.setup.vsam.name = null; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + // empty(str) both + cfgYaml.zowe.setup.vsam.storageClass = ''; + cfgYaml.zowe.setup.vsam.name = ''; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(157); + + // valid NONRLS config (invalid for RLS) + cfgYaml.zowe.setup.vsam.volume = 'SOMEVOL'; + cfgYaml.zowe.setup.vsam.storageClass = ''; + cfgYaml.zowe.setup.vsam.name = 'SOME.VSAM.NAME'; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(157); + }); + + it('valid RLS configuration', async () => { + cfgYaml.zowe.setup.vsam.mode = 'RLS'; + cfgYaml.zowe.setup.vsam.storageClass = 'STG001'; + cfgYaml.zowe.setup.vsam.name = 'SOME.VSAM.NAME'; const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(0); }); - }); - describe('(LONG)', () => { - it('creates vsam', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init vsam'); - cleanupDatasets.push({ name: cfgYaml.zowe.setup.vsam.name as string, type: FileType.DS_VSAM }); + it('unset vsam mode', async () => { + cfgYaml.zowe.setup.vsam.mode = null; + let result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(143); + + // @ts-expect-error forced schema error + cfgYaml.zowe.setup.vsam.mode = ''; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(143); + }); + + it('simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(0); diff --git a/tests/zwe-remote-integration/src/config/TestConfig.ts b/tests/zwe-remote-integration/src/config/TestConfig.ts index 7d7e1c1ef1..516f469bcc 100644 --- a/tests/zwe-remote-integration/src/config/TestConfig.ts +++ b/tests/zwe-remote-integration/src/config/TestConfig.ts @@ -35,6 +35,7 @@ const configFields: ConfigItem[] = [ new ConfigItem('zosmf_port', true), new ConfigItem('remote_test_dir', true), new ConfigItem('test_ds_hlq', true), + new ConfigItem('test_stgclass', true), new ConfigItem('test_volume', true), new ConfigItem('zosmf_reject_unauthorized', false, false), new ConfigItem('download_configmgr', false, true), @@ -85,6 +86,7 @@ export const REMOTE_SYSTEM_INFO = { ussTestDir: configData.remote_test_dir, hostname: configData.zos_host, zosmfPort: configData.zosmf_port, + stgclass: configData.test_stgclass, }; export const REMOTE_CONNECTION_CFG = { @@ -115,6 +117,7 @@ type TestConfigData = { jfrog_user: string; jfrog_token: string; collect_test_spool: string; + test_stgclass: string; zowe_yaml_overrides: Partial; }; diff --git a/tests/zwe-remote-integration/src/globalSetup.ts b/tests/zwe-remote-integration/src/globalSetup.ts index a6a9fd1bbb..b1186e288a 100644 --- a/tests/zwe-remote-integration/src/globalSetup.ts +++ b/tests/zwe-remote-integration/src/globalSetup.ts @@ -34,6 +34,7 @@ import ZoweYamlType from './config/ZoweYamlType'; import { JfrogClient } from 'jfrog-client-js'; import { processManifestVersion } from './utils'; import { execSync } from 'child_process'; +import { createPds } from './zos/Files'; const zosmfSession = getSession(); @@ -58,11 +59,11 @@ function setupBaseYaml() { // const finalYaml = _.merge({}, zoweYaml, ZOWE_YAML_OVERRIDES); - fs.writeFileSync(THIS_TEST_BASE_ZOWE_YAML, yaml.stringify(finalYaml)); + fs.writeFileSync(THIS_TEST_BASE_ZOWE_YAML, yaml.stringify(finalYaml, { nullStr: '' })); console.log(`Using files/defaults.yaml as base for future defaults.yaml modifications...`); const defaultsYaml: ZoweYamlType = yaml.parse(fs.readFileSync(`${REPO_ROOT_DIR}/files/defaults.yaml`, 'utf8')) as ZoweYamlType; - fs.writeFileSync(THIS_TEST_BASE_DEFAULTS_YAML, yaml.stringify(defaultsYaml)); + fs.writeFileSync(THIS_TEST_BASE_DEFAULTS_YAML, yaml.stringify(defaultsYaml, { nullStr: '' })); } const jf = new JfrogClient({ @@ -315,35 +316,3 @@ module.exports = async () => { console.log('Remote server setup complete'); } }; - -async function createPds(pdsName: string, createOpts: Partial) { - const defaultPdsOpts: files.ICreateDataSetOptions = { - lrecl: 80, - recfm: 'FB', - blksize: 32720, - alcunit: 'cyl', - primary: 10, - secondary: 2, - dsorg: 'PO', - dsntype: 'library', - volser: REMOTE_SYSTEM_INFO.volume, - }; - const mergedOpts: Partial = _.merge({}, defaultPdsOpts, createOpts); - console.log(`Creating ${pdsName}`); - await createDataset(pdsName, files.CreateDataSetTypeEnum.DATA_SET_PARTITIONED, mergedOpts); -} - -async function createDataset(dsName: string, type: files.CreateDataSetTypeEnum, createOpts: Partial) { - console.log(`Checking if ${dsName} exists...`); - const listPdsResp = await files.List.dataSet(zosmfSession, dsName, { - pattern: dsName, - }); - console.log(JSON.stringify(listPdsResp)); - const respItems: { [key: string]: string }[] = listPdsResp.apiResponse?.items; - if (respItems != null && respItems.find((item) => item.dsname === dsName) != null) { - console.log(`Pds exists, cleaning up...`); - await files.Delete.dataSet(zosmfSession, dsName, {}); - } - console.log(`Creating ${dsName}`); - await files.Create.dataSet(zosmfSession, type, dsName, createOpts); -} diff --git a/tests/zwe-remote-integration/src/zos/Files.ts b/tests/zwe-remote-integration/src/zos/Files.ts new file mode 100644 index 0000000000..b2600d7592 --- /dev/null +++ b/tests/zwe-remote-integration/src/zos/Files.ts @@ -0,0 +1,50 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { REMOTE_SYSTEM_INFO } from '../config/TestConfig'; +import * as files from '@zowe/zos-files-for-zowe-sdk'; +import { getSession } from './ZosmfSession'; +import _ from 'lodash'; + +export async function createPds(pdsName: string, createOpts: Partial) { + const defaultPdsOpts: files.ICreateDataSetOptions = { + lrecl: 80, + recfm: 'FB', + blksize: 32720, + alcunit: 'cyl', + primary: 10, + secondary: 2, + dsorg: 'PO', + dsntype: 'library', + volser: REMOTE_SYSTEM_INFO.volume, + }; + const mergedOpts: Partial = _.merge({}, defaultPdsOpts, createOpts); + console.log(`Creating ${pdsName}`); + await createDataset(pdsName, files.CreateDataSetTypeEnum.DATA_SET_PARTITIONED, mergedOpts); +} + +export async function createDataset( + dsName: string, + type: files.CreateDataSetTypeEnum, + createOpts: Partial, +) { + console.log(`Checking if ${dsName} exists...`); + const listPdsResp = await files.List.dataSet(getSession(), dsName, { + pattern: dsName, + }); + console.log(JSON.stringify(listPdsResp)); + const respItems: { [key: string]: string }[] = listPdsResp.apiResponse?.items; + if (respItems?.find((item) => item.dsname === dsName) != null) { + console.log(`Pds exists, cleaning up...`); + await files.Delete.dataSet(getSession(), dsName, {}); + } + console.log(`Creating ${dsName}`); + await files.Create.dataSet(getSession(), type, dsName, createOpts); +} diff --git a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts index 5e931c34b9..53412026a5 100644 --- a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts +++ b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts @@ -140,7 +140,7 @@ export class RemoteTestRunner { public async runZweTestWithDefaults(zoweYaml: ZoweYamlType, defaultYaml: ZoweYamlType, cwd: string = REMOTE_SYSTEM_INFO.ussTestDir) { const testName = expect.getState().currentTestName.replace(/\s/g, '_').substring(0, 40); - const stringDefaultYaml = YAML.stringify(defaultYaml); + const stringDefaultYaml = YAML.stringify(defaultYaml, { nullStr: '' }); const yamlOutputDir = this.yamlOutputTemplate.replace('{{ testInstance }}', testName); await this.removeFileForTest('files/defaults.yaml'); fs.writeFileSync(`${yamlOutputDir}/defaults.yaml.${testName}`, stringDefaultYaml); @@ -171,7 +171,7 @@ export class RemoteTestRunner { command = command.replace(/zwe/, ''); } const testName = expect.getState().currentTestName.replace(/\s/g, '_').substring(0, 40); - const stringZoweYaml = YAML.stringify(zoweYaml); + const stringZoweYaml = YAML.stringify(zoweYaml, { nullStr: '' }); const yamlOutputDir = this.yamlOutputTemplate.replace('{{ testInstance }}', testName); fs.mkdirpSync(yamlOutputDir); From 58c93eb7650056858166d1e929d3a57a3ac7a202 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 12 Jul 2024 16:20:45 -0400 Subject: [PATCH 14/21] checkpoint: performance, stc tests, vsam tests, apf tests, runner improvements Signed-off-by: MarkAckert --- .../zwe-remote-integration/package-lock.json | 108 +++++ tests/zwe-remote-integration/package.json | 8 +- .../resources/test_config.yml | 2 + .../init/__snapshots__/apfauth.test.ts.snap | 321 +++++++++----- .../init/__snapshots__/canary.test.ts.snap | 15 +- .../init/__snapshots__/stc.test.ts.snap | 156 +++++++ .../init/__snapshots__/vsam.test.ts.snap | 401 +++++++++++++++++- .../src/__tests__/init/apfauth.test.ts | 62 ++- .../src/__tests__/init/canary.test.ts | 4 + .../src/__tests__/init/certificate.test.ts | 33 +- .../src/__tests__/init/generate.test.ts | 14 +- .../src/__tests__/init/stc.test.ts | 234 ++++++++++ .../src/__tests__/init/vsam.test.ts | 30 +- .../src/config/TestConfig.ts | 20 +- .../src/config/ZoweYamlType.ts | 35 +- .../zwe-remote-integration/src/globalSetup.ts | 11 + tests/zwe-remote-integration/src/zos/Files.ts | 18 +- .../src/zos/RemoteTestRunner.ts | 27 +- .../init/stc.tests.ts => zos/SshResponse.ts} | 8 +- tests/zwe-remote-integration/src/zos/Uss.ts | 5 +- .../src/zos/UssSession.ts | 74 ++++ 21 files changed, 1387 insertions(+), 199 deletions(-) create mode 100644 tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap create mode 100644 tests/zwe-remote-integration/src/__tests__/init/stc.test.ts rename tests/zwe-remote-integration/src/{__tests__/init/stc.tests.ts => zos/SshResponse.ts} (73%) create mode 100644 tests/zwe-remote-integration/src/zos/UssSession.ts diff --git a/tests/zwe-remote-integration/package-lock.json b/tests/zwe-remote-integration/package-lock.json index 498a45332f..50039e9e89 100644 --- a/tests/zwe-remote-integration/package-lock.json +++ b/tests/zwe-remote-integration/package-lock.json @@ -16,6 +16,7 @@ "@types/jest": "^29.5.12", "@types/lodash": "^4.17.3", "@types/node": "20.12.7", + "@types/node-ssh": "^7.0.6", "@types/semver": "^7.5.8", "@types/xml2js": "0.4.14", "@types/yaml": "^1.9.7", @@ -40,6 +41,7 @@ "json-schema-to-ts": "^3.1.0", "lodash": "^4.17.21", "node-jq": "^4.3.1", + "node-ssh": "^13.2.0", "prettier": "3.2.5", "semver": "^7.6.2", "ts-jest": "29.1.2", @@ -2062,12 +2064,50 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/node-ssh": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/node-ssh/-/node-ssh-7.0.6.tgz", + "integrity": "sha512-XHyzfQ8/PW1C6VEW1f5tZntd6rFyppxXClDtxLvG311vWq46oQWa5ztCOPGNC0KIJekE8G6fd6NqmwIct63XmA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/ssh2": "*", + "@types/ssh2-streams": "*" + } + }, "node_modules/@types/semver": { "version": "7.5.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, + "node_modules/@types/ssh2": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.0.tgz", + "integrity": "sha512-YcT8jP5F8NzWeevWvcyrrLB3zcneVjzYY9ZDSMAMboI+2zR1qYWFhwsyOFVzT7Jorn67vqxC0FRiw8YyG9P1ww==", + "dev": true, + "dependencies": { + "@types/node": "^18.11.18" + } + }, + "node_modules/@types/ssh2-streams": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz", + "integrity": "sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ssh2/node_modules/@types/node": { + "version": "18.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", + "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", @@ -7470,6 +7510,47 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, + "node_modules/node-ssh": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/node-ssh/-/node-ssh-13.2.0.tgz", + "integrity": "sha512-7vsKR2Bbs66th6IWCy/7SN4MSwlVt+G6QrHB631BjRUM8/LmvDugtYhi0uAmgvHS/+PVurfNBOmELf30rm0MZg==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "make-dir": "^3.1.0", + "sb-promise-queue": "^2.1.0", + "sb-scandir": "^3.1.0", + "shell-escape": "^0.2.0", + "ssh2": "^1.14.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-ssh/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/node-ssh/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/nopt": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", @@ -8834,6 +8915,27 @@ "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", "dev": true }, + "node_modules/sb-promise-queue": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sb-promise-queue/-/sb-promise-queue-2.1.0.tgz", + "integrity": "sha512-zwq4YuP1FQFkGx2Q7GIkZYZ6PqWpV+bg0nIO1sJhWOyGyhqbj0MsTvK6lCFo5TQwX5pZr6SCQ75e8PCDCuNvkg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sb-scandir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sb-scandir/-/sb-scandir-3.1.0.tgz", + "integrity": "sha512-70BVm2xz9jn94zSQdpvYrEG101/UV9TVGcfWr9T5iob3QhCK4lYXeculfBqPGFv3XTeKgx4dpWyYIDeZUqo4kg==", + "dev": true, + "dependencies": { + "sb-promise-queue": "^2.1.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", @@ -8887,6 +8989,12 @@ "node": ">=8" } }, + "node_modules/shell-escape": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz", + "integrity": "sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==", + "dev": true + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", diff --git a/tests/zwe-remote-integration/package.json b/tests/zwe-remote-integration/package.json index 7d5d746cd7..58c94fbba9 100644 --- a/tests/zwe-remote-integration/package.json +++ b/tests/zwe-remote-integration/package.json @@ -12,6 +12,7 @@ "@types/jest": "^29.5.12", "@types/lodash": "^4.17.3", "@types/node": "20.12.7", + "@types/node-ssh": "^7.0.6", "@types/semver": "^7.5.8", "@types/xml2js": "0.4.14", "@types/yaml": "^1.9.7", @@ -33,7 +34,10 @@ "jest": "29.7.0", "jest-junit": "16.0.0", "jfrog-client-js": "^2.8.0", + "json-schema-to-ts": "^3.1.0", "lodash": "^4.17.21", + "node-jq": "^4.3.1", + "node-ssh": "^13.2.0", "prettier": "3.2.5", "semver": "^7.6.2", "ts-jest": "29.1.2", @@ -41,9 +45,7 @@ "typescript": "5.4.5", "xml2js": "0.6.2", "yaml": "^2.4.2", - "yn": "4.0.0", - "json-schema-to-ts": "^3.1.0", - "node-jq": "^4.3.1" + "yn": "4.0.0" }, "scripts": { "build": "tsc", diff --git a/tests/zwe-remote-integration/resources/test_config.yml b/tests/zwe-remote-integration/resources/test_config.yml index 172fa81ff9..7499745bbc 100644 --- a/tests/zwe-remote-integration/resources/test_config.yml +++ b/tests/zwe-remote-integration/resources/test_config.yml @@ -39,6 +39,8 @@ remote_teardown: true test_ds_hlq: # All test suite and test case datasets use the volume specified below test_volume: +# Storclas is used when tests require an SMS managed DS. If missing, SMS tests will be skipped. +test_storclas: zosmf_reject_unauthorized: # Download configmgr and zowe-install-packaging-tools using the manifest.json in this repo. ## If set to false, you can use a custom build of either artifact by placing them in the .build/ dir diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap index 45e007b566..88bdffe0af 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap @@ -32,15 +32,56 @@ Validity Exceptions(s) with object at `; exports[`init-apfauth (SHORT) apf bad authLoadLib 1`] = ` -" -$ Temporary directory '/tmp/.zweenv-0000' created. +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x103d chunk=0x1000 extend=0x103d +------------------------------------------------------------------------------- +>> APF authorize load libraries + +ERROR: * Exit code: 8 +ERROR: * Output: +ERROR: listds 'DOES.NOT.EXIST' label + DOES.NOT.EXIST + IKJ58503I DATA SET 'DOES.NOT.EXIST' NOT IN CATALOG +ERROR: Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authLoadlib' does not exist." +`; + +exports[`init-apfauth (SHORT) apf bad authPluginLib 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x103e chunk=0x1000 extend=0x103e ------------------------------------------------------------------------------- >> APF authorize load libraries -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB +ERROR: * Exit code: 8 +ERROR: * Output: +ERROR: listds 'DOES.NOT.EXIST' label + DOES.NOT.EXIST + IKJ58503I DATA SET 'DOES.NOT.EXIST' NOT IN CATALOG +ERROR: Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authPluginLib' does not exist." +`; + +exports[`init-apfauth (SHORT) apf empty jcllib post-generate 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/jcllib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/jcllib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/jcllib" +`; + +exports[`init-apfauth (SHORT) apf simple --dry-run 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1047 chunk=0x1000 extend=0x1047 +------------------------------------------------------------------------------- +>> APF authorize load libraries + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIAPF2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIAPF2) +--- JCL Content --- +//ZWEIAPF2 JOB //* //* This program and the accompanying materials are made available //* under the terms of the Eclipse Public License v2.0 which @@ -53,132 +94,204 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) //* //********************************************************************* //* -//* This job is responsible for generating other jobs required -//* to configure Zowe. +//* This JCL is used to set APF for the two datasets of Zowe +//* Which need it. You can issue this, or use another +//* Way to accomplish the task. //* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. +//* The following variables are derived from the zowe YAML config: +//* LOADLIB: the dataset that holds the APF portion of Zowe +//* PLUGLIB: The dataset that holds the extensions for ZIS. //* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using +//********************************************************************* //* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. +//APFAUTH EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd bin/utils && +export LOADLIB='TEST.DATASET.PFX.SZWELOAD' && +export LOADLOC="VOLUME=TSTVOL" && +export PLUGLIB='TEST.DATASET.PFX.ZWESAPL' && +export PLUGLOC="VOLUME=TSTVOL" && +./opercmd.rex "SETPROG APF,ADD,DSN=$LOADLIB,$LOADLOC" && +./opercmd.rex "SETPROG APF,ADD,DSN=$PLUGLIB,$PLUGLOC" //* -//* {key} -> value +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe load libraries are APF authorized successfully." +`; + +exports[`init-apfauth (SHORT) apf sms-managed authLoadLib 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x104a chunk=0x1000 extend=0x104a +------------------------------------------------------------------------------- +>> APF authorize load libraries + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIAPF2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIAPF2) +--- JCL Content --- +//ZWEIAPF2 JOB //* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html //* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml +//* SPDX-License-Identifier: EPL-2.0 //* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* Copyright Contributors to the Zowe Project. 2020, 2020 //* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml +//********************************************************************* //* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* This JCL is used to set APF for the two datasets of Zowe +//* Which need it. You can issue this, or use another +//* Way to accomplish the task. //* -//* The order must be as follows. +//* The following variables are derived from the zowe YAML config: +//* LOADLIB: the dataset that holds the APF portion of Zowe +//* PLUGLIB: The dataset that holds the extensions for ZIS. //* -//* zowe-yaml-schema.json -//* server-common.json +//********************************************************************* //* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml +//APFAUTH EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd bin/utils && +export LOADLIB='TEST.DATASET.PFX.SZWELOAD' && +export LOADLOC=SMS && +export PLUGLIB='TEST.DATASET.PFX.ZWESAPL' && +export PLUGLOC="VOLUME=TSTVOL" && +./opercmd.rex "SETPROG APF,ADD,DSN=$LOADLIB,$LOADLOC" && +./opercmd.rex "SETPROG APF,ADD,DSN=$PLUGLIB,$PLUGLOC" //* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe load libraries are APF authorized successfully." +`; + +exports[`init-apfauth (SHORT) apf sms-managed authLoadLib and authPluginLib 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e +------------------------------------------------------------------------------- +>> APF authorize load libraries + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIAPF2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIAPF2) +--- JCL Content --- +//ZWEIAPF2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html //* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" +//* SPDX-License-Identifier: EPL-2.0 //* -//* Do not remove the defaults.yaml entry. +//* Copyright Contributors to the Zowe Project. 2020, 2020 //* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* +//********************************************************************* //* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. +//* This JCL is used to set APF for the two datasets of Zowe +//* Which need it. You can issue this, or use another +//* Way to accomplish the task. //* -//* - generate -//* - nogenerate +//* The following variables are derived from the zowe YAML config: +//* LOADLIB: the dataset that holds the APF portion of Zowe +//* PLUGLIB: The dataset that holds the extensions for ZIS. //* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. +//********************************************************************* //* -//* - verbose -//* - noverbose +//APFAUTH EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd bin/utils && +export LOADLIB='TEST.DATASET.PFX.SZWELOAD' && +export LOADLOC=SMS && +export PLUGLIB='TEST.DATASET.PFX.ZWESAPL' && +export PLUGLOC=SMS && +./opercmd.rex "SETPROG APF,ADD,DSN=$LOADLIB,$LOADLOC" && +./opercmd.rex "SETPROG APF,ADD,DSN=$PLUGLIB,$PLUGLOC" //* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - --- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully -ERROR: * Exit code: 8 -ERROR: * Output: -ERROR: listds 'DOES.NOT.EXIST' label - DOES.NOT.EXIST - IKJ58503I DATA SET 'DOES.NOT.EXIST' NOT IN CATALOG -ERROR: Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authLoadlib' does not exist." +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe load libraries are APF authorized successfully." `; -exports[`init-apfauth (SHORT) apf bad authPluginLib 1`] = ` -" -$ Temporary directory '/tmp/.zweenv-0000' created. +exports[`init-apfauth (SHORT) apf sms-managed authPluginLib 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x104b chunk=0x1000 extend=0x104b ------------------------------------------------------------------------------- >> APF authorize load libraries -ERROR: * Exit code: 8 -ERROR: * Output: -ERROR: listds 'DOES.NOT.EXIST' label - DOES.NOT.EXIST - IKJ58503I DATA SET 'DOES.NOT.EXIST' NOT IN CATALOG -ERROR: Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authPluginLib' does not exist." -`; +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIAPF2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIAPF2) +--- JCL Content --- +//ZWEIAPF2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This JCL is used to set APF for the two datasets of Zowe +//* Which need it. You can issue this, or use another +//* Way to accomplish the task. +//* +//* The following variables are derived from the zowe YAML config: +//* LOADLIB: the dataset that holds the APF portion of Zowe +//* PLUGLIB: The dataset that holds the extensions for ZIS. +//* +//********************************************************************* +//* +//APFAUTH EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd bin/utils && +export LOADLIB='TEST.DATASET.PFX.SZWELOAD' && +export LOADLOC="VOLUME=TSTVOL" && +export PLUGLIB='TEST.DATASET.PFX.ZWESAPL' && +export PLUGLOC=SMS && +./opercmd.rex "SETPROG APF,ADD,DSN=$LOADLIB,$LOADLOC" && +./opercmd.rex "SETPROG APF,ADD,DSN=$PLUGLIB,$PLUGLOC" +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly -exports[`init-apfauth (SHORT) apf empty jcllib post-generate 1`] = ` -" -$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data -Validity Exceptions(s) with object at - Validity Exceptions(s) with object at /zowe - Validity Exceptions(s) with object at /zowe/setup - Validity Exceptions(s) with object at /zowe/setup/dataset - Validity Exceptions(s) with string at /zowe/setup/dataset/jcllib - string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/jcllib - string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/jcllib" +>> Command run successfully. + + +>> Zowe load libraries are APF authorized successfully." `; diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap index 04d96e7069..01f46cbfba 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/canary.test.ts.snap @@ -1,13 +1,9 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`canary run echo 1`] = ` -" -$ hi" -`; +exports[`canary run echo 1`] = `"hi"`; exports[`canary run zwe help 1`] = ` -" -$ zwe +"zwe ------------------ Synopsis @@ -23,18 +19,25 @@ Description Global parameters --help|-h (optional) Display this help. + --debug|--verbose|-v (optional) Enable verbose mode. + --trace|-vv (optional) Enable trace level debug mode. + --silent|-s (optional) Do not display messages to standard output. + --log-dir|--log|-l string (optional) Write logs to this directory. + --config|-c string (optional) Path to Zowe configuration zowe.yaml file. + --configmgr (optional) Enable use of configmgr capabilities. + ------------------ Available sub-command(s) - certificate diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap new file mode 100644 index 0000000000..8fc4d93579 --- /dev/null +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap @@ -0,0 +1,156 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`init-stc (LONG) run setup with defaults abc 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /some/other/zowe.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=2 +Zowe JCL generated with errors, check job log. Job completion code=8, Job completion text=COMPLETED +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEISTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEISTC) +--- JCL Content --- +//ZWEISTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to add proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//MCOPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.JCLLIB,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.TEST.PROCLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESLSTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESISTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESASTC,,R)) +//* +--- End of JCL --- +Submitting Job ZWEISTC +ERROR: Error ZWEL0162E: Failed to find job JOB00000 result." +`; diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index c2171bf573..8c83f914bd 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -185,9 +185,76 @@ Job ZWECSVSM(JOB00000) completed with RC=0 " `; -exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 1`] = ` -" -$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +exports[`init-vsam (SHORT) invalid NONRLS configurations 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/vsam + type 'null' not permitted at /zowe/setup/vsam/volume; expecting type 'string'" +`; + +exports[`init-vsam (SHORT) invalid NONRLS configurations 2`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x103b chunk=0x1000 extend=0x103b +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined in Zowe YAML configuration file." +`; + +exports[`init-vsam (SHORT) invalid NONRLS configurations 3`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1036 chunk=0x1000 extend=0x1036 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.name) is not defined in Zowe YAML configuration file." +`; + +exports[`init-vsam (SHORT) invalid NONRLS configurations 4`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1034 chunk=0x1000 extend=0x1034 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.name) is not defined in Zowe YAML configuration file." +`; + +exports[`init-vsam (SHORT) invalid NONRLS configurations 5`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/vsam + type 'null' not permitted at /zowe/setup/vsam/volume; expecting type 'string'" +`; + +exports[`init-vsam (SHORT) invalid NONRLS configurations 6`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x102d chunk=0x1000 extend=0x102d +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined in Zowe YAML configuration file." +`; + +exports[`init-vsam (SHORT) invalid NONRLS configurations 7`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x103f chunk=0x1000 extend=0x103f +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined in Zowe YAML configuration file." +`; + +exports[`init-vsam (SHORT) invalid RLS configurations 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data Validity Exceptions(s) with object at Validity Exceptions(s) with object at /zowe Validity Exceptions(s) with object at /zowe/setup @@ -195,19 +262,18 @@ Validity Exceptions(s) with object at type 'null' not permitted at /zowe/setup/vsam/storageClass; expecting type 'string'" `; -exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 2`] = ` -" -$ Temporary directory '/tmp/.zweenv-0000' created. +exports[`init-vsam (SHORT) invalid RLS configurations 2`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x103e chunk=0x1000 extend=0x103e ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not defined in Zowe YAML configuration file." `; -exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 3`] = ` -" -$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +exports[`init-vsam (SHORT) invalid RLS configurations 3`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data Validity Exceptions(s) with object at Validity Exceptions(s) with object at /zowe Validity Exceptions(s) with object at /zowe/setup @@ -215,22 +281,327 @@ Validity Exceptions(s) with object at type 'null' not permitted at /zowe/setup/vsam/storageClass; expecting type 'string'" `; -exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 4`] = ` -" -$ Temporary directory '/tmp/.zweenv-0000' created. +exports[`init-vsam (SHORT) invalid RLS configurations 4`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1030 chunk=0x1000 extend=0x1030 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not defined in Zowe YAML configuration file." `; -exports[`init-vsam (SHORT) invalid NONRLS configurationsabc 5`] = ` -" -$ Temporary directory '/tmp/.zweenv-0000' created. +exports[`init-vsam (SHORT) invalid RLS configurations 5`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x103f chunk=0x1000 extend=0x103f ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not defined in Zowe YAML configuration file." `; + +exports[`init-vsam (SHORT) simple --dry-run 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x104b chunk=0x1000 extend=0x104b +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(TEST.DATASET.PFX.VSAM) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(TSTVOL) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe Caching Service VSAM storage is created successfully." +`; + +exports[`init-vsam (SHORT) skip non-vsam caching service 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1051 chunk=0x1000 extend=0x1051 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Warning ZWEL0301W: Zowe Caching Service is not configured to use VSAM. Command skipped." +`; + +exports[`init-vsam (SHORT) skip undefined caching service 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + type 'null' not permitted at /components; expecting type 'object'" +`; + +exports[`init-vsam (SHORT) unset ds prefix 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/prefix; expecting type 'string'" +`; + +exports[`init-vsam (SHORT) unset ds prefix 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/prefix + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/prefix + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/prefix" +`; + +exports[`init-vsam (SHORT) unset jcllib 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/prefix; expecting type 'string'" +`; + +exports[`init-vsam (SHORT) unset jcllib 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/prefix + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/prefix + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/prefix" +`; + +exports[`init-vsam (SHORT) unset vsam mode 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/vsam + no matching enum value at /zowe/setup/vsam/mode; expecting one of values '[NONRLS, RLS]' of type 'string'" +`; + +exports[`init-vsam (SHORT) unset vsam mode 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/vsam + no matching enum value at /zowe/setup/vsam/mode; expecting one of values '[NONRLS, RLS]' of type 'string'" +`; + +exports[`init-vsam (SHORT) valid NONRLS configurations 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1041 chunk=0x1000 extend=0x1041 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(TEST.DATASET.PFX.VSAM) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(TSTVOL) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe Caching Service VSAM storage is created successfully." +`; + +exports[`init-vsam (SHORT) valid RLS configuration 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1044 chunk=0x1000 extend=0x1044 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(TEST.DATASET.PFX.VSAM) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(TSTVOL) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe Caching Service VSAM storage is created successfully." +`; diff --git a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts index 4f6e083778..d50789a2a1 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts @@ -10,6 +10,7 @@ import { REMOTE_SYSTEM_INFO } from '../../config/TestConfig'; import ZoweYamlType from '../../config/ZoweYamlType'; +import * as zosfiles from '../../zos/Files'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweConfig } from '../../config/ZoweConfig'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; @@ -34,6 +35,10 @@ describe(`${testSuiteName}`, () => { cleanupDatasets = []; }); + afterAll(() => { + testRunner.shutdown(); + }); + describe('(LONG)', () => { beforeEach(async () => { // re-created in every `init` subcommand based on changes to zowe yaml command... @@ -79,15 +84,54 @@ describe(`${testSuiteName}`, () => { expect(result.rc).toBe(1); }); - /* - // not working, not covered - it('apf sms-managed authLoadLib', async () => { - cfgYaml.zowe.setup.dataset.authLoadlib = smsDataset; - const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); - });*/ + if (REMOTE_SYSTEM_INFO?.storclas.length > 0) { + it('apf sms-managed authLoadLib', async () => { + const smsDs = `${REMOTE_SYSTEM_INFO.prefix}.APF.LOADLIB`; + await zosfiles.createPds(smsDs, { + storclass: REMOTE_SYSTEM_INFO.storclas, + }); + cleanupDatasets.push({ name: smsDs, type: FileType.DS_NON_CLUSTER }); + cfgYaml.zowe.setup.dataset.authLoadlib = smsDs; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + it('apf sms-managed authPluginLib', async () => { + const smsDs = `${REMOTE_SYSTEM_INFO.prefix}.APF.PLUGLIB`; + await zosfiles.createPds(smsDs, { + storclass: REMOTE_SYSTEM_INFO.storclas, + }); + cleanupDatasets.push({ name: smsDs, type: FileType.DS_NON_CLUSTER }); + cfgYaml.zowe.setup.dataset.authPluginLib = smsDs; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + it('apf sms-managed authLoadLib and authPluginLib', async () => { + const loadSmsDs = `${REMOTE_SYSTEM_INFO.prefix}.APF.LOADLIB`; + const plugSmsDs = `${REMOTE_SYSTEM_INFO.prefix}.APF.PLUGLIB`; + await zosfiles.createPds(loadSmsDs, { + storclass: REMOTE_SYSTEM_INFO.storclas, + }); + await zosfiles.createPds(plugSmsDs, { + storclass: REMOTE_SYSTEM_INFO.storclas, + }); + cleanupDatasets.push({ name: loadSmsDs, type: FileType.DS_NON_CLUSTER }); + cleanupDatasets.push({ name: plugSmsDs, type: FileType.DS_NON_CLUSTER }); + cfgYaml.zowe.setup.dataset.authLoadlib = loadSmsDs; + cfgYaml.zowe.setup.dataset.authPluginLib = plugSmsDs; + const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + } else { + it.skip('apf sms-managed authLoadLib'); + it.skip('apf sms-managed authPluginLib'); + it.skip('apf sms-managed authLoadLib and authPluginLib'); + } it('apf bad authLoadLib', async () => { cfgYaml.zowe.setup.dataset.authLoadlib = 'DOES.NOT.EXIST'; diff --git a/tests/zwe-remote-integration/src/__tests__/init/canary.test.ts b/tests/zwe-remote-integration/src/__tests__/init/canary.test.ts index 20269474af..96896c7ba5 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/canary.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/canary.test.ts @@ -21,6 +21,10 @@ describe(testSuiteName, () => { testRunner = new RemoteTestRunner('canary'); }); + afterAll(() => { + testRunner.shutdown(); + }); + it('run echo', async () => { const cfgYaml = ZoweConfig.getZoweYaml(); cfgYaml.java.home = '/ZOWE/node/J21.0_64/'; diff --git a/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts index 60201841e7..32aefbb456 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts @@ -18,7 +18,7 @@ const testSuiteName = 'init-cert'; describe(`${testSuiteName}`, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; - const cleanupFiles: TestFile[] = []; // a list of datasets deleted after every test + let cleanupFiles: TestFile[] = []; // a list of datasets deleted after every test beforeAll(() => { testRunner = new RemoteTestRunner(testSuiteName); @@ -29,8 +29,12 @@ describe(`${testSuiteName}`, () => { afterEach(async () => { await testRunner.postTest(); - await TestFileActions.deleteAll(cleanupDatasets); - cleanupDatasets = []; + await TestFileActions.deleteAll(cleanupFiles); + cleanupFiles = []; + }); + + afterAll(() => { + testRunner.shutdown(); }); describe('(SHORT)', () => { @@ -44,29 +48,6 @@ describe(`${testSuiteName}`, () => { expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(231); // 231 is expected error code...? }); - - /* - it('cert bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD3.ZWETEST.NOEXIST'; - const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(231); - }); - - it('cert simple --dry-run', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... - }); - - /* it('apf security-dry-run', async () => { - const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --security-dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... }); - });*/ }); describe('(LONG)', () => { diff --git a/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts index 320da91091..8b4c59c621 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts @@ -40,6 +40,10 @@ describe(`${testSuiteName}`, () => { cleanupDatasets = []; }); + afterAll(() => { + testRunner.shutdown(); + }); + describe('(SHORT)', () => { it('disable cfgmgr', async () => { cfgYaml.zowe.useConfigmgr = false; @@ -91,5 +95,13 @@ describe(`${testSuiteName}`, () => { }); }); - describe('(LONG)', () => {}); + describe('(LONG)', () => { + it('missing proclib with valid stcs abc', async () => { + cfgYaml.zowe.setup.dataset.proclib = `${REMOTE_SYSTEM_INFO.prefix}.NOEXIST.PROC`; + const result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + }); }); diff --git a/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts new file mode 100644 index 0000000000..d0fe530884 --- /dev/null +++ b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts @@ -0,0 +1,234 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { REMOTE_SYSTEM_INFO } from '../../config/TestConfig'; +import ZoweYamlType from '../../config/ZoweYamlType'; +import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; +import * as zosfiles from '../../zos/Files'; +import { ZoweConfig } from '../../config/ZoweConfig'; +import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; + +const testSuiteName = 'init-stc'; +describe(`${testSuiteName}`, () => { + let testRunner: RemoteTestRunner; + let cfgYaml: ZoweYamlType; + let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test + + beforeAll(() => { + testRunner = new RemoteTestRunner(testSuiteName); + cfgYaml = ZoweConfig.getZoweYaml(); + }); + beforeEach(() => { + cfgYaml = ZoweConfig.getZoweYaml(); + // customizations for all vsam tests + cfgYaml.zowe.setup.vsam.name = REMOTE_SYSTEM_INFO.prefix + '.VSAMTEST'; + cfgYaml.zowe.setup.vsam.volume = REMOTE_SYSTEM_INFO.volume; + }); + + afterEach(async () => { + await testRunner.postTest(); + await TestFileActions.deleteAll(cleanupDatasets); + cleanupDatasets = []; + }); + + afterAll(() => { + testRunner.shutdown(); + }); + + describe('(LONG)', () => { + beforeEach(async () => { + // re-created in every `init` subcommand based on changes to zowe yaml command... + const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + // try to delete everything we know about + await TestFileActions.deleteAll([jcllib]); + }); + + it('run setup with defaults abc', async () => { + const proc: string = cfgYaml.zowe.setup.dataset.proclib as string; + const stcs = cfgYaml.zowe.setup.security.stcs; + cleanupDatasets.push({ name: `${proc}(${stcs.zowe})`, type: FileType.DS_NON_CLUSTER }); + cleanupDatasets.push({ name: `${proc}(${stcs.aux})`, type: FileType.DS_NON_CLUSTER }); + cleanupDatasets.push({ name: `${proc}(${stcs.zis})`, type: FileType.DS_NON_CLUSTER }); + const result = await testRunner.runZweTest(cfgYaml, 'init stc'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + + it('run stc setup with overwrite', async () => { + const proc: string = cfgYaml.zowe.setup.dataset.proclib as string; + const stcs = cfgYaml.zowe.setup.security.stcs; + await zosfiles.uploadMember(proc, stcs.zowe as string, 'DUMMY'); + cleanupDatasets.push({ name: `${proc}(${stcs.zowe})`, type: FileType.DS_NON_CLUSTER }); + let result = await testRunner.runZweTest(cfgYaml, 'init stc'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + result = await testRunner.runZweTest(cfgYaml, 'init stc --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + }); + + describe('(SHORT)', () => { + beforeAll(async () => { + await testRunner.runZweTest(cfgYaml, 'init generate'); + }); + + it('wrong ds prefix', async () => { + cfgYaml.zowe.setup.dataset.prefix = null; + let result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.prefix = ''; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + + it('wrong proclib', async () => { + cfgYaml.zowe.setup.dataset.proclib = null; + let result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.proclib = ''; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.proclib = 'INVALID.PROCLIB.DEFINITION1'; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + + it('wrong jcllib', async () => { + cfgYaml.zowe.setup.dataset.jcllib = null; + let result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.jcllib = ''; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + + it('invalid stc configurations', async () => { + cfgYaml.zowe.setup.security.stcs.aux = null; + let result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.security.stcs.aux = ''; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.security.stcs.aux = 'TOOLONGTOO'; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.security.stcs.zis = null; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.security.stcs.zis = ''; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.security.stcs.zowe = null; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.security.stcs.zowe = ''; + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + + it('zos stc exists', async () => { + const proc: string = cfgYaml.zowe.setup.dataset.proclib as string; + const stcs = cfgYaml.zowe.setup.security.stcs; + await zosfiles.uploadMember(proc, stcs.zowe as string, 'DUMMY'); + cleanupDatasets.push({ name: `${proc}(${stcs.zowe})`, type: FileType.DS_NON_CLUSTER }); + let result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + + it('zis stc exists', async () => { + const proc: string = cfgYaml.zowe.setup.dataset.proclib as string; + const stcs = cfgYaml.zowe.setup.security.stcs; + await zosfiles.uploadMember(proc, stcs.zis as string, 'DUMMY'); + cleanupDatasets.push({ name: `${proc}(${stcs.zis})`, type: FileType.DS_NON_CLUSTER }); + let result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + + it('aux stc exists', async () => { + const proc: string = cfgYaml.zowe.setup.dataset.proclib as string; + const stcs = cfgYaml.zowe.setup.security.stcs; + await zosfiles.uploadMember(proc, stcs.aux as string, 'DUMMY'); + cleanupDatasets.push({ name: `${proc}(${stcs.aux})`, type: FileType.DS_NON_CLUSTER }); + let result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + + it('valid config empty proclib', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + }); +}); diff --git a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts index 027fc12ea7..0e75618131 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts @@ -37,6 +37,10 @@ describe(`${testSuiteName}`, () => { cleanupDatasets = []; }); + afterAll(() => { + testRunner.shutdown(); + }); + describe('(LONG)', () => { beforeEach(async () => { // re-created in every `init` subcommand based on changes to zowe yaml command... @@ -78,18 +82,30 @@ describe(`${testSuiteName}`, () => { it('unset ds prefix', async () => { cfgYaml.zowe.setup.dataset.prefix = null; - const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + let result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(143); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.prefix = ''; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); }); it('unset jcllib', async () => { - cfgYaml.zowe.setup.dataset.prefix = null; - const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + cfgYaml.zowe.setup.dataset.jcllib = null; + let result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.jcllib = ''; + result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(143); + expect(result.rc).toBe(1); }); it('invalid NONRLS configurations', async () => { @@ -225,14 +241,14 @@ describe(`${testSuiteName}`, () => { let result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(143); + expect(result.rc).toBe(1); // @ts-expect-error forced schema error cfgYaml.zowe.setup.vsam.mode = ''; result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(143); + expect(result.rc).toBe(1); }); it('simple --dry-run', async () => { diff --git a/tests/zwe-remote-integration/src/config/TestConfig.ts b/tests/zwe-remote-integration/src/config/TestConfig.ts index 516f469bcc..ddee9160bd 100644 --- a/tests/zwe-remote-integration/src/config/TestConfig.ts +++ b/tests/zwe-remote-integration/src/config/TestConfig.ts @@ -37,6 +37,7 @@ const configFields: ConfigItem[] = [ new ConfigItem('test_ds_hlq', true), new ConfigItem('test_stgclass', true), new ConfigItem('test_volume', true), + new ConfigItem('test_storclas', false), new ConfigItem('zosmf_reject_unauthorized', false, false), new ConfigItem('download_configmgr', false, true), new ConfigItem('download_zowe_tools', false, true), @@ -61,7 +62,6 @@ export const LINGERING_REMOTE_FILES_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.bu export const TEST_JOBS_RUN_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'jobs-run.txt'); export const DOWNLOAD_ZOWE_TOOLS = yn(configData.download_zowe_tools, { default: true }); export const DOWNLOAD_CONFIGMGR = yn(configData.download_configmgr, { default: true }); -export const TEST_DATASETS_HLQ = configData.test_ds_hlq || configData.zos_user + '.ZWETESTS'; export const REMOTE_SETUP = yn(configData.remote_setup, { default: true }); export const REMOTE_TEARDOWN = yn(configData.remote_teardown, { default: true }); export const ZOWE_YAML_OVERRIDES = configData.zowe_yaml_overrides; @@ -72,17 +72,20 @@ export const JFROG_CREDENTIALS = { }; const ru = yn(configData.zosmf_reject_unauthorized, { default: false }); +const testPrefix = `${configData.test_ds_hlq}.ZWETEST`; export const REMOTE_SYSTEM_INFO = { zosJavaHome: configData.zos_java_home, zosNodeHome: configData.zos_node_home, volume: configData.test_volume, - prefix: configData.test_ds_hlq, - szweexec: `${configData.test_ds_hlq}.SZWEEXEC`, - szwesamp: `${configData.test_ds_hlq}.SZWESAMP`, - jcllib: `${configData.test_ds_hlq}.JCLLIB`, - szweload: `${configData.test_ds_hlq}.SZWELOAD`, - authLoadLib: `${configData.test_ds_hlq}.SZWELOAD`, - authPluginLib: `${configData.test_ds_hlq}.ZWESAPL`, + storclas: configData.test_storclas, + prefix: testPrefix, + szweexec: `${testPrefix}.SZWEEXEC`, + szwesamp: `${testPrefix}.SZWESAMP`, + jcllib: `${testPrefix}.JCLLIB`, + proclib: `${testPrefix}.TEST.PROCLIB`, + szweload: `${testPrefix}.SZWELOAD`, + authLoadLib: `${testPrefix}.SZWELOAD`, + authPluginLib: `${testPrefix}.ZWESAPL`, ussTestDir: configData.remote_test_dir, hostname: configData.zos_host, zosmfPort: configData.zosmf_port, @@ -109,6 +112,7 @@ type TestConfigData = { remote_test_dir: string; test_ds_hlq: string; test_volume: string; + test_storclas: string; zosmf_reject_unauthorized: string; download_configmgr: string; download_zowe_tools: boolean; diff --git a/tests/zwe-remote-integration/src/config/ZoweYamlType.ts b/tests/zwe-remote-integration/src/config/ZoweYamlType.ts index b054053b75..bec77042bb 100644 --- a/tests/zwe-remote-integration/src/config/ZoweYamlType.ts +++ b/tests/zwe-remote-integration/src/config/ZoweYamlType.ts @@ -1018,10 +1018,22 @@ const zoweSchema = zoweYamlSchema as { }; }; }; - tlsSettings: { - $anchor: 'tlsSettings'; + nativeTlsSettings: { + $anchor: 'nativeTlsSettings'; type: 'object'; + additionalProperties: false; properties: { + attls: { + anyOf: [ + { + type: 'string'; + enum: ['', 'false']; + }, + { + const: false; + }, + ]; + }; ciphers: { type: 'array'; description: 'Acceptable TLS cipher suites for network connections, in IANA format.'; @@ -1050,6 +1062,16 @@ const zoweSchema = zoweYamlSchema as { }; }; }; + attlsSetting: { + type: 'object'; + additionalProperties: false; + properties: { + attls: { + const: true; + description: 'Enables AT-TLS for client or server operations. AT-TLS should only be enabled in a z/OS host environment. Servers will be switched into HTTP mode to accomodate z/OS the specific AT-TLS feature which wraps network calls in TLS.'; + }; + }; + }; networkSettings: { type: 'object'; $anchor: 'networkSettings'; @@ -1058,12 +1080,8 @@ const zoweSchema = zoweYamlSchema as { properties: { server: { type: 'object'; - additionalProperties: false; description: 'Optional, advanced network configuration parameters for Zowe servers'; properties: { - tls: { - $ref: '#/$defs/tlsSettings'; - }; listenAddresses: { type: 'array'; description: 'The IP addresses which all of the Zowe servers will be binding on and listening to. Some servers may only support listening on the first element.'; @@ -1080,6 +1098,9 @@ const zoweSchema = zoweYamlSchema as { default: true; description: 'Whether or not to ensure that the port a server is about to use is available. Usually, servers will know this when they attempt to bind to a port, so this option allows you to disable the additional verification step.'; }; + tls: { + anyOf: [{ $ref: '#/$defs/attlsSetting' }, { $ref: '#/$defs/nativeTlsSettings' }]; + }; }; }; client: { @@ -1088,7 +1109,7 @@ const zoweSchema = zoweYamlSchema as { description: 'Optional, advanced network configuration parameters for Zowe servers when sending requests as clients.'; properties: { tls: { - $ref: '#/$defs/tlsSettings'; + anyOf: [{ $ref: '#/$defs/attlsSetting' }, { $ref: '#/$defs/nativeTlsSettings' }]; }; }; }; diff --git a/tests/zwe-remote-integration/src/globalSetup.ts b/tests/zwe-remote-integration/src/globalSetup.ts index b1186e288a..32fdf60708 100644 --- a/tests/zwe-remote-integration/src/globalSetup.ts +++ b/tests/zwe-remote-integration/src/globalSetup.ts @@ -47,6 +47,7 @@ function setupBaseYaml() { zoweYaml.zowe.runtimeDirectory = REMOTE_SYSTEM_INFO.ussTestDir; zoweYaml.zowe.setup.dataset.prefix = REMOTE_SYSTEM_INFO.prefix; zoweYaml.zowe.setup.dataset.jcllib = REMOTE_SYSTEM_INFO.jcllib; + zoweYaml.zowe.setup.dataset.proclib = REMOTE_SYSTEM_INFO.proclib; zoweYaml.zowe.setup.vsam.name = REMOTE_SYSTEM_INFO.prefix + '.VSAM'; zoweYaml.zowe.setup.vsam.volume = REMOTE_SYSTEM_INFO.volume; zoweYaml.zowe.setup.certificate.pkcs12.directory = REMOTE_SYSTEM_INFO.ussTestDir; @@ -264,28 +265,38 @@ module.exports = async () => { await createPds(REMOTE_SYSTEM_INFO.szweexec, { primary: 5, secondary: 1, + volser: REMOTE_SYSTEM_INFO.volume, }); await createPds(REMOTE_SYSTEM_INFO.szwesamp, { primary: 5, secondary: 1, + volser: REMOTE_SYSTEM_INFO.volume, }); await createPds(REMOTE_SYSTEM_INFO.szweload, { primary: 5, recfm: 'U', lrecl: 0, secondary: 1, + volser: REMOTE_SYSTEM_INFO.volume, + }); + await createPds(REMOTE_SYSTEM_INFO.proclib, { + primary: 5, + secondary: 1, + volser: REMOTE_SYSTEM_INFO.volume, }); await createPds(REMOTE_SYSTEM_INFO.authLoadLib, { primary: 5, recfm: 'U', lrecl: 0, secondary: 1, + volser: REMOTE_SYSTEM_INFO.volume, }); await createPds(REMOTE_SYSTEM_INFO.authPluginLib, { primary: 5, recfm: 'U', lrecl: 0, secondary: 1, + volser: REMOTE_SYSTEM_INFO.volume, }); console.log(`Unpacking configmgr and placing it in bin/utils ...`); diff --git a/tests/zwe-remote-integration/src/zos/Files.ts b/tests/zwe-remote-integration/src/zos/Files.ts index b2600d7592..b2a2577e41 100644 --- a/tests/zwe-remote-integration/src/zos/Files.ts +++ b/tests/zwe-remote-integration/src/zos/Files.ts @@ -8,11 +8,25 @@ * Copyright Contributors to the Zowe Project. */ -import { REMOTE_SYSTEM_INFO } from '../config/TestConfig'; import * as files from '@zowe/zos-files-for-zowe-sdk'; import { getSession } from './ZosmfSession'; import _ from 'lodash'; +export async function uploadMember(pdsName: string, memberName: string, content: string) { + const listPdsResp = await files.List.dataSet(getSession(), pdsName, { + pattern: pdsName, + }); + const respItems: { [key: string]: string }[] = listPdsResp.apiResponse?.items; + if (respItems?.find((item) => item.dsname === pdsName) == null) { + console.log(`Couldn't find dataset to upload member to, aborting...`); + throw new Error(`Uploading member to dataset which doesn't exist`); + } + const uplResp = await files.Upload.bufferToDataSet(getSession(), Buffer.from(content, 'utf-8'), `${pdsName}(${memberName})`); + if (!uplResp.success) { + throw new Error(`Failed to upload content to ${pdsName}(${memberName}), details: ${uplResp.apiResponse}`); + } +} + export async function createPds(pdsName: string, createOpts: Partial) { const defaultPdsOpts: files.ICreateDataSetOptions = { lrecl: 80, @@ -23,7 +37,6 @@ export async function createPds(pdsName: string, createOpts: Partial = _.merge({}, defaultPdsOpts, createOpts); console.log(`Creating ${pdsName}`); @@ -39,7 +52,6 @@ export async function createDataset( const listPdsResp = await files.List.dataSet(getSession(), dsName, { pattern: dsName, }); - console.log(JSON.stringify(listPdsResp)); const respItems: { [key: string]: string }[] = listPdsResp.apiResponse?.items; if (respItems?.find((item) => item.dsname === dsName) != null) { console.log(`Pds exists, cleaning up...`); diff --git a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts index 53412026a5..10d7f2abfd 100644 --- a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts +++ b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts @@ -10,7 +10,7 @@ import { Session } from '@zowe/imperative'; import { getSession } from './ZosmfSession'; -import * as uss from './Uss'; +import { UssSession } from './UssSession'; import ZoweYamlType from '../config/ZoweYamlType'; import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR } from '../config/TestConfig'; import * as files from '@zowe/zos-files-for-zowe-sdk'; @@ -35,16 +35,28 @@ export class RemoteTestRunner { private trackedFiles: TrackedFile[] = []; private trackedJobs: jobs.IDownloadAllSpoolContentParms[] = []; private cleanFns: ((stdout: string) => string)[] = []; + private readonly uss: UssSession; + private totalRuns: number = 0; + private totalRuntime: number = 0; + private maxRuntime: number = -1; constructor(testGroup: string) { this.session = getSession(); + this.uss = UssSession.sharedSession(); this.tmpDir = `${TEST_OUTPUT_DIR}/${testGroup}/tmp`; this.yamlOutputTemplate = `${TEST_OUTPUT_DIR}/${testGroup}/{{ testInstance }}/yaml`; this.spoolOutputTemplate = `${TEST_OUTPUT_DIR}/${testGroup}//{{ testInstance }}/spool`; } + public shutdown() { + console.log(`Total time spent in uss commands: ${this.totalRuntime / 1000} seconds`); + console.log(`Max time spent in a single uss command: ${this.maxRuntime / 1000} seconds`); + console.log(`Avg time spent per uss command: ${this.totalRuntime / this.totalRuns / 1000} seconds`); + this.uss.shutdown(); + } + public async runRaw(command: string, cwd: string = REMOTE_SYSTEM_INFO.ussTestDir): Promise { - const output = await uss.runCommand(`${command}`, cwd); + const output = await this.uss.runCommand(`${command}`, cwd); // Any non-deterministic output should be cleaned up for test snapshots. const cleanedOutput = this.cleanOutput(output.data); return { @@ -144,6 +156,7 @@ export class RemoteTestRunner { const yamlOutputDir = this.yamlOutputTemplate.replace('{{ testInstance }}', testName); await this.removeFileForTest('files/defaults.yaml'); fs.writeFileSync(`${yamlOutputDir}/defaults.yaml.${testName}`, stringDefaultYaml); + await files.Upload.fileToUssFile( this.session, `${yamlOutputDir}/defaults.yaml.${testName}`, @@ -184,9 +197,13 @@ export class RemoteTestRunner { binary: false, }, ); - - const output = await uss.runCommand(`./bin/zwe ${command} --config ${REMOTE_SYSTEM_INFO.ussTestDir}/zowe.test.yaml`, cwd); - + const start = performance.now(); + const output = await this.uss.runCommand(`./bin/zwe ${command} --config ${REMOTE_SYSTEM_INFO.ussTestDir}/zowe.test.yaml`, cwd); + const end = performance.now(); + const duration = end - start; + this.totalRuntime += duration; + this.totalRuns++; + this.maxRuntime = Math.max(this.maxRuntime, duration); const matches = output.data.matchAll(/([A-Za-z0-9]{4,8})\((JOB[0-9]{1,5})\) completed with RC=(.*)$/gim); // for each match, 0=full matched string, 1=jobname, 2=jobid, 3=rc diff --git a/tests/zwe-remote-integration/src/__tests__/init/stc.tests.ts b/tests/zwe-remote-integration/src/zos/SshResponse.ts similarity index 73% rename from tests/zwe-remote-integration/src/__tests__/init/stc.tests.ts rename to tests/zwe-remote-integration/src/zos/SshResponse.ts index e73229917d..8de2905044 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/stc.tests.ts +++ b/tests/zwe-remote-integration/src/zos/SshResponse.ts @@ -8,6 +8,8 @@ * Copyright Contributors to the Zowe Project. */ -const testSuiteName = 'init-stc'; -describe(`${testSuiteName}`, () => {}); -export {}; // remove when tests are written +export type SshResponse = { + rc: number; + error: string | undefined; + data: string | undefined; +}; diff --git a/tests/zwe-remote-integration/src/zos/Uss.ts b/tests/zwe-remote-integration/src/zos/Uss.ts index b195e102e8..9e564d3d32 100644 --- a/tests/zwe-remote-integration/src/zos/Uss.ts +++ b/tests/zwe-remote-integration/src/zos/Uss.ts @@ -10,8 +10,9 @@ import { REMOTE_CONNECTION_CFG } from '../config/TestConfig'; import { Shell, SshSession } from '@zowe/zos-uss-for-zowe-sdk'; +import { SshResponse } from './SshResponse'; -export async function runCommand(command: string, cwd: string = '~') { +export async function runCommand(command: string, cwd: string = '~'): Promise { const session = new SshSession({ hostname: REMOTE_CONNECTION_CFG.host, port: REMOTE_CONNECTION_CFG.ssh_port, @@ -25,5 +26,5 @@ export async function runCommand(command: string, cwd: string = '~') { stdout += data; } }); - return { data: stdout, rc: rc }; + return { data: stdout, rc: rc, error: null }; } diff --git a/tests/zwe-remote-integration/src/zos/UssSession.ts b/tests/zwe-remote-integration/src/zos/UssSession.ts new file mode 100644 index 0000000000..89d24bcb2a --- /dev/null +++ b/tests/zwe-remote-integration/src/zos/UssSession.ts @@ -0,0 +1,74 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { REMOTE_CONNECTION_CFG } from '../config/TestConfig'; +import { NodeSSH } from 'node-ssh'; +import { SshResponse } from './SshResponse'; +import { sleep } from '../utils'; + +export class UssSession { + private static shrSess: UssSession; + private sessionInit: boolean = false; + private readonly ssh = new NodeSSH(); + + private constructor() { + this.ssh + .connect({ + host: REMOTE_CONNECTION_CFG.host, + username: REMOTE_CONNECTION_CFG.user, + port: REMOTE_CONNECTION_CFG.ssh_port, + password: REMOTE_CONNECTION_CFG.password, + tryKeyboard: true, + onKeyboardInteractive: (name, instructions, instructionsLang, prompts, finish) => { + if (prompts.length > 0 && prompts[0].prompt.toLowerCase().includes('password')) { + finish([REMOTE_CONNECTION_CFG.password]); + } + }, + }) + .then(() => { + console.log('uss session connected'); + this.sessionInit = true; + }); + } + + public shutdown() { + this.ssh.dispose(); + } + + /** + * Re-uses an existing SSH session context to run commands. + */ + public static sharedSession() { + if (this.shrSess == null) { + this.shrSess = new UssSession(); + } + return this.shrSess; + } + + /** + * Creates a new SSH session, ignoring any existing shared session contexts. + */ + public static newSession() { + return new UssSession(); + } + + public async runCommand(command: string, cwd: string = '~'): Promise { + let tries = 10; + while (!this.sessionInit && tries > 0) { + await sleep(500); + tries--; + } + if (!this.sessionInit) { + console.log(`Could not run command, SSH session couldn't be established.`); + } + const response = await this.ssh.execCommand(command, { cwd: cwd }); + return { data: response.stdout, rc: response.code, error: response.stderr }; + } +} From a73fabc78fa6cea8fed951f8a53544920eb34b5b Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 17 Jul 2024 15:59:07 -0400 Subject: [PATCH 15/21] lock in stc tests Signed-off-by: MarkAckert --- manifest.json.template | 2 +- .../init/__snapshots__/stc.test.ts.snap | 933 +++++++++++++++++- .../src/__tests__/init/stc.test.ts | 19 +- .../src/config/TestConfig.ts | 8 +- .../zwe-remote-integration/src/globalSetup.ts | 56 +- 5 files changed, 1004 insertions(+), 14 deletions(-) diff --git a/manifest.json.template b/manifest.json.template index 5c13e90884..551b31a6fe 100644 --- a/manifest.json.template +++ b/manifest.json.template @@ -40,7 +40,7 @@ "artifact": "*.pax" }, "org.zowe.zss": { - "version": "^2.16.0-PR-683", + "version": "^2.17.0-STAGING", "artifact": "*.pax" }, "org.zowe.explorer.jobs.jobs-api-package": { diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap index 8fc4d93579..106a398e6f 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`init-stc (LONG) run setup with defaults abc 1`] = ` +exports[`init-stc (LONG) run setup with defaults 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b @@ -112,8 +112,8 @@ noverbose - --- End of JCL --- Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=2 -Zowe JCL generated with errors, check job log. Job completion code=8, Job completion text=COMPLETED +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEISTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEISTC) --- JCL Content --- //ZWEISTC JOB @@ -152,5 +152,930 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEISTC) , Executable JCL: TEST.DATASET. //* --- End of JCL --- Submitting Job ZWEISTC -ERROR: Error ZWEL0162E: Failed to find job JOB00000 result." +Job ZWEISTC(JOB00000) completed with RC=0 + +>> Zowe main started tasks are installed successfully." +`; + +exports[`init-stc (LONG) run stc setup, then overwrite, then run again 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /some/other/zowe.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEISTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEISTC) +--- JCL Content --- +//ZWEISTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to add proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//MCOPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.JCLLIB,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.TEST.PROCLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESLSTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESISTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESASTC,,R)) +//* +--- End of JCL --- +Submitting Job ZWEISTC +Job ZWEISTC(JOB00000) completed with RC=0 + +>> Zowe main started tasks are installed successfully." +`; + +exports[`init-stc (LONG) run stc setup, then overwrite, then run again 2`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Warning ZWEL0300W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESLSTC) already exists. This data set member will be overwritten during configuration. +Warning ZWEL0300W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESISTC) already exists. This data set member will be overwritten during configuration. +Warning ZWEL0300W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESASTC) already exists. This data set member will be overwritten during configuration. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERSTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERSTC) +--- JCL Content --- +//ZWERSTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//* * You do NOT need to change PROCLIB when running ZWEGENER. +//* * This is used to keep some lines under the column limit. +//* +// EXPORT SYMLIST=* +//* +// SET PROCLIB=TEST.DATASET.PFX.TEST.PROCLIB +//* +//********************************************************************* +//RMPROC EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD *,SYMBOLS=JCLONLY +DELETE ('&PROCLIB.(ZWESLSTC)', + + '&PROCLIB.(ZWESISTC)', + + '&PROCLIB.(ZWESASTC)') + + SCRATCH NONVSAM +//* +--- End of JCL --- +Submitting Job ZWERSTC +Job ZWERSTC(JOB00000) completed with RC=0 +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEISTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEISTC) +--- JCL Content --- +//ZWEISTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to add proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//MCOPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.JCLLIB,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.TEST.PROCLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESLSTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESISTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESASTC,,R)) +//* +--- End of JCL --- +Submitting Job ZWEISTC +Job ZWEISTC(JOB00000) completed with RC=0 + +>> Zowe main started tasks are installed successfully." +`; + +exports[`init-stc (LONG) run stc setup, then overwrite, then run again 3`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Warning ZWEL0301W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESLSTC) already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESISTC) already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESASTC) already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to TEST.DATASET.PFX.TEST.PROCLIB. To write, you must use --allow-overwrite." +`; + +exports[`init-stc (LONG) run stc setup, then overwrite, then run again: short-before-all-stc 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /some/other/zowe.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully" +`; + +exports[`init-stc (SHORT) aux stc exists 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Warning ZWEL0301W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESASTC) already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to TEST.DATASET.PFX.TEST.PROCLIB. To write, you must use --allow-overwrite." +`; + +exports[`init-stc (SHORT) aux stc exists 2`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Warning ZWEL0300W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESASTC) already exists. This data set member will be overwritten during configuration. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERSTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERSTC) +--- JCL Content --- +//ZWERSTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//* * You do NOT need to change PROCLIB when running ZWEGENER. +//* * This is used to keep some lines under the column limit. +//* +// EXPORT SYMLIST=* +//* +// SET PROCLIB=TEST.DATASET.PFX.TEST.PROCLIB +//* +//********************************************************************* +//RMPROC EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD *,SYMBOLS=JCLONLY +DELETE ('&PROCLIB.(ZWESLSTC)', + + '&PROCLIB.(ZWESISTC)', + + '&PROCLIB.(ZWESASTC)') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEISTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEISTC) +--- JCL Content --- +//ZWEISTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to add proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//MCOPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.JCLLIB,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.TEST.PROCLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESLSTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESISTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESASTC,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe main started tasks are installed successfully." +`; + +exports[`init-stc (SHORT) invalid stc configurations 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/security + Validity Exceptions(s) with object at /zowe/setup/security/stcs + type 'null' not permitted at /zowe/setup/security/stcs/aux; expecting type 'string'" +`; + +exports[`init-stc (SHORT) invalid stc configurations 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/security + Validity Exceptions(s) with object at /zowe/setup/security/stcs + Validity Exceptions(s) with string at /zowe/setup/security/stcs/aux + string too short (len=0) '' 0 < MIN=1 at /zowe/setup/security/stcs/aux + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/aux" +`; + +exports[`init-stc (SHORT) invalid stc configurations 3`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/security + Validity Exceptions(s) with object at /zowe/setup/security/stcs + Validity Exceptions(s) with string at /zowe/setup/security/stcs/aux + string too long (len=10) 'TOOLONGTOO' 10 > MAX=8 at /zowe/setup/security/stcs/aux + string pattern match fail s='TOOLONGTOO', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/aux" +`; + +exports[`init-stc (SHORT) invalid stc configurations 4`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/security + Validity Exceptions(s) with object at /zowe/setup/security/stcs + type 'null' not permitted at /zowe/setup/security/stcs/zis; expecting type 'string' + Validity Exceptions(s) with string at /zowe/setup/security/stcs/aux + string too long (len=10) 'TOOLONGTOO' 10 > MAX=8 at /zowe/setup/security/stcs/aux + string pattern match fail s='TOOLONGTOO', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/aux" +`; + +exports[`init-stc (SHORT) invalid stc configurations 5`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/security + Validity Exceptions(s) with object at /zowe/setup/security/stcs + Validity Exceptions(s) with string at /zowe/setup/security/stcs/zis + string too short (len=0) '' 0 < MIN=1 at /zowe/setup/security/stcs/zis + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/zis + Validity Exceptions(s) with string at /zowe/setup/security/stcs/aux + string too long (len=10) 'TOOLONGTOO' 10 > MAX=8 at /zowe/setup/security/stcs/aux + string pattern match fail s='TOOLONGTOO', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/aux" +`; + +exports[`init-stc (SHORT) invalid stc configurations 6`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/security + Validity Exceptions(s) with object at /zowe/setup/security/stcs + type 'null' not permitted at /zowe/setup/security/stcs/zowe; expecting type 'string' + Validity Exceptions(s) with string at /zowe/setup/security/stcs/zis + string too short (len=0) '' 0 < MIN=1 at /zowe/setup/security/stcs/zis + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/zis + Validity Exceptions(s) with string at /zowe/setup/security/stcs/aux + string too long (len=10) 'TOOLONGTOO' 10 > MAX=8 at /zowe/setup/security/stcs/aux + string pattern match fail s='TOOLONGTOO', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/aux" +`; + +exports[`init-stc (SHORT) invalid stc configurations 7`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/security + Validity Exceptions(s) with object at /zowe/setup/security/stcs + Validity Exceptions(s) with string at /zowe/setup/security/stcs/zowe + string too short (len=0) '' 0 < MIN=1 at /zowe/setup/security/stcs/zowe + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/zowe + Validity Exceptions(s) with string at /zowe/setup/security/stcs/zis + string too short (len=0) '' 0 < MIN=1 at /zowe/setup/security/stcs/zis + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/zis + Validity Exceptions(s) with string at /zowe/setup/security/stcs/aux + string too long (len=10) 'TOOLONGTOO' 10 > MAX=8 at /zowe/setup/security/stcs/aux + string pattern match fail s='TOOLONGTOO', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@]){0,7}$', at /zowe/setup/security/stcs/aux" +`; + +exports[`init-stc (SHORT) valid config empty proclib 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEISTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEISTC) +--- JCL Content --- +//ZWEISTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to add proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//MCOPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.JCLLIB,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.TEST.PROCLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESLSTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESISTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESASTC,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe main started tasks are installed successfully." +`; + +exports[`init-stc (SHORT) wrong ds prefix 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/prefix; expecting type 'string'" +`; + +exports[`init-stc (SHORT) wrong ds prefix 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/prefix + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/prefix + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/prefix" +`; + +exports[`init-stc (SHORT) wrong jcllib 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/jcllib; expecting type 'string'" +`; + +exports[`init-stc (SHORT) wrong jcllib 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/jcllib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/jcllib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/jcllib" +`; + +exports[`init-stc (SHORT) wrong proclib 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/proclib; expecting type 'string'" +`; + +exports[`init-stc (SHORT) wrong proclib 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/proclib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/proclib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/proclib" +`; + +exports[`init-stc (SHORT) wrong proclib 3`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/proclib + string pattern match fail s='INVALID.PROCLIB.DEFINITION1', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/proclib" +`; + +exports[`init-stc (SHORT) zis stc exists 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Warning ZWEL0301W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESISTC) already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to TEST.DATASET.PFX.TEST.PROCLIB. To write, you must use --allow-overwrite." +`; + +exports[`init-stc (SHORT) zis stc exists 2`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Warning ZWEL0300W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESISTC) already exists. This data set member will be overwritten during configuration. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERSTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERSTC) +--- JCL Content --- +//ZWERSTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//* * You do NOT need to change PROCLIB when running ZWEGENER. +//* * This is used to keep some lines under the column limit. +//* +// EXPORT SYMLIST=* +//* +// SET PROCLIB=TEST.DATASET.PFX.TEST.PROCLIB +//* +//********************************************************************* +//RMPROC EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD *,SYMBOLS=JCLONLY +DELETE ('&PROCLIB.(ZWESLSTC)', + + '&PROCLIB.(ZWESISTC)', + + '&PROCLIB.(ZWESASTC)') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEISTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEISTC) +--- JCL Content --- +//ZWEISTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to add proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//MCOPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.JCLLIB,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.TEST.PROCLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESLSTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESISTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESASTC,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe main started tasks are installed successfully." +`; + +exports[`init-stc (SHORT) zos stc exists 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Warning ZWEL0301W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESLSTC) already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to TEST.DATASET.PFX.TEST.PROCLIB. To write, you must use --allow-overwrite." +`; + +exports[`init-stc (SHORT) zos stc exists 2`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +------------------------------------------------------------------------------- +>> Install Zowe main started task + +Warning ZWEL0300W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESLSTC) already exists. This data set member will be overwritten during configuration. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERSTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERSTC) +--- JCL Content --- +//ZWERSTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//* * You do NOT need to change PROCLIB when running ZWEGENER. +//* * This is used to keep some lines under the column limit. +//* +// EXPORT SYMLIST=* +//* +// SET PROCLIB=TEST.DATASET.PFX.TEST.PROCLIB +//* +//********************************************************************* +//RMPROC EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD *,SYMBOLS=JCLONLY +DELETE ('&PROCLIB.(ZWESLSTC)', + + '&PROCLIB.(ZWESISTC)', + + '&PROCLIB.(ZWESASTC)') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEISTC) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEISTC) +--- JCL Content --- +//ZWEISTC JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to add proclib members +//* Used to start a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//********************************************************************* +//* +//MCOPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.JCLLIB,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.TEST.PROCLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESLSTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESISTC,,R)) + + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESASTC,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe main started tasks are installed successfully." `; diff --git a/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts index d0fe530884..944e9015a0 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts @@ -50,7 +50,8 @@ describe(`${testSuiteName}`, () => { await TestFileActions.deleteAll([jcllib]); }); - it('run setup with defaults abc', async () => { + // implicit 'init generate' + it('run setup with defaults', async () => { const proc: string = cfgYaml.zowe.setup.dataset.proclib as string; const stcs = cfgYaml.zowe.setup.security.stcs; cleanupDatasets.push({ name: `${proc}(${stcs.zowe})`, type: FileType.DS_NON_CLUSTER }); @@ -62,11 +63,12 @@ describe(`${testSuiteName}`, () => { expect(result.rc).toBe(0); }); - it('run stc setup with overwrite', async () => { + it('run stc setup, then overwrite, then run again', async () => { const proc: string = cfgYaml.zowe.setup.dataset.proclib as string; const stcs = cfgYaml.zowe.setup.security.stcs; - await zosfiles.uploadMember(proc, stcs.zowe as string, 'DUMMY'); cleanupDatasets.push({ name: `${proc}(${stcs.zowe})`, type: FileType.DS_NON_CLUSTER }); + cleanupDatasets.push({ name: `${proc}(${stcs.aux})`, type: FileType.DS_NON_CLUSTER }); + cleanupDatasets.push({ name: `${proc}(${stcs.zis})`, type: FileType.DS_NON_CLUSTER }); let result = await testRunner.runZweTest(cfgYaml, 'init stc'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); @@ -76,12 +78,21 @@ describe(`${testSuiteName}`, () => { expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); expect(result.rc).toBe(0); + + // this should fail or warn the user + result = await testRunner.runZweTest(cfgYaml, 'init stc'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); }); }); describe('(SHORT)', () => { beforeAll(async () => { - await testRunner.runZweTest(cfgYaml, 'init generate'); + const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot('short-before-all-stc'); + expect(result.rc).toBe(0); }); it('wrong ds prefix', async () => { diff --git a/tests/zwe-remote-integration/src/config/TestConfig.ts b/tests/zwe-remote-integration/src/config/TestConfig.ts index ddee9160bd..f78707226f 100644 --- a/tests/zwe-remote-integration/src/config/TestConfig.ts +++ b/tests/zwe-remote-integration/src/config/TestConfig.ts @@ -35,11 +35,11 @@ const configFields: ConfigItem[] = [ new ConfigItem('zosmf_port', true), new ConfigItem('remote_test_dir', true), new ConfigItem('test_ds_hlq', true), - new ConfigItem('test_stgclass', true), new ConfigItem('test_volume', true), new ConfigItem('test_storclas', false), new ConfigItem('zosmf_reject_unauthorized', false, false), new ConfigItem('download_configmgr', false, true), + new ConfigItem('download_szwesamp', false, true), new ConfigItem('download_zowe_tools', false, true), new ConfigItem('remote_setup', false), new ConfigItem('remote_teardown', false), @@ -62,6 +62,7 @@ export const LINGERING_REMOTE_FILES_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.bu export const TEST_JOBS_RUN_FILE = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'jobs-run.txt'); export const DOWNLOAD_ZOWE_TOOLS = yn(configData.download_zowe_tools, { default: true }); export const DOWNLOAD_CONFIGMGR = yn(configData.download_configmgr, { default: true }); +export const DOWNLOAD_SZWESAMP = yn(configData.download_szwesamp, { default: true }); export const REMOTE_SETUP = yn(configData.remote_setup, { default: true }); export const REMOTE_TEARDOWN = yn(configData.remote_teardown, { default: true }); export const ZOWE_YAML_OVERRIDES = configData.zowe_yaml_overrides; @@ -89,7 +90,6 @@ export const REMOTE_SYSTEM_INFO = { ussTestDir: configData.remote_test_dir, hostname: configData.zos_host, zosmfPort: configData.zosmf_port, - stgclass: configData.test_stgclass, }; export const REMOTE_CONNECTION_CFG = { @@ -114,14 +114,14 @@ type TestConfigData = { test_volume: string; test_storclas: string; zosmf_reject_unauthorized: string; - download_configmgr: string; + download_configmgr: boolean; + download_szwesamp: boolean; download_zowe_tools: boolean; remote_setup: boolean; remote_teardown: boolean; jfrog_user: string; jfrog_token: string; collect_test_spool: string; - test_stgclass: string; zowe_yaml_overrides: Partial; }; diff --git a/tests/zwe-remote-integration/src/globalSetup.ts b/tests/zwe-remote-integration/src/globalSetup.ts index 32fdf60708..2f853191cb 100644 --- a/tests/zwe-remote-integration/src/globalSetup.ts +++ b/tests/zwe-remote-integration/src/globalSetup.ts @@ -26,6 +26,7 @@ import { THIS_TEST_ROOT_DIR, ZOWE_YAML_OVERRIDES, THIS_TEST_BASE_DEFAULTS_YAML, + DOWNLOAD_SZWESAMP, } from './config/TestConfig'; import * as fs from 'fs-extra'; import { getSession } from './zos/ZosmfSession'; @@ -131,6 +132,12 @@ module.exports = async () => { await downloadManifestDep('org.zowe.configmgr'); await downloadManifestDep('org.zowe.configmgr-rexx'); } + + if (DOWNLOAD_SZWESAMP) { + await downloadManifestDep('org.zowe.launcher'); + await downloadManifestDep('org.zowe.zss'); + } + if (DOWNLOAD_ZOWE_TOOLS) { await downloadManifestDep('org.zowe.utility-tools'); } @@ -145,6 +152,16 @@ module.exports = async () => { throw new Error('Could not locate a configmgr-rexx pax in the .build directory'); } + const zssPax = fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build`).find((item) => /zss-.*\.pax/g.test(item)); + if (configmgrRexxPax == null) { + throw new Error('Could not locate a zss pax in the .build directory'); + } + + const launcherPax = fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build`).find((item) => /launcher.*\.pax/g.test(item)); + if (configmgrRexxPax == null) { + throw new Error('Could not locate a launcher pax in the .build directory'); + } + const zoweToolsZip = fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build`).find((item) => /zowe-utility-tools.*\.zip/g.test(item)); if (zoweToolsZip == null) { throw new Error('Could not locate zowe-utility-tools zip in the .build directory'); @@ -169,6 +186,22 @@ module.exports = async () => { { binary: true }, ); + console.log(`Uploading ${zssPax} to ${REMOTE_SYSTEM_INFO.ussTestDir}/zss.pax ...`); + await files.Upload.fileToUssFile( + zosmfSession, + `${THIS_TEST_ROOT_DIR}/.build/${zssPax}`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/zss.pax`, + { binary: true }, + ); + + console.log(`Uploading ${launcherPax} to ${REMOTE_SYSTEM_INFO.ussTestDir}/launcher.pax ...`); + await files.Upload.fileToUssFile( + zosmfSession, + `${THIS_TEST_ROOT_DIR}/.build/${launcherPax}`, + `${REMOTE_SYSTEM_INFO.ussTestDir}/launcher.pax`, + { binary: true }, + ); + console.log(`Building zwe typescript...`); execSync(`npm install && npm run prod`, { cwd: `${REPO_ROOT_DIR}/build/zwe` }); @@ -193,7 +226,7 @@ module.exports = async () => { binary: true, }, ); - await uss.runCommand(`tar -xf zwe.tar`, REMOTE_SYSTEM_INFO.ussTestDir); + await uss.runCommand(`tar -xfo zwe.tar`, REMOTE_SYSTEM_INFO.ussTestDir); // zowe-install-packaging-tools const utilsDir = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'utility-tools'); @@ -308,6 +341,27 @@ module.exports = async () => { await uss.runCommand(`cp -X ${pgm} "//'${REMOTE_SYSTEM_INFO.szweload}(${pgm})'"`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); } + console.log(`Unpacking zss pax and placing SAMPLIB in ${REMOTE_SYSTEM_INFO.szwesamp} ...`); + await uss.runCommand(`pax -ppx -rf zss.pax`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); + const zssPgms = [ + { from: 'ZWESIP00', to: 'ZWESIP00' }, + { from: 'ZWESISCH', to: 'ZWESISCH' }, + { from: 'ZWESAUX', to: 'ZWESASTC' }, + { from: 'ZWESIS01', to: 'ZWESISTC' }, + ]; + for (const pgm of zssPgms) { + await uss.runCommand( + `cp SAMPLIB/${pgm.from} "//'${REMOTE_SYSTEM_INFO.szwesamp}(${pgm.to})'"`, + `${REMOTE_SYSTEM_INFO.ussTestDir}`, + ); + } + + console.log(`Unpacking launcher pax and placing SAMPLIB in ${REMOTE_SYSTEM_INFO.szwesamp} ...`); + await uss.runCommand(`pax -ppx -rf launcher.pax`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); + for (const pgm of ['ZWESLSTC']) { + await uss.runCommand(`cp samplib/${pgm} "//'${REMOTE_SYSTEM_INFO.szwesamp}(${pgm})'"`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); + } + console.log(`Unpacking ncert.pax from zowe-install-packaging-tools and placing it in bin/utils/...`); await uss.runCommand(`pax -ppx -rf ncert.pax -s#^#./bin/utils/ncert/#g`, `${REMOTE_SYSTEM_INFO.ussTestDir}`); From 0f7c2cccef6ad07ad591e74a3b79bbf5a2cde6ad Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 17 Jul 2024 16:05:40 -0400 Subject: [PATCH 16/21] lock in apf snapshot Signed-off-by: MarkAckert --- .../init/__snapshots__/apfauth.test.ts.snap | 136 ++++++++++++++++-- .../src/__tests__/init/apfauth.test.ts | 14 +- 2 files changed, 132 insertions(+), 18 deletions(-) diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap index 88bdffe0af..3d8550322b 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap @@ -1,19 +1,130 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`init-apfauth (LONG) apf bad ds prefix 1`] = ` -" -$ Temporary directory '/tmp/.zweenv-0000' created. +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105d chunk=0x1000 extend=0x105d ------------------------------------------------------------------------------- >> APF authorize load libraries -cp: FSUM6258 cannot open file "//'BAD.DS.PREFIX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) ERROR: ZWEL0143E Cannot find data set member 'BAD.DS.PREFIX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." `; +exports[`init-apfauth (LONG) apf bad ds prefix: short-before-all-apf 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1057 chunk=0x1000 extend=0x1057 +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /some/other/zowe.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully" +`; + exports[`init-apfauth (LONG) apf empty ds prefix 1`] = ` -" -$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data Validity Exceptions(s) with object at Validity Exceptions(s) with object at /zowe Validity Exceptions(s) with object at /zowe/setup @@ -22,8 +133,7 @@ Validity Exceptions(s) with object at `; exports[`init-apfauth (LONG) apf empty jcllib 1`] = ` -" -$ Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data Validity Exceptions(s) with object at Validity Exceptions(s) with object at /zowe Validity Exceptions(s) with object at /zowe/setup @@ -34,7 +144,7 @@ Validity Exceptions(s) with object at exports[`init-apfauth (SHORT) apf bad authLoadLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x103d chunk=0x1000 extend=0x103d +bos extend currSize=0x0 dataSize=0x104d chunk=0x1000 extend=0x104d ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -49,7 +159,7 @@ ERROR: Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authLoadlib exports[`init-apfauth (SHORT) apf bad authPluginLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x103e chunk=0x1000 extend=0x103e +bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -75,7 +185,7 @@ Validity Exceptions(s) with object at exports[`init-apfauth (SHORT) apf simple --dry-run 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1047 chunk=0x1000 extend=0x1047 +bos extend currSize=0x0 dataSize=0x1057 chunk=0x1000 extend=0x1057 ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -131,7 +241,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-apfauth (SHORT) apf sms-managed authLoadLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104a chunk=0x1000 extend=0x104a +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -187,7 +297,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-apfauth (SHORT) apf sms-managed authLoadLib and authPluginLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e +bos extend currSize=0x0 dataSize=0x105e chunk=0x1000 extend=0x105e ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -243,7 +353,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-apfauth (SHORT) apf sms-managed authPluginLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104b chunk=0x1000 extend=0x104b +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b ------------------------------------------------------------------------------- >> APF authorize load libraries diff --git a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts index d50789a2a1..52b74f1e2a 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts @@ -74,7 +74,11 @@ describe(`${testSuiteName}`, () => { describe('(SHORT)', () => { beforeAll(async () => { - await testRunner.runZweTest(cfgYaml, 'init generate'); + cfgYaml = ZoweConfig.getZoweYaml(); + const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot('short-before-all-apf'); + expect(result.rc).toBe(0); }); it('apf empty jcllib post-generate', async () => { cfgYaml.zowe.setup.dataset.jcllib = ''; @@ -84,7 +88,7 @@ describe(`${testSuiteName}`, () => { expect(result.rc).toBe(1); }); - if (REMOTE_SYSTEM_INFO?.storclas.length > 0) { + if (REMOTE_SYSTEM_INFO?.storclas?.length > 0) { it('apf sms-managed authLoadLib', async () => { const smsDs = `${REMOTE_SYSTEM_INFO.prefix}.APF.LOADLIB`; await zosfiles.createPds(smsDs, { @@ -128,9 +132,9 @@ describe(`${testSuiteName}`, () => { expect(result.rc).toBe(0); }); } else { - it.skip('apf sms-managed authLoadLib'); - it.skip('apf sms-managed authPluginLib'); - it.skip('apf sms-managed authLoadLib and authPluginLib'); + it.skip('apf sms-managed authLoadLib', () => {}); + it.skip('apf sms-managed authPluginLib', () => {}); + it.skip('apf sms-managed authLoadLib and authPluginLib', () => {}); } it('apf bad authLoadLib', async () => { From f6644b02f3bbd6fa9c791164e0b93230b9ce86d8 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 17 Jul 2024 16:06:23 -0400 Subject: [PATCH 17/21] add defensive cfg re-init on beforeAll Signed-off-by: MarkAckert --- tests/zwe-remote-integration/src/__tests__/init/stc.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts index 944e9015a0..ba81f6630e 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts @@ -89,6 +89,7 @@ describe(`${testSuiteName}`, () => { describe('(SHORT)', () => { beforeAll(async () => { + cfgYaml = ZoweConfig.getZoweYaml(); const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot('short-before-all-stc'); From fa91c95c37835d0cac17e5bff1bf9f2080bb79d7 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Wed, 17 Jul 2024 16:09:20 -0400 Subject: [PATCH 18/21] lock vsam snapshot Signed-off-by: MarkAckert --- .../init/__snapshots__/vsam.test.ts.snap | 157 +++++++++++++++--- .../src/__tests__/init/vsam.test.ts | 6 +- 2 files changed, 138 insertions(+), 25 deletions(-) diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index 8c83f914bd..e19ad35262 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -1,9 +1,9 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`init-vsam (LONG) creates vsam 1`] = ` -" -$ Temporary directory '/tmp/.zweenv-0000' created. +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -80,13 +80,10 @@ $$ //* Overridden by the higher entries. //* PARMLIB member must be named "ZWEYAML" //* -//* Do not remove the defaults.yaml entry. -//* //* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml +//* FILE /some/other/zowe.yaml //MYCONFIG DD *,DLM=$$ FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml $$ //CMGROUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* @@ -181,8 +178,120 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET Submitting Job ZWECSVSM Job ZWECSVSM(JOB00000) completed with RC=0 ->> Zowe Caching Service VSAM storage is created successfully. -" +>> Zowe Caching Service VSAM storage is created successfully." +`; + +exports[`init-vsam (LONG) creates vsam: short-before-all-vsam 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1057 chunk=0x1000 extend=0x1057 +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /some/other/zowe.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully" `; exports[`init-vsam (SHORT) invalid NONRLS configurations 1`] = ` @@ -197,7 +306,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) invalid NONRLS configurations 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x103b chunk=0x1000 extend=0x103b +bos extend currSize=0x0 dataSize=0x104b chunk=0x1000 extend=0x104b ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -207,7 +316,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined i exports[`init-vsam (SHORT) invalid NONRLS configurations 3`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1036 chunk=0x1000 extend=0x1036 +bos extend currSize=0x0 dataSize=0x1046 chunk=0x1000 extend=0x1046 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -217,7 +326,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.name) is not defined in exports[`init-vsam (SHORT) invalid NONRLS configurations 4`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1034 chunk=0x1000 extend=0x1034 +bos extend currSize=0x0 dataSize=0x1044 chunk=0x1000 extend=0x1044 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -236,7 +345,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) invalid NONRLS configurations 6`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x102d chunk=0x1000 extend=0x102d +bos extend currSize=0x0 dataSize=0x103d chunk=0x1000 extend=0x103d ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -246,7 +355,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined i exports[`init-vsam (SHORT) invalid NONRLS configurations 7`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x103f chunk=0x1000 extend=0x103f +bos extend currSize=0x0 dataSize=0x104f chunk=0x1000 extend=0x104f ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -265,7 +374,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) invalid RLS configurations 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x103e chunk=0x1000 extend=0x103e +bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -284,7 +393,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) invalid RLS configurations 4`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1030 chunk=0x1000 extend=0x1030 +bos extend currSize=0x0 dataSize=0x1040 chunk=0x1000 extend=0x1040 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -294,7 +403,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not def exports[`init-vsam (SHORT) invalid RLS configurations 5`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x103f chunk=0x1000 extend=0x103f +bos extend currSize=0x0 dataSize=0x104f chunk=0x1000 extend=0x104f ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -304,7 +413,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not def exports[`init-vsam (SHORT) simple --dry-run 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104b chunk=0x1000 extend=0x104b +bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -381,7 +490,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-vsam (SHORT) skip non-vsam caching service 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1051 chunk=0x1000 extend=0x1051 +bos extend currSize=0x0 dataSize=0x1061 chunk=0x1000 extend=0x1061 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -420,7 +529,7 @@ Validity Exceptions(s) with object at Validity Exceptions(s) with object at /zowe Validity Exceptions(s) with object at /zowe/setup Validity Exceptions(s) with object at /zowe/setup/dataset - type 'null' not permitted at /zowe/setup/dataset/prefix; expecting type 'string'" + type 'null' not permitted at /zowe/setup/dataset/jcllib; expecting type 'string'" `; exports[`init-vsam (SHORT) unset jcllib 2`] = ` @@ -429,9 +538,9 @@ Validity Exceptions(s) with object at Validity Exceptions(s) with object at /zowe Validity Exceptions(s) with object at /zowe/setup Validity Exceptions(s) with object at /zowe/setup/dataset - Validity Exceptions(s) with string at /zowe/setup/dataset/prefix - string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/prefix - string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/prefix" + Validity Exceptions(s) with string at /zowe/setup/dataset/jcllib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/jcllib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/jcllib" `; exports[`init-vsam (SHORT) unset vsam mode 1`] = ` @@ -455,7 +564,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) valid NONRLS configurations 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1041 chunk=0x1000 extend=0x1041 +bos extend currSize=0x0 dataSize=0x1051 chunk=0x1000 extend=0x1051 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -532,7 +641,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-vsam (SHORT) valid RLS configuration 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1044 chunk=0x1000 extend=0x1044 +bos extend currSize=0x0 dataSize=0x1054 chunk=0x1000 extend=0x1054 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets diff --git a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts index 0e75618131..bac021918f 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts @@ -60,7 +60,11 @@ describe(`${testSuiteName}`, () => { describe('(SHORT)', () => { beforeAll(async () => { - await testRunner.runZweTest(cfgYaml, 'init generate'); + cfgYaml = ZoweConfig.getZoweYaml(); + const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot('short-before-all-vsam'); + expect(result.rc).toBe(0); }); it('skip non-vsam caching service', async () => { From 54983c35c52046b17106f5437ab26be10b39a439 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Mon, 9 Dec 2024 16:59:46 -0500 Subject: [PATCH 19/21] checkpoint changes - new/updated tests, updated test runner capabilities Signed-off-by: MarkAckert --- .../zwe-remote-integration/package-lock.json | 28 + tests/zwe-remote-integration/package.json | 2 + .../init/__snapshots__/apfauth.test.ts.snap | 242 ++- .../__snapshots__/certificate.test.ts.snap | 219 ++- .../init/__snapshots__/generate.test.ts.snap | 605 +------ .../init/__snapshots__/mvs.test.ts.snap | 1610 +++++++++++++++++ .../init/__snapshots__/stc.test.ts.snap | 135 +- .../init/__snapshots__/vsam.test.ts.snap | 157 +- .../src/__tests__/init/apfauth.test.ts | 17 +- .../src/__tests__/init/certificate.test.ts | 13 +- .../src/__tests__/init/composite.tests.ts | 13 - .../src/__tests__/init/generate.test.ts | 48 +- .../src/__tests__/init/mvs.test.ts | 254 +++ .../src/__tests__/init/mvs.tests.ts | 13 - .../src/__tests__/init/stc.test.ts | 16 +- .../src/__tests__/init/vsam.test.ts | 17 +- .../src/config/TestConfig.ts | 1 + .../zwe-remote-integration/src/globalSetup.ts | 16 +- .../src/zos/RemoteTestRunner.ts | 123 +- 19 files changed, 2444 insertions(+), 1085 deletions(-) create mode 100644 tests/zwe-remote-integration/src/__tests__/init/__snapshots__/mvs.test.ts.snap delete mode 100644 tests/zwe-remote-integration/src/__tests__/init/composite.tests.ts create mode 100644 tests/zwe-remote-integration/src/__tests__/init/mvs.test.ts delete mode 100644 tests/zwe-remote-integration/src/__tests__/init/mvs.tests.ts diff --git a/tests/zwe-remote-integration/package-lock.json b/tests/zwe-remote-integration/package-lock.json index 50039e9e89..4eb1db2013 100644 --- a/tests/zwe-remote-integration/package-lock.json +++ b/tests/zwe-remote-integration/package-lock.json @@ -18,6 +18,7 @@ "@types/node": "20.12.7", "@types/node-ssh": "^7.0.6", "@types/semver": "^7.5.8", + "@types/tar": "^6.1.13", "@types/xml2js": "0.4.14", "@types/yaml": "^1.9.7", "@types/yn": "^3.1.0", @@ -42,6 +43,7 @@ "lodash": "^4.17.21", "node-jq": "^4.3.1", "node-ssh": "^13.2.0", + "node-tar": "^1.0.0", "prettier": "3.2.5", "semver": "^7.6.2", "ts-jest": "29.1.2", @@ -2114,6 +2116,25 @@ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, + "node_modules/@types/tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "minipass": "^4.0.0" + } + }, + "node_modules/@types/tar/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@types/xml2js": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.14.tgz", @@ -7551,6 +7572,13 @@ "semver": "bin/semver.js" } }, + "node_modules/node-tar": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-tar/-/node-tar-1.0.0.tgz", + "integrity": "sha512-cowng5lugLQ3Bb5wWYfWM3067/S9xHDwCw3RWbqn0swqmgApDwklyg31XRci97cT7gNbVHmxoXQSkr2zDi5n+g==", + "deprecated": "please use 'tar'", + "dev": true + }, "node_modules/nopt": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", diff --git a/tests/zwe-remote-integration/package.json b/tests/zwe-remote-integration/package.json index 58c94fbba9..6e45c3deb3 100644 --- a/tests/zwe-remote-integration/package.json +++ b/tests/zwe-remote-integration/package.json @@ -14,6 +14,7 @@ "@types/node": "20.12.7", "@types/node-ssh": "^7.0.6", "@types/semver": "^7.5.8", + "@types/tar": "^6.1.13", "@types/xml2js": "0.4.14", "@types/yaml": "^1.9.7", "@types/yn": "^3.1.0", @@ -38,6 +39,7 @@ "lodash": "^4.17.21", "node-jq": "^4.3.1", "node-ssh": "^13.2.0", + "node-tar": "^1.0.0", "prettier": "3.2.5", "semver": "^7.6.2", "ts-jest": "29.1.2", diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap index 3d8550322b..7dd4f1b390 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/apfauth.test.ts.snap @@ -3,126 +3,13 @@ exports[`init-apfauth (LONG) apf bad ds prefix 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105d chunk=0x1000 extend=0x105d +bos extend currSize=0x0 dataSize=0x105c chunk=0x1000 extend=0x105c ------------------------------------------------------------------------------- >> APF authorize load libraries ERROR: ZWEL0143E Cannot find data set member 'BAD.DS.PREFIX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." `; -exports[`init-apfauth (LONG) apf bad ds prefix: short-before-all-apf 1`] = ` -"Temporary directory '/tmp/.zweenv-0000' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1057 chunk=0x1000 extend=0x1057 -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /some/other/zowe.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully" -`; - exports[`init-apfauth (LONG) apf empty ds prefix 1`] = ` "Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data Validity Exceptions(s) with object at @@ -144,7 +31,7 @@ Validity Exceptions(s) with object at exports[`init-apfauth (SHORT) apf bad authLoadLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104d chunk=0x1000 extend=0x104d +bos extend currSize=0x0 dataSize=0x104c chunk=0x1000 extend=0x104c ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -159,7 +46,7 @@ ERROR: Error ZWEL0320E: The dataset specified in 'zowe.setup.dataset.authLoadlib exports[`init-apfauth (SHORT) apf bad authPluginLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e +bos extend currSize=0x0 dataSize=0x104d chunk=0x1000 extend=0x104d ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -185,7 +72,7 @@ Validity Exceptions(s) with object at exports[`init-apfauth (SHORT) apf simple --dry-run 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1057 chunk=0x1000 extend=0x1057 +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -221,7 +108,7 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIAPF2) , Executable JCL: TEST.DATASET //STDPARM DD * SH cd '/test/dir' && cd bin/utils && -export LOADLIB='TEST.DATASET.PFX.SZWELOAD' && +export LOADLIB='TEST.DATASET.PFX.APF.LOADLIB' && export LOADLOC="VOLUME=TSTVOL" && export PLUGLIB='TEST.DATASET.PFX.ZWESAPL' && export PLUGLOC="VOLUME=TSTVOL" && @@ -241,10 +128,117 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-apfauth (SHORT) apf sms-managed authLoadLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a +bos extend currSize=0x0 dataSize=0x1059 chunk=0x1000 extend=0x1059 ------------------------------------------------------------------------------- >> APF authorize load libraries +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /some/other/zowe.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIAPF2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIAPF2) --- JCL Content --- //ZWEIAPF2 JOB @@ -277,7 +271,7 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIAPF2) , Executable JCL: TEST.DATASET //STDPARM DD * SH cd '/test/dir' && cd bin/utils && -export LOADLIB='TEST.DATASET.PFX.SZWELOAD' && +export LOADLIB='TEST.DATASET.PFX.APF.LOADLIB' && export LOADLOC=SMS && export PLUGLIB='TEST.DATASET.PFX.ZWESAPL' && export PLUGLOC="VOLUME=TSTVOL" && @@ -297,7 +291,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-apfauth (SHORT) apf sms-managed authLoadLib and authPluginLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105e chunk=0x1000 extend=0x105e +bos extend currSize=0x0 dataSize=0x105d chunk=0x1000 extend=0x105d ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -333,7 +327,7 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIAPF2) , Executable JCL: TEST.DATASET //STDPARM DD * SH cd '/test/dir' && cd bin/utils && -export LOADLIB='TEST.DATASET.PFX.SZWELOAD' && +export LOADLIB='TEST.DATASET.PFX.APF.LOADLIB' && export LOADLOC=SMS && export PLUGLIB='TEST.DATASET.PFX.ZWESAPL' && export PLUGLOC=SMS && @@ -353,7 +347,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-apfauth (SHORT) apf sms-managed authPluginLib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> APF authorize load libraries @@ -389,7 +383,7 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIAPF2) , Executable JCL: TEST.DATASET //STDPARM DD * SH cd '/test/dir' && cd bin/utils && -export LOADLIB='TEST.DATASET.PFX.SZWELOAD' && +export LOADLIB='TEST.DATASET.PFX.APF.LOADLIB' && export LOADLOC="VOLUME=TSTVOL" && export PLUGLIB='TEST.DATASET.PFX.ZWESAPL' && export PLUGLOC=SMS && diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap index daff63d376..7d6d4d666e 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/certificate.test.ts.snap @@ -1,19 +1,222 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`before-all-cert: before-all-cert 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /some/other/zowe.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully" +`; + exports[`init-cert (LONG) cert bad hostname 1`] = ` -" -$ ------------------------------------------------------------------------------- +"------------------------------------------------------------------------------- +>> Generate certificate + +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +------------------------------------------------------------------------------- >> Creating certificate authority "local_ca" -Error ZWEL0158E: Keystore "/test/dir/local_ca/local_ca.keystore.p12" already exists." +>>>> Generate PKCS12 format local CA with alias local_ca: + +>> Certificate authority local_ca is created successfully. + +------------------------------------------------------------------------------- +>> Export keystore /test/dir/local_ca/local_ca.keystore.p12 + +>>>> List content of keystore "/test/dir/local_ca/local_ca.keystore.p12": +>>>> Export certificate "local_ca" to PEM format + +>> Keystore /test/dir/local_ca/local_ca.keystore.p12 is exported successfully. + +------------------------------------------------------------------------------- +>> Creating certificate "some.test.hostname" + +>>>> Generate certificate "some.test.hostname" in the keystore some.test.hostname: +>>>> Generate CSR for the certificate "some.test.hostname" in the keystore "some.test.hostname": +>>>> Sign the CSR using the Certificate Authority "local_ca": +>>>> Import the Certificate Authority "local_ca" to the keystore "some.test.hostname": +>>>> Import the Certificate Authority "local_ca" to the truststore "some.test.hostname": +>>>> Import the signed CSR to the keystore "some.test.hostname": + +>> Certificate some.test.hostname is created successfully. + +------------------------------------------------------------------------------- +>> Trust z/OSMF "some.testhost.com:10443" + +>>>> Getting certificates from service host +>>>> Import a certificate "zosmf00" to the truststore: +>>>> Import a certificate "zosmf01" to the truststore: + +>> Certificate zosmf is added to truststore successfully. + +------------------------------------------------------------------------------- +>> Export keystore /test/dir/some.test.hostname/some.test.hostname.keystore.p12 + +>>>> List content of keystore "/test/dir/some.test.hostname/some.test.hostname.keystore.p12": +>>>> Export certificate "some.test.hostname" to PEM format +>>>> Export certificate "local_ca" to PEM format +>>>> Exporting certificate "some.test.hostname" private key + +>> Keystore /test/dir/some.test.hostname/some.test.hostname.keystore.p12 is exported successfully. + +------------------------------------------------------------------------------- +>> Export keystore /test/dir/some.test.hostname/some.test.hostname.truststore.p12 + +>>>> List content of keystore "/test/dir/some.test.hostname/some.test.hostname.truststore.p12": +>>>> Export certificate "local_ca" to PEM format +>>>> Export certificate "zosmf00" to PEM format +>>>> Export certificate "zosmf01" to PEM format + +>> Keystore /test/dir/some.test.hostname/some.test.hostname.truststore.p12 is exported successfully. + +------------------------------------------------------------------------------- +>> Lock keystore directory /test/dir + + +>> Keystore directory /test/dir is locked. + +------------------------------------------------------------------------------- +>> Update certificate configuration to /test/dir/zowe.test.yaml + +Please manually update to these values: + +zowe: + certificate: + keystore: + type: PKCS12 + file: "/test/dir/some.test.hostname/some.test.hostname.keystore.p12" + password: "password" + alias: "some.test.hostname" + truststore: + type: PKCS12 + file: "/test/dir/some.test.hostname/some.test.hostname.truststore.p12" + password: "password" + pem: + key: "/test/dir/some.test.hostname/some.test.hostname.key" + certificate: "/test/dir/some.test.hostname/some.test.hostname.cer" + certificateAuthorities: "/test/dir/local_ca/local_ca.cer" + + +>> Zowe configuration requires manual updates. + +------------------------------------------------------------------------------- +>> Verify certificate of "zzow08.zowe.marist.cloud:10443" + +>>>> Validate certificate of zzow08.zowe.marist.cloud:10443" `; exports[`init-cert (LONG) cert bad hostname 2`] = ` -" -$ * Output: - Error: error reading input file: ENOENT: no such file or directory, open '/tmp/zwe-16698/.zowe-merged.yaml' -Error ZWEL0157E: Certificate type (zowe.setup.certificate.type) is not defined in Zowe YAML configuration file. -rm: FSUM9195 cannot unlink entry "/tmp/zwe-16698/.zowe-merged.yaml": EDC5129I No such file or directory. (errno2=0x0594003D)" +"------------------------------------------------------------------------------- +>> Generate certificate + +bos extend currSize=0x0 dataSize=0x106e chunk=0x1000 extend=0x106e +------------------------------------------------------------------------------- +>> Creating certificate authority "local_ca"" `; exports[`init-cert (SHORT) cert dry-run 1`] = ` diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap index 4aeefc022f..e38c7cc210 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/generate.test.ts.snap @@ -1,14 +1,9 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`init-generate (SHORT) BAD: invalid format defaults.yaml 1`] = ` -" -$ Pre-load -Load status: 0 -Temporary directory '/tmp/.zweenv-0000' created. +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -------------------------------------------------------------------------------- ->> Initialize Zowe custom data sets - +bos extend currSize=0x0 dataSize=0x1028 chunk=0x1000 extend=0x1028 Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) --- JCL content --- //ZWEGENER JOB @@ -82,13 +77,10 @@ $$ //* Overridden by the higher entries. //* PARMLIB member must be named "ZWEYAML" //* -//* Do not remove the defaults.yaml entry. -//* //* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml +//* FILE /some/other/zowe.yaml //MYCONFIG DD *,DLM=$$ FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml $$ //CMGROUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* @@ -115,596 +107,24 @@ generate - noverbose - ) ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) ---- JCL Content --- -//ZWECSVSM JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* Zowe Open Source Project -//* This JCL creates the VSAM data set for the Caching Service. -//* -//* -//* CAUTION: This is neither a JCL procedure nor a complete job. -//* Before using this JCL, you will have to make the following -//* modifications: -//* -//* 1) Add job name and job parameters to the JOB statement, to -//* meet your system requirements. -//* -//* When using RLS, customize the definitions in the RLS DD: -//* -//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the -//* desired recovery options for the RLS VSAM. -//* -//* -//* Note(s): -//* -//* 1. This job should complete with return code 0. -//* -//******************************************************************** -//* -//ALLOC EXEC PGM=IDCAMS,REGION=0M -//SYSPRINT DD SYSOUT=* -//SYSIN DD * - DEFINE CLUSTER - - (NAME(TEST.DATASET.PFX.VSAM) - -// DD DDNAME=NONRLS -// DD * - REC(80 20) - - INDEXED) - - DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - - RECSZ(4096 4096) - - UNIQUE - - KEYS(128 0)) - - INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - - UNIQUE) -//RLS DD * - STORCLAS() - - LOG(NONE) - -//NONRLS DD * - VOLUME(TSTVOL) - - SHAREOPTIONS(2 3) - -//* --- End of JCL --- JCL not submitted, command run with "--dry-run" flag. -To perform command, re-run command without "--dry-run" flag, or submit the JCL directly - ->> Command run successfully. - - ->> Zowe Caching Service VSAM storage is created successfully. -" -`; - -exports[`init-generate (SHORT) BAD: invalid value defaults.yaml 1`] = ` -" -$ Pre-load -Load status: 0 -Temporary directory '/tmp/.zweenv-0000' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -------------------------------------------------------------------------------- ->> Initialize Zowe custom data sets - -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Do not remove the defaults.yaml entry. -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) ---- JCL Content --- -//ZWECSVSM JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* Zowe Open Source Project -//* This JCL creates the VSAM data set for the Caching Service. -//* -//* -//* CAUTION: This is neither a JCL procedure nor a complete job. -//* Before using this JCL, you will have to make the following -//* modifications: -//* -//* 1) Add job name and job parameters to the JOB statement, to -//* meet your system requirements. -//* -//* When using RLS, customize the definitions in the RLS DD: -//* -//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the -//* desired recovery options for the RLS VSAM. -//* -//* -//* Note(s): -//* -//* 1. This job should complete with return code 0. -//* -//******************************************************************** -//* -//ALLOC EXEC PGM=IDCAMS,REGION=0M -//SYSPRINT DD SYSOUT=* -//SYSIN DD * - DEFINE CLUSTER - - (NAME(TEST.DATASET.PFX.VSAM) - -// DD DDNAME=NONRLS -// DD * - REC(80 20) - - INDEXED) - - DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - - RECSZ(4096 4096) - - UNIQUE - - KEYS(128 0)) - - INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - - UNIQUE) -//RLS DD * - STORCLAS() - - LOG(NONE) - -//NONRLS DD * - VOLUME(TSTVOL) - - SHAREOPTIONS(2 3) - -//* ---- End of JCL --- -JCL not submitted, command run with "--dry-run" flag. -To perform command, re-run command without "--dry-run" flag, or submit the JCL directly - ->> Command run successfully. - - ->> Zowe Caching Service VSAM storage is created successfully. -" +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly." `; -exports[`init-generate (SHORT) BAD: missing defaults.yaml 1`] = ` -" -$ Pre-load -ZWEL0318E - failed to read '/test/dir/files/defaults.yaml' - EDC5129I No such file or directory. (errno2=0x05620062) -Load status: 0 -Temporary directory '/tmp/.zweenv-0000' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -------------------------------------------------------------------------------- ->> Initialize Zowe custom data sets - -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Do not remove the defaults.yaml entry. -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) ---- JCL Content --- -//ZWECSVSM JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* Zowe Open Source Project -//* This JCL creates the VSAM data set for the Caching Service. -//* -//* -//* CAUTION: This is neither a JCL procedure nor a complete job. -//* Before using this JCL, you will have to make the following -//* modifications: -//* -//* 1) Add job name and job parameters to the JOB statement, to -//* meet your system requirements. -//* -//* When using RLS, customize the definitions in the RLS DD: -//* -//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the -//* desired recovery options for the RLS VSAM. -//* -//* -//* Note(s): -//* -//* 1. This job should complete with return code 0. -//* -//******************************************************************** -//* -//ALLOC EXEC PGM=IDCAMS,REGION=0M -//SYSPRINT DD SYSOUT=* -//SYSIN DD * - DEFINE CLUSTER - - (NAME(TEST.DATASET.PFX.VSAM) - -// DD DDNAME=NONRLS -// DD * - REC(80 20) - - INDEXED) - - DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - - RECSZ(4096 4096) - - UNIQUE - - KEYS(128 0)) - - INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - - UNIQUE) -//RLS DD * - STORCLAS() - - LOG(NONE) - -//NONRLS DD * - VOLUME(TSTVOL) - - SHAREOPTIONS(2 3) - -//* ---- End of JCL --- -JCL not submitted, command run with "--dry-run" flag. -To perform command, re-run command without "--dry-run" flag, or submit the JCL directly - ->> Command run successfully. - - ->> Zowe Caching Service VSAM storage is created successfully. -" -`; +exports[`init-generate (SHORT) BAD: missing defaults.yaml 1`] = `"Error: Could not load config for FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml), status=7"`; exports[`init-generate (SHORT) bad ds prefix 1`] = ` -" -$ Pre-load -Load status: 0 -Temporary directory '/tmp/.zweenv-0000' created. +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -cp: FSUM6258 cannot open file "//'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'": EDC5049I The specified file name could not be located. (errno2=0xC00B0641) -ERROR: ZWEL0143E Cannot find data set member 'TEST.DATASET.PFX.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." -`; - -exports[`init-generate (SHORT) disable cfgmgr 1`] = ` -" -$ Pre-load -Load status: 0 -Temporary directory '/tmp/.zweenv-0000' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Do not remove the defaults.yaml entry. -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully" +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +ERROR: ZWEL0143E Cannot find data set member 'SOME.DS.NOEXIST.SZWESAMP(ZWEGENER)'. You may need to re-run zwe install." `; exports[`init-generate (SHORT) simple --dry-run 1`] = ` -" -$ Pre-load -Load status: 0 -Temporary directory '/tmp/.zweenv-0000' created. +"Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) --- JCL content --- //ZWEGENER JOB @@ -778,13 +198,10 @@ $$ //* Overridden by the higher entries. //* PARMLIB member must be named "ZWEYAML" //* -//* Do not remove the defaults.yaml entry. -//* //* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /the/zowe/defaults.yaml +//* FILE /some/other/zowe.yaml //MYCONFIG DD *,DLM=$$ FILE /test/dir/zowe.test.yaml -FILE /test/dir/files/defaults.yaml $$ //CMGROUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/mvs.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/mvs.test.ts.snap new file mode 100644 index 0000000000..d4877ee8e0 --- /dev/null +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/mvs.test.ts.snap @@ -0,0 +1,1610 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`init-mvs (SHORT) authLoadLib negatives 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/authLoadlib; expecting type 'string'" +`; + +exports[`init-mvs (SHORT) authLoadLib negatives 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/authLoadlib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/authLoadlib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/authLoadlib" +`; + +exports[`init-mvs (SHORT) authLoadLib negatives 3`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1050 chunk=0x1000 extend=0x1050 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0301W: TEST.DATASET.PFX.PARMLIB already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.ZWESAPL already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to a dataset. To write, you must use --allow-overwrite. + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) authLoadLib negatives 4`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1055 chunk=0x1000 extend=0x1055 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0301W: TEST.DATASET.PFX.PARMLIB already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.ZWESAPL already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.ZWESAPL already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to a dataset. To write, you must use --allow-overwrite. + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) authLoadLib negatives 5`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0301W: TEST.DATASET.PFX.PARMLIB already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.ZWESAPL already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to a dataset. To write, you must use --allow-overwrite. + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) authLoadLib negatives 6`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0300W: TEST.DATASET.PFX.PARMLIB already exists. Members in this data set will be overwritten. +Warning ZWEL0300W: TEST.DATASET.PFX.ZWESAPL already exists. Members in this data set will be overwritten. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS) +--- JCL Content --- +//ZWERMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWERMVS2". +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE ('TEST.DATASET.PFX.PARMLIB', + + 'TEST.DATASET.PFX.ZWESAPL') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS) +--- JCL Content --- +//ZWEIMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWEIMVS2". +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.PARMLIB') + +dsntype(library) dsorg(po) recfm(f b) lrecl(80) + +unit(sysallda) space(15,15) tracks + +ALLOC NEW DA('TEST.DATASET.PFX.ZWESAPL') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//MEMBCPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.SZWESAMP,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.PARMLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESIP00,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) authLoadLib negatives 7`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x104c chunk=0x1000 extend=0x104c +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0300W: TEST.DATASET.PFX.PARMLIB already exists. Members in this data set will be overwritten. +Warning ZWEL0300W: TEST.DATASET.PFX.ZWESAPL already exists. Members in this data set will be overwritten. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS) +--- JCL Content --- +//ZWERMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWERMVS2". +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE ('TEST.DATASET.PFX.PARMLIB', + + 'TEST.DATASET.PFX.ZWESAPL') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS) +--- JCL Content --- +//ZWEIMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWEIMVS2". +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.PARMLIB') + +dsntype(library) dsorg(po) recfm(f b) lrecl(80) + +unit(sysallda) space(15,15) tracks + +ALLOC NEW DA('TEST.DATASET.PFX.ZWESAPL') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//MEMBCPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.SZWESAMP,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.PARMLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESIP00,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS2) +--- JCL Content --- +//ZWEIMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWEIMVS +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.SZWELOAD') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//AUTHCPY EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd components/zss && +ZWE_TMP_MVS2='TEST.DATASET.PFX.SZWELOAD' && +cp -X LOADLIB/ZWESIS01 +"//'$ZWE_TMP_MVS2(ZWESIS01)'" && +cp -X LOADLIB/ZWESAUX +"//'$ZWE_TMP_MVS2(ZWESAUX)'" && +cp -X LOADLIB/ZWESISDL +"//'$ZWE_TMP_MVS2(ZWESISDL)'" && +cd ../launcher/bin && +cp -X zowe_launcher +"//'$ZWE_TMP_MVS2(ZWELNCH)'" +/* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) authLoadLib negatives 8`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0300W: TEST.DATASET.PFX.PARMLIB already exists. Members in this data set will be overwritten. +Warning ZWEL0300W: TEST.DATASET.PFX.ZWESAPL already exists. Members in this data set will be overwritten. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS) +--- JCL Content --- +//ZWERMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWERMVS2". +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE ('TEST.DATASET.PFX.PARMLIB', + + 'TEST.DATASET.PFX.ZWESAPL') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS2) +--- JCL Content --- +//ZWERMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWERMVS +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE 'TEST.DATASET.PFX.SZWELOAD' + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS) +--- JCL Content --- +//ZWEIMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWEIMVS2". +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.PARMLIB') + +dsntype(library) dsorg(po) recfm(f b) lrecl(80) + +unit(sysallda) space(15,15) tracks + +ALLOC NEW DA('TEST.DATASET.PFX.ZWESAPL') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//MEMBCPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.SZWESAMP,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.PARMLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESIP00,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS2) +--- JCL Content --- +//ZWEIMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWEIMVS +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.SZWELOAD') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//AUTHCPY EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd components/zss && +ZWE_TMP_MVS2='TEST.DATASET.PFX.SZWELOAD' && +cp -X LOADLIB/ZWESIS01 +"//'$ZWE_TMP_MVS2(ZWESIS01)'" && +cp -X LOADLIB/ZWESAUX +"//'$ZWE_TMP_MVS2(ZWESAUX)'" && +cp -X LOADLIB/ZWESISDL +"//'$ZWE_TMP_MVS2(ZWESISDL)'" && +cd ../launcher/bin && +cp -X zowe_launcher +"//'$ZWE_TMP_MVS2(ZWELNCH)'" +/* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) authPluginLib negatives 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/authPluginLib; expecting type 'string'" +`; + +exports[`init-mvs (SHORT) authPluginLib negatives 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/authPluginLib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/authPluginLib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/authPluginLib" +`; + +exports[`init-mvs (SHORT) authPluginLib negatives 3`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1051 chunk=0x1000 extend=0x1051 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0301W: TEST.DATASET.PFX.PARMLIB already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.SZWELOAD already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to a dataset. To write, you must use --allow-overwrite. + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) authPluginLib negatives 4`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0301W: TEST.DATASET.PFX.PARMLIB already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.SZWELOAD already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.PARMLIB already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to a dataset. To write, you must use --allow-overwrite. + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) authPluginLib negatives 5`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x104d chunk=0x1000 extend=0x104d +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0300W: TEST.DATASET.PFX.PARMLIB already exists. Members in this data set will be overwritten. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS) +--- JCL Content --- +//ZWERMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWERMVS2". +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE ('TEST.DATASET.PFX.PARMLIB', + + 'TEST.DATASET.PFX.ZWESAPL') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS2) +--- JCL Content --- +//ZWERMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWERMVS +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE 'TEST.DATASET.PFX.SZWELOAD' + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS) +--- JCL Content --- +//ZWEIMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWEIMVS2". +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.PARMLIB') + +dsntype(library) dsorg(po) recfm(f b) lrecl(80) + +unit(sysallda) space(15,15) tracks + +ALLOC NEW DA('TEST.DATASET.PFX.ZWESAPL') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//MEMBCPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.SZWESAMP,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.PARMLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESIP00,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS2) +--- JCL Content --- +//ZWEIMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWEIMVS +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.SZWELOAD') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//AUTHCPY EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd components/zss && +ZWE_TMP_MVS2='TEST.DATASET.PFX.SZWELOAD' && +cp -X LOADLIB/ZWESIS01 +"//'$ZWE_TMP_MVS2(ZWESIS01)'" && +cp -X LOADLIB/ZWESAUX +"//'$ZWE_TMP_MVS2(ZWESAUX)'" && +cp -X LOADLIB/ZWESISDL +"//'$ZWE_TMP_MVS2(ZWESISDL)'" && +cd ../launcher/bin && +cp -X zowe_launcher +"//'$ZWE_TMP_MVS2(ZWELNCH)'" +/* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) authPluginLib negatives 6`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0300W: TEST.DATASET.PFX.SZWELOAD already exists. Members in this data set will be overwritten. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS) +--- JCL Content --- +//ZWERMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWERMVS2". +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE ('TEST.DATASET.PFX.PARMLIB', + + 'TEST.DATASET.PFX.ZWESAPL') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS2) +--- JCL Content --- +//ZWERMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWERMVS +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE 'TEST.DATASET.PFX.SZWELOAD' + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS) +--- JCL Content --- +//ZWEIMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWEIMVS2". +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.PARMLIB') + +dsntype(library) dsorg(po) recfm(f b) lrecl(80) + +unit(sysallda) space(15,15) tracks + +ALLOC NEW DA('TEST.DATASET.PFX.ZWESAPL') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//MEMBCPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.SZWESAMP,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.PARMLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESIP00,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS2) +--- JCL Content --- +//ZWEIMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWEIMVS +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.SZWELOAD') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//AUTHCPY EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd components/zss && +ZWE_TMP_MVS2='TEST.DATASET.PFX.SZWELOAD' && +cp -X LOADLIB/ZWESIS01 +"//'$ZWE_TMP_MVS2(ZWESIS01)'" && +cp -X LOADLIB/ZWESAUX +"//'$ZWE_TMP_MVS2(ZWESAUX)'" && +cp -X LOADLIB/ZWESISDL +"//'$ZWE_TMP_MVS2(ZWESISDL)'" && +cd ../launcher/bin && +cp -X zowe_launcher +"//'$ZWE_TMP_MVS2(ZWELNCH)'" +/* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) bad ds prefix post-generate 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/prefix; expecting type 'string'" +`; + +exports[`init-mvs (SHORT) bad ds prefix post-generate 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/prefix + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/prefix + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/prefix" +`; + +exports[`init-mvs (SHORT) jcllib fails verification 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/jcllib; expecting type 'string'" +`; + +exports[`init-mvs (SHORT) jcllib fails verification 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/jcllib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/jcllib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/jcllib" +`; + +exports[`init-mvs (SHORT) parmlib negatives 1`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + type 'null' not permitted at /zowe/setup/dataset/parmlib; expecting type 'string'" +`; + +exports[`init-mvs (SHORT) parmlib negatives 2`] = ` +"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data +Validity Exceptions(s) with object at + Validity Exceptions(s) with object at /zowe + Validity Exceptions(s) with object at /zowe/setup + Validity Exceptions(s) with object at /zowe/setup/dataset + Validity Exceptions(s) with string at /zowe/setup/dataset/parmlib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/parmlib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/parmlib" +`; + +exports[`init-mvs (SHORT) parmlib negatives 3`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1051 chunk=0x1000 extend=0x1051 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0301W: TEST.DATASET.PFX.SZWELOAD already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.ZWESAPL already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to a dataset. To write, you must use --allow-overwrite. + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) parmlib negatives 4`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0301W: TEST.DATASET.PFX.ZWESAPL already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.SZWELOAD already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.ZWESAPL already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to a dataset. To write, you must use --allow-overwrite. + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) parmlib negatives 5`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x104d chunk=0x1000 extend=0x104d +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0300W: TEST.DATASET.PFX.ZWESAPL already exists. Members in this data set will be overwritten. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS) +--- JCL Content --- +//ZWERMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWERMVS2". +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE ('TEST.DATASET.PFX.PARMLIB', + + 'TEST.DATASET.PFX.ZWESAPL') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS2) +--- JCL Content --- +//ZWERMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWERMVS +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE 'TEST.DATASET.PFX.SZWELOAD' + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS) +--- JCL Content --- +//ZWEIMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWEIMVS2". +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.PARMLIB') + +dsntype(library) dsorg(po) recfm(f b) lrecl(80) + +unit(sysallda) space(15,15) tracks + +ALLOC NEW DA('TEST.DATASET.PFX.ZWESAPL') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//MEMBCPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.SZWESAMP,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.PARMLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESIP00,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS2) +--- JCL Content --- +//ZWEIMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWEIMVS +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.SZWELOAD') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//AUTHCPY EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd components/zss && +ZWE_TMP_MVS2='TEST.DATASET.PFX.SZWELOAD' && +cp -X LOADLIB/ZWESIS01 +"//'$ZWE_TMP_MVS2(ZWESIS01)'" && +cp -X LOADLIB/ZWESAUX +"//'$ZWE_TMP_MVS2(ZWESAUX)'" && +cp -X LOADLIB/ZWESISDL +"//'$ZWE_TMP_MVS2(ZWESISDL)'" && +cd ../launcher/bin && +cp -X zowe_launcher +"//'$ZWE_TMP_MVS2(ZWELNCH)'" +/* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) parmlib negatives 6`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1057 chunk=0x1000 extend=0x1057 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0300W: TEST.DATASET.PFX.SZWELOAD already exists. Members in this data set will be overwritten. +Warning ZWEL0300W: TEST.DATASET.PFX.ZWESAPL already exists. Members in this data set will be overwritten. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS) +--- JCL Content --- +//ZWERMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWERMVS2". +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE ('TEST.DATASET.PFX.PARMLIB', + + 'TEST.DATASET.PFX.ZWESAPL') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS2) +--- JCL Content --- +//ZWERMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWERMVS +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE 'TEST.DATASET.PFX.SZWELOAD' + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS) +--- JCL Content --- +//ZWEIMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWEIMVS2". +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.PARMLIB') + +dsntype(library) dsorg(po) recfm(f b) lrecl(80) + +unit(sysallda) space(15,15) tracks + +ALLOC NEW DA('TEST.DATASET.PFX.ZWESAPL') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//MEMBCPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.SZWESAMP,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.PARMLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESIP00,,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS2) +--- JCL Content --- +//ZWEIMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWEIMVS +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.SZWELOAD') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//AUTHCPY EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd components/zss && +ZWE_TMP_MVS2='TEST.DATASET.PFX.SZWELOAD' && +cp -X LOADLIB/ZWESIS01 +"//'$ZWE_TMP_MVS2(ZWESIS01)'" && +cp -X LOADLIB/ZWESAUX +"//'$ZWE_TMP_MVS2(ZWESAUX)'" && +cp -X LOADLIB/ZWESISDL +"//'$ZWE_TMP_MVS2(ZWESISDL)'" && +cd ../launcher/bin && +cp -X zowe_launcher +"//'$ZWE_TMP_MVS2(ZWELNCH)'" +/* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) simple --dry-run 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0301W: TEST.DATASET.PFX.PARMLIB already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.SZWELOAD already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Warning ZWEL0301W: TEST.DATASET.PFX.ZWESAPL already exists and will not be overwritten. For upgrades, you must use --allow-overwrite. +Skipped writing to a dataset. To write, you must use --allow-overwrite. + +>> Zowe custom data sets are initialized successfully." +`; + +exports[`init-mvs (SHORT) zwesip00 customization 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +bos extend currSize=0x0 dataSize=0x1056 chunk=0x1000 extend=0x1056 +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Create data sets if they do not exist +Warning ZWEL0300W: TEST.DATASET.PFX.PARMLIB already exists. Members in this data set will be overwritten. +Warning ZWEL0300W: TEST.DATASET.PFX.ZWESAPL already exists. Members in this data set will be overwritten. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS) +--- JCL Content --- +//ZWERMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWERMVS2". +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE ('TEST.DATASET.PFX.PARMLIB', + + 'TEST.DATASET.PFX.ZWESAPL') + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWERMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWERMVS2) +--- JCL Content --- +//ZWERMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to remove the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWERMVS +//* +//********************************************************************* +//RMPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +DELETE 'TEST.DATASET.PFX.SZWELOAD' + + SCRATCH NONVSAM +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS) +--- JCL Content --- +//ZWEIMVS JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create datasets used by a Zowe "instance" +//* Instances represent a configuration of Zowe, different from the +//* "runtime" datasets that are created upon install of Zowe / SMPE. +//* +//* If your choosen value of 'zowe.setup.dataset.authLoadlib' is not +//* Equal to 'zowe.setup.prefix' + 'SZWELOAD', +//* Then you must also run "ZWEIMVS2". +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.PARMLIB') + +dsntype(library) dsorg(po) recfm(f b) lrecl(80) + +unit(sysallda) space(15,15) tracks + +ALLOC NEW DA('TEST.DATASET.PFX.ZWESAPL') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//MEMBCPY EXEC PGM=IEBCOPY +//SYSPRINT DD SYSOUT=A +//SYSUT1 DD DSN=TEST.DATASET.PFX.SZWESAMP,DISP=SHR +//SYSUT2 DD DSN=TEST.DATASET.PFX.PARMLIB,DISP=OLD +//SYSIN DD * + COPY OUTDD=SYSUT2,INDD=SYSUT1 + SELECT MEMBER=((ZWESIP00,ZWESIP11,R)) +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEIMVS2) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWEIMVS2) +--- JCL Content --- +//ZWEIMVS2 JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is used to create the APF load library for an instance +//* Of Zowe. It is not needed if your choosen value of +//* 'zowe.setup.dataset.authLoadlib' is equal to +//* 'zowe.setup.prefix' + 'SZWELOAD'. +//* +//* When running this job, you should also run ZWEIMVS +//* +//********************************************************************* +//MKPDSE EXEC PGM=IKJEFT01 +//SYSTSPRT DD SYSOUT=A +//SYSTSIN DD * +ALLOC NEW DA('TEST.DATASET.PFX.SZWELOAD') + +dsntype(library) dsorg(po) recfm(u) lrecl(0) + +blksize(32760) unit(sysallda) space(30,15) tracks +//* +//AUTHCPY EXEC PGM=BPXBATCH +//BPXPRINT DD SYSOUT=* +//STDOUT DD SYSOUT=* +//STDERR DD SYSOUT=* +//STDPARM DD * +SH cd '/test/dir' && +cd components/zss && +ZWE_TMP_MVS2='TEST.DATASET.PFX.SZWELOAD' && +cp -X LOADLIB/ZWESIS01 +"//'$ZWE_TMP_MVS2(ZWESIS01)'" && +cp -X LOADLIB/ZWESAUX +"//'$ZWE_TMP_MVS2(ZWESAUX)'" && +cp -X LOADLIB/ZWESISDL +"//'$ZWE_TMP_MVS2(ZWESISDL)'" && +cd ../launcher/bin && +cp -X zowe_launcher +"//'$ZWE_TMP_MVS2(ZWELNCH)'" +/* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + +>> Zowe custom data sets are initialized successfully." +`; diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap index 106a398e6f..4dba668113 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/stc.test.ts.snap @@ -3,7 +3,7 @@ exports[`init-stc (LONG) run setup with defaults 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -160,7 +160,7 @@ Job ZWEISTC(JOB00000) completed with RC=0 exports[`init-stc (LONG) run stc setup, then overwrite, then run again 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -317,7 +317,7 @@ Job ZWEISTC(JOB00000) completed with RC=0 exports[`init-stc (LONG) run stc setup, then overwrite, then run again 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -411,7 +411,7 @@ Job ZWEISTC(JOB00000) completed with RC=0 exports[`init-stc (LONG) run stc setup, then overwrite, then run again 3`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -421,123 +421,10 @@ Warning ZWEL0301W: TEST.DATASET.PFX.TEST.PROCLIB(ZWESASTC) already exists and wi Skipped writing to TEST.DATASET.PFX.TEST.PROCLIB. To write, you must use --allow-overwrite." `; -exports[`init-stc (LONG) run stc setup, then overwrite, then run again: short-before-all-stc 1`] = ` -"Temporary directory '/tmp/.zweenv-0000' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /some/other/zowe.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully" -`; - exports[`init-stc (SHORT) aux stc exists 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -548,7 +435,7 @@ Skipped writing to TEST.DATASET.PFX.TEST.PROCLIB. To write, you must use --allow exports[`init-stc (SHORT) aux stc exists 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -742,7 +629,7 @@ Validity Exceptions(s) with object at exports[`init-stc (SHORT) valid config empty proclib 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -865,7 +752,7 @@ Validity Exceptions(s) with object at exports[`init-stc (SHORT) zis stc exists 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -876,7 +763,7 @@ Skipped writing to TEST.DATASET.PFX.TEST.PROCLIB. To write, you must use --allow exports[`init-stc (SHORT) zis stc exists 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -974,7 +861,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-stc (SHORT) zos stc exists 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task @@ -985,7 +872,7 @@ Skipped writing to TEST.DATASET.PFX.TEST.PROCLIB. To write, you must use --allow exports[`init-stc (SHORT) zos stc exists 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Install Zowe main started task diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index e19ad35262..b58f8a3926 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -3,7 +3,7 @@ exports[`init-vsam (LONG) creates vsam 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -181,119 +181,6 @@ Job ZWECSVSM(JOB00000) completed with RC=0 >> Zowe Caching Service VSAM storage is created successfully." `; -exports[`init-vsam (LONG) creates vsam: short-before-all-vsam 1`] = ` -"Temporary directory '/tmp/.zweenv-0000' created. -Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1057 chunk=0x1000 extend=0x1057 -Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) ---- JCL content --- -//ZWEGENER JOB -//* -//* This program and the accompanying materials are made available -//* under the terms of the Eclipse Public License v2.0 which -//* accompanies this distribution, and is available at -//* https://www.eclipse.org/legal/epl-v20.html -//* -//* SPDX-License-Identifier: EPL-2.0 -//* -//* Copyright Contributors to the Zowe Project. 2020, 2020 -//* -//********************************************************************* -//* -//* This job is responsible for generating other jobs required -//* to configure Zowe. -//* -//* The method of validating your configuration is using -//* JSON Schema . Zowe provides -//* the ConfigMgr to assist in this. This job will invoke -//* the ConfigMgr to validate your current configuration -//* before generating any jobs. If there are any values -//* that are incorrect, you will be notified. You should -//* fix the value and then run this job again. You can run -//* this job as many times as you need. -//* -//* Configmgr documentation: -//* https://docs.zowe.org/stable/user-guide/configmgr-using -//* -//* Note: Any string with braces has an associated yaml value -//* in one of the yaml definitions for Zowe. -//* You must find the value and substitute it. -//* -//* {key} -> value -//* -//GENER EXEC PGM=IKJEFT1B -//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, -// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), -// SPACE=(3120,(20,5,10)) -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR -//* -//* Replace TEST.DATASET.PFX with the -//* Value as seen in zowe.yaml -//* -//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR -//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR -//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR -//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR -//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR -//* -//* The order must be as follows. -//* -//* zowe-yaml-schema.json -//* server-common.json -//* -//* Replace /test/dir with where your Zowe run time -//* directory is, as seen in zowe.yaml -//* -//MYSCHEMA DD *,DLM=$$ -FILE /test/dir/schemas/zowe-yaml-schema.json -FILE /test/dir/schemas/server-common.json -$$ -//* -//* The DD below must include one or more FILE or PARMLIB -//* Entries. The lower entries have their values -//* Overridden by the higher entries. -//* PARMLIB member must be named "ZWEYAML" -//* -//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB -//* FILE /some/other/zowe.yaml -//MYCONFIG DD *,DLM=$$ -FILE /test/dir/zowe.test.yaml -$$ -//CMGROUT DD SYSOUT=* -//SYSPRINT DD SYSOUT=* -//SYSTSPRT DD SYSOUT=* -//* -//* Change 'generate' to 'nogenerate' if you only -//* want to validate your configuration. The default -//* option, 'generate', will validate and then generate -//* jobs based on your configuration. -//* -//* - generate -//* - nogenerate -//* -//* Change 'noverbose' to 'verbose' below for -//* advanced logging. This is not needed unless -//* there is an error. -//* -//* - verbose -//* - noverbose -//* -//SYSTSIN DD * -ISPSTART CMD(%ZWEGEN00 - -generate - -noverbose - -) - ---- End of JCL --- -Submitting Job ZWEGENER -Job ZWEGENER(JOB00000) completed with RC=0 -Zowe JCL generated successfully" -`; - exports[`init-vsam (SHORT) invalid NONRLS configurations 1`] = ` "Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data Validity Exceptions(s) with object at @@ -306,7 +193,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) invalid NONRLS configurations 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104b chunk=0x1000 extend=0x104b +bos extend currSize=0x0 dataSize=0x104a chunk=0x1000 extend=0x104a ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -316,7 +203,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined i exports[`init-vsam (SHORT) invalid NONRLS configurations 3`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1046 chunk=0x1000 extend=0x1046 +bos extend currSize=0x0 dataSize=0x1045 chunk=0x1000 extend=0x1045 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -326,7 +213,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.name) is not defined in exports[`init-vsam (SHORT) invalid NONRLS configurations 4`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1044 chunk=0x1000 extend=0x1044 +bos extend currSize=0x0 dataSize=0x1043 chunk=0x1000 extend=0x1043 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -345,7 +232,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) invalid NONRLS configurations 6`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x103d chunk=0x1000 extend=0x103d +bos extend currSize=0x0 dataSize=0x103c chunk=0x1000 extend=0x103c ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -355,7 +242,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined i exports[`init-vsam (SHORT) invalid NONRLS configurations 7`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104f chunk=0x1000 extend=0x104f +bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -374,7 +261,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) invalid RLS configurations 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e +bos extend currSize=0x0 dataSize=0x104d chunk=0x1000 extend=0x104d ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -393,7 +280,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) invalid RLS configurations 4`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1040 chunk=0x1000 extend=0x1040 +bos extend currSize=0x0 dataSize=0x103f chunk=0x1000 extend=0x103f ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -403,7 +290,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not def exports[`init-vsam (SHORT) invalid RLS configurations 5`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104f chunk=0x1000 extend=0x104f +bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -413,7 +300,7 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not def exports[`init-vsam (SHORT) simple --dry-run 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105b chunk=0x1000 extend=0x105b +bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -459,16 +346,16 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE CLUSTER - - (NAME(TEST.DATASET.PFX.VSAM) - + (NAME(TEST.DATASET.PFX.VSAMTEST) - // DD DDNAME=NONRLS // DD * REC(80 20) - INDEXED) - - DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - + DATA(NAME(TEST.DATASET.PFX.VSAMTEST.DATA) - RECSZ(4096 4096) - UNIQUE - KEYS(128 0)) - - INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - + INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - UNIQUE) //RLS DD * STORCLAS() - @@ -490,7 +377,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-vsam (SHORT) skip non-vsam caching service 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1061 chunk=0x1000 extend=0x1061 +bos extend currSize=0x0 dataSize=0x1060 chunk=0x1000 extend=0x1060 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -564,7 +451,7 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) valid NONRLS configurations 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1051 chunk=0x1000 extend=0x1051 +bos extend currSize=0x0 dataSize=0x1050 chunk=0x1000 extend=0x1050 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -610,16 +497,16 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE CLUSTER - - (NAME(TEST.DATASET.PFX.VSAM) - + (NAME(TEST.DATASET.PFX.VSAMTEST) - // DD DDNAME=NONRLS // DD * REC(80 20) - INDEXED) - - DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - + DATA(NAME(TEST.DATASET.PFX.VSAMTEST.DATA) - RECSZ(4096 4096) - UNIQUE - KEYS(128 0)) - - INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - + INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - UNIQUE) //RLS DD * STORCLAS() - @@ -641,7 +528,7 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-vsam (SHORT) valid RLS configuration 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1054 chunk=0x1000 extend=0x1054 +bos extend currSize=0x0 dataSize=0x1053 chunk=0x1000 extend=0x1053 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -687,16 +574,16 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE CLUSTER - - (NAME(TEST.DATASET.PFX.VSAM) - + (NAME(TEST.DATASET.PFX.VSAMTEST) - // DD DDNAME=NONRLS // DD * REC(80 20) - INDEXED) - - DATA(NAME(TEST.DATASET.PFX.VSAM.DATA) - + DATA(NAME(TEST.DATASET.PFX.VSAMTEST.DATA) - RECSZ(4096 4096) - UNIQUE - KEYS(128 0)) - - INDEX(NAME(TEST.DATASET.PFX.VSAM.INDEX) - + INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - UNIQUE) //RLS DD * STORCLAS() - diff --git a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts index 52b74f1e2a..8021b45946 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/apfauth.test.ts @@ -21,9 +21,15 @@ describe(`${testSuiteName}`, () => { let cfgYaml: ZoweYamlType; let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test - beforeAll(() => { + beforeAll(async () => { testRunner = new RemoteTestRunner(testSuiteName); - cfgYaml = ZoweConfig.getZoweYaml(); // init + cfgYaml = ZoweConfig.getZoweYaml(); + expect.getState().currentTestName = 'before-all-apfauth'; + const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot('before-all-apfauth'); + expect(result.rc).toBe(0); + await testRunner.postTest(); }); beforeEach(() => { cfgYaml = ZoweConfig.getZoweYaml(); @@ -73,13 +79,6 @@ describe(`${testSuiteName}`, () => { }); describe('(SHORT)', () => { - beforeAll(async () => { - cfgYaml = ZoweConfig.getZoweYaml(); - const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot('short-before-all-apf'); - expect(result.rc).toBe(0); - }); it('apf empty jcllib post-generate', async () => { cfgYaml.zowe.setup.dataset.jcllib = ''; const result = await testRunner.runZweTest(cfgYaml, 'init apfauth --dry-run'); diff --git a/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts index 32aefbb456..1d96b276ea 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/certificate.test.ts @@ -20,8 +20,15 @@ describe(`${testSuiteName}`, () => { let cfgYaml: ZoweYamlType; let cleanupFiles: TestFile[] = []; // a list of datasets deleted after every test - beforeAll(() => { + beforeAll(async () => { testRunner = new RemoteTestRunner(testSuiteName); + cfgYaml = ZoweConfig.getZoweYaml(); + expect.getState().currentTestName = 'before-all-cert'; + const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot('before-all-cert'); + expect(result.rc).toBe(0); + await testRunner.postTest(); }); beforeEach(() => { cfgYaml = ZoweConfig.getZoweYaml(); @@ -38,10 +45,6 @@ describe(`${testSuiteName}`, () => { }); describe('(SHORT)', () => { - beforeAll(() => { - testRunner.runZweTest(cfgYaml, 'init generate'); - }); - it('cert dry-run', async () => { const result = await testRunner.runZweTest(cfgYaml, 'init certificate --dry-run'); expect(result.stdout).not.toBeNull(); diff --git a/tests/zwe-remote-integration/src/__tests__/init/composite.tests.ts b/tests/zwe-remote-integration/src/__tests__/init/composite.tests.ts deleted file mode 100644 index 87d2bc02bf..0000000000 --- a/tests/zwe-remote-integration/src/__tests__/init/composite.tests.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -const testSuiteName = 'init-composite'; -describe(`${testSuiteName}`, () => {}); -export {}; // remove when tests are written diff --git a/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts index 8b4c59c621..d374e0e390 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/generate.test.ts @@ -21,8 +21,15 @@ describe(`${testSuiteName}`, () => { let defaultCfgYaml: ZoweYamlType; let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test - beforeAll(() => { + beforeAll(async () => { testRunner = new RemoteTestRunner(testSuiteName); + cfgYaml = ZoweConfig.getZoweYaml(); + expect.getState().currentTestName = 'before-all-generate'; + const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot('before-all-generate'); + expect(result.rc).toBe(0); + await testRunner.postTest(); }); beforeEach(() => { cfgYaml = ZoweConfig.getZoweYaml(); @@ -45,16 +52,8 @@ describe(`${testSuiteName}`, () => { }); describe('(SHORT)', () => { - it('disable cfgmgr', async () => { - cfgYaml.zowe.useConfigmgr = false; - const result = await testRunner.runZweTest(cfgYaml, 'init generate'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(60); // 60 is expected... - }); - it('bad ds prefix', async () => { - cfgYaml.zowe.setup.dataset.prefix = 'ZOWEAD3.ZWETEST.NOEXIST'; + cfgYaml.zowe.setup.dataset.prefix = 'SOME.DS.NOEXIST'; const result = await testRunner.runZweTest(cfgYaml, 'init generate --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); @@ -65,43 +64,36 @@ describe(`${testSuiteName}`, () => { const result = await testRunner.runZweTest(cfgYaml, 'init generate --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(0); // 60 is expected... + expect(result.rc).toBe(0); }); it('BAD: missing defaults.yaml', async () => { - await testRunner.removeFileForTest('files/defaults.yaml'); - const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + await testRunner.removeUssFileForTest('files/defaults.yaml'); + const result = await testRunner.runZweTest(cfgYaml, 'init generate --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); // FIXME: the snapshot indicates processing continues when it shouldn't expect(result.rc).not.toBe(0); }); it('BAD: invalid value defaults.yaml', async () => { + delete cfgYaml.zowe.configmgr; // @ts-expect-error intentionally setting an incorrect value defaultCfgYaml.zowe.configmgr.validation = 'WRONG_VALUE'; - const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); + const result = await testRunner.runZweTestWithDefaults(cfgYaml, defaultCfgYaml, 'init generate --dry-run'); expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); // FIXME: the snapshot indicates processing continues when it shouldn't - expect(result.rc).not.toBe(0); + expect(result.rc).toBe(1); }); + // TODO: This test gives RC=0, but shouldn't it fail? it('BAD: invalid format defaults.yaml', async () => { // @ts-expect-error invalid yaml format defaultCfgYaml.zowe = '....\n somefield:\n #another:\n' + defaultCfgYaml.zowe; - const result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot(); // FIXME: the snapshot indicates processing continues when it shouldn't - expect(result.rc).not.toBe(0); - }); - }); - - describe('(LONG)', () => { - it('missing proclib with valid stcs abc', async () => { - cfgYaml.zowe.setup.dataset.proclib = `${REMOTE_SYSTEM_INFO.prefix}.NOEXIST.PROC`; - const result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); + const result = await testRunner.runZweTestWithDefaults(cfgYaml, defaultCfgYaml, 'init generate --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(1); + expect(result.rc).toBe(0); }); }); + + describe('(LONG)', () => {}); }); diff --git a/tests/zwe-remote-integration/src/__tests__/init/mvs.test.ts b/tests/zwe-remote-integration/src/__tests__/init/mvs.test.ts new file mode 100644 index 0000000000..d834e7cd7a --- /dev/null +++ b/tests/zwe-remote-integration/src/__tests__/init/mvs.test.ts @@ -0,0 +1,254 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import { REMOTE_SYSTEM_INFO } from '../../config/TestConfig'; +import { ZoweConfig } from '../../config/ZoweConfig'; +import ZoweYamlType from '../../config/ZoweYamlType'; +import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; +import { TestFile, TestFileActions, FileType } from '../../zos/TestFileActions'; + +const testSuiteName = 'init-mvs'; +describe(`${testSuiteName}`, () => { + let testRunner: RemoteTestRunner; + let cfgYaml: ZoweYamlType; + let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test + + beforeAll(async () => { + testRunner = new RemoteTestRunner(testSuiteName); + cfgYaml = ZoweConfig.getZoweYaml(); + expect.getState().currentTestName = 'before-all-mvs'; + const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot('before-all-mvs'); + expect(result.rc).toBe(0); + await testRunner.postTest(); + }); + beforeEach(() => { + cfgYaml = ZoweConfig.getZoweYaml(); + }); + + afterEach(async () => { + await testRunner.postTest(); + await TestFileActions.deleteAll(cleanupDatasets); + cleanupDatasets = []; + }); + + afterAll(() => { + testRunner.shutdown(); + }); + + describe('(LONG)', () => { + /* beforeEach(async () => { + cfgYaml = ZoweConfig.getZoweYaml(); + // re-created in every `init` subcommand based on changes to zowe yaml command... + const jcllib: TestFile = { name: REMOTE_SYSTEM_INFO.jcllib, type: FileType.DS_NON_CLUSTER }; + // try to delete everything we know about + await TestFileActions.deleteAll([jcllib]); + }); + + below test pending review of ZWESISDL, ZWESIS01, zowe_launcher usage in ZWEIMVS2 and + corresponding update to test framework + + it('creates mvs', async () => { + const dsRoot = cfgYaml.zowe.setup.dataset; + // @ts-expect-error schema typing issues in TS + testRunner.removeDatasetsForTest([dsRoot.authPluginLib]); + let result = await testRunner.runZweTest(cfgYaml, 'init mvs'); // this runs init generate implicitly + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + result = await testRunner.runZweTest(cfgYaml, 'init mvs'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + + result = await testRunner.runZweTest(cfgYaml, 'init mvs --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + });*/ + }); + + describe('(SHORT)', () => { + it('bad ds prefix post-generate', async () => { + cfgYaml.zowe.setup.dataset.prefix = null; + let result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.prefix = ''; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + + it('jcllib fails verification', async () => { + cfgYaml.zowe.setup.dataset.jcllib = null; + let result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.jcllib = ''; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + }); + + it('authLoadLib negatives', async () => { + cfgYaml.zowe.setup.dataset.authLoadlib = null; + let result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.authLoadlib = ''; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.authLoadlib = 'DOES.NOT.EXIST.ALL'; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + cfgYaml.zowe.setup.dataset.authLoadlib = cfgYaml.zowe.setup.dataset.authPluginLib; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + cfgYaml.zowe.setup.dataset.authLoadlib = cfgYaml.zowe.setup.dataset.prefix + '.SZWEAUTH'; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + // with allow-overwrite + cfgYaml.zowe.setup.dataset.authLoadlib = cfgYaml.zowe.setup.dataset.prefix + '.SZWEAUTH'; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + cfgYaml.zowe.setup.dataset.authLoadlib = 'DOES.NOT.EXIST'; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + cfgYaml.zowe.setup.dataset.authLoadlib = ZoweConfig.getZoweYaml().zowe.setup.dataset.authLoadlib; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + + it('parmlib negatives ', async () => { + cfgYaml.zowe.setup.dataset.parmlib = null; + let result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.parmlib = ''; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.parmlib = 'DOES.NOT.EXIST.ALL'; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + cfgYaml.zowe.setup.dataset.parmlib = cfgYaml.zowe.setup.dataset.authPluginLib; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + // with allow-overwrite + cfgYaml.zowe.setup.dataset.parmlib = 'DOES.NOT.EXIST'; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + cfgYaml.zowe.setup.dataset.parmlib = ZoweConfig.getZoweYaml().zowe.setup.dataset.authLoadlib; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + + it('authPluginLib negatives ', async () => { + cfgYaml.zowe.setup.dataset.authPluginLib = null; + let result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.authPluginLib = ''; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(1); + + cfgYaml.zowe.setup.dataset.authPluginLib = 'DOES.NOT.EXIST.ALL'; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + cfgYaml.zowe.setup.dataset.authPluginLib = cfgYaml.zowe.setup.dataset.parmlib; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + // with allow-overwrite + cfgYaml.zowe.setup.dataset.authPluginLib = 'DOES.NOT.EXIST'; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + + cfgYaml.zowe.setup.dataset.parmlib = ZoweConfig.getZoweYaml().zowe.setup.dataset.authLoadlib; + result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + + it('zwesip00 customization ', async () => { + cfgYaml.zowe.setup.dataset.parmlibMembers = { zis: 'ZWESIP11' }; + const result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + + it('simple --dry-run', async () => { + const result = await testRunner.runZweTest(cfgYaml, 'init mvs --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + }); +}); diff --git a/tests/zwe-remote-integration/src/__tests__/init/mvs.tests.ts b/tests/zwe-remote-integration/src/__tests__/init/mvs.tests.ts deleted file mode 100644 index 31e2839514..0000000000 --- a/tests/zwe-remote-integration/src/__tests__/init/mvs.tests.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License v2.0 which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-v20.html - * - * SPDX-License-Identifier: EPL-2.0 - * - * Copyright Contributors to the Zowe Project. - */ - -const testSuiteName = 'init-mvs'; -describe(`${testSuiteName}`, () => {}); -export {}; // remove when tests are written diff --git a/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts index ba81f6630e..36593e6aaa 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/stc.test.ts @@ -21,9 +21,15 @@ describe(`${testSuiteName}`, () => { let cfgYaml: ZoweYamlType; let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test - beforeAll(() => { + beforeAll(async () => { testRunner = new RemoteTestRunner(testSuiteName); cfgYaml = ZoweConfig.getZoweYaml(); + expect.getState().currentTestName = 'before-all-stc'; + const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot('before-all-tc'); + expect(result.rc).toBe(0); + await testRunner.postTest(); }); beforeEach(() => { cfgYaml = ZoweConfig.getZoweYaml(); @@ -88,14 +94,6 @@ describe(`${testSuiteName}`, () => { }); describe('(SHORT)', () => { - beforeAll(async () => { - cfgYaml = ZoweConfig.getZoweYaml(); - const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot('short-before-all-stc'); - expect(result.rc).toBe(0); - }); - it('wrong ds prefix', async () => { cfgYaml.zowe.setup.dataset.prefix = null; let result = await testRunner.runZweTest(cfgYaml, 'init stc --dry-run'); diff --git a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts index bac021918f..47bc65084e 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts @@ -20,10 +20,17 @@ describe(`${testSuiteName}`, () => { let cfgYaml: ZoweYamlType; let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test - beforeAll(() => { + beforeAll(async () => { testRunner = new RemoteTestRunner(testSuiteName); cfgYaml = ZoweConfig.getZoweYaml(); + expect.getState().currentTestName = 'before-all-vsam'; + const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot('before-all-vsam'); + expect(result.rc).toBe(0); + await testRunner.postTest(); }); + beforeEach(() => { cfgYaml = ZoweConfig.getZoweYaml(); // customizations for all vsam tests @@ -59,14 +66,6 @@ describe(`${testSuiteName}`, () => { }); describe('(SHORT)', () => { - beforeAll(async () => { - cfgYaml = ZoweConfig.getZoweYaml(); - const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); - expect(result.stdout).not.toBeNull(); - expect(result.cleanedStdout).toMatchSnapshot('short-before-all-vsam'); - expect(result.rc).toBe(0); - }); - it('skip non-vsam caching service', async () => { // @ts-expect-error dynamic property access not in schema cfgYaml.components['caching-service'].storage.mode = 'INFINISPAN'; diff --git a/tests/zwe-remote-integration/src/config/TestConfig.ts b/tests/zwe-remote-integration/src/config/TestConfig.ts index f78707226f..1d73afc7e4 100644 --- a/tests/zwe-remote-integration/src/config/TestConfig.ts +++ b/tests/zwe-remote-integration/src/config/TestConfig.ts @@ -87,6 +87,7 @@ export const REMOTE_SYSTEM_INFO = { szweload: `${testPrefix}.SZWELOAD`, authLoadLib: `${testPrefix}.SZWELOAD`, authPluginLib: `${testPrefix}.ZWESAPL`, + parmlib: `${testPrefix}.PARMLIB`, ussTestDir: configData.remote_test_dir, hostname: configData.zos_host, zosmfPort: configData.zosmf_port, diff --git a/tests/zwe-remote-integration/src/globalSetup.ts b/tests/zwe-remote-integration/src/globalSetup.ts index 2f853191cb..758fda06a5 100644 --- a/tests/zwe-remote-integration/src/globalSetup.ts +++ b/tests/zwe-remote-integration/src/globalSetup.ts @@ -12,6 +12,7 @@ import * as uss from './zos/Uss'; import * as _ from 'lodash'; import * as path from 'path'; import * as files from '@zowe/zos-files-for-zowe-sdk'; +import * as tar from 'tar'; import { DOWNLOAD_CONFIGMGR, DOWNLOAD_ZOWE_TOOLS, @@ -54,7 +55,8 @@ function setupBaseYaml() { zoweYaml.zowe.setup.certificate.pkcs12.directory = REMOTE_SYSTEM_INFO.ussTestDir; zoweYaml.zowe.setup.dataset.authLoadlib = REMOTE_SYSTEM_INFO.authLoadLib; zoweYaml.zowe.setup.dataset.authPluginLib = REMOTE_SYSTEM_INFO.authPluginLib; - // zoweYaml.zowe.setup.dataset.loadlib = REMOTE_SYSTEM_INFO.szweexec; + zoweYaml.zowe.setup.dataset.parmlib = REMOTE_SYSTEM_INFO.parmlib; + zoweYaml.zowe.setup.dataset.loadlib = REMOTE_SYSTEM_INFO.szweexec; // zoweYaml.node.home = systemDefaults.zos_node_home; // zoweYaml.zowe.runtimeDirectory = systemDefaults. @@ -216,8 +218,9 @@ module.exports = async () => { ); console.log(`Uploading ${REPO_ROOT_DIR}/bin to ${REMOTE_SYSTEM_INFO.ussTestDir}/bin...`); + // archive without compression (issues on some backends) - execSync(`tar -cf ${THIS_TEST_ROOT_DIR}/.build/zwe.tar -C ${REPO_ROOT_DIR} bin`); + tar.c({ gzip: false, file: `${THIS_TEST_ROOT_DIR}/.build/zwe.tar`, sync: true, cwd: `${REPO_ROOT_DIR}` }, ['bin']); await files.Upload.fileToUssFile( zosmfSession, `${THIS_TEST_ROOT_DIR}/.build/zwe.tar`, @@ -231,7 +234,6 @@ module.exports = async () => { // zowe-install-packaging-tools const utilsDir = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'utility-tools'); fs.mkdirpSync(`${utilsDir}`); - execSync(`unzip -o ${THIS_TEST_ROOT_DIR}/.build/${zoweToolsZip} -d ${utilsDir}`, { cwd: THIS_TEST_ROOT_DIR }); for (const file of fs.readdirSync(utilsDir)) { const match = file.match(/zowe-(.*)-[0-9]?.*tgz/im); @@ -241,7 +243,8 @@ module.exports = async () => { console.log(`Uploading ${pkgName} to ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/utils...`); // re-archive without compression (issues on some backends) - execSync(`tar xzf ${fileName} && tar -cf ${pkgName}.tar package && rm -rf package`, { cwd: utilsDir }); + tar.x({ cwd: utilsDir, file: `${utilsDir}/${fileName}`, sync: true }); + tar.c({ gzip: false, file: `${pkgName}.tar`, cwd: utilsDir }, ['package']); await files.Upload.fileToUssFile( zosmfSession, `${utilsDir}/${pkgName}.tar`, @@ -317,6 +320,11 @@ module.exports = async () => { secondary: 1, volser: REMOTE_SYSTEM_INFO.volume, }); + await createPds(REMOTE_SYSTEM_INFO.parmlib, { + primary: 5, + secondary: 1, + volser: REMOTE_SYSTEM_INFO.volume, + }); await createPds(REMOTE_SYSTEM_INFO.authLoadLib, { primary: 5, recfm: 'U', diff --git a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts index 10d7f2abfd..fd518420f6 100644 --- a/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts +++ b/tests/zwe-remote-integration/src/zos/RemoteTestRunner.ts @@ -8,16 +8,23 @@ * Copyright Contributors to the Zowe Project. */ -import { Session } from '@zowe/imperative'; +import { ImperativeError, Session } from '@zowe/imperative'; import { getSession } from './ZosmfSession'; import { UssSession } from './UssSession'; import ZoweYamlType from '../config/ZoweYamlType'; -import { REMOTE_SYSTEM_INFO, TEST_COLLECT_SPOOL, TEST_JOBS_RUN_FILE, TEST_OUTPUT_DIR } from '../config/TestConfig'; +import { + REMOTE_SYSTEM_INFO, + TEST_COLLECT_SPOOL, + TEST_JOBS_RUN_FILE, + TEST_OUTPUT_DIR, + ZOWE_YAML_OVERRIDES, +} from '../config/TestConfig'; import * as files from '@zowe/zos-files-for-zowe-sdk'; import * as fs from 'fs-extra'; import * as YAML from 'yaml'; import * as jobs from '@zowe/zos-jobs-for-zowe-sdk'; import { basename } from 'path'; +import { FileType } from './TestFileActions'; /** * RemoteTestRunner is a class which drives actions on the backend test environment and @@ -111,18 +118,102 @@ export class RemoteTestRunner { public async restoreFiles() { for (const trackedFile of this.trackedFiles) { - await this.runRaw(`mv ${trackedFile.tmpFile} ${trackedFile.srcFile}`); + switch (trackedFile.type) { + case FileType.USS_FILE: + case FileType.USS_DIR: + await this.runRaw(`mv ${trackedFile.tmpFile} ${trackedFile.srcFile}`); + break; + case FileType.DS_NON_CLUSTER: + try { + await files.Delete.dataSet(this.session, trackedFile.srcFile, {}); + } catch (error: unknown) { + // if we didn't find the dataset, it's safe to ignore the problem. + // The test could've failed to create a dataset for example. + if (!JSON.stringify(error).includes('status 404')) { + throw error; + } + } + if (trackedFile.tmpFile != null) { + await files.Rename.dataSet(this.session, trackedFile.tmpFile, trackedFile.srcFile); + } + break; + case FileType.DS_VSAM: + case FileType.DS_ZFS: + console.log(`Automation runner is trying to restore an unsupported file type. Details: ${JSON.stringify(trackedFile)}`); + break; + } } this.trackedFiles = []; } - public async removeFileForTest(filePath: string) { + /** + * Moves the datasets listed to a backup location. + * + * The datasets are restored with either the #postTest or #restore operations. + */ + public async removeDatasetsForTest(datasets: string[]) { + for (const dataset of datasets) { + await this.removeDatasetForTest(dataset); + } + } + + /** + * Moves a given dataset listed to a backup location. + * + * The dataset is restored with either the #postTest or #restore operations. + */ + public async removeDatasetForTest(dataset: string) { + try { + const dsList = await files.List.dataSetsMatchingPattern(this.session, [dataset]); + + console.log(JSON.stringify(dsList)); + if (dsList.success) { + // cleanup old backups if they're on the system + const bkupDs = `${dataset}.TEST.BKUP`; + const bkupList = await files.List.dataSetsMatchingPattern(this.session, [bkupDs]); + if (bkupList.success) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const match = bkupList.apiResponse.find((ds: any) => ds.dsname === bkupDs); + if (match != null) { + await files.Delete.dataSet(this.session, bkupDs); + } + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const matchedItem = dsList.apiResponse.find((ds: any) => ds.dsname === dataset); + console.log(`Search: ${dataset} | Matched: ${matchedItem}`); + if (matchedItem == null) { + this.trackedFiles.push({ + srcFile: dataset, + tmpFile: null, // null indicates there is no 'restore' op later + type: FileType.DS_NON_CLUSTER, + }); + } else { + await files.Rename.dataSet(this.session, dataset, bkupDs, {}); + this.trackedFiles.push({ + srcFile: dataset, + tmpFile: bkupDs, + type: FileType.DS_NON_CLUSTER, + }); + } + } + } catch (error) { + console.log('[TestRunner] Error trying to rename dataset. ' + error); + console.log(`[TestRunner] Input dataset: ${dataset}`); + console.log( + `[TestRunner] !!!IMPORTANT!!! Tests will continue to run so + cleanup can be run post-test, but will likely have invalid results.`, + ); + } + } + + public async removeUssFileForTest(filePath: string) { const flattenedTmpName = filePath.replaceAll('/', '_'); await this.runRaw(`mkdir -p ${this.REMOTE_TEST_TMP_DIR}`); await this.runRaw(`mv ${filePath} ${this.REMOTE_TEST_TMP_DIR}/${flattenedTmpName}`); this.trackedFiles.push({ srcFile: filePath, tmpFile: `${this.REMOTE_TEST_TMP_DIR}/${flattenedTmpName}`, + type: FileType.USS_FILE, }); } @@ -136,6 +227,11 @@ export class RemoteTestRunner { this.cleanFns.forEach((fn) => { cleanedOutput = fn(cleanedOutput); }); + + if (ZOWE_YAML_OVERRIDES?.zOSMF?.host) { + cleanedOutput = cleanedOutput.replace(ZOWE_YAML_OVERRIDES.zOSMF.host, 'some.testhost.com'); + } + // built-in return cleanedOutput .replace(/(JOB[0-9]{5})/gim, 'JOB00000') @@ -147,14 +243,20 @@ export class RemoteTestRunner { .replaceAll(REMOTE_SYSTEM_INFO.zosNodeHome, '/test/node/home') .replaceAll(REMOTE_SYSTEM_INFO.hostname, 'some.test.hostname') .replaceAll(REMOTE_SYSTEM_INFO.zosmfPort, '12321') - .replaceAll(REMOTE_SYSTEM_INFO.ussTestDir, '/test/dir'); + .replaceAll(REMOTE_SYSTEM_INFO.ussTestDir, '/test/dir') + .replaceAll(REMOTE_SYSTEM_INFO.hostname, 'some.testhost.com'); } - public async runZweTestWithDefaults(zoweYaml: ZoweYamlType, defaultYaml: ZoweYamlType, cwd: string = REMOTE_SYSTEM_INFO.ussTestDir) { - const testName = expect.getState().currentTestName.replace(/\s/g, '_').substring(0, 40); + public async runZweTestWithDefaults( + zoweYaml: ZoweYamlType, + defaultYaml: ZoweYamlType, + cwd: string = REMOTE_SYSTEM_INFO.ussTestDir, + ): Promise { + const testName = expect.getState().currentTestName.replace(/\s/g, '_'); const stringDefaultYaml = YAML.stringify(defaultYaml, { nullStr: '' }); const yamlOutputDir = this.yamlOutputTemplate.replace('{{ testInstance }}', testName); - await this.removeFileForTest('files/defaults.yaml'); + fs.mkdirpSync(yamlOutputDir); + await this.removeUssFileForTest('files/defaults.yaml'); fs.writeFileSync(`${yamlOutputDir}/defaults.yaml.${testName}`, stringDefaultYaml); await files.Upload.fileToUssFile( @@ -165,7 +267,7 @@ export class RemoteTestRunner { binary: false, }, ); - await this.runZweTest(zoweYaml, cwd); + return this.runZweTest(zoweYaml, cwd); } /** @@ -183,7 +285,7 @@ export class RemoteTestRunner { if (command.startsWith('zwe')) { command = command.replace(/zwe/, ''); } - const testName = expect.getState().currentTestName.replace(/\s/g, '_').substring(0, 40); + const testName = expect.getState().currentTestName.replace(/\s/g, '_'); const stringZoweYaml = YAML.stringify(zoweYaml, { nullStr: '' }); const yamlOutputDir = this.yamlOutputTemplate.replace('{{ testInstance }}', testName); fs.mkdirpSync(yamlOutputDir); @@ -229,6 +331,7 @@ export class RemoteTestRunner { type TrackedFile = { srcFile: string; tmpFile: string; + type: FileType; }; export type TestOutput = { From c3d09b2bf87a9e9fa659ac872d06e7cf9c740029 Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 13 Dec 2024 13:58:34 -0500 Subject: [PATCH 20/21] fix setup error, update vsam snaps, allow on-disk zowe yamls in tests with templating available Signed-off-by: MarkAckert --- .../zwe-remote-integration/package-lock.json | 41 +- tests/zwe-remote-integration/package.json | 4 + .../init/__resources__/vsam/er.vsam.yaml | 22 + .../init/__resources__/vsam/ok.vsam.yaml | 18 + .../init/__snapshots__/vsam.test.ts.snap | 259 ++++++++++-- .../src/__tests__/init/vsam.test.ts | 47 ++- .../src/config/ZoweConfig.ts | 10 + .../src/config/ZoweYamlType.ts | 384 ++++++++++-------- .../zwe-remote-integration/src/globalSetup.ts | 45 +- 9 files changed, 592 insertions(+), 238 deletions(-) create mode 100644 tests/zwe-remote-integration/src/__tests__/init/__resources__/vsam/er.vsam.yaml create mode 100644 tests/zwe-remote-integration/src/__tests__/init/__resources__/vsam/ok.vsam.yaml diff --git a/tests/zwe-remote-integration/package-lock.json b/tests/zwe-remote-integration/package-lock.json index 4eb1db2013..5997343f96 100644 --- a/tests/zwe-remote-integration/package-lock.json +++ b/tests/zwe-remote-integration/package-lock.json @@ -15,12 +15,14 @@ "@types/fs-extra": "11.0.4", "@types/jest": "^29.5.12", "@types/lodash": "^4.17.3", + "@types/mustache": "^4.2.5", "@types/node": "20.12.7", "@types/node-ssh": "^7.0.6", "@types/semver": "^7.5.8", "@types/tar": "^6.1.13", "@types/xml2js": "0.4.14", "@types/yaml": "^1.9.7", + "@types/yauzl": "^2.10.3", "@types/yn": "^3.1.0", "@typescript-eslint/eslint-plugin": "7.7.0", "@typescript-eslint/parser": "7.7.0", @@ -41,6 +43,7 @@ "jfrog-client-js": "^2.8.0", "json-schema-to-ts": "^3.1.0", "lodash": "^4.17.21", + "mustache": "^4.2.0", "node-jq": "^4.3.1", "node-ssh": "^13.2.0", "node-tar": "^1.0.0", @@ -51,6 +54,7 @@ "typescript": "5.4.5", "xml2js": "0.6.2", "yaml": "^2.4.2", + "yauzl": "^3.2.0", "yn": "4.0.0" } }, @@ -2057,6 +2061,12 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "dev": true }, + "node_modules/@types/mustache": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/mustache/-/mustache-4.2.5.tgz", + "integrity": "sha512-PLwiVvTBg59tGFL/8VpcGvqOu3L4OuveNvPi0EYbWchRdEVP++yRUXJPFl+CApKEq13017/4Nf7aQ5lTtHUNsA==", + "dev": true + }, "node_modules/@types/node": { "version": "20.12.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", @@ -2169,6 +2179,15 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yn": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@types/yn/-/yn-3.1.0.tgz", @@ -4302,6 +4321,16 @@ "node": ">=0.10.0" } }, + "node_modules/decompress-unzip/node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/decompress/node_modules/make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -7367,7 +7396,6 @@ "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", "dev": true, - "peer": true, "bin": { "mustache": "bin/mustache" } @@ -10328,13 +10356,16 @@ } }, "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.2.0.tgz", + "integrity": "sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==", "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/yn": { diff --git a/tests/zwe-remote-integration/package.json b/tests/zwe-remote-integration/package.json index 6e45c3deb3..cb13e790a3 100644 --- a/tests/zwe-remote-integration/package.json +++ b/tests/zwe-remote-integration/package.json @@ -11,12 +11,14 @@ "@types/fs-extra": "11.0.4", "@types/jest": "^29.5.12", "@types/lodash": "^4.17.3", + "@types/mustache": "^4.2.5", "@types/node": "20.12.7", "@types/node-ssh": "^7.0.6", "@types/semver": "^7.5.8", "@types/tar": "^6.1.13", "@types/xml2js": "0.4.14", "@types/yaml": "^1.9.7", + "@types/yauzl": "^2.10.3", "@types/yn": "^3.1.0", "@typescript-eslint/eslint-plugin": "7.7.0", "@typescript-eslint/parser": "7.7.0", @@ -37,6 +39,7 @@ "jfrog-client-js": "^2.8.0", "json-schema-to-ts": "^3.1.0", "lodash": "^4.17.21", + "mustache": "^4.2.0", "node-jq": "^4.3.1", "node-ssh": "^13.2.0", "node-tar": "^1.0.0", @@ -47,6 +50,7 @@ "typescript": "5.4.5", "xml2js": "0.6.2", "yaml": "^2.4.2", + "yauzl": "^3.2.0", "yn": "4.0.0" }, "scripts": { diff --git a/tests/zwe-remote-integration/src/__tests__/init/__resources__/vsam/er.vsam.yaml b/tests/zwe-remote-integration/src/__tests__/init/__resources__/vsam/er.vsam.yaml new file mode 100644 index 0000000000..f8099660f1 --- /dev/null +++ b/tests/zwe-remote-integration/src/__tests__/init/__resources__/vsam/er.vsam.yaml @@ -0,0 +1,22 @@ +zowe: + setup: + dataset: + prefix: SOMEUSR.ZOWE.ZWEINIT + jcllib: ${{ zowe.setup.dataset.prefix }}.JCLLIB + vsam: + mode: NONRLS + volume: VOL001 + storageClass: BADNA + useConfigmgr: true +components: + caching-service: + storage: + # OK: checked in index.js + mode: VSAM + vsam: + # OK: no name is checked + # name: + name: +# name: ${{ zowe.setup.dataset.prefix }}.CACHE.AAAAAAAAAAAAAAAAAAAAAAAAAAAA + + \ No newline at end of file diff --git a/tests/zwe-remote-integration/src/__tests__/init/__resources__/vsam/ok.vsam.yaml b/tests/zwe-remote-integration/src/__tests__/init/__resources__/vsam/ok.vsam.yaml new file mode 100644 index 0000000000..71d2a70515 --- /dev/null +++ b/tests/zwe-remote-integration/src/__tests__/init/__resources__/vsam/ok.vsam.yaml @@ -0,0 +1,18 @@ +zowe: + setup: + dataset: + jcllib: ${{ zowe.setup.dataset.prefix }}.JCLLIB + vsam: + mode: NONRLS + volume: {@ volume @} + storageClass: {@ storclas @} + useConfigmgr: true +components: + caching-service: + storage: + mode: VSAM + vsam: + name: ${{ zowe.setup.dataset.prefix }}.CACHE +# name: "DANGEROUS SYNTAX HERE" + + \ No newline at end of file diff --git a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap index b58f8a3926..cb215d5930 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap +++ b/tests/zwe-remote-integration/src/__tests__/init/__snapshots__/vsam.test.ts.snap @@ -1,9 +1,120 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`before-all-vsam: before-all-vsam 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWEGENER) +--- JCL content --- +//ZWEGENER JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* This job is responsible for generating other jobs required +//* to configure Zowe. +//* +//* The method of validating your configuration is using +//* JSON Schema . Zowe provides +//* the ConfigMgr to assist in this. This job will invoke +//* the ConfigMgr to validate your current configuration +//* before generating any jobs. If there are any values +//* that are incorrect, you will be notified. You should +//* fix the value and then run this job again. You can run +//* this job as many times as you need. +//* +//* Configmgr documentation: +//* https://docs.zowe.org/stable/user-guide/configmgr-using +//* +//* Note: Any string with braces has an associated yaml value +//* in one of the yaml definitions for Zowe. +//* You must find the value and substitute it. +//* +//* {key} -> value +//* +//GENER EXEC PGM=IKJEFT1B +//ISPPROF DD DSN=,DISP=(NEW,DELETE),UNIT=, +// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3120,DSORG=PO), +// SPACE=(3120,(20,5,10)) +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//SYSPROC DD DSN=TEST.DATASET.PFX.SZWEEXEC,DISP=SHR +//* +//* Replace TEST.DATASET.PFX with the +//* Value as seen in zowe.yaml +//* +//STEPLIB DD DSN=TEST.DATASET.PFX.SZWELOAD,DISP=SHR +//ISPPLIB DD DSN=ISP.SISPPENU,DISP=SHR +//ISPMLIB DD DSN=ISP.SISPMENU,DISP=SHR +//ISPTLIB DD DSN=ISP.SISPTENU,DISP=SHR +//ISPSLIB DD DSN=ISP.SISPSENU,DISP=SHR +//* +//* The order must be as follows. +//* +//* zowe-yaml-schema.json +//* server-common.json +//* +//* Replace /test/dir with where your Zowe run time +//* directory is, as seen in zowe.yaml +//* +//MYSCHEMA DD *,DLM=$$ +FILE /test/dir/schemas/zowe-yaml-schema.json +FILE /test/dir/schemas/server-common.json +$$ +//* +//* The DD below must include one or more FILE or PARMLIB +//* Entries. The lower entries have their values +//* Overridden by the higher entries. +//* PARMLIB member must be named "ZWEYAML" +//* +//* Ex. PARMLIB MY.ZOWE.CUSTOM.PARMLIB +//* FILE /some/other/zowe.yaml +//MYCONFIG DD *,DLM=$$ +FILE /test/dir/zowe.test.yaml +$$ +//CMGROUT DD SYSOUT=* +//SYSPRINT DD SYSOUT=* +//SYSTSPRT DD SYSOUT=* +//* +//* Change 'generate' to 'nogenerate' if you only +//* want to validate your configuration. The default +//* option, 'generate', will validate and then generate +//* jobs based on your configuration. +//* +//* - generate +//* - nogenerate +//* +//* Change 'noverbose' to 'verbose' below for +//* advanced logging. This is not needed unless +//* there is an error. +//* +//* - verbose +//* - noverbose +//* +//SYSTSIN DD * +ISPSTART CMD(%ZWEGEN00 - +generate - +noverbose - +) + +--- End of JCL --- +Submitting Job ZWEGENER +Job ZWEGENER(JOB00000) completed with RC=0 +Zowe JCL generated successfully" +`; + exports[`init-vsam (LONG) creates vsam 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -178,22 +289,97 @@ Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET Submitting Job ZWECSVSM Job ZWECSVSM(JOB00000) completed with RC=0 +>> Zowe Caching Service VSAM storage is created successfully." +`; + +exports[`init-vsam (SHORT) error yaml 1`] = ` +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +Template JCL: TEST.DATASET.PFX.SZWESAMP(ZWECSVSM) , Executable JCL: TEST.DATASET.PFX.JCLLIB(ZWECSVSM) +--- JCL Content --- +//ZWECSVSM JOB +//* +//* This program and the accompanying materials are made available +//* under the terms of the Eclipse Public License v2.0 which +//* accompanies this distribution, and is available at +//* https://www.eclipse.org/legal/epl-v20.html +//* +//* SPDX-License-Identifier: EPL-2.0 +//* +//* Copyright Contributors to the Zowe Project. 2020, 2020 +//* +//********************************************************************* +//* +//* Zowe Open Source Project +//* This JCL creates the VSAM data set for the Caching Service. +//* +//* +//* CAUTION: This is neither a JCL procedure nor a complete job. +//* Before using this JCL, you will have to make the following +//* modifications: +//* +//* 1) Add job name and job parameters to the JOB statement, to +//* meet your system requirements. +//* +//* When using RLS, customize the definitions in the RLS DD: +//* +//* 2) Optionally, change LOG option NONE to UNDO or ALL to set the +//* desired recovery options for the RLS VSAM. +//* +//* +//* Note(s): +//* +//* 1. This job should complete with return code 0. +//* +//******************************************************************** +//* +//ALLOC EXEC PGM=IDCAMS,REGION=0M +//SYSPRINT DD SYSOUT=* +//SYSIN DD * + DEFINE CLUSTER - + (NAME(TEST.DATASET.PFX.VSAMTEST) - +// DD DDNAME=NONRLS +// DD * + REC(80 20) - + INDEXED) - + DATA(NAME(TEST.DATASET.PFX.VSAMTEST.DATA) - + RECSZ(4096 4096) - + UNIQUE - + KEYS(128 0)) - + INDEX(NAME(TEST.DATASET.PFX.VSAMTEST.INDEX) - + UNIQUE) +//RLS DD * + STORCLAS() - + LOG(NONE) - +//NONRLS DD * + VOLUME(TSTVOL) - + SHAREOPTIONS(2 3) - +//* +--- End of JCL --- +JCL not submitted, command run with "--dry-run" flag. +To perform command, re-run command without "--dry-run" flag, or submit the JCL directly + +>> Command run successfully. + + >> Zowe Caching Service VSAM storage is created successfully." `; exports[`init-vsam (SHORT) invalid NONRLS configurations 1`] = ` -"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data -Validity Exceptions(s) with object at - Validity Exceptions(s) with object at /zowe - Validity Exceptions(s) with object at /zowe/setup - Validity Exceptions(s) with object at /zowe/setup/vsam - type 'null' not permitted at /zowe/setup/vsam/volume; expecting type 'string'" +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined in Zowe YAML configuration file." `; exports[`init-vsam (SHORT) invalid NONRLS configurations 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104a chunk=0x1000 extend=0x104a ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -203,7 +389,6 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined i exports[`init-vsam (SHORT) invalid NONRLS configurations 3`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1045 chunk=0x1000 extend=0x1045 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -213,7 +398,6 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.name) is not defined in exports[`init-vsam (SHORT) invalid NONRLS configurations 4`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1043 chunk=0x1000 extend=0x1043 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -221,18 +405,17 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.name) is not defined in `; exports[`init-vsam (SHORT) invalid NONRLS configurations 5`] = ` -"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data -Validity Exceptions(s) with object at - Validity Exceptions(s) with object at /zowe - Validity Exceptions(s) with object at /zowe/setup - Validity Exceptions(s) with object at /zowe/setup/vsam - type 'null' not permitted at /zowe/setup/vsam/volume; expecting type 'string'" +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined in Zowe YAML configuration file." `; exports[`init-vsam (SHORT) invalid NONRLS configurations 6`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x103c chunk=0x1000 extend=0x103c ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -242,7 +425,6 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined i exports[`init-vsam (SHORT) invalid NONRLS configurations 7`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -250,18 +432,17 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.volume) is not defined i `; exports[`init-vsam (SHORT) invalid RLS configurations 1`] = ` -"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data -Validity Exceptions(s) with object at - Validity Exceptions(s) with object at /zowe - Validity Exceptions(s) with object at /zowe/setup - Validity Exceptions(s) with object at /zowe/setup/vsam - type 'null' not permitted at /zowe/setup/vsam/storageClass; expecting type 'string'" +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not defined in Zowe YAML configuration file." `; exports[`init-vsam (SHORT) invalid RLS configurations 2`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104d chunk=0x1000 extend=0x104d ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -269,18 +450,17 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not def `; exports[`init-vsam (SHORT) invalid RLS configurations 3`] = ` -"Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data -Validity Exceptions(s) with object at - Validity Exceptions(s) with object at /zowe - Validity Exceptions(s) with object at /zowe/setup - Validity Exceptions(s) with object at /zowe/setup/vsam - type 'null' not permitted at /zowe/setup/vsam/storageClass; expecting type 'string'" +"Temporary directory '/tmp/.zweenv-0000' created. +Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. +------------------------------------------------------------------------------- +>> Initialize Zowe custom data sets + +ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not defined in Zowe YAML configuration file." `; exports[`init-vsam (SHORT) invalid RLS configurations 4`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x103f chunk=0x1000 extend=0x103f ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -290,7 +470,6 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not def exports[`init-vsam (SHORT) invalid RLS configurations 5`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x104e chunk=0x1000 extend=0x104e ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -300,7 +479,6 @@ ERROR: Error ZWEL0157E: VSAM parameter (zowe.setup.vsam.storageClass) is not def exports[`init-vsam (SHORT) simple --dry-run 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x105a chunk=0x1000 extend=0x105a ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -377,7 +555,6 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-vsam (SHORT) skip non-vsam caching service 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1060 chunk=0x1000 extend=0x1060 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -387,7 +564,7 @@ ERROR: Warning ZWEL0301W: Zowe Caching Service is not configured to use VSAM. Co exports[`init-vsam (SHORT) skip undefined caching service 1`] = ` "Error: Validation of FILE(/test/dir/zowe.test.yaml):FILE(/test/dir/files/defaults.yaml) against schema /test/dir/schemas/zowe-yaml-schema.json:/test/dir/schemas/server-common.json found invalid JSON Schema data Validity Exceptions(s) with object at - type 'null' not permitted at /components; expecting type 'object'" + string cannot be null for /components" `; exports[`init-vsam (SHORT) unset ds prefix 1`] = ` @@ -396,7 +573,9 @@ Validity Exceptions(s) with object at Validity Exceptions(s) with object at /zowe Validity Exceptions(s) with object at /zowe/setup Validity Exceptions(s) with object at /zowe/setup/dataset - type 'null' not permitted at /zowe/setup/dataset/prefix; expecting type 'string'" + Validity Exceptions(s) with string at /zowe/setup/dataset/prefix + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/prefix + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/prefix" `; exports[`init-vsam (SHORT) unset ds prefix 2`] = ` @@ -416,7 +595,9 @@ Validity Exceptions(s) with object at Validity Exceptions(s) with object at /zowe Validity Exceptions(s) with object at /zowe/setup Validity Exceptions(s) with object at /zowe/setup/dataset - type 'null' not permitted at /zowe/setup/dataset/jcllib; expecting type 'string'" + Validity Exceptions(s) with string at /zowe/setup/dataset/jcllib + string too short (len=0) '' 0 < MIN=3 at /zowe/setup/dataset/jcllib + string pattern match fail s='', pat='^([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}(\\.([A-Z\\$\\#\\@]){1}([A-Z0-9\\$\\#\\@\\-]){0,7}){0,11}$', at /zowe/setup/dataset/jcllib" `; exports[`init-vsam (SHORT) unset jcllib 2`] = ` @@ -451,7 +632,6 @@ Validity Exceptions(s) with object at exports[`init-vsam (SHORT) valid NONRLS configurations 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1050 chunk=0x1000 extend=0x1050 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets @@ -528,7 +708,6 @@ To perform command, re-run command without "--dry-run" flag, or submit the JCL d exports[`init-vsam (SHORT) valid RLS configuration 1`] = ` "Temporary directory '/tmp/.zweenv-0000' created. Zowe will remove it on success, but if zwe exits with a non-zero code manual cleanup would be needed. -bos extend currSize=0x0 dataSize=0x1053 chunk=0x1000 extend=0x1053 ------------------------------------------------------------------------------- >> Initialize Zowe custom data sets diff --git a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts index 47bc65084e..3385bfdbfa 100644 --- a/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts +++ b/tests/zwe-remote-integration/src/__tests__/init/vsam.test.ts @@ -13,16 +13,39 @@ import ZoweYamlType from '../../config/ZoweYamlType'; import { RemoteTestRunner } from '../../zos/RemoteTestRunner'; import { ZoweConfig } from '../../config/ZoweConfig'; import { FileType, TestFileActions, TestFile } from '../../zos/TestFileActions'; +import * as fs from 'fs-extra'; +import * as path from 'path'; +import * as yaml from 'yaml'; +import Mustache from 'mustache'; const testSuiteName = 'init-vsam'; + +function getResourceYaml(file: string, render: boolean = true): ZoweYamlType { + const resourceDir = path.resolve('src', '__tests__', 'init', '__resources__', 'vsam'); + let yamlContent = fs.readFileSync(path.join(resourceDir, file), 'utf8'); + if (render) { + yamlContent = Mustache.render(yamlContent, REMOTE_SYSTEM_INFO, {}, ['{@', '@}']); + } + return yaml.parse(yamlContent) as ZoweYamlType; +} + describe(`${testSuiteName}`, () => { let testRunner: RemoteTestRunner; let cfgYaml: ZoweYamlType; let cleanupDatasets: TestFile[] = []; // a list of datasets deleted after every test + function resetCfgYaml(): void { + cfgYaml = ZoweConfig.getZoweYaml(); + // customizations for all vsam tests + // @ts-expect-error incomplete schema + cfgYaml.components['caching-service'].storage.mode = 'VSAM'; // in v3, default is infinispan + cfgYaml.zowe.setup.vsam.name = REMOTE_SYSTEM_INFO.prefix + '.VSAMTEST'; + cfgYaml.zowe.setup.vsam.volume = REMOTE_SYSTEM_INFO.volume; + } + beforeAll(async () => { testRunner = new RemoteTestRunner(testSuiteName); - cfgYaml = ZoweConfig.getZoweYaml(); + resetCfgYaml(); expect.getState().currentTestName = 'before-all-vsam'; const result = await testRunner.runZweTest(cfgYaml, 'init generate --allow-overwrite'); expect(result.stdout).not.toBeNull(); @@ -32,10 +55,7 @@ describe(`${testSuiteName}`, () => { }); beforeEach(() => { - cfgYaml = ZoweConfig.getZoweYaml(); - // customizations for all vsam tests - cfgYaml.zowe.setup.vsam.name = REMOTE_SYSTEM_INFO.prefix + '.VSAMTEST'; - cfgYaml.zowe.setup.vsam.volume = REMOTE_SYSTEM_INFO.volume; + resetCfgYaml(); }); afterEach(async () => { @@ -66,6 +86,14 @@ describe(`${testSuiteName}`, () => { }); describe('(SHORT)', () => { + it('error yaml', async () => { + const testYml = ZoweConfig.overlayYaml(cfgYaml, getResourceYaml('ok.vsam.yaml')); + const result = await testRunner.runZweTest(testYml, 'init vsam --dry-run'); + expect(result.stdout).not.toBeNull(); + expect(result.cleanedStdout).toMatchSnapshot(); + expect(result.rc).toBe(0); + }); + it('skip non-vsam caching service', async () => { // @ts-expect-error dynamic property access not in schema cfgYaml.components['caching-service'].storage.mode = 'INFINISPAN'; @@ -113,14 +141,13 @@ describe(`${testSuiteName}`, () => { it('invalid NONRLS configurations', async () => { cfgYaml.zowe.setup.vsam.mode = 'NONRLS'; - // null(empty) vol cfgYaml.zowe.setup.vsam.volume = null; cfgYaml.zowe.setup.vsam.name = 'SOME.VSAM.NAME'; let result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(1); + expect(result.rc).toBe(157); // empty(str) vol cfgYaml.zowe.setup.vsam.volume = ''; @@ -152,7 +179,7 @@ describe(`${testSuiteName}`, () => { result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(1); + expect(result.rc).toBe(157); // empty(str) both cfgYaml.zowe.setup.vsam.volume = ''; @@ -191,7 +218,7 @@ describe(`${testSuiteName}`, () => { let result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(1); + expect(result.rc).toBe(157); // empty(str) stgClass cfgYaml.zowe.setup.vsam.storageClass = ''; @@ -209,7 +236,7 @@ describe(`${testSuiteName}`, () => { result = await testRunner.runZweTest(cfgYaml, 'init vsam --dry-run'); expect(result.stdout).not.toBeNull(); expect(result.cleanedStdout).toMatchSnapshot(); - expect(result.rc).toBe(1); + expect(result.rc).toBe(157); // empty(str) both cfgYaml.zowe.setup.vsam.storageClass = ''; diff --git a/tests/zwe-remote-integration/src/config/ZoweConfig.ts b/tests/zwe-remote-integration/src/config/ZoweConfig.ts index 87cd7f241b..099649bd03 100644 --- a/tests/zwe-remote-integration/src/config/ZoweConfig.ts +++ b/tests/zwe-remote-integration/src/config/ZoweConfig.ts @@ -12,6 +12,7 @@ import * as yaml from 'yaml'; import { THIS_TEST_BASE_DEFAULTS_YAML, THIS_TEST_BASE_ZOWE_YAML } from './TestConfig'; import * as fs from 'fs-extra'; import ZoweYamlType from './ZoweYamlType'; +import _ from 'lodash'; export class ZoweConfig { /* public updateField(field: string, value: string) { @@ -24,6 +25,7 @@ export class ZoweConfig { * * @returns ZoweYaml JSON Object */ + static getZoweYaml(): ZoweYamlType { const fileContents = fs.readFileSync(THIS_TEST_BASE_ZOWE_YAML, 'utf8'); const zoweYaml = yaml.parse(fileContents); @@ -35,4 +37,12 @@ export class ZoweConfig { const defaultsYaml = yaml.parse(fileContents); return defaultsYaml as ZoweYamlType; } + + static overlayYaml(base: ZoweYamlType, overlay: unknown, moreOverlays?: unknown[]): ZoweYamlType { + let combined = _.merge(base, overlay); + if (moreOverlays && moreOverlays.length > 0) { + combined = _.merge(combined, ...moreOverlays); + } + return combined as ZoweYamlType; + } } diff --git a/tests/zwe-remote-integration/src/config/ZoweYamlType.ts b/tests/zwe-remote-integration/src/config/ZoweYamlType.ts index bec77042bb..24481b73d3 100644 --- a/tests/zwe-remote-integration/src/config/ZoweYamlType.ts +++ b/tests/zwe-remote-integration/src/config/ZoweYamlType.ts @@ -293,208 +293,254 @@ const zoweSchema = zoweYamlSchema as { }; }; certificate: { - type: 'object'; - additionalProperties: false; - if: { - properties: { - type: { - const: 'PKCS12'; - }; - }; - }; - then: { - required: ['pkcs12']; - }; - else: { - required: ['keyring']; - }; - description: 'Certificate related configurations'; - properties: { - type: { - type: 'string'; - description: 'Type of certificate storage method.'; - enum: ['PKCS12', 'JCEKS', 'JCECCAKS', 'JCERACFKS', 'JCECCARACFKS', 'JCEHYBRIDRACFKS']; - default: 'PKCS12'; - }; - pkcs12: { + oneOf: [ + { type: 'object'; - additionalProperties: false; - description: 'PKCS#12 keystore settings'; + required: ['pkcs12']; properties: { - directory: { - type: ['string', 'null']; - description: 'Keystore directory'; - }; - name: { - type: ['string', 'null']; - description: 'Certificate alias name. Note: please use all lower cases as alias.'; - default: 'localhost'; - }; - password: { - type: ['string', 'null']; - description: 'Keystore password'; - default: 'password'; - }; - caAlias: { - type: ['string', 'null']; - description: 'Alias name of self-signed certificate authority. Note: please use all lower cases as alias.'; - default: 'local_ca'; - }; - caPassword: { - type: ['string', 'null']; - description: 'Password of keystore stored self-signed certificate authority.'; - default: 'local_ca_password'; - }; - lock: { - type: ['boolean', 'null']; - description: 'Whether to restrict the permissions of the keystore after creation'; - }; - import: { + type: { const: 'PKCS12' }; + pkcs12: { type: 'object'; additionalProperties: false; - description: 'Configure this section if you want to import certificate from another PKCS#12 keystore.'; + description: 'PKCS#12 keystore settings'; properties: { - keystore: { - type: 'string'; - description: 'Existing PKCS#12 keystore which holds the certificate issued by external CA.'; + directory: { + type: ['string', 'null']; + description: 'Keystore directory'; + }; + name: { + type: ['string', 'null']; + description: 'Certificate alias name. Note: please use all lower cases as alias.'; + default: 'localhost'; }; password: { - type: 'string'; - description: 'Password of the above keystore'; + type: ['string', 'null']; + description: 'Keystore password'; + default: 'password'; }; - alias: { - type: 'string'; - description: 'Certificate alias will be imported. Note: please use all lower cases as alias.'; + caAlias: { + type: ['string', 'null']; + description: 'Alias name of self-signed certificate authority. Note: please use all lower cases as alias.'; + default: 'local_ca'; + }; + caPassword: { + type: ['string', 'null']; + description: 'Password of keystore stored self-signed certificate authority.'; + default: 'local_ca_password'; + }; + lock: { + type: ['boolean', 'null']; + description: 'Whether to restrict the permissions of the keystore after creation'; + }; + import: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to import certificate from another PKCS#12 keystore.'; + properties: { + keystore: { + type: 'string'; + description: 'Existing PKCS#12 keystore which holds the certificate issued by external CA.'; + }; + password: { + type: 'string'; + description: 'Password of the above keystore'; + }; + alias: { + type: 'string'; + description: 'Certificate alias will be imported. Note: please use all lower cases as alias.'; + }; + }; }; }; }; - }; - }; - keyring: { - type: 'object'; - additionalProperties: false; - description: 'Configure this section if you are using z/OS keyring'; - properties: { - owner: { - type: 'string'; - description: 'keyring owner. If this is empty, Zowe will use the user ID defined as zowe.setup.security.users.zowe.'; + dname: { + type: 'object'; + additionalProperties: false; + description: 'Certificate distinguish name'; + properties: { + caCommonName: { + type: ['string', 'null']; + description: 'Common name of certificate authority generated by Zowe.'; + }; + commonName: { + type: ['string', 'null']; + description: 'Common name of certificate generated by Zowe.'; + }; + orgUnit: { + type: ['string', 'null']; + description: 'Organization unit of certificate generated by Zowe.'; + }; + org: { + type: ['string', 'null']; + description: 'Organization of certificate generated by Zowe.'; + }; + locality: { + type: ['string', 'null']; + description: 'Locality of certificate generated by Zowe. This is usually the city name.'; + }; + state: { + type: ['string', 'null']; + description: 'State of certificate generated by Zowe. You can also put province name here.'; + }; + country: { + type: ['string', 'null']; + description: '2 letters country code of certificate generated by Zowe.'; + }; + }; }; - name: { - type: 'string'; - description: 'keyring name'; + validity: { + type: ['integer', 'null']; + description: 'Validity days for Zowe generated certificates'; + default: 3650; }; - label: { - type: 'string'; - description: 'Label of Zowe certificate.'; - default: 'localhost'; + san: { + type: 'array'; + description: 'Domain names and IPs should be added into certificate SAN. If this field is not defined, `zwe init` command will use `zowe.externalDomains`.'; + items: { + type: 'string'; + }; }; - caLabel: { - type: 'string'; - description: 'label of Zowe CA certificate.'; - default: 'localca'; + importCertificateAuthorities: { + type: 'array'; + description: 'PEM format certificate authorities will also be imported and trusted. If you have other certificate authorities want to be trusted in Zowe keyring, list the certificate labels here. **NOTE**, due to the limitation of RACDCERT command, this field should contain maximum 2 entries.'; + items: { + type: 'string'; + }; }; - connect: { + }; + }, + { + type: 'object'; + required: ['keyring']; + properties: { + type: { enum: ['JCEKS', 'JCECCAKS', 'JCERACFKS', 'JCECCARACFKS', 'JCEHYBRIDRACFKS'] }; + keyring: { type: 'object'; additionalProperties: false; - description: 'Configure this section if you want to connect existing certificate in keyring to Zowe.'; + description: 'Configure this section if you are using z/OS keyring'; properties: { - user: { + owner: { type: 'string'; - description: 'Current owner of the existing certificate, can be SITE or an user ID.'; + description: 'keyring owner. If this is empty, Zowe will use the user ID defined as zowe.setup.security.users.zowe.'; }; - label: { + name: { type: 'string'; - description: 'Label of the existing certificate will be connected to Zowe keyring.'; + description: 'keyring name'; }; - }; - }; - import: { - type: 'object'; - additionalProperties: false; - description: 'Configure this section if you want to import existing certificate stored in data set to Zowe.'; - properties: { - dsName: { + label: { type: 'string'; - description: 'Name of the data set holds the certificate issued by other CA. This data set should be in PKCS12 format and contain private key.'; + description: 'Label of Zowe certificate.'; + default: 'localhost'; }; - password: { + caLabel: { type: 'string'; - description: 'Password for the PKCS12 data set.'; + description: 'label of Zowe CA certificate.'; + default: 'localca'; + }; + connect: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to connect existing certificate in keyring to Zowe.'; + properties: { + user: { + type: 'string'; + description: 'Current owner of the existing certificate, can be SITE or an user ID.'; + }; + label: { + type: 'string'; + description: 'Label of the existing certificate will be connected to Zowe keyring.'; + }; + }; + }; + import: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to import existing certificate stored in data set to Zowe.'; + properties: { + dsName: { + type: 'string'; + description: 'Name of the data set holds the certificate issued by other CA. This data set should be in PKCS12 format and contain private key.'; + }; + password: { + type: 'string'; + description: 'Password for the PKCS12 data set.'; + }; + }; + }; + zOSMF: { + type: 'object'; + additionalProperties: false; + description: 'Configure this section if you want to trust z/OSMF certificate authority in Zowe keyring.'; + properties: { + ca: { + type: 'string'; + description: 'z/OSMF certificate authority alias'; + }; + user: { + type: 'string'; + description: 'z/OSMF user. Zowe initialization utility can detect alias of z/OSMF CA for RACF security system. The automated detection requires this z/OSMF user as input.'; + }; + }; }; }; }; - zOSMF: { + dname: { type: 'object'; additionalProperties: false; - description: 'Configure this section if you want to trust z/OSMF certificate authority in Zowe keyring.'; + description: 'Certificate distinguish name'; properties: { - ca: { - type: 'string'; - description: 'z/OSMF certificate authority alias'; + caCommonName: { + type: ['string', 'null']; + description: 'Common name of certificate authority generated by Zowe.'; }; - user: { - type: 'string'; - description: 'z/OSMF user. Zowe initialization utility can detect alias of z/OSMF CA for RACF security system. The automated detection requires this z/OSMF user as input.'; + commonName: { + type: ['string', 'null']; + description: 'Common name of certificate generated by Zowe.'; + }; + orgUnit: { + type: ['string', 'null']; + description: 'Organization unit of certificate generated by Zowe.'; + }; + org: { + type: ['string', 'null']; + description: 'Organization of certificate generated by Zowe.'; + }; + locality: { + type: ['string', 'null']; + description: 'Locality of certificate generated by Zowe. This is usually the city name.'; + }; + state: { + type: ['string', 'null']; + description: 'State of certificate generated by Zowe. You can also put province name here.'; + }; + country: { + type: ['string', 'null']; + description: '2 letters country code of certificate generated by Zowe.'; }; }; }; - }; - }; - dname: { - type: 'object'; - additionalProperties: false; - description: 'Certificate distinguish name'; - properties: { - caCommonName: { - type: ['string', 'null']; - description: 'Common name of certificate authority generated by Zowe.'; - }; - commonName: { - type: ['string', 'null']; - description: 'Common name of certificate generated by Zowe.'; - }; - orgUnit: { - type: ['string', 'null']; - description: 'Organization unit of certificate generated by Zowe.'; - }; - org: { - type: ['string', 'null']; - description: 'Organization of certificate generated by Zowe.'; - }; - locality: { - type: ['string', 'null']; - description: 'Locality of certificate generated by Zowe. This is usually the city name.'; + validity: { + type: ['integer', 'null']; + description: 'Validity days for Zowe generated certificates'; + default: 3650; }; - state: { - type: ['string', 'null']; - description: 'State of certificate generated by Zowe. You can also put province name here.'; + san: { + type: 'array'; + description: 'Domain names and IPs should be added into certificate SAN. If this field is not defined, `zwe init` command will use `zowe.externalDomains`.'; + items: { + type: 'string'; + }; }; - country: { - type: ['string', 'null']; - description: '2 letters country code of certificate generated by Zowe.'; + importCertificateAuthorities: { + type: 'array'; + description: 'PEM format certificate authorities will also be imported and trusted. If you have other certificate authorities want to be trusted in Zowe keyring, list the certificate labels here. **NOTE**, due to the limitation of RACDCERT command, this field should contain maximum 2 entries.'; + items: { + type: 'string'; + }; }; }; - }; - validity: { - type: ['integer', 'null']; - description: 'Validity days for Zowe generated certificates'; - default: 3650; - }; - san: { - type: 'array'; - description: 'Domain names and IPs should be added into certificate SAN. If this field is not defined, `zwe init` command will use `zowe.externalDomains`.'; - items: { - type: 'string'; - }; - }; - importCertificateAuthorities: { - type: 'array'; - description: 'PEM format certificate authorities will also be imported and trusted. If you have other certificate authorities want to be trusted in Zowe keyring, list the certificate labels here. **NOTE**, due to the limitation of RACDCERT command, this field should contain maximum 2 entries.'; - items: { - type: 'string'; - }; - }; - }; + }, + ]; }; vsam: { type: 'object'; @@ -551,11 +597,11 @@ const zoweSchema = zoweYamlSchema as { description: 'Customize your Zowe z/OS JES job.'; properties: { name: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweJobname'; description: 'Job name of Zowe primary ZWESLSTC started task.'; }; prefix: { - type: 'string'; + $ref: '/schemas/v2/server-common#zoweJobname'; description: 'A short prefix to customize address spaces created by Zowe job.'; }; }; @@ -885,7 +931,7 @@ const zoweSchema = zoweYamlSchema as { file: { type: 'string'; description: 'Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.'; - pattern: '^safkeyring://.*'; + pattern: '^safkeyring[a-z]*://.*'; }; password: { type: 'string'; @@ -912,7 +958,7 @@ const zoweSchema = zoweYamlSchema as { file: { type: 'string'; description: 'Path of your z/OS keyring, including ring owner and ring name. Case sensitivity and spaces matter.'; - pattern: '^safkeyring://.*'; + pattern: '^safkeyring[a-z]*://.*'; }; password: { type: 'string'; @@ -927,11 +973,11 @@ const zoweSchema = zoweYamlSchema as { description: 'Certificate in PEM format.'; properties: { key: { - type: 'string'; + type: ['string', 'null']; description: 'Path to the certificate private key stored in PEM format.'; }; certificate: { - type: 'string'; + type: ['string', 'null']; description: 'Path to the certificate stored in PEM format.'; }; certificateAuthorities: { diff --git a/tests/zwe-remote-integration/src/globalSetup.ts b/tests/zwe-remote-integration/src/globalSetup.ts index 758fda06a5..0488570e8a 100644 --- a/tests/zwe-remote-integration/src/globalSetup.ts +++ b/tests/zwe-remote-integration/src/globalSetup.ts @@ -37,6 +37,7 @@ import { JfrogClient } from 'jfrog-client-js'; import { processManifestVersion } from './utils'; import { execSync } from 'child_process'; import { createPds } from './zos/Files'; +import * as yauzl from 'yauzl'; const zosmfSession = getSession(); @@ -169,6 +170,31 @@ module.exports = async () => { throw new Error('Could not locate zowe-utility-tools zip in the .build directory'); } + // zowe-install-packaging-tools + const utilsDir = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'utility-tools'); + fs.mkdirpSync(`${utilsDir}`); + + console.log(`Unzipping zowe-tools.zip on local machine`); + await yauzl.open(`${THIS_TEST_ROOT_DIR}/.build/${zoweToolsZip}`, { autoClose: true, lazyEntries: false }, (err, zipContents) => { + if (err) throw err; + zipContents.on('entry', async (entry) => { + // not a directory + if (!/\/$/.test(entry.fileName)) { + zipContents.openReadStream(entry, async (errZip, stream) => { + if (errZip) throw errZip; + console.log(`Unzipping ${entry.fileName}`); + const zipFilePath = `${utilsDir}/${entry.fileName}`; + if (fs.existsSync(zipFilePath)) { + fs.unlinkSync(zipFilePath); + } + fs.createFileSync(zipFilePath); + const zipFile = fs.createWriteStream(zipFilePath, { flags: 'as' }); + stream.pipe(zipFile); + }); + } + }); + }); + console.log(`Setting up remote server on ${REMOTE_SYSTEM_INFO.hostname}...`); await uss.runCommand(`mkdir -p ${REMOTE_SYSTEM_INFO.ussTestDir}`); @@ -231,10 +257,6 @@ module.exports = async () => { ); await uss.runCommand(`tar -xfo zwe.tar`, REMOTE_SYSTEM_INFO.ussTestDir); - // zowe-install-packaging-tools - const utilsDir = path.resolve(THIS_TEST_ROOT_DIR, '.build', 'utility-tools'); - fs.mkdirpSync(`${utilsDir}`); - for (const file of fs.readdirSync(utilsDir)) { const match = file.match(/zowe-(.*)-[0-9]?.*tgz/im); if (match) { @@ -244,7 +266,7 @@ module.exports = async () => { console.log(`Uploading ${pkgName} to ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/utils...`); // re-archive without compression (issues on some backends) tar.x({ cwd: utilsDir, file: `${utilsDir}/${fileName}`, sync: true }); - tar.c({ gzip: false, file: `${pkgName}.tar`, cwd: utilsDir }, ['package']); + tar.c({ gzip: false, file: `${utilsDir}/${pkgName}.tar`, cwd: utilsDir, sync: true }, ['package']); await files.Upload.fileToUssFile( zosmfSession, `${utilsDir}/${pkgName}.tar`, @@ -259,20 +281,15 @@ module.exports = async () => { } let ncertPax = ''; console.log(`Uploading ncert to ${REMOTE_SYSTEM_INFO.ussTestDir}/bin/utils...`); - fs.readdirSync(`${THIS_TEST_ROOT_DIR}/.build/utility-tools`).forEach((item) => { + fs.readdirSync(`${utilsDir}`).forEach((item) => { const match = item.match(/zowe-ncert-([0-9]?.*)\.pax/im); if (match && match[1]) { ncertPax = match[0]; } }); - await files.Upload.fileToUssFile( - zosmfSession, - `${THIS_TEST_ROOT_DIR}/.build/utility-tools/${ncertPax}`, - `${REMOTE_SYSTEM_INFO.ussTestDir}/ncert.pax`, - { - binary: true, - }, - ); + await files.Upload.fileToUssFile(zosmfSession, `${utilsDir}/${ncertPax}`, `${REMOTE_SYSTEM_INFO.ussTestDir}/ncert.pax`, { + binary: true, + }); console.log(`Converting everything in ${REMOTE_SYSTEM_INFO.ussTestDir}/bin to EBCDIC...`); await uss.runCommand(`chmod +x convert_to_ebcdic.sh && ./convert_to_ebcdic.sh`, REMOTE_SYSTEM_INFO.ussTestDir); From e1233f118cd92b58191f3ddf69a71b0c7267887b Mon Sep 17 00:00:00 2001 From: MarkAckert Date: Fri, 13 Dec 2024 16:01:28 -0500 Subject: [PATCH 21/21] backend systems with an AUTOCVT option enabled and zopen bash may incorrectly tag post-conversion Signed-off-by: MarkAckert --- .../resources/convert_to_ebcdic.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/zwe-remote-integration/resources/convert_to_ebcdic.sh b/tests/zwe-remote-integration/resources/convert_to_ebcdic.sh index 46e55321f1..7769abc7e0 100644 --- a/tests/zwe-remote-integration/resources/convert_to_ebcdic.sh +++ b/tests/zwe-remote-integration/resources/convert_to_ebcdic.sh @@ -13,6 +13,19 @@ # # Used as part of globalSetup to ensure the `bin/` folder is in the right encoding +# ------------------ +# $1: (input) file to check +# +# (output) the input file tag will be set to ebcdic if it is ISO8859-1. +# untagged files will remain untagged. +function _correctEbcdicTags { + input=$1 + TAG_VALUE=$(ls -T $input | awk '{ print $2 }') + if [[ "$TAG_VALUE" == "ISO8859-1" ]]; then + chtag -t -c IBM-1047 $input + fi +} # _correctEbcdicTags + # --------------------------------------------------------------------- # --- convert files to ascii # $1: (input) pattern to convert. @@ -48,8 +61,10 @@ function _convertAsciiToEbcdic { dir_path=$(dirname $ascii_file) mkdir -p ${output_dir}/${dir_path} mv "${tmpfile}" "${output_dir}/${ascii_file}" + _correctEbcdicTags "${output_dir}/${ascii_file}" else mv "${tmpfile}" "${ascii_file}" + _correctEbcdicTags "${ascii_file}" fi done