From 15e0dc2ac2695676ade83d2cedb003c2583032a0 Mon Sep 17 00:00:00 2001 From: Frostebite Date: Mon, 27 Feb 2023 19:14:36 +0000 Subject: [PATCH] fixes --- .github/workflows/cloud-runner-pipeline.yml | 1 + .../tests/cloud-runner-locking.test.ts | 71 -------------- .../e2e/cloud-runner-end2end-locking.test.ts | 95 +++++++++++++++++++ 3 files changed, 96 insertions(+), 71 deletions(-) create mode 100644 src/model/cloud-runner/tests/e2e/cloud-runner-end2end-locking.test.ts diff --git a/.github/workflows/cloud-runner-pipeline.yml b/.github/workflows/cloud-runner-pipeline.yml index 9cebb266..9c5f1859 100644 --- a/.github/workflows/cloud-runner-pipeline.yml +++ b/.github/workflows/cloud-runner-pipeline.yml @@ -98,6 +98,7 @@ jobs: test: - 'cloud-runner-async-workflow' #- 'cloud-runner-caching' + - 'cloud-runner-end2end-locking' - 'cloud-runner-end2end-caching' - 'cloud-runner-end2end-retaining' - 'cloud-runner-environment' diff --git a/src/model/cloud-runner/tests/cloud-runner-locking.test.ts b/src/model/cloud-runner/tests/cloud-runner-locking.test.ts index 30bef671..8e630b9b 100644 --- a/src/model/cloud-runner/tests/cloud-runner-locking.test.ts +++ b/src/model/cloud-runner/tests/cloud-runner-locking.test.ts @@ -52,77 +52,6 @@ describe('Cloud Runner Locking', () => { expect(await SharedWorkspaceLocking.CreateWorkspace(newWorkspaceName, buildParameters)).toBeTruthy(); expect(await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters)).toBeTruthy(); }, 150000); - it(`Simple Locking End2End Flow`, 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; - await SharedWorkspaceLocking.CreateWorkspace(newWorkspaceName, buildParameters); - expect(await SharedWorkspaceLocking.DoesCacheKeyTopLevelExist(buildParameters)).toBeTruthy(); - expect(await SharedWorkspaceLocking.DoesWorkspaceExist(newWorkspaceName, buildParameters)).toBeTruthy(); - const isExpectedUnlockedBeforeLocking = - (await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === false; - expect(isExpectedUnlockedBeforeLocking).toBeTruthy(); - const result = await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters); - expect(result).toBeTruthy(); - const lines = await SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}`); - expect(lines.map((x) => x.replace(`/`, ``)).includes(buildParameters.cacheKey)); - expect(await SharedWorkspaceLocking.DoesCacheKeyTopLevelExist(buildParameters)).toBeTruthy(); - expect(await SharedWorkspaceLocking.DoesWorkspaceExist(newWorkspaceName, buildParameters)).toBeTruthy(); - const allLocks = await SharedWorkspaceLocking.GetAllLocksForWorkspace(newWorkspaceName, buildParameters); - expect( - ( - await SharedWorkspaceLocking.ReadLines( - `aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParameters.cacheKey}/`, - ) - ).filter((x) => x.endsWith(`${newWorkspaceName}_workspace_lock`)), - ).toHaveLength(1); - expect( - ( - await SharedWorkspaceLocking.ReadLines( - `aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParameters.cacheKey}/`, - ) - ).filter((x) => x.endsWith(`${newWorkspaceName}_workspace`)), - ).toHaveLength(1); - expect(allLocks.filter((x) => x.endsWith(`${newWorkspaceName}_workspace_lock`)).length).toBeGreaterThan(0); - const isExpectedLockedAfterLocking = - (await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === true; - expect(isExpectedLockedAfterLocking).toBeTruthy(); - const locksBeforeRelease = await SharedWorkspaceLocking.GetAllLocksForWorkspace( - newWorkspaceName, - buildParameters, - ); - CloudRunnerLogger.log(JSON.stringify(locksBeforeRelease, undefined, 4)); - expect(locksBeforeRelease.length).toBe(1); - await SharedWorkspaceLocking.ReleaseWorkspace(newWorkspaceName, runId, buildParameters); - const locks = await SharedWorkspaceLocking.GetAllLocksForWorkspace(newWorkspaceName, buildParameters); - expect(locks.length).toBe(0); - const isExpectedNotLockedAfterReleasing = - (await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === false; - expect(isExpectedNotLockedAfterReleasing).toBeTruthy(); - const lockingResult2 = await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters); - expect(lockingResult2).toBeTruthy(); - 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); - CloudRunnerLogger.log(`Starting get or create`); - expect( - await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(newWorkspaceName, runId, buildParameters), - ).toBeTruthy(); - }, 350000); it(`Get Or Create From No Workspace`, async () => { Cli.options.retainWorkspaces = true; const overrides: any = { diff --git a/src/model/cloud-runner/tests/e2e/cloud-runner-end2end-locking.test.ts b/src/model/cloud-runner/tests/e2e/cloud-runner-end2end-locking.test.ts new file mode 100644 index 00000000..d1a91ee1 --- /dev/null +++ b/src/model/cloud-runner/tests/e2e/cloud-runner-end2end-locking.test.ts @@ -0,0 +1,95 @@ +import CloudRunner from '../../cloud-runner'; +import { BuildParameters } from '../../..'; +import UnityVersioning from '../../../unity-versioning'; +import { Cli } from '../../../cli/cli'; +import CloudRunnerLogger from '../../services/cloud-runner-logger'; +import { v4 as uuidv4 } from 'uuid'; +import CloudRunnerOptions from '../../cloud-runner-options'; +import setups from '../cloud-runner-suite.test'; +import SharedWorkspaceLocking from '../../services/shared-workspace-locking'; + +async function CreateParameters(overrides) { + if (overrides) { + Cli.options = overrides; + } + + return await BuildParameters.create(); +} + +describe('Cloud Runner Locking', () => { + setups(); + it('Responds', () => {}); + if (CloudRunnerOptions.cloudRunnerDebug) { + it(`Simple Locking End2End Flow`, 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; + await SharedWorkspaceLocking.CreateWorkspace(newWorkspaceName, buildParameters); + expect(await SharedWorkspaceLocking.DoesCacheKeyTopLevelExist(buildParameters)).toBeTruthy(); + expect(await SharedWorkspaceLocking.DoesWorkspaceExist(newWorkspaceName, buildParameters)).toBeTruthy(); + const isExpectedUnlockedBeforeLocking = + (await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === false; + expect(isExpectedUnlockedBeforeLocking).toBeTruthy(); + const result = await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters); + expect(result).toBeTruthy(); + const lines = await SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}`); + expect(lines.map((x) => x.replace(`/`, ``)).includes(buildParameters.cacheKey)); + expect(await SharedWorkspaceLocking.DoesCacheKeyTopLevelExist(buildParameters)).toBeTruthy(); + expect(await SharedWorkspaceLocking.DoesWorkspaceExist(newWorkspaceName, buildParameters)).toBeTruthy(); + const allLocks = await SharedWorkspaceLocking.GetAllLocksForWorkspace(newWorkspaceName, buildParameters); + expect( + ( + await SharedWorkspaceLocking.ReadLines( + `aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParameters.cacheKey}/`, + ) + ).filter((x) => x.endsWith(`${newWorkspaceName}_workspace_lock`)), + ).toHaveLength(1); + expect( + ( + await SharedWorkspaceLocking.ReadLines( + `aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParameters.cacheKey}/`, + ) + ).filter((x) => x.endsWith(`${newWorkspaceName}_workspace`)), + ).toHaveLength(1); + expect(allLocks.filter((x) => x.endsWith(`${newWorkspaceName}_workspace_lock`)).length).toBeGreaterThan(0); + const isExpectedLockedAfterLocking = + (await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === true; + expect(isExpectedLockedAfterLocking).toBeTruthy(); + const locksBeforeRelease = await SharedWorkspaceLocking.GetAllLocksForWorkspace( + newWorkspaceName, + buildParameters, + ); + CloudRunnerLogger.log(JSON.stringify(locksBeforeRelease, undefined, 4)); + expect(locksBeforeRelease.length).toBe(1); + await SharedWorkspaceLocking.ReleaseWorkspace(newWorkspaceName, runId, buildParameters); + const locks = await SharedWorkspaceLocking.GetAllLocksForWorkspace(newWorkspaceName, buildParameters); + expect(locks.length).toBe(0); + const isExpectedNotLockedAfterReleasing = + (await SharedWorkspaceLocking.IsWorkspaceLocked(newWorkspaceName, buildParameters)) === false; + expect(isExpectedNotLockedAfterReleasing).toBeTruthy(); + const lockingResult2 = await SharedWorkspaceLocking.LockWorkspace(newWorkspaceName, runId, buildParameters); + expect(lockingResult2).toBeTruthy(); + 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); + CloudRunnerLogger.log(`Starting get or create`); + expect( + await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(newWorkspaceName, runId, buildParameters), + ).toBeTruthy(); + }, 350000); + } +});