mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
* Remove usage of applicationCluster column from WorkspaceCluster * fix * Fix * fix * Fix * fix * Fix * fix * Fix * Fix * fix
230 lines
6.8 KiB
TypeScript
230 lines
6.8 KiB
TypeScript
/**
|
|
* Copyright (c) 2022 Gitpod GmbH. All rights reserved.
|
|
* Licensed under the GNU Affero General Public License (AGPL).
|
|
* See License.AGPL.txt in the project root for license information.
|
|
*/
|
|
|
|
import * as chai from "chai";
|
|
import { suite, test, timeout } from "mocha-typescript";
|
|
import { testContainer } from "./test-container";
|
|
import { TypeORM } from "./typeorm/typeorm";
|
|
import { WorkspaceCluster, WorkspaceClusterDB } from "@gitpod/gitpod-protocol/lib/workspace-cluster";
|
|
import { DBWorkspaceCluster } from "./typeorm/entity/db-workspace-cluster";
|
|
const expect = chai.expect;
|
|
|
|
@suite
|
|
@timeout(5000)
|
|
export class WorkspaceClusterDBSpec {
|
|
typeORM = testContainer.get<TypeORM>(TypeORM);
|
|
db = testContainer.get<WorkspaceClusterDB>(WorkspaceClusterDB);
|
|
|
|
async before() {
|
|
await this.clear();
|
|
}
|
|
|
|
async after() {
|
|
await this.clear();
|
|
}
|
|
|
|
protected async clear() {
|
|
const connection = await this.typeORM.getConnection();
|
|
const manager = connection.manager;
|
|
await manager.clear(DBWorkspaceCluster);
|
|
}
|
|
|
|
@test public async findByName() {
|
|
const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "eu71",
|
|
region: "europe",
|
|
url: "some-url",
|
|
state: "available",
|
|
score: 100,
|
|
maxScore: 100,
|
|
govern: true,
|
|
});
|
|
const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "us71",
|
|
region: "europe",
|
|
url: "some-url",
|
|
state: "cordoned",
|
|
score: 0,
|
|
maxScore: 0,
|
|
govern: false,
|
|
});
|
|
|
|
await this.db.save(wsc1);
|
|
await this.db.save(wsc2);
|
|
|
|
const result = await this.db.findByName("eu71");
|
|
expect(result).not.to.be.undefined;
|
|
expect((result as WorkspaceCluster).name).to.equal("eu71");
|
|
|
|
// Can find the eu71 cluster as seen by the us02 application cluster.
|
|
const result2 = await this.db.findByName("eu71");
|
|
expect(result2).not.to.be.undefined;
|
|
expect((result2 as WorkspaceCluster).name).to.equal("eu71");
|
|
}
|
|
|
|
@test public async deleteByName() {
|
|
const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "eu71",
|
|
region: "europe",
|
|
url: "some-url",
|
|
state: "available",
|
|
score: 100,
|
|
maxScore: 100,
|
|
govern: true,
|
|
});
|
|
const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "us71",
|
|
region: "europe",
|
|
url: "some-url",
|
|
state: "cordoned",
|
|
score: 0,
|
|
maxScore: 0,
|
|
govern: false,
|
|
});
|
|
|
|
await this.db.save(wsc1);
|
|
await this.db.save(wsc2);
|
|
|
|
await this.db.deleteByName("eu71");
|
|
expect(await this.db.findByName("eu71")).to.be.undefined;
|
|
expect(await this.db.findByName("us71")).not.to.be.undefined;
|
|
}
|
|
|
|
@test public async testFindFilteredByName() {
|
|
const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "eu71",
|
|
region: "north-america",
|
|
url: "some-url",
|
|
state: "cordoned",
|
|
score: 0,
|
|
maxScore: 0,
|
|
govern: false,
|
|
});
|
|
const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "us71",
|
|
region: "europe",
|
|
url: "some-url",
|
|
state: "cordoned",
|
|
score: 0,
|
|
maxScore: 0,
|
|
govern: false,
|
|
});
|
|
|
|
await this.db.save(wsc1);
|
|
await this.db.save(wsc2);
|
|
|
|
const wscs = await this.db.findFiltered({ name: "eu71" });
|
|
expect(wscs.length).to.equal(1);
|
|
expect(wscs[0].name).to.equal("eu71");
|
|
}
|
|
|
|
@test public async testFindFilteredByApplicationCluster() {
|
|
const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "eu71",
|
|
region: "europe",
|
|
url: "some-url",
|
|
state: "available",
|
|
score: 100,
|
|
maxScore: 100,
|
|
govern: true,
|
|
admissionConstraints: [],
|
|
});
|
|
const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "us71",
|
|
region: "north-america",
|
|
url: "some-url",
|
|
state: "available",
|
|
score: 100,
|
|
maxScore: 100,
|
|
govern: true,
|
|
admissionConstraints: [],
|
|
});
|
|
|
|
await this.db.save(wsc1);
|
|
await this.db.save(wsc2);
|
|
|
|
const wscs2 = await this.db.findFiltered({});
|
|
expect(wscs2.length).to.equal(2);
|
|
}
|
|
|
|
@test public async testFindFilteredExcludesDeletedClusters() {
|
|
const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "eu71",
|
|
region: "europe",
|
|
url: "some-url",
|
|
state: "available",
|
|
score: 100,
|
|
maxScore: 100,
|
|
govern: true,
|
|
});
|
|
const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({
|
|
name: "us71",
|
|
region: "north-america",
|
|
url: "some-url",
|
|
state: "available",
|
|
score: 100,
|
|
maxScore: 100,
|
|
govern: true,
|
|
});
|
|
|
|
await this.db.save(wsc1);
|
|
await this.db.save(wsc2);
|
|
|
|
await this.db.deleteByName("eu71");
|
|
|
|
let wscs = await this.db.findFiltered({});
|
|
expect(wscs.length).to.equal(1);
|
|
}
|
|
|
|
@test public async testFindFilteredWithRegion() {
|
|
const clusters: DBWorkspaceCluster[] = [
|
|
dbWorkspaceCluster({
|
|
name: "eu71",
|
|
region: "europe",
|
|
url: "some-url",
|
|
state: "available",
|
|
score: 100,
|
|
maxScore: 100,
|
|
govern: true,
|
|
}),
|
|
dbWorkspaceCluster({
|
|
name: "eu72",
|
|
region: "",
|
|
url: "some-url",
|
|
state: "cordoned",
|
|
score: 0,
|
|
maxScore: 0,
|
|
govern: false,
|
|
}),
|
|
dbWorkspaceCluster({
|
|
name: "us71",
|
|
region: "",
|
|
url: "some-url",
|
|
state: "available",
|
|
score: 100,
|
|
maxScore: 100,
|
|
govern: true,
|
|
}),
|
|
];
|
|
|
|
for (const cluster of clusters) {
|
|
await this.db.save(cluster);
|
|
}
|
|
|
|
const withoutRegionFilter = await this.db.findFiltered({});
|
|
expect(withoutRegionFilter.length).to.equal(3);
|
|
|
|
const matchingEurope = await this.db.findFiltered({ region: "europe" });
|
|
expect(matchingEurope.length).to.equal(1);
|
|
}
|
|
}
|
|
|
|
function dbWorkspaceCluster(cluster: Omit<DBWorkspaceCluster, "deleted">): DBWorkspaceCluster {
|
|
return { ...cluster, deleted: false };
|
|
}
|
|
|
|
module.exports = WorkspaceClusterDBSpec;
|