mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 10:45:47 +00:00
230 lines
6.7 KiB
JavaScript
230 lines
6.7 KiB
JavaScript
'use strict';
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const test = require('tape');
|
|
const {promisify} = require('es6-promisify');
|
|
const pullout = require('pullout');
|
|
const request = require('request');
|
|
const tar = require('tar-stream');
|
|
const gunzip = require('gunzip-maybe');
|
|
|
|
const before = require('../before');
|
|
|
|
const warp = (fn, ...a) => (...b) => fn(...b, ...a);
|
|
|
|
const _pullout = promisify(pullout);
|
|
|
|
const pathTarFixture = path.join(__dirname, '..', 'fixture/pack.tar.gz');
|
|
const pathZipFixture = path.join(__dirname, '..', 'fixture/pack.zip');
|
|
|
|
const fixture = {
|
|
tar: fs.readFileSync(pathTarFixture),
|
|
zip: fs.readFileSync(pathZipFixture),
|
|
};
|
|
|
|
const get = promisify((url, fn) => {
|
|
fn(null, request(url));
|
|
});
|
|
|
|
const put = promisify((options, fn) => {
|
|
fn(null, request.put(options));
|
|
});
|
|
|
|
test('cloudcmd: rest: pack: tar: get', (t) => {
|
|
const config = {packer: 'tar'};
|
|
|
|
before({config}, (port, after) => {
|
|
get(`http://localhost:${port}/api/v1/pack/fixture/pack`)
|
|
.then((pack) => {
|
|
const extract = tar.extract();
|
|
|
|
pack.pipe(gunzip()).pipe(extract);
|
|
|
|
extract.on('entry', (header, stream) => {
|
|
pullout(stream, 'string', (e, data) => {
|
|
const file = fs.readFileSync(__dirname + '/../fixture/pack', 'utf8');
|
|
t.equal(file, data, 'should pack data');
|
|
t.end();
|
|
after();
|
|
});
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
});
|
|
});
|
|
|
|
test('cloudcmd: rest: pack: tar: put: file', (t) => {
|
|
const config = {packer: 'tar'};
|
|
|
|
before({config}, (port, after) => {
|
|
const name = String(Math.random()) + '.tar.gz';
|
|
const options = getPackOptions(port, name);
|
|
|
|
put(options)
|
|
.then(_pullout)
|
|
.then(() => {
|
|
const file = fs.createReadStream(__dirname + '/../' + name);
|
|
const extract = tar.extract();
|
|
|
|
file.pipe(gunzip()).pipe(extract);
|
|
|
|
extract.on('entry', (header, stream) => {
|
|
pullout(stream, 'string', (e, data) => {
|
|
const file = fs.readFileSync(__dirname + '/../fixture/pack', 'utf8');
|
|
fs.unlinkSync(`${__dirname}/../${name}`);
|
|
|
|
t.equal(file, data, 'should create archive');
|
|
t.end();
|
|
after();
|
|
});
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
});
|
|
});
|
|
|
|
test('cloudcmd: rest: pack: tar: put: response', (t) => {
|
|
const options = {packer: 'tar'};
|
|
before(options, (port, after) => {
|
|
const name = String(Math.random()) + '.tar.gz';
|
|
const options = getPackOptions(port, name);
|
|
|
|
put(options)
|
|
.then(warp(_pullout, 'string'))
|
|
.then((msg) => {
|
|
t.equal(msg, 'pack: ok("fixture")', 'should return result message');
|
|
|
|
fs.unlinkSync(`${__dirname}/../${name}`);
|
|
|
|
t.end();
|
|
after();
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
});
|
|
});
|
|
|
|
test('cloudcmd: rest: pack: tar: put: error', (t) => {
|
|
const config = {packer: 'tar'};
|
|
|
|
before({config}, (port, after) => {
|
|
const options = getPackOptions(port, 'name', [
|
|
'not found'
|
|
]);
|
|
|
|
put(options)
|
|
.then(warp(_pullout, 'string'))
|
|
.then((msg) => {
|
|
t.ok(/^ENOENT: no such file or directory/.test(msg), 'should return error');
|
|
|
|
t.end();
|
|
after();
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
});
|
|
});
|
|
|
|
test('cloudcmd: rest: pack: zip: get', (t) => {
|
|
const config = {packer: 'zip'};
|
|
before({config}, (port, after) => {
|
|
get(`http://localhost:${port}/api/v1/pack/fixture/pack`)
|
|
.then(_pullout)
|
|
.then((pack) => {
|
|
t.equal(pack.length, fixture.zip.length, 'should pack data');
|
|
t.end();
|
|
after();
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
});
|
|
});
|
|
|
|
test('cloudcmd: rest: pack: zip: put: file', (t) => {
|
|
const config = {packer: 'zip'};
|
|
|
|
before({config}, (port, after) => {
|
|
const name = String(Math.random()) + '.zip';
|
|
const options = getPackOptions(port, name);
|
|
|
|
put(options)
|
|
.then(warp(_pullout, 'string'))
|
|
.then(() => {
|
|
const file = fs.readFileSync(__dirname + '/../' + name);
|
|
|
|
fs.unlinkSync(`${__dirname}/../${name}`);
|
|
t.equal(fixture.zip.length, file.length, 'should create archive');
|
|
|
|
t.end();
|
|
after();
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
});
|
|
});
|
|
|
|
test('cloudcmd: rest: pack: zip: put: response', (t) => {
|
|
const config = {packer: 'zip'};
|
|
|
|
before({config}, (port, after) => {
|
|
const name = String(Math.random()) + '.zip';
|
|
const options = getPackOptions(port, name);
|
|
|
|
put(options)
|
|
.then(warp(_pullout, 'string'))
|
|
.then((msg) => {
|
|
t.equal(msg, 'pack: ok("fixture")', 'should return result message');
|
|
|
|
fs.unlinkSync(`${__dirname}/../${name}`);
|
|
|
|
t.end();
|
|
after();
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
});
|
|
});
|
|
|
|
test('cloudcmd: rest: pack: zip: put: error', (t) => {
|
|
const config = {packer: 'zip'};
|
|
before({config}, (port, after) => {
|
|
const options = getPackOptions(port, 'name', [
|
|
'not found'
|
|
]);
|
|
|
|
put(options)
|
|
.then(warp(_pullout, 'string'))
|
|
.then((msg) => {
|
|
t.ok(/^ENOENT: no such file or directory/.test(msg), 'should return error');
|
|
|
|
t.end();
|
|
after();
|
|
})
|
|
.catch((error) => {
|
|
console.log(error);
|
|
});
|
|
});
|
|
});
|
|
|
|
function getPackOptions(port, to, names = ['pack']) {
|
|
return {
|
|
url: `http://localhost:${port}/api/v1/pack`,
|
|
json: {
|
|
to,
|
|
names,
|
|
from: '/fixture',
|
|
}
|
|
};
|
|
}
|
|
|