Skip to content

Commit 3a2fb8b

Browse files
geroplroboquat
authored andcommitted
[ws-manager-api] Fix cluster selection
1 parent 4a56406 commit 3a2fb8b

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

components/ws-manager-api/typescript/src/client-provider.spec.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ class TestClientProvider {
5454

5555
@test
5656
public async getStartClusterSets() {
57-
await this.expectInstallations(["a1", "a2", "a3"], await this.provider.getStartClusterSets({} as User, {} as Workspace, {} as WorkspaceInstance), "default case");
58-
this.expectInstallations(["a1", "a2", "a3", "con1"], await this.provider.getStartClusterSets({
57+
await this.expectInstallations([["a2", "a3"]], await this.provider.getStartClusterSets({} as User, {} as Workspace, {} as WorkspaceInstance), "default case");
58+
await this.expectInstallations([["con1"], ["a2", "a3"]], await this.provider.getStartClusterSets({
5959
rolesOrPermissions: ["new-workspace-cluster"]
6060
} as User, {} as Workspace, {} as WorkspaceInstance), "new workspace cluster");
6161
}
@@ -102,13 +102,27 @@ class TestClientProvider {
102102
expect(constraintInverseMoreResources(clusters, {getsMoreResources: true} as ExtendedUser, {} as Workspace, {} as WorkspaceInstance).map(c => c.name), "inverse more resources").to.be.eql(["b1"]);
103103
}
104104

105-
private async expectInstallations(expected: string[], actual: IWorkspaceClusterStartSet, msg: string) {
105+
private async expectInstallations(expectedSets: string[][], actual: IWorkspaceClusterStartSet, msg: string) {
106106
const a: string[] = [];
107107
for await (const c of actual) {
108108
a.push(c.installation);
109109
}
110110

111-
expect(a.sort(), msg).to.be.eql(expected);
111+
// we check:
112+
// - the order of returned sets
113+
// - identical content of said sets
114+
// - NOT the order of clusters within a set
115+
let i = 0;
116+
for (; i < expectedSets.length; i++) {
117+
const eSet = expectedSets[i];
118+
const aSet = a.splice(0, eSet.length);
119+
expect(aSet.sort(), `returned set does not match (${msg})`).to.be.eql(eSet.sort());
120+
}
121+
122+
const eOverage = expectedSets.slice(i).reduce((p, c) => [...p, ...c], []);
123+
const aOverage = a;
124+
expect(eOverage, `missing some cluster(s)/sets (${msg})`).to.be.empty;
125+
expect(aOverage, `got too many cluster(s)/sets (${msg})`).to.be.empty;
112126
}
113127

114128
}

components/ws-manager-api/typescript/src/client-provider.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export class WorkspaceManagerClientProvider implements Disposable {
4343
*/
4444
public async getStartClusterSets(user: ExtendedUser, workspace: Workspace, instance: WorkspaceInstance): Promise<IWorkspaceClusterStartSet> {
4545
const allClusters = await this.source.getAllWorkspaceClusters();
46-
const availableClusters = allClusters.filter(c => c.score >= 0 && c.state === "available");
46+
const availableClusters = allClusters.filter(c => c.score > 0 && c.state === "available");
4747

4848
const sets = workspaceClusterSets.map(constraints => {
4949
const r = constraints.constraint(availableClusters, user, workspace, instance);
@@ -62,9 +62,9 @@ export class WorkspaceManagerClientProvider implements Disposable {
6262
return {done: true, value: undefined};
6363
}
6464

65-
let res = await sets[sets.length - 1].next();
65+
let res = await sets[0].next();
6666
if (!!res.done) {
67-
sets.pop();
67+
sets.splice(0, 1);
6868
continue;
6969
}
7070

0 commit comments

Comments
 (0)