Skip to content

Commit d15efd7

Browse files
committed
fixed unit test cases
Signed-off-by: Jeromy Cannon <[email protected]>
1 parent 40200a7 commit d15efd7

File tree

4 files changed

+84
-44
lines changed

4 files changed

+84
-44
lines changed

src/commands/base.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,20 +97,22 @@ export abstract class BaseCommand extends ShellRunner {
9797
* <li> Profile values file </li>
9898
* <li> User's values file </li>
9999
* </ol>
100-
* @param contextRefs - the map of cluster references
100+
* @param clusterRefs - the map of cluster references
101101
* @param valuesFileInput - the values file input string
102102
* @param chartDirectory - the chart directory
103103
* @param profileValuesFile - the profile values file
104104
*/
105105
static prepareValuesFilesMap(
106-
contextRefs: ClusterRefs,
106+
clusterRefs: ClusterRefs,
107107
chartDirectory?: string,
108108
profileValuesFile?: string,
109109
valuesFileInput?: string,
110110
): Record<ClusterRef, string> {
111111
// initialize the map with an empty array for each cluster-ref
112-
const valuesFiles: Record<ClusterRef, string> = {};
113-
Object.entries(contextRefs).forEach(([clusterRef]) => {
112+
const valuesFiles: Record<ClusterRef, string> = {
113+
[Flags.KEY_COMMON]: '',
114+
};
115+
Object.keys(clusterRefs).forEach(clusterRef => {
114116
valuesFiles[clusterRef] = '';
115117
});
116118

@@ -159,6 +161,11 @@ export abstract class BaseCommand extends ShellRunner {
159161
});
160162
}
161163

164+
if (Object.keys(valuesFiles).length > 1) {
165+
// delete the common key if there is another cluster to use
166+
delete valuesFiles[Flags.KEY_COMMON];
167+
}
168+
162169
return valuesFiles;
163170
}
164171

@@ -365,4 +372,18 @@ export abstract class BaseCommand extends ShellRunner {
365372
});
366373
return contexts;
367374
}
375+
376+
/**
377+
* Gets a list of distinct cluster references from the consensus nodes
378+
* @returns an object of cluster references
379+
*/
380+
public getClusterRefs(): ClusterRefs {
381+
const clustersRefs: ClusterRefs = {};
382+
this.getConsensusNodes().forEach(node => {
383+
if (!Object.keys(clustersRefs).includes(node.cluster)) {
384+
clustersRefs[node.cluster] = node.context;
385+
}
386+
});
387+
return clustersRefs;
388+
}
368389
}

src/commands/network.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {SecretType} from '../core/kube/resources/secret/secret_type.js';
3333
import {PvcRef} from '../core/kube/resources/pvc/pvc_ref.js';
3434
import {PvcName} from '../core/kube/resources/pvc/pvc_name.js';
3535
import {type ConsensusNode} from '../core/model/consensus_node.js';
36-
import {type ClusterRef} from '../core/config/remote/types.js';
36+
import {type ClusterRef, type ClusterRefs} from '../core/config/remote/types.js';
3737

3838
export interface NetworkDeployConfigClass {
3939
applicationEnv: string;
@@ -77,6 +77,7 @@ export interface NetworkDeployConfigClass {
7777
googleCredential: string;
7878
consensusNodes: ConsensusNode[];
7979
contexts: string[];
80+
clusterRefs: ClusterRefs;
8081
}
8182

8283
export class NetworkCommand extends BaseCommand {
@@ -290,6 +291,7 @@ export class NetworkCommand extends BaseCommand {
290291
backupBucket: string;
291292
googleCredential: string;
292293
loadBalancerEnabled: boolean;
294+
clusterRefs: ClusterRefs;
293295
}): Promise<Record<ClusterRef, string>> {
294296
const valuesArg = this.prepareValuesArg(config);
295297

@@ -298,7 +300,7 @@ export class NetworkCommand extends BaseCommand {
298300
const profileName = this.configManager.getFlag<string>(flags.profileName) as string;
299301
const profileValuesFile = await this.profileManager.prepareValuesForSoloChart(profileName);
300302
const valuesFiles: Record<ClusterRef, string> = BaseCommand.prepareValuesFilesMap(
301-
this.getLocalConfig().clusterRefs,
303+
config.clusterRefs,
302304
config.chartDirectory,
303305
profileValuesFile,
304306
config.valuesFile,
@@ -496,6 +498,7 @@ export class NetworkCommand extends BaseCommand {
496498
'namespace',
497499
'consensusNodes',
498500
'contexts',
501+
'clusterRefs',
499502
],
500503
) as NetworkDeployConfigClass;
501504

@@ -528,6 +531,7 @@ export class NetworkCommand extends BaseCommand {
528531

529532
config.consensusNodes = this.getConsensusNodes();
530533
config.contexts = this.getContexts();
534+
config.clusterRefs = this.getClusterRefs();
531535
if (config.nodeAliases.length === 0) {
532536
config.nodeAliases = config.consensusNodes.map(node => node.name) as NodeAliases;
533537
if (config.nodeAliases.length === 0) {

test/unit/commands/base.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {resetForTest} from '../../test_container.js';
1919
import {InjectTokens} from '../../../src/core/dependency_injection/inject_tokens.js';
2020
import {ComponentsDataWrapper} from '../../../src/core/config/remote/components_data_wrapper.js';
2121
import {createComponentsDataWrapper} from '../core/config/remote/components_data_wrapper.test.js';
22+
import {type ClusterRefs} from '../../../src/core/config/remote/types.js';
2223

2324
describe('BaseCommand', () => {
2425
let helm: Helm;
@@ -180,5 +181,13 @@ describe('BaseCommand', () => {
180181
expect(contexts[0]).to.equal('context1');
181182
expect(contexts[1]).to.equal('context2');
182183
});
184+
185+
it('should return clusters references', () => {
186+
const expectedClusterRefs = {cluster: 'context1', cluster2: 'context2'};
187+
const clusterRefs: ClusterRefs = baseCmd.getClusterRefs();
188+
Object.keys(clusterRefs).forEach(clusterRef => {
189+
expect(clusterRefs[clusterRef]).to.equal(expectedClusterRefs[clusterRef]);
190+
});
191+
});
183192
});
184193
});

test/unit/commands/network.test.ts

Lines changed: 44 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ import {type ClusterChecks} from '../../../src/core/cluster_checks.js';
3131
import {type K8ClientConfigMaps} from '../../../src/core/kube/k8_client/resources/config_map/k8_client_config_maps.js';
3232
import {InjectTokens} from '../../../src/core/dependency_injection/inject_tokens.js';
3333
import {K8Client} from '../../../src/core/kube/k8_client/k8_client.js';
34+
import {ConsensusNode} from '../../../src/core/model/consensus_node.js';
35+
import {ConsensusNode} from '../../../src/core/model/consensus_node.js';
36+
import * as cluster from 'node:cluster';
37+
import {NamespaceName} from '../../../src/core/kube/resources/namespace/namespace_name.js';
3438

3539
const testName = 'network-cmd-unit';
3640
const argv = getDefaultArgv();
@@ -188,47 +192,49 @@ describe('NetworkCommand unit tests', () => {
188192
});
189193

190194
it('Should use prepare config correctly for all clusters', async () => {
191-
const common = path.join('test', 'data', 'test-values.yaml');
192-
const values1 = path.join('test', 'data', 'test-values1.yaml');
193-
const values2 = path.join('test', 'data', 'test-values2.yaml');
194-
argv[flags.networkDeploymentValuesFile.name] = `${common},cluster-1=${values1},cluster-1=${values2}\``;
195-
argv[flags.chartDirectory.name] = 'test-directory';
196-
argv[flags.force.name] = true;
195+
try {
196+
const common = path.join('test', 'data', 'test-values.yaml');
197+
const values1 = path.join('test', 'data', 'test-values1.yaml');
198+
const values2 = path.join('test', 'data', 'test-values2.yaml');
199+
argv[flags.networkDeploymentValuesFile.name] = `${common},cluster=${values1},cluster=${values2}\``;
200+
argv[flags.chartDirectory.name] = 'test-directory';
201+
argv[flags.force.name] = true;
197202

198-
const task = sinon.stub();
203+
const task = sinon.stub();
199204

200-
const networkCommand = new NetworkCommand(opts);
201-
const config = await networkCommand.prepareConfig(task, argv);
202-
203-
expect(config.valuesArgMap).to.not.empty;
204-
expect(config.valuesArgMap['cluster-1']).to.not.empty;
205-
expect(config.valuesArgMap['cluster-1'].indexOf('solo-deployment/values.yaml')).to.not.equal(-1);
206-
expect(config.valuesArgMap['cluster-1'].indexOf('values.yaml')).to.not.equal(-1);
207-
expect(config.valuesArgMap['cluster-1'].indexOf('test-values1.yaml')).to.not.equal(-1);
208-
expect(config.valuesArgMap['cluster-1'].indexOf('test-values2.yaml')).to.not.equal(-1);
209-
expect(config.valuesArgMap['cluster-2']).to.not.empty;
210-
expect(config.valuesArgMap['cluster-2'].indexOf('solo-deployment/values.yaml')).to.not.equal(-1);
211-
expect(config.valuesArgMap['cluster-2'].indexOf('values.yaml')).to.not.equal(-1);
212-
expect(config.valuesArgMap['cluster-2'].indexOf('test-values1.yaml')).to.equal(-1);
213-
expect(config.valuesArgMap['cluster-2'].indexOf('test-values2.yaml')).to.equal(-1);
214-
215-
// chart values file should precede the values file passed in the command
216-
expect(config.valuesArgMap['cluster-1'].indexOf('solo-deployment/values.yaml')).to.be.lt(
217-
config.valuesArgMap['cluster-1'].indexOf('test-values1.yaml'),
218-
);
219-
expect(config.valuesArgMap['cluster-1'].indexOf('solo-deployment/values.yaml')).to.be.lt(
220-
config.valuesArgMap['cluster-1'].indexOf('test-values2.yaml'),
221-
);
205+
sinon
206+
.stub(NetworkCommand.prototype, 'getConsensusNodes')
207+
.returns([new ConsensusNode('node1', 0, 'solo-e2e', 'cluster', 'context-1')]);
208+
const networkCommand = new NetworkCommand(opts);
209+
const config = await networkCommand.prepareConfig(task, argv);
210+
211+
expect(config.valuesArgMap).to.not.empty;
212+
expect(config.valuesArgMap['cluster']).to.not.empty;
213+
expect(config.valuesArgMap['cluster'].indexOf('solo-deployment/values.yaml')).to.not.equal(-1);
214+
expect(config.valuesArgMap['cluster'].indexOf('values.yaml')).to.not.equal(-1);
215+
expect(config.valuesArgMap['cluster'].indexOf('test-values1.yaml')).to.not.equal(-1);
216+
expect(config.valuesArgMap['cluster'].indexOf('test-values2.yaml')).to.not.equal(-1);
217+
218+
// chart values file should precede the values file passed in the command
219+
expect(config.valuesArgMap['cluster'].indexOf('solo-deployment/values.yaml')).to.be.lt(
220+
config.valuesArgMap['cluster'].indexOf('test-values1.yaml'),
221+
);
222+
expect(config.valuesArgMap['cluster'].indexOf('solo-deployment/values.yaml')).to.be.lt(
223+
config.valuesArgMap['cluster'].indexOf('test-values2.yaml'),
224+
);
222225

223-
expect(config.valuesArgMap['cluster-1'].indexOf('values.yaml')).to.be.lt(
224-
config.valuesArgMap['cluster-1'].indexOf('test-values1.yaml'),
225-
);
226-
expect(config.valuesArgMap['cluster-1'].indexOf('test-values1.yaml')).to.be.lt(
227-
config.valuesArgMap['cluster-1'].indexOf('test-values2.yaml'),
228-
);
229-
expect(config.valuesArgMap['cluster-1'].indexOf('values.yaml')).to.be.lt(
230-
config.valuesArgMap['cluster-1'].indexOf('test-values2.yaml'),
231-
);
226+
expect(config.valuesArgMap['cluster'].indexOf('values.yaml')).to.be.lt(
227+
config.valuesArgMap['cluster'].indexOf('test-values1.yaml'),
228+
);
229+
expect(config.valuesArgMap['cluster'].indexOf('test-values1.yaml')).to.be.lt(
230+
config.valuesArgMap['cluster'].indexOf('test-values2.yaml'),
231+
);
232+
expect(config.valuesArgMap['cluster'].indexOf('values.yaml')).to.be.lt(
233+
config.valuesArgMap['cluster'].indexOf('test-values2.yaml'),
234+
);
235+
} finally {
236+
sinon.restore();
237+
}
232238
});
233239
});
234240
});

0 commit comments

Comments
 (0)