This repository has been archived on 2020-01-20. You can view files and clone it, but cannot push or open issues or pull requests.
node-spearhead/test/integration/cli-manage-workflow.test.js

143 lines
3.9 KiB
JavaScript
Raw Normal View History

2015-09-25 00:48:26 +03:00
/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/*
* Copyright (c) 2015, Joyent, Inc.
*/
/*
* Test create/start/stop/delete/etc. work flows
*/
var f = require('util').format;
var vasync = require('vasync');
var h = require('./helpers');
var test = require('tape');
var common = require('../../lib/common');
var VM_ALIAS = 'node-triton-test-vm-1';
var VM_IMAGE = 'base-64@15.2.0';
var VM_PACKAGE = 't4-standard-128M';
2015-09-25 20:45:16 +03:00
var opts = {
skip: !h.CONFIG.destructiveAllowed
};
2015-09-25 00:48:26 +03:00
/*
* h.triton wrapper that:
* - tests no error is present
* - tests stdout is not empty
* - tests stderr is empty
*
* In the event that any of the above is false, this function will NOT
* fire the callback, which will result in the early terminate of these
* tests as `t.end()` will never be called.
*/
function triton(t, args, cb) {
t.comment(f('running: triton %s', args.join(' ')));
h.triton(args, function (err, stdout, stderr) {
t.error(err, 'no error running child process');
t.equal(stderr, '', 'no stderr produced');
t.notEqual(stdout, '', 'stdout produced');
if (!err && stdout && !stderr)
cb(stdout);
});
}
// global variable to hold vm instance JSON
var instance;
2015-09-25 22:24:37 +03:00
2015-09-25 00:48:26 +03:00
// --- Tests
2015-09-25 20:45:16 +03:00
if (opts.skip) {
console.error('** skipping manage workflow tests');
console.error('** set "destructiveAllowed" to enable');
}
2015-09-25 22:24:37 +03:00
test('triton manage workflow', opts, function (tt) {
2015-09-25 20:45:16 +03:00
// create a test machine (blocking) and output JSON
2015-09-25 22:24:37 +03:00
tt.test('triton create', function (t) {
2015-09-25 20:45:16 +03:00
triton(t, ['create', '-wjn', VM_ALIAS, VM_IMAGE, VM_PACKAGE],
function (stdout) {
// parse JSON response
var lines = stdout.trim().split('\n');
t.equal(lines.length, 2, 'correct number of JSON lines');
try {
lines = lines.map(function (line) {
return JSON.parse(line);
});
} catch (e) {
t.fail('failed to parse JSON');
t.end();
}
2015-09-25 00:48:26 +03:00
2015-09-25 20:45:16 +03:00
instance = lines[1];
t.equal(lines[0].id, lines[1].id, 'correct UUID given');
t.equal(lines[1].state, 'running', 'correct machine state');
2015-09-25 00:48:26 +03:00
2015-09-25 20:45:16 +03:00
t.end();
});
2015-09-25 00:48:26 +03:00
});
2015-09-25 20:45:16 +03:00
// test `triton instance -j` with the UUID, the alias, and the short ID
2015-09-25 22:24:37 +03:00
tt.test('triton instance', function (t) {
2015-09-25 20:45:16 +03:00
var uuid = instance.id;
var shortId = common.uuidToShortId(uuid);
vasync.parallel({
funcs: [
function (cb) {
triton(t, ['instance', '-j', VM_ALIAS], function (stdout) {
cb(null, stdout);
});
},
function (cb) {
triton(t, ['instance', '-j', uuid], function (stdout) {
cb(null, stdout);
});
},
function (cb) {
triton(t, ['instance', '-j', shortId], function (stdout) {
cb(null, stdout);
});
2015-09-25 22:24:37 +03:00
}
]
2015-09-25 20:45:16 +03:00
}, function (err, results) {
if (h.ifErr(t, err, 'no error'))
return t.end();
var output;
try {
output = results.operations.map(function (op) {
return JSON.parse(op.result);
2015-09-25 00:48:26 +03:00
});
2015-09-25 20:45:16 +03:00
} catch (e) {
t.fail('failed to parse JSON');
t.end();
}
output.forEach(function (res) {
t.deepEqual(output[0], res, 'same data');
2015-09-25 00:48:26 +03:00
});
2015-09-25 20:45:16 +03:00
t.end();
2015-09-25 00:48:26 +03:00
});
});
2015-09-25 20:45:16 +03:00
// remove test instance
2015-09-25 22:24:37 +03:00
tt.test('triton delete', function (t) {
2015-09-25 20:45:16 +03:00
triton(t, ['delete', '-w', instance.id], function (stdout) {
t.end();
});
2015-09-25 00:48:26 +03:00
});
2015-09-25 22:24:37 +03:00
2015-09-25 00:48:26 +03:00
});