test(backups): from Jest to test (#6500)
This commit is contained in:
parent
17df749790
commit
be6233f12b
@ -1,6 +1,7 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
/* eslint-env jest */
|
const { beforeEach, afterEach, test, describe } = require('test')
|
||||||
|
const assert = require('assert').strict
|
||||||
|
|
||||||
const rimraf = require('rimraf')
|
const rimraf = require('rimraf')
|
||||||
const tmp = require('tmp')
|
const tmp = require('tmp')
|
||||||
@ -17,8 +18,6 @@ const { dirname, basename } = require('path')
|
|||||||
let tempDir, adapter, handler, jobId, vdiId, basePath, relativePath
|
let tempDir, adapter, handler, jobId, vdiId, basePath, relativePath
|
||||||
const rootPath = 'xo-vm-backups/VMUUID/'
|
const rootPath = 'xo-vm-backups/VMUUID/'
|
||||||
|
|
||||||
jest.setTimeout(60000)
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
tempDir = await pFromCallback(cb => tmp.dir(cb))
|
tempDir = await pFromCallback(cb => tmp.dir(cb))
|
||||||
handler = getHandler({ url: `file://${tempDir}` })
|
handler = getHandler({ url: `file://${tempDir}` })
|
||||||
@ -78,18 +77,18 @@ test('It remove broken vhd', async () => {
|
|||||||
// todo also tests a directory and an alias
|
// todo also tests a directory and an alias
|
||||||
|
|
||||||
await handler.writeFile(`${basePath}/notReallyAVhd.vhd`, 'I AM NOT A VHD')
|
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 = ''
|
let loggued = ''
|
||||||
const logInfo = message => {
|
const logInfo = message => {
|
||||||
loggued += message
|
loggued += message
|
||||||
}
|
}
|
||||||
await adapter.cleanVm(rootPath, { remove: false, logInfo, logWarn: logInfo, lock: false })
|
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
|
// not removed
|
||||||
expect(await handler.list(basePath)).toEqual(['notReallyAVhd.vhd'])
|
assert.deepEqual(await handler.list(basePath), ['notReallyAVhd.vhd'])
|
||||||
// really remove it
|
// really remove it
|
||||||
await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: () => {}, lock: false })
|
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 () => {
|
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 })
|
await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: logInfo, lock: false })
|
||||||
|
|
||||||
const deletedOrphanVhd = loggued.match(/deleting orphan VHD/g) || []
|
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
|
// 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 })
|
await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: logInfo, lock: false })
|
||||||
let matched = loggued.match(/deleting unused VHD/g) || []
|
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
|
// a missing vhd cause clean to remove all vhds
|
||||||
await handler.writeFile(
|
await handler.writeFile(
|
||||||
@ -183,7 +182,7 @@ test('it remove backup meta data referencing a missing vhd in delta backup', asy
|
|||||||
loggued = ''
|
loggued = ''
|
||||||
await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: () => {}, lock: false })
|
await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: () => {}, lock: false })
|
||||||
matched = loggued.match(/deleting unused VHD/g) || []
|
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 () => {
|
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)
|
loggued.push(message)
|
||||||
}
|
}
|
||||||
await adapter.cleanVm(rootPath, { remove: true, logInfo, logWarn: logInfo, lock: false })
|
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 = []
|
loggued = []
|
||||||
await adapter.cleanVm(rootPath, { remove: true, merge: true, logInfo, logWarn: () => {}, lock: false })
|
await adapter.cleanVm(rootPath, { remove: true, merge: true, logInfo, logWarn: () => {}, lock: false })
|
||||||
const [merging] = loggued
|
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`))
|
const metadata = JSON.parse(await handler.readFile(`${rootPath}/metadata.json`))
|
||||||
// size should be the size of children + grand children after the merge
|
// 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)
|
// 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
|
// only check deletion
|
||||||
const remainingVhds = await handler.list(basePath)
|
const remainingVhds = await handler.list(basePath)
|
||||||
expect(remainingVhds.length).toEqual(2)
|
assert.equal(remainingVhds.length, 2)
|
||||||
expect(remainingVhds.includes('child.vhd')).toEqual(true)
|
assert.equal(remainingVhds.includes('child.vhd'), true)
|
||||||
expect(remainingVhds.includes('grandchild.vhd')).toEqual(true)
|
assert.equal(remainingVhds.includes('grandchild.vhd'), true)
|
||||||
})
|
})
|
||||||
|
|
||||||
test('it finish unterminated merge ', async () => {
|
test('it finish unterminated merge ', async () => {
|
||||||
@ -278,8 +277,8 @@ test('it finish unterminated merge ', async () => {
|
|||||||
|
|
||||||
// only check deletion
|
// only check deletion
|
||||||
const remainingVhds = await handler.list(basePath)
|
const remainingVhds = await handler.list(basePath)
|
||||||
expect(remainingVhds.length).toEqual(1)
|
assert.equal(remainingVhds.length, 1)
|
||||||
expect(remainingVhds.includes('child.vhd')).toEqual(true)
|
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
|
// 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`))
|
const metadata = JSON.parse(await handler.readFile(`${rootPath}/metadata.json`))
|
||||||
// size should be the size of children + grand children + clean after the merge
|
// 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)
|
// broken vhd, non referenced, abandonned should be deleted ( alias and data)
|
||||||
// ancestor and child should be merged
|
// ancestor and child should be merged
|
||||||
@ -394,19 +393,19 @@ describe('tests multiple combination ', () => {
|
|||||||
if (useAlias) {
|
if (useAlias) {
|
||||||
const dataSurvivors = await handler.list(basePath + '/data')
|
const dataSurvivors = await handler.list(basePath + '/data')
|
||||||
// the goal of the alias : do not move a full folder
|
// the goal of the alias : do not move a full folder
|
||||||
expect(dataSurvivors).toContain('ancestor.vhd')
|
assert.equal(dataSurvivors.includes('ancestor.vhd'), true)
|
||||||
expect(dataSurvivors).toContain('grandchild.vhd')
|
assert.equal(dataSurvivors.includes('grandchild.vhd'), true)
|
||||||
expect(dataSurvivors).toContain('cleanAncestor.vhd')
|
assert.equal(dataSurvivors.includes('cleanAncestor.vhd'), true)
|
||||||
expect(survivors).toContain('clean.vhd.alias.vhd')
|
assert.equal(survivors.includes('clean.vhd.alias.vhd'), true)
|
||||||
expect(survivors).toContain('child.vhd.alias.vhd')
|
assert.equal(survivors.includes('child.vhd.alias.vhd'), true)
|
||||||
expect(survivors).toContain('grandchild.vhd.alias.vhd')
|
assert.equal(survivors.includes('grandchild.vhd.alias.vhd'), true)
|
||||||
expect(survivors.length).toEqual(4) // the 3 ok + data
|
assert.equal(survivors.length, 4) // the 3 ok + data
|
||||||
expect(dataSurvivors.length).toEqual(3) // the 3 ok + data
|
assert.equal(dataSurvivors.length, 3)
|
||||||
} else {
|
} else {
|
||||||
expect(survivors).toContain('clean.vhd')
|
assert.equal(survivors.includes('clean.vhd'), true)
|
||||||
expect(survivors).toContain('child.vhd')
|
assert.equal(survivors.includes('child.vhd'), true)
|
||||||
expect(survivors).toContain('grandchild.vhd')
|
assert.equal(survivors.includes('grandchild.vhd'), true)
|
||||||
expect(survivors.length).toEqual(3)
|
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 })
|
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 () => {
|
test('check Aliases should work alone', async () => {
|
||||||
@ -439,8 +438,8 @@ test('check Aliases should work alone', async () => {
|
|||||||
|
|
||||||
// only ok have suvived
|
// only ok have suvived
|
||||||
const alias = (await handler.list('vhds')).filter(f => f.endsWith('.vhd'))
|
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')
|
const data = await handler.list('vhds/data')
|
||||||
expect(data.length).toEqual(1)
|
assert.equal(data.length, 1)
|
||||||
})
|
})
|
@ -13,7 +13,8 @@
|
|||||||
"node": ">=14.6"
|
"node": ">=14.6"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"postversion": "npm publish --access public"
|
"postversion": "npm publish --access public",
|
||||||
|
"test": "node--test"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vates/async-each": "^1.0.0",
|
"@vates/async-each": "^1.0.0",
|
||||||
@ -46,6 +47,8 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"rimraf": "^3.0.2",
|
"rimraf": "^3.0.2",
|
||||||
|
"sinon": "^14.0.1",
|
||||||
|
"test": "^3.2.1",
|
||||||
"tmp": "^0.2.1"
|
"tmp": "^0.2.1"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
Loading…
Reference in New Issue
Block a user