2022-11-07 20:41:00 +00:00
|
|
|
import SharedWorkspaceLocking from '../services/shared-workspace-locking';
|
|
|
|
|
import { Cli } from '../../cli/cli';
|
|
|
|
|
import setups from './cloud-runner-suite.test';
|
|
|
|
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
|
|
|
|
import { v4 as uuidv4 } from 'uuid';
|
|
|
|
|
import CloudRunnerOptions from '../cloud-runner-options';
|
|
|
|
|
import UnityVersioning from '../../unity-versioning';
|
|
|
|
|
import BuildParameters from '../../build-parameters';
|
Cloud runner develop - better parameterization of s3 usage, improved async workflow and GC, github checks early integration (#479)
* custom steps may leave value undefined, will be pulled from env vars
* custom steps may leave value undefined, will be pulled from env vars
* custom steps may leave value undefined, will be pulled from env vars
* add 3 new premade steps, steam-deploy-client, steam-deploy-project, aws-s3-pull-build
* fix
* fix
* fix
* continue building async-workflow support
* test checks
* test checks
* test checks
* move github checks within build workflow
* async workflow test
* async workflow test
* async workflow test
* async workflow test
* async workflow test
* async workflow test
* async workflow test
* async workflow test for aws only
* async workflow test for aws only
* async workflow test for aws only
* async workflow test for aws only
* cleanup logging
* disable lz4 compression by default
* disable lz4 compression by default
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* disable lz4 compression by default
* disable lz4 compression by default
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* workflow
* workflow
* workflow
* workflow
* workflow
* workflow
* workflow
* workflow
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
2023-01-20 17:40:57 +00:00
|
|
|
import CloudRunner from '../cloud-runner';
|
2022-11-07 20:41:00 +00:00
|
|
|
|
|
|
|
|
async function CreateParameters(overrides) {
|
|
|
|
|
if (overrides) {
|
|
|
|
|
Cli.options = overrides;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return await BuildParameters.create();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
describe('Cloud Runner Locking', () => {
|
|
|
|
|
setups();
|
|
|
|
|
it('Responds', () => {});
|
|
|
|
|
if (CloudRunnerOptions.cloudRunnerDebug) {
|
2023-02-13 21:17:18 +00:00
|
|
|
it(`Simple Locking End2End Flow`, async () => {
|
2022-11-07 20:41:00 +00:00
|
|
|
Cli.options.retainWorkspaces = true;
|
|
|
|
|
const overrides: any = {
|
|
|
|
|
versioning: 'None',
|
|
|
|
|
projectPath: 'test-project',
|
|
|
|
|
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
|
|
|
|
|
targetPlatform: 'StandaloneLinux64',
|
|
|
|
|
cacheKey: `test-case-${uuidv4()}`,
|
2023-02-13 20:30:16 +00:00
|
|
|
retainWorkspaces: true,
|
2022-11-07 20:41:00 +00:00
|
|
|
};
|
|
|
|
|
const buildParameters = await CreateParameters(overrides);
|
|
|
|
|
|
|
|
|
|
const newWorkspaceName = `test-workspace-${uuidv4()}`;
|
|
|
|
|
const runId = uuidv4();
|
Cloud runner develop - better parameterization of s3 usage, improved async workflow and GC, github checks early integration (#479)
* custom steps may leave value undefined, will be pulled from env vars
* custom steps may leave value undefined, will be pulled from env vars
* custom steps may leave value undefined, will be pulled from env vars
* add 3 new premade steps, steam-deploy-client, steam-deploy-project, aws-s3-pull-build
* fix
* fix
* fix
* continue building async-workflow support
* test checks
* test checks
* test checks
* move github checks within build workflow
* async workflow test
* async workflow test
* async workflow test
* async workflow test
* async workflow test
* async workflow test
* async workflow test
* async workflow test for aws only
* async workflow test for aws only
* async workflow test for aws only
* async workflow test for aws only
* cleanup logging
* disable lz4 compression by default
* disable lz4 compression by default
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* AWS BASE STACK for tests
* disable lz4 compression by default
* disable lz4 compression by default
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* Update github check with aws log
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* kinesis and subscription filter for logs creation skipped when watchToEnd false
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* cleanup local pipeline, log aws formation
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* async pipeline
* workflow
* workflow
* workflow
* workflow
* workflow
* workflow
* workflow
* workflow
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
* parameterize s3
2023-01-20 17:40:57 +00:00
|
|
|
CloudRunner.buildParameters = buildParameters;
|
2022-11-07 20:41:00 +00:00
|
|
|
await SharedWorkspaceLocking.CreateWorkspace(newWorkspaceName, buildParameters);
|
2023-02-12 02:39:04 +00:00
|
|
|
expect(SharedWorkspaceLocking.DoesCacheKeyTopLevelExist(buildParameters)).toBeTruthy();
|
|
|
|
|
expect(SharedWorkspaceLocking.DoesWorkspaceExist(newWorkspaceName, buildParameters)).toBeTruthy();
|
2022-11-07 20:41:00 +00:00
|
|
|
const isExpectedUnlockedBeforeLocking =
|
|
|
|
|
(await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === false;
|
|
|
|
|
expect(isExpectedUnlockedBeforeLocking).toBeTruthy();
|
2023-02-13 18:06:11 +00:00
|
|
|
const result = await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters);
|
|
|
|
|
expect(result).toBeTruthy();
|
2023-02-12 05:23:36 +00:00
|
|
|
const lines = await SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}`);
|
|
|
|
|
expect(lines.map((x) => x.replace(`/`, ``)).includes(buildParameters.cacheKey));
|
2023-02-12 04:26:31 +00:00
|
|
|
expect(await SharedWorkspaceLocking.DoesCacheKeyTopLevelExist(buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.DoesWorkspaceExist(newWorkspaceName, buildParameters)).toBeTruthy();
|
2023-02-16 22:54:06 +00:00
|
|
|
const allLocks = await SharedWorkspaceLocking.GetAllLocksForWorkspace(newWorkspaceName, buildParameters);
|
2023-02-12 04:22:01 +00:00
|
|
|
expect(
|
2023-02-12 03:34:34 +00:00
|
|
|
(
|
|
|
|
|
await SharedWorkspaceLocking.ReadLines(
|
|
|
|
|
`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParameters.cacheKey}/`,
|
|
|
|
|
)
|
2023-02-13 18:23:06 +00:00
|
|
|
).filter((x) => x.endsWith(`${newWorkspaceName}_workspace_lock`)),
|
2023-02-13 18:06:11 +00:00
|
|
|
).toHaveLength(1);
|
2023-02-12 04:22:01 +00:00
|
|
|
expect(
|
|
|
|
|
(
|
|
|
|
|
await SharedWorkspaceLocking.ReadLines(
|
|
|
|
|
`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParameters.cacheKey}/`,
|
|
|
|
|
)
|
2023-02-13 18:23:06 +00:00
|
|
|
).filter((x) => x.endsWith(`${newWorkspaceName}_workspace`)),
|
2023-02-13 18:06:11 +00:00
|
|
|
).toHaveLength(1);
|
2023-02-13 18:23:06 +00:00
|
|
|
expect(allLocks.filter((x) => x.endsWith(`${newWorkspaceName}_workspace_lock`)).length).toBeGreaterThan(0);
|
2022-11-07 20:41:00 +00:00
|
|
|
const isExpectedLockedAfterLocking =
|
|
|
|
|
(await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === true;
|
|
|
|
|
expect(isExpectedLockedAfterLocking).toBeTruthy();
|
2023-02-16 22:54:06 +00:00
|
|
|
const locksBeforeRelease = await SharedWorkspaceLocking.GetAllLocksForWorkspace(
|
|
|
|
|
newWorkspaceName,
|
|
|
|
|
buildParameters,
|
|
|
|
|
);
|
2022-11-07 20:41:00 +00:00
|
|
|
CloudRunnerLogger.log(JSON.stringify(locksBeforeRelease, undefined, 4));
|
|
|
|
|
expect(locksBeforeRelease.length).toBe(1);
|
|
|
|
|
await SharedWorkspaceLocking.ReleaseWorkspace(newWorkspaceName, runId, buildParameters);
|
2023-02-16 22:54:06 +00:00
|
|
|
const locks = await SharedWorkspaceLocking.GetAllLocksForWorkspace(newWorkspaceName, buildParameters);
|
2022-11-07 20:41:00 +00:00
|
|
|
expect(locks.length).toBe(0);
|
2023-02-13 19:05:48 +00:00
|
|
|
const isExpectedNotLockedAfterReleasing =
|
2022-11-07 20:41:00 +00:00
|
|
|
(await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === false;
|
2023-02-13 19:05:48 +00:00
|
|
|
expect(isExpectedNotLockedAfterReleasing).toBeTruthy();
|
|
|
|
|
const lockingResult2 = await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters);
|
|
|
|
|
expect(lockingResult2).toBeTruthy();
|
2023-02-13 19:11:02 +00:00
|
|
|
expect((await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === true).toBeTruthy();
|
|
|
|
|
await SharedWorkspaceLocking.ReleaseWorkspace(newWorkspaceName, runId, buildParameters);
|
|
|
|
|
expect(
|
|
|
|
|
(await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === false,
|
|
|
|
|
).toBeTruthy();
|
|
|
|
|
await SharedWorkspaceLocking.CleanupWorkspace(newWorkspaceName, buildParameters);
|
2023-02-13 19:20:00 +00:00
|
|
|
CloudRunnerLogger.log(`Starting get or create`);
|
2023-02-13 19:11:02 +00:00
|
|
|
expect(
|
|
|
|
|
await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(newWorkspaceName, runId, buildParameters),
|
|
|
|
|
).toBeTruthy();
|
2022-11-07 20:41:00 +00:00
|
|
|
}, 150000);
|
2023-02-13 20:52:19 +00:00
|
|
|
it(`Get Or Create From No Workspace`, async () => {
|
|
|
|
|
Cli.options.retainWorkspaces = true;
|
|
|
|
|
const overrides: any = {
|
|
|
|
|
versioning: 'None',
|
|
|
|
|
projectPath: 'test-project',
|
|
|
|
|
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
|
|
|
|
|
targetPlatform: 'StandaloneLinux64',
|
|
|
|
|
cacheKey: `test-case-${uuidv4()}`,
|
|
|
|
|
retainWorkspaces: true,
|
|
|
|
|
};
|
|
|
|
|
const buildParameters = await CreateParameters(overrides);
|
|
|
|
|
|
|
|
|
|
const newWorkspaceName = `test-workspace-${uuidv4()}`;
|
|
|
|
|
const runId = uuidv4();
|
|
|
|
|
CloudRunner.buildParameters = buildParameters;
|
|
|
|
|
expect(
|
|
|
|
|
await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(newWorkspaceName, runId, buildParameters),
|
|
|
|
|
).toBeTruthy();
|
|
|
|
|
}, 150000);
|
|
|
|
|
it(`Get Or Create From Unlocked`, async () => {
|
|
|
|
|
Cli.options.retainWorkspaces = true;
|
|
|
|
|
const overrides: any = {
|
|
|
|
|
versioning: 'None',
|
|
|
|
|
projectPath: 'test-project',
|
|
|
|
|
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
|
|
|
|
|
targetPlatform: 'StandaloneLinux64',
|
|
|
|
|
cacheKey: `test-case-${uuidv4()}`,
|
|
|
|
|
retainWorkspaces: true,
|
|
|
|
|
};
|
|
|
|
|
const buildParameters = await CreateParameters(overrides);
|
|
|
|
|
|
|
|
|
|
const newWorkspaceName = `test-workspace-${uuidv4()}`;
|
|
|
|
|
const runId = uuidv4();
|
|
|
|
|
CloudRunner.buildParameters = buildParameters;
|
|
|
|
|
expect(await SharedWorkspaceLocking.CreateWorkspace(newWorkspaceName, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(
|
|
|
|
|
await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(newWorkspaceName, runId, buildParameters),
|
|
|
|
|
).toBeTruthy();
|
2023-02-16 18:30:49 +00:00
|
|
|
expect(CloudRunner.lockedWorkspace).toMatch(newWorkspaceName);
|
2023-02-13 20:52:19 +00:00
|
|
|
}, 150000);
|
|
|
|
|
it(`Get Or Create From Locked`, async () => {
|
|
|
|
|
Cli.options.retainWorkspaces = true;
|
|
|
|
|
const overrides: any = {
|
|
|
|
|
versioning: 'None',
|
|
|
|
|
projectPath: 'test-project',
|
|
|
|
|
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
|
|
|
|
|
targetPlatform: 'StandaloneLinux64',
|
|
|
|
|
cacheKey: `test-case-${uuidv4()}`,
|
|
|
|
|
retainWorkspaces: true,
|
|
|
|
|
};
|
|
|
|
|
const buildParameters = await CreateParameters(overrides);
|
|
|
|
|
|
|
|
|
|
const newWorkspaceName = `test-workspace-${uuidv4()}`;
|
|
|
|
|
const runId = uuidv4();
|
2023-02-16 20:19:22 +00:00
|
|
|
const runId2 = uuidv4();
|
2023-02-13 20:52:19 +00:00
|
|
|
CloudRunner.buildParameters = buildParameters;
|
|
|
|
|
expect(await SharedWorkspaceLocking.CreateWorkspace(newWorkspaceName, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
2023-02-16 19:37:00 +00:00
|
|
|
expect(await SharedWorkspaceLocking.HasWorkspaceLock(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
2023-02-16 21:46:50 +00:00
|
|
|
expect(await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.IsWorkspaceBelowMax(newWorkspaceName, buildParameters)).toBeTruthy();
|
2023-02-13 20:52:19 +00:00
|
|
|
expect(await SharedWorkspaceLocking.DoesWorkspaceExist(newWorkspaceName, buildParameters)).toBeTruthy();
|
2023-02-17 00:07:46 +00:00
|
|
|
expect(
|
|
|
|
|
await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(newWorkspaceName, runId2, buildParameters),
|
|
|
|
|
).toBeTruthy();
|
|
|
|
|
expect(CloudRunner.lockedWorkspace).not.toMatch(newWorkspaceName);
|
|
|
|
|
}, 150000);
|
|
|
|
|
it(`Get Or Create After Double Lock And Unlock`, async () => {
|
|
|
|
|
Cli.options.retainWorkspaces = true;
|
|
|
|
|
const overrides: any = {
|
|
|
|
|
versioning: 'None',
|
|
|
|
|
projectPath: 'test-project',
|
|
|
|
|
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
|
|
|
|
|
targetPlatform: 'StandaloneLinux64',
|
|
|
|
|
cacheKey: `test-case-${uuidv4()}`,
|
|
|
|
|
retainWorkspaces: true,
|
|
|
|
|
};
|
|
|
|
|
const buildParameters = await CreateParameters(overrides);
|
|
|
|
|
|
|
|
|
|
const newWorkspaceName = `test-workspace-${uuidv4()}`;
|
|
|
|
|
const runId = uuidv4();
|
|
|
|
|
const runId2 = uuidv4();
|
|
|
|
|
CloudRunner.buildParameters = buildParameters;
|
|
|
|
|
expect(await SharedWorkspaceLocking.CreateWorkspace(newWorkspaceName, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.ReleaseWorkspace(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)).toBeFalsy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.HasWorkspaceLock(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
2023-02-17 00:24:09 +00:00
|
|
|
expect(await SharedWorkspaceLocking.ReleaseWorkspace(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
2023-02-17 00:47:01 +00:00
|
|
|
expect(await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)).toBeFalsy();
|
2023-02-17 00:07:46 +00:00
|
|
|
expect(await SharedWorkspaceLocking.DoesWorkspaceExist(newWorkspaceName, buildParameters)).toBeTruthy();
|
2023-02-13 20:52:19 +00:00
|
|
|
expect(
|
2023-02-16 20:19:22 +00:00
|
|
|
await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(newWorkspaceName, runId2, buildParameters),
|
2023-02-13 20:52:19 +00:00
|
|
|
).toBeTruthy();
|
2023-02-16 20:02:44 +00:00
|
|
|
expect(CloudRunner.lockedWorkspace).not.toMatch(newWorkspaceName);
|
2023-02-13 20:52:19 +00:00
|
|
|
}, 150000);
|
2023-02-16 20:19:22 +00:00
|
|
|
it(`0 free workspaces after locking`, async () => {
|
|
|
|
|
Cli.options.retainWorkspaces = true;
|
|
|
|
|
const overrides: any = {
|
|
|
|
|
versioning: 'None',
|
|
|
|
|
projectPath: 'test-project',
|
|
|
|
|
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
|
|
|
|
|
targetPlatform: 'StandaloneLinux64',
|
|
|
|
|
cacheKey: `test-case-${uuidv4()}`,
|
|
|
|
|
retainWorkspaces: true,
|
|
|
|
|
};
|
|
|
|
|
const buildParameters = await CreateParameters(overrides);
|
|
|
|
|
|
|
|
|
|
const newWorkspaceName = `test-workspace-${uuidv4()}`;
|
|
|
|
|
const runId = uuidv4();
|
|
|
|
|
CloudRunner.buildParameters = buildParameters;
|
|
|
|
|
expect(await SharedWorkspaceLocking.CreateWorkspace(newWorkspaceName, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.HasWorkspaceLock(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.DoesWorkspaceExist(newWorkspaceName, buildParameters)).toBeTruthy();
|
2023-02-16 21:22:30 +00:00
|
|
|
expect(await SharedWorkspaceLocking.GetAllWorkspaces(buildParameters)).toHaveLength(1);
|
2023-02-16 22:54:06 +00:00
|
|
|
expect(await SharedWorkspaceLocking.GetAllLocksForWorkspace(newWorkspaceName, buildParameters)).toHaveLength(1);
|
2023-02-16 22:24:46 +00:00
|
|
|
expect(await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)).toBeTruthy();
|
2023-02-17 19:21:12 +00:00
|
|
|
|
|
|
|
|
const files = await SharedWorkspaceLocking.ReadLines(
|
|
|
|
|
`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParameters.cacheKey}/`,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const lockFilesExist =
|
|
|
|
|
files.filter((x) => {
|
|
|
|
|
return x.includes(newWorkspaceName) && x.endsWith(`_lock`);
|
|
|
|
|
}).length > 0;
|
|
|
|
|
|
2023-02-17 19:30:16 +00:00
|
|
|
expect(files).toHaveLength(2);
|
2023-02-17 19:21:12 +00:00
|
|
|
expect(
|
|
|
|
|
files.filter((x) => {
|
|
|
|
|
return x.includes(newWorkspaceName) && x.endsWith(`_lock`);
|
|
|
|
|
}),
|
|
|
|
|
).toHaveLength(1);
|
|
|
|
|
expect(lockFilesExist).toBeTruthy();
|
2023-02-17 19:08:57 +00:00
|
|
|
const result: string[] = [];
|
|
|
|
|
const workspaces = await SharedWorkspaceLocking.GetAllWorkspaces(buildParameters);
|
2023-02-19 00:33:35 +00:00
|
|
|
for (const element of workspaces) {
|
2023-02-19 00:17:56 +00:00
|
|
|
expect((await SharedWorkspaceLocking.GetAllWorkspaces(buildParameters)).join()).toContain(element);
|
2023-02-18 23:56:42 +00:00
|
|
|
expect(
|
|
|
|
|
(await SharedWorkspaceLocking.GetAllWorkspaces(buildParameters)).filter((x) => x.endsWith(`_workspace`)),
|
|
|
|
|
).toHaveLength(1);
|
2023-02-18 23:13:10 +00:00
|
|
|
expect(await SharedWorkspaceLocking.DoesWorkspaceExist(element, buildParameters)).toBeTruthy();
|
2023-02-17 19:08:57 +00:00
|
|
|
await new Promise((promise) => setTimeout(promise, 1500));
|
|
|
|
|
const isLocked = await SharedWorkspaceLocking.IsWorkspaceLocked(element, buildParameters);
|
|
|
|
|
const isBelowMax = await SharedWorkspaceLocking.IsWorkspaceBelowMax(element, buildParameters);
|
|
|
|
|
CloudRunnerLogger.log(`workspace ${element} locked:${isLocked} below max:${isBelowMax}`);
|
2023-02-18 22:43:10 +00:00
|
|
|
const lock = files.find((x) => {
|
|
|
|
|
return x.endsWith(`_lock`);
|
|
|
|
|
});
|
|
|
|
|
expect(lock).toContain(element);
|
2023-02-17 19:08:57 +00:00
|
|
|
expect(isLocked).toBeTruthy();
|
|
|
|
|
expect(isBelowMax).toBeTruthy();
|
|
|
|
|
if (!isLocked && isBelowMax) {
|
|
|
|
|
result.push(element);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
expect(result).toHaveLength(0);
|
2023-02-16 21:22:30 +00:00
|
|
|
expect(await SharedWorkspaceLocking.GetFreeWorkspaces(buildParameters)).toHaveLength(0);
|
2023-02-16 20:19:22 +00:00
|
|
|
}, 150000);
|
2023-02-13 20:52:19 +00:00
|
|
|
it(`Get Or Create From Unlocked Was Locked`, async () => {
|
|
|
|
|
Cli.options.retainWorkspaces = true;
|
|
|
|
|
const overrides: any = {
|
|
|
|
|
versioning: 'None',
|
|
|
|
|
projectPath: 'test-project',
|
|
|
|
|
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
|
|
|
|
|
targetPlatform: 'StandaloneLinux64',
|
|
|
|
|
cacheKey: `test-case-${uuidv4()}`,
|
|
|
|
|
retainWorkspaces: true,
|
|
|
|
|
};
|
|
|
|
|
const buildParameters = await CreateParameters(overrides);
|
|
|
|
|
|
|
|
|
|
const newWorkspaceName = `test-workspace-${uuidv4()}`;
|
|
|
|
|
const runId = uuidv4();
|
|
|
|
|
CloudRunner.buildParameters = buildParameters;
|
|
|
|
|
expect(await SharedWorkspaceLocking.CreateWorkspace(newWorkspaceName, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(await SharedWorkspaceLocking.ReleaseWorkspace(newWorkspaceName, runId, buildParameters)).toBeTruthy();
|
|
|
|
|
expect(
|
|
|
|
|
await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(newWorkspaceName, runId, buildParameters),
|
|
|
|
|
).toBeTruthy();
|
2023-02-16 20:39:15 +00:00
|
|
|
expect(CloudRunner.lockedWorkspace).toMatch(newWorkspaceName);
|
2023-02-13 20:52:19 +00:00
|
|
|
}, 150000);
|
2022-11-07 20:41:00 +00:00
|
|
|
}
|
|
|
|
|
});
|