diff --git a/packages/docker/jest.setup.js b/packages/docker/jest.setup.js index 2be7bb0..fca3957 100644 --- a/packages/docker/jest.setup.js +++ b/packages/docker/jest.setup.js @@ -1 +1 @@ -jest.setTimeout(90000) \ No newline at end of file +jest.setTimeout(500000) diff --git a/packages/k8s/jest.setup.js b/packages/k8s/jest.setup.js index 2be7bb0..fca3957 100644 --- a/packages/k8s/jest.setup.js +++ b/packages/k8s/jest.setup.js @@ -1 +1 @@ -jest.setTimeout(90000) \ No newline at end of file +jest.setTimeout(500000) diff --git a/packages/k8s/tests/e2e-test.ts b/packages/k8s/tests/e2e-test.ts index 9fab718..458eaa3 100644 --- a/packages/k8s/tests/e2e-test.ts +++ b/packages/k8s/tests/e2e-test.ts @@ -55,9 +55,9 @@ describe('e2e', () => { const runContainerStepContent = fs.readFileSync(runContainerStepJsonPath) const runContainerStepData = JSON.parse(runContainerStepContent.toString()) - // await expect( - // runContainerStep(runContainerStepData.args) - // ).resolves.not.toThrow() + await expect( + runContainerStep(runContainerStepData.args) + ).resolves.not.toThrow() await expect(cleanupJob()).resolves.not.toThrow() }) diff --git a/packages/k8s/tests/run-container-step-test.ts b/packages/k8s/tests/run-container-step-test.ts index a847b51..d92984f 100644 --- a/packages/k8s/tests/run-container-step-test.ts +++ b/packages/k8s/tests/run-container-step-test.ts @@ -1,7 +1,7 @@ -import { TestHelper } from './test-setup' +import * as fs from 'fs' import * as path from 'path' import { runContainerStep } from '../src/hooks' -import * as fs from 'fs' +import { TestHelper } from './test-setup' jest.useRealTimers() @@ -27,5 +27,7 @@ describe('Run container step', () => { }) afterEach(async () => { await testHelper.cleanup() + // wait for the job cleanup + await new Promise(resolve => setTimeout(resolve, 300 * 1000)) }) }) diff --git a/packages/k8s/tests/test-setup.ts b/packages/k8s/tests/test-setup.ts index 168d71a..89c9b5a 100644 --- a/packages/k8s/tests/test-setup.ts +++ b/packages/k8s/tests/test-setup.ts @@ -1,33 +1,34 @@ +import * as k8s from '@kubernetes/client-node' import * as fs from 'fs' import { v4 as uuidv4 } from 'uuid' -import * as k8s from '@kubernetes/client-node' -import { V1PersistentVolumeClaim } from '@kubernetes/client-node' const kc = new k8s.KubeConfig() kc.loadFromDefault() const k8sApi = kc.makeApiClient(k8s.CoreV1Api) +const k8sStorageApi = kc.makeApiClient(k8s.StorageV1Api) export class TestHelper { private tempDirPath: string private podName: string constructor() { this.tempDirPath = `${__dirname}/_temp/runner` - this.podName = uuidv4().replace('-', '') + this.podName = uuidv4().replace(/-/g, '') } public async initialize(): Promise { - await this.cleanupK8sResources() - await this.createTestVolume() - await this.createTestJobPod() - fs.mkdirSync(`${this.tempDirPath}/work/repo/repo`, { recursive: true }) - fs.mkdirSync(`${this.tempDirPath}/externals`, { recursive: true }) process.env['ACTIONS_RUNNER_POD_NAME'] = `${this.podName}` process.env['ACTIONS_RUNNER_CLAIM_NAME'] = `${this.podName}-work` process.env['RUNNER_WORKSPACE'] = `${this.tempDirPath}/work/repo` process.env['GITHUB_WORKSPACE'] = `${this.tempDirPath}/work/repo/repo` process.env['ACTIONS_RUNNER_KUBERNETES_NAMESPACE'] = 'default' + + await this.cleanupK8sResources() + await this.createTestVolume() + await this.createTestJobPod() + fs.mkdirSync(`${this.tempDirPath}/work/repo/repo`, { recursive: true }) + fs.mkdirSync(`${this.tempDirPath}/externals`, { recursive: true }) } public async cleanup(): Promise { @@ -46,6 +47,8 @@ export class TestHelper { 0 ) .catch(e => {}) + await k8sApi.deletePersistentVolume('work').catch(e => {}) + await k8sStorageApi.deleteStorageClass('local-storage').catch(e => {}) await k8sApi .deleteNamespacedPod(this.podName, 'default', undefined, undefined, 0) .catch(e => {}) @@ -90,15 +93,41 @@ export class TestHelper { } public async createTestVolume() { - var volume: V1PersistentVolumeClaim = { + var sc: k8s.V1StorageClass = { + metadata: { + name: 'local-storage' + }, + provisioner: 'kubernetes.io/no-provisioner', + volumeBindingMode: 'Immediate' + } + await k8sStorageApi.createStorageClass(sc) + + var volume: k8s.V1PersistentVolume = { + metadata: { + name: 'work' + }, + spec: { + storageClassName: 'local-storage', + capacity: { + storage: '2Gi' + }, + volumeMode: 'Filesystem', + accessModes: ['ReadWriteOnce'], + hostPath: { + path: this.tempDirPath + } + } + } + await k8sApi.createPersistentVolume(volume) + var volumeClaim: k8s.V1PersistentVolumeClaim = { metadata: { name: `${this.podName}-work` }, spec: { accessModes: ['ReadWriteOnce'], - volumeMode: 'Filesystem', - + storageClassName: 'local-storage', + volumeName: 'work', resources: { requests: { storage: '1Gi' @@ -106,6 +135,6 @@ export class TestHelper { } } } - await k8sApi.createNamespacedPersistentVolumeClaim('default', volume) + await k8sApi.createNamespacedPersistentVolumeClaim('default', volumeClaim) } }