@nraynaud/xo-vmdk-to-vhd
Version:
JS lib streaming a vmdk file to a vhd
151 lines (119 loc) • 6.17 kB
JavaScript
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _chai = require('chai');
var _mocha = require('mocha');
var _childProcessPromise = require('child-process-promise');
var _fsPromise = require('fs-promise');
var _vmdkRead = require('./vmdk-read');
var _vhdWrite = require('./vhd-write');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
(0, _mocha.describe)('VMDK to VHD conversion', function () {
(0, _mocha.it)('can convert a random data file with readRawContent()', (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
var inputRawFileName, vmdkFileName, vhdFileName, reconvertedRawFilemane, dataSize, rawContent, f;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
inputRawFileName = 'random-data.raw';
vmdkFileName = 'random-data.vmdk';
vhdFileName = 'from-vmdk-readRawContent.vhd';
reconvertedRawFilemane = 'from-vhd.raw';
dataSize = 5222400;
_context.next = 7;
return (0, _childProcessPromise.exec)('rm -f ' + [inputRawFileName, vmdkFileName, vhdFileName, reconvertedRawFilemane].join(' '));
case 7:
_context.next = 9;
return (0, _childProcessPromise.exec)('base64 /dev/urandom | head -c ' + dataSize + ' > ' + inputRawFileName);
case 9:
_context.next = 11;
return (0, _childProcessPromise.exec)('VBoxManage convertfromraw --format VMDK --variant Stream ' + inputRawFileName + ' ' + vmdkFileName);
case 11:
_context.next = 13;
return (0, _vmdkRead.readRawContent)((0, _fsPromise.createReadStream)(vmdkFileName));
case 13:
rawContent = _context.sent.rawFile;
f = new _vhdWrite.VHDFile(rawContent.length, 523557791);
_context.next = 17;
return f.writeBuffer(rawContent);
case 17:
_context.next = 19;
return f.writeFile(vhdFileName);
case 19:
_context.next = 21;
return (0, _childProcessPromise.exec)('qemu-img convert -fvpc -Oraw ' + vhdFileName + ' ' + reconvertedRawFilemane);
case 21:
_context.next = 23;
return (0, _childProcessPromise.exec)('qemu-img compare ' + vmdkFileName + ' ' + vhdFileName).catch(function (error) {
console.error(error.stdout);
console.error(error.stderr);
_chai.assert.fail(vhdFileName, vmdkFileName, error.message);
});
case 23:
case 'end':
return _context.stop();
}
}
}, _callee, undefined);
})));
(0, _mocha.it)('can convert a random data file with VMDKDirectParser', (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
var inputRawFileName, vmdkFileName, vhdFileName, reconvertedRawFilemane, reconvertedByVBoxRawFilemane, dataSize, pipe;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
inputRawFileName = 'random-data.raw';
vmdkFileName = 'random-data.vmdk';
vhdFileName = 'from-vmdk-VMDKDirectParser.vhd';
reconvertedRawFilemane = 'from-vhd.raw';
reconvertedByVBoxRawFilemane = 'from-vhd-by-vbox.raw';
dataSize = (0, _vhdWrite.computeGeometryForSize)(8 * 1024 * 1024).actualSize;
_context2.next = 8;
return (0, _childProcessPromise.exec)('rm -f ' + [inputRawFileName, vmdkFileName, vhdFileName, reconvertedRawFilemane, reconvertedByVBoxRawFilemane].join(' '));
case 8:
_context2.next = 10;
return (0, _childProcessPromise.exec)('base64 /dev/urandom | head -c ' + dataSize + ' > ' + inputRawFileName);
case 10:
console.log('after urandom');
_context2.next = 13;
return (0, _childProcessPromise.exec)('VBoxManage convertfromraw --format VMDK --variant Stream ' + inputRawFileName + ' ' + vmdkFileName);
case 13:
console.log('after convertfromraw');
_context2.next = 16;
return (0, _vhdWrite.convertFromVMDK)((0, _fsPromise.createReadStream)(vmdkFileName));
case 16:
_context2.t0 = (0, _fsPromise.createWriteStream)(vhdFileName);
pipe = _context2.sent.pipe(_context2.t0);
_context2.next = 20;
return new _promise2.default(function (resolve, reject) {
pipe.on('finish', resolve);
pipe.on('error', reject);
});
case 20:
console.log('after pipe');
_context2.next = 23;
return (0, _childProcessPromise.exec)('qemu-img convert -fvmdk -Oraw ' + vmdkFileName + ' ' + reconvertedByVBoxRawFilemane);
case 23:
console.log('after convert1');
_context2.next = 26;
return (0, _childProcessPromise.exec)('qemu-img convert -fvpc -Oraw ' + vhdFileName + ' ' + reconvertedRawFilemane);
case 26:
console.log('after convert2');
return _context2.abrupt('return', (0, _childProcessPromise.exec)('qemu-img compare ' + reconvertedByVBoxRawFilemane + ' ' + reconvertedRawFilemane).catch(function (error) {
console.error(error.stdout);
console.error(error.stderr);
_chai.assert.fail(vhdFileName, vmdkFileName, error.message);
}));
case 28:
case 'end':
return _context2.stop();
}
}
}, _callee2, undefined);
})));
});
//# sourceMappingURL=vmdk-to-vhd.spec.js.map
;