UNPKG

@hashgraph/solo

Version:

An opinionated CLI tool to deploy and manage private Hedera Networks.

102 lines 5.82 kB
// SPDX-License-Identifier: Apache-2.0 import sinon from 'sinon'; import { before, beforeEach, describe } from 'mocha'; import { expect } from 'chai'; import { getTestCluster, HEDERA_PLATFORM_VERSION_TAG } from '../../test-utility.js'; import { Flags as flags } from '../../../src/commands/flags.js'; import * as version from '../../../version.js'; import * as constants from '../../../src/core/constants.js'; import { ConfigManager } from '../../../src/core/config-manager.js'; import { ChartManager } from '../../../src/core/chart-manager.js'; import { container } from 'tsyringe-neo'; import { resetForTest } from '../../test-container.js'; import { K8Client } from '../../../src/integration/kube/k8-client/k8-client.js'; import { K8ClientFactory } from '../../../src/integration/kube/k8-client/k8-client-factory.js'; import { DependencyManager } from '../../../src/core/dependency-managers/index.js'; import { NamespaceName } from '../../../src/types/namespace/namespace-name.js'; import { InjectTokens } from '../../../src/core/dependency-injection/inject-tokens.js'; import { Argv } from '../../helpers/argv-wrapper.js'; import { DefaultHelmClient } from '../../../src/integration/helm/impl/default-helm-client.js'; import { ClusterCommandHandlers } from '../../../src/commands/cluster/handlers.js'; import { SoloPinoLogger } from '../../../src/core/logging/solo-pino-logger.js'; import { LocalConfigRuntimeState } from '../../../src/business/runtime-state/config/local/local-config-runtime-state.js'; import { ClusterCommandTasks } from '../../../src/commands/cluster/tasks.js'; const getBaseCommandOptions = (context) => { const options = { logger: sandbox.createStubInstance(SoloPinoLogger), helm: sandbox.createStubInstance(DefaultHelmClient), k8Factory: sandbox.createStubInstance(K8ClientFactory), chartManager: sandbox.createStubInstance(ChartManager), configManager: sandbox.createStubInstance(ConfigManager), depManager: sandbox.createStubInstance(DependencyManager), localConfig: sandbox.createStubInstance(LocalConfigRuntimeState), }; const k8Factory = container.resolve(InjectTokens.K8Factory); options.k8Factory.default.returns(new K8Client(context, k8Factory.default().getKubectlExecutablePath())); return options; }; const testName = 'cluster-cmd-unit'; const namespace = NamespaceName.of(testName); const argv = Argv.getDefaultArgv(namespace); const sandbox = sinon.createSandbox(); argv.setArg(flags.namespace, namespace.name); argv.setArg(flags.deployment, `${namespace.name}-deployment`); argv.setArg(flags.releaseTag, HEDERA_PLATFORM_VERSION_TAG); argv.setArg(flags.nodeAliasesUnparsed, 'node1'); argv.setArg(flags.generateGossipKeys, true); argv.setArg(flags.generateTlsKeys, true); argv.setArg(flags.clusterRef, getTestCluster()); argv.setArg(flags.soloChartVersion, version.SOLO_CHART_VERSION); argv.setArg(flags.force, true); argv.setArg(flags.clusterSetupNamespace, constants.SOLO_SETUP_NAMESPACE.name); describe('ClusterCommand unit tests', () => { before(async () => { resetForTest(namespace.name); const localConfig = container.resolve(InjectTokens.LocalConfigRuntimeState); await localConfig.load(); }); describe('Chart Install Function is called correctly', () => { let options; afterEach(() => { sandbox.restore(); }); beforeEach(() => { const k8Factory = container.resolve(InjectTokens.K8Factory); const context = k8Factory.default().contexts().readCurrent(); options = getBaseCommandOptions(context); options.logger = container.resolve(InjectTokens.SoloLogger); options.helm = container.resolve(InjectTokens.Helm); options.chartManager = container.resolve(InjectTokens.ChartManager); options.helm.dependency = sandbox.stub(); options.chartManager.isChartInstalled = sandbox.stub().returns(false); options.chartManager.install = sandbox.stub().returns(true); // Simple mock for installPodMonitorRole to avoid cluster connection sandbox.stub(ClusterCommandTasks.prototype, 'installPodMonitorRole').returns({ title: 'Install pod-monitor-role ClusterRole', task: async () => { }, }); sandbox.stub(ClusterCommandTasks.prototype, 'findMinioOperator').returns({ exists: false, releaseName: undefined, }); options.configManager = container.resolve(InjectTokens.ConfigManager); options.remoteConfig = sandbox.stub(); }); it('Install function is called with expected parameters', async () => { const clusterCommandHandlers = container.resolve(ClusterCommandHandlers); await clusterCommandHandlers.setup(argv.build()); expect(options.chartManager.install.args[0][0].name).to.equal(constants.SOLO_SETUP_NAMESPACE.name); expect(options.chartManager.install.args[0][1]).to.equal(constants.MINIO_OPERATOR_RELEASE_NAME); expect(options.chartManager.install.args[0][2]).to.equal(constants.MINIO_OPERATOR_CHART); expect(options.chartManager.install.args[0][3]).to.equal(constants.MINIO_OPERATOR_CHART); }); it('Should use local chart directory', async () => { argv.setArg(flags.chartDirectory, 'test-directory'); argv.setArg(flags.force, true); const clusterCommandHandlers = container.resolve(ClusterCommandHandlers); await clusterCommandHandlers.setup(argv.build()); expect(options.chartManager.install.args[0][2]).to.equal(constants.MINIO_OPERATOR_CHART); }); }); }); //# sourceMappingURL=cluster.test.js.map