diff --git a/@xen-orchestra/backups/_cleanVm.integ.spec.js b/@xen-orchestra/backups/_cleanVm.test.js similarity index 86% rename from @xen-orchestra/backups/_cleanVm.integ.spec.js rename to @xen-orchestra/backups/_cleanVm.test.js index 5492d17aa..3cae1c467 100644 --- a/@xen-orchestra/backups/_cleanVm.integ.spec.js +++ b/@xen-orchestra/backups/_cleanVm.test.js @@ -1,6 +1,7 @@ 'use strict' -/* eslint-env jest */ +const { beforeEach, afterEach, test, describe } = require('test') +const assert = require('assert').strict const rimraf = require('rimraf') const tmp = require('tmp') @@ -17,8 +18,6 @@ const { dirname, basename } = require('path') let tempDir, adapter, handler, jobId, vdiId, basePath, relativePath const rootPath = 'xo-vm-backups/VMUUID/' -jest.setTimeout(60000) - beforeEach(async () => { tempDir = await pFromCallback(cb => tmp.dir(cb)) handler = getHandler({ url: `file://${tempDir}` }) @@ -78,18 +77,18 @@ test('It remove broken vhd', async () => { // todo also tests a directory and an alias await handler.writeFile(`${basePath}/notReallyAVhd.vhd`, 'I AM NOT A VHD') - expect((await handler.list(basePath)).length).toEqual(1) + assert.equal((await handler.list(basePath)).length, 1) let loggued = '' const logInfo = message => { loggued += message } await adapter.cleanVm(rootPath, { remove: false, logInfo, logWarn: logInfo, lock: false }) - expect(loggued).toEqual(`VHD check error`) + assert.equal(loggued, `VHD check error`) // not removed - expect(await handler.list(basePath)).toEqual(['notReallyAVhd.vhd']) + assert.deepEqual(await handler.list(basePath), ['notReallyAVhd.vhd']) // really remove it await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: () => {}, lock: false }) - expect(await handler.list(basePath)).toEqual([]) + assert.deepEqual(await handler.list(basePath), []) }) test('it remove vhd with missing or multiple ancestors', async () => { @@ -126,7 +125,7 @@ test('it remove vhd with missing or multiple ancestors', async () => { await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: logInfo, lock: false }) const deletedOrphanVhd = loggued.match(/deleting orphan VHD/g) || [] - expect(deletedOrphanVhd.length).toEqual(1) // only one vhd should have been deleted + assert.equal(deletedOrphanVhd.length, 1) // only one vhd should have been deleted // we don't test the filew on disk, since they will all be marker as unused and deleted without a metadata.json file }) @@ -164,7 +163,7 @@ test('it remove backup meta data referencing a missing vhd in delta backup', asy } await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: logInfo, lock: false }) let matched = loggued.match(/deleting unused VHD/g) || [] - expect(matched.length).toEqual(1) // only one vhd should have been deleted + assert.equal(matched.length, 1) // only one vhd should have been deleted // a missing vhd cause clean to remove all vhds await handler.writeFile( @@ -183,7 +182,7 @@ test('it remove backup meta data referencing a missing vhd in delta backup', asy loggued = '' await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: () => {}, lock: false }) matched = loggued.match(/deleting unused VHD/g) || [] - expect(matched.length).toEqual(2) // all vhds (orphan and child ) should have been deleted + assert.equal(matched.length, 2) // all vhds (orphan and child ) should have been deleted }) test('it merges delta of non destroyed chain', async () => { @@ -222,23 +221,23 @@ test('it merges delta of non destroyed chain', async () => { loggued.push(message) } await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: logInfo, lock: false }) - expect(loggued[0]).toEqual(`incorrect backup size in metadata`) + assert.equal(loggued[0], `incorrect backup size in metadata`) loggued = [] await adapter.cleanVm(rootPath, { remove: true, merge: true, logInfo, logWarn: () => {}, lock: false }) const [merging] = loggued - expect(merging).toEqual(`merging VHD chain`) + assert.equal(merging, `merging VHD chain`) const metadata = JSON.parse(await handler.readFile(`${rootPath}/metadata.json`)) // size should be the size of children + grand children after the merge - expect(metadata.size).toEqual(209920) + assert.equal(metadata.size, 209920) // merging is already tested in vhd-lib, don't retest it here (and theses vhd are as empty as my stomach at 12h12) // only check deletion const remainingVhds = await handler.list(basePath) - expect(remainingVhds.length).toEqual(2) - expect(remainingVhds.includes('child.vhd')).toEqual(true) - expect(remainingVhds.includes('grandchild.vhd')).toEqual(true) + assert.equal(remainingVhds.length, 2) + assert.equal(remainingVhds.includes('child.vhd'), true) + assert.equal(remainingVhds.includes('grandchild.vhd'), true) }) test('it finish unterminated merge ', async () => { @@ -278,8 +277,8 @@ test('it finish unterminated merge ', async () => { // only check deletion const remainingVhds = await handler.list(basePath) - expect(remainingVhds.length).toEqual(1) - expect(remainingVhds.includes('child.vhd')).toEqual(true) + assert.equal(remainingVhds.length, 1) + assert.equal(remainingVhds.includes('child.vhd'), true) }) // each of the vhd can be a file, a directory, an alias to a file or an alias to a directory @@ -384,7 +383,7 @@ describe('tests multiple combination ', () => { const metadata = JSON.parse(await handler.readFile(`${rootPath}/metadata.json`)) // size should be the size of children + grand children + clean after the merge - expect(metadata.size).toEqual(vhdMode === 'file' ? 314880 : undefined) + assert.deepEqual(metadata.size, vhdMode === 'file' ? 314880 : undefined) // broken vhd, non referenced, abandonned should be deleted ( alias and data) // ancestor and child should be merged @@ -394,19 +393,19 @@ describe('tests multiple combination ', () => { if (useAlias) { const dataSurvivors = await handler.list(basePath + '/data') // the goal of the alias : do not move a full folder - expect(dataSurvivors).toContain('ancestor.vhd') - expect(dataSurvivors).toContain('grandchild.vhd') - expect(dataSurvivors).toContain('cleanAncestor.vhd') - expect(survivors).toContain('clean.vhd.alias.vhd') - expect(survivors).toContain('child.vhd.alias.vhd') - expect(survivors).toContain('grandchild.vhd.alias.vhd') - expect(survivors.length).toEqual(4) // the 3 ok + data - expect(dataSurvivors.length).toEqual(3) // the 3 ok + data + assert.equal(dataSurvivors.includes('ancestor.vhd'), true) + assert.equal(dataSurvivors.includes('grandchild.vhd'), true) + assert.equal(dataSurvivors.includes('cleanAncestor.vhd'), true) + assert.equal(survivors.includes('clean.vhd.alias.vhd'), true) + assert.equal(survivors.includes('child.vhd.alias.vhd'), true) + assert.equal(survivors.includes('grandchild.vhd.alias.vhd'), true) + assert.equal(survivors.length, 4) // the 3 ok + data + assert.equal(dataSurvivors.length, 3) } else { - expect(survivors).toContain('clean.vhd') - expect(survivors).toContain('child.vhd') - expect(survivors).toContain('grandchild.vhd') - expect(survivors.length).toEqual(3) + assert.equal(survivors.includes('clean.vhd'), true) + assert.equal(survivors.includes('child.vhd'), true) + assert.equal(survivors.includes('grandchild.vhd'), true) + assert.equal(survivors.length, 3) } }) } @@ -418,7 +417,7 @@ test('it cleans orphan merge states ', async () => { await adapter.cleanVm(rootPath, { remove: true, logWarn: () => {}, lock: false }) - expect(await handler.list(basePath)).toEqual([]) + assert.deepEqual(await handler.list(basePath), []) }) test('check Aliases should work alone', async () => { @@ -439,8 +438,8 @@ test('check Aliases should work alone', async () => { // only ok have suvived const alias = (await handler.list('vhds')).filter(f => f.endsWith('.vhd')) - expect(alias.length).toEqual(1) + assert.equal(alias.length, 1) const data = await handler.list('vhds/data') - expect(data.length).toEqual(1) + assert.equal(data.length, 1) }) diff --git a/@xen-orchestra/backups/package.json b/@xen-orchestra/backups/package.json index dc6e02237..7624430cb 100644 --- a/@xen-orchestra/backups/package.json +++ b/@xen-orchestra/backups/package.json @@ -13,7 +13,8 @@ "node": ">=14.6" }, "scripts": { - "postversion": "npm publish --access public" + "postversion": "npm publish --access public", + "test": "node--test" }, "dependencies": { "@vates/async-each": "^1.0.0", @@ -46,6 +47,8 @@ }, "devDependencies": { "rimraf": "^3.0.2", + "sinon": "^14.0.1", + "test": "^3.2.1", "tmp": "^0.2.1" }, "peerDependencies": {