chore(test): replace vhd-util check (#6651)

This commit is contained in:
Gabriel Gunullu
2023-02-07 13:33:25 +01:00
committed by GitHub
parent 55920a58a3
commit 3dc3376aec
4 changed files with 57 additions and 3 deletions

View File

@@ -4,7 +4,7 @@ FROM ubuntu:xenial
# https://qastack.fr/programming/25899912/how-to-install-nvm-in-docker
RUN apt-get update
RUN apt-get install -y curl qemu-utils blktap-utils vmdk-stream-converter git libxml2-utils libfuse2 nbdkit
RUN apt-get install -y curl qemu-utils vmdk-stream-converter git libxml2-utils libfuse2 nbdkit
ENV NVM_DIR /usr/local/nvm
RUN mkdir -p /usr/local/nvm
RUN cd /usr/local/nvm

View File

@@ -0,0 +1,40 @@
'use strict'
/* eslint-env jest */
const fs = require('fs-extra')
const rimraf = require('rimraf')
const tmp = require('tmp')
const { getSyncedHandler } = require('@xen-orchestra/fs')
const { pFromCallback } = require('promise-toolbox')
const { checkFile, createRandomFile, convertFromRawToVhd } = require('./utils')
let tempDir = null
let disposeHandler
beforeEach(async () => {
tempDir = await pFromCallback(cb => tmp.dir(cb))
const d = await getSyncedHandler({ url: `file://${tempDir}` })
disposeHandler = d.dispose
})
afterEach(async () => {
await rimraf(tempDir)
disposeHandler()
})
test('checkFile fails with unvalid VHD file', async () => {
const initalSizeInMB = 4
const rawFileName = `${tempDir}/randomfile`
await createRandomFile(rawFileName, initalSizeInMB)
const vhdFileName = `${tempDir}/vhdFile.vhd`
await convertFromRawToVhd(rawFileName, vhdFileName)
await checkFile(vhdFileName)
const sizeToTruncateInByte = 250000
await fs.truncate(vhdFileName, sizeToTruncateInByte)
await expect(async () => await checkFile(vhdFileName)).rejects.toThrow()
})

View File

@@ -5,6 +5,7 @@ const { pipeline } = require('readable-stream')
const asyncIteratorToStream = require('async-iterator-to-stream')
const execa = require('execa')
const fs = require('fs-extra')
const fsPromise = require('node:fs/promises')
const { randomBytes } = require('crypto')
const createRandomStream = asyncIteratorToStream(function* (size) {
@@ -21,7 +22,11 @@ async function createRandomFile(name, sizeMB) {
exports.createRandomFile = createRandomFile
async function checkFile(vhdName) {
await execa('vhd-util', ['check', '-p', '-b', '-t', '-n', vhdName])
// Since the qemu-img check command isn't compatible with vhd format, we use
// the convert command to do a check by conversion. Indeed, the conversion will
// fail if the source file isn't a proper vhd format.
await execa('qemu-img', ['convert', '-fvpc', '-Oqcow2', vhdName, 'outputFile.qcow2'])
await fsPromise.unlink('./outputFile.qcow2')
}
exports.checkFile = checkFile

View File

@@ -12,6 +12,7 @@ import { vmdkToVhd, readVmdkGrainTable } from '.'
import VMDKDirectParser from './vmdk-read'
import { generateVmdkData } from './vmdk-generate'
import asyncIteratorToStream from 'async-iterator-to-stream'
import fs from 'fs'
const initialDir = process.cwd()
jest.setTimeout(100000)
@@ -36,6 +37,14 @@ function bufferToArray(buffer) {
return res
}
async function checkFile(vhdName) {
// Since the qemu-img check command isn't compatible with vhd format, we use
// the convert command to do a check by conversion. Indeed, the conversion will
// fail if the source file isn't a proper vhd format.
await execa('qemu-img', ['convert', '-fvpc', '-Oqcow2', vhdName, 'outputFile.qcow2'])
await fs.promises.unlink('./outputFile.qcow2')
}
function createFileAccessor(file) {
return async (start, end) => {
if (start < 0 || end < 0) {
@@ -71,7 +80,7 @@ test('VMDK to VHD can convert a random data file with VMDKDirectParser', async (
)
).pipe(createWriteStream(vhdFileName))
await fromEvent(pipe, 'finish')
await execa('vhd-util', ['check', '-p', '-b', '-t', '-n', vhdFileName])
await checkFile(vhdFileName)
await execa('qemu-img', ['convert', '-fvmdk', '-Oraw', vmdkFileName, reconvertedFromVmdk])
await execa('qemu-img', ['convert', '-fvpc', '-Oraw', vhdFileName, reconvertedFromVhd])
await execa('qemu-img', ['compare', inputRawFileName, vhdFileName])