acs
Version:
Appcelerator Server Side Node
243 lines (214 loc) • 8.18 kB
JavaScript
var nexpect = require('nexpect'),
temp = require('temp'),
chai = require('chai'),
should = chai.should(),
path = require('path'),
chaiHttp = require('chai-http'),
utils = require('./utils'),
config = require('./config.json');
const { step } = require('mocha-steps');
const argv = require('minimist')(process.argv.slice(2));
var ack="ack"
chai.use(chaiHttp);
describe(">>>>>>>>> smoke test >>>>>>>>>", function() {
let customNamespace = 'smoketest';
let customRelease = 'acksample';
let sampleChartName = 'acksamplechart';
let temdir = temp.mkdirSync('arssmoketest');
let nginxHost= '';
let nexpectOpts = {stripColors: true, stream: 'all'};
this.timeout(300000);
before(function(done) {
done();
});
// ack init
// ack install
// ack list namespace
// ack get status
// ack get deployments
// ack get pods
// verify server size
// ack get ingresses
// verify hosts
describe(">>>>>>>>> install a release", function() {
step(`should create a sample helm chart`, function(done) {
nexpect.spawn(ack, ['new', sampleChartName, '-d', temdir], nexpectOpts)
.wait('New project created at', (line) => { utils.logOutput(line) })
.run(function (err, stdout, exitcode) {
utils.logOutput('stdout', stdout);
utils.logOutput('exitcode', exitcode);
should.not.exist(err);
exitcode.should.equal(0);
done();
});
});
step(`should find no ${customNamespace} namespace`, function(done) {
nexpect.spawn(ack, ['list', customNamespace], nexpectOpts)
.wait('no namespace found', (line) => { utils.logOutput(line) })
.run(function (err, stdout, exitcode) {
utils.logOutput('stdout', stdout);
utils.logOutput('exitcode', exitcode);
should.not.exist(err);
exitcode.should.equal(1);
done();
});
});
step(`should create ${customNamespace} namespace`, function(done) {
let params = [
'init',
customNamespace,
'-o',
argv.orgid || config.orgid
];
utils.logOutput('ack', params.join(' '));
nexpect.spawn(ack, params, nexpectOpts)
.wait('Namespace created successfully', (line) => { utils.logOutput(line) })
.wait('Name: ' + customNamespace)
.expect('- Default Domain:')
.expect('- Default Server Size: Dev')
.expect('- Default Proxy: Enabled')
.expect('- Creation At:')
.expect('- Status: Active')
.run(function (err, stdout, exitcode) {
utils.logOutput('stdout', stdout);
utils.logOutput('exitcode', exitcode);
should.not.exist(err);
exitcode.should.equal(0);
done();
});
});
step(`should list namespace ${customNamespace}`, function(done) {
let chain = nexpect.spawn(ack, ['list', customNamespace], nexpectOpts)
chain.wait("-- Used", function(){utils.logOutput(arguments)})
chain.wait(`Name: ${customNamespace}`);
chain.wait(`- Default Domain:`, function(line){
// '83360f3dc3db548af5e6dd5054c3045e.chart.jin.apirs.net';
nginxHost = line.split(':')[1].trim();
console.log('nginxHost', nginxHost);
});
chain.wait(`- Default Server Size: Dev`);
chain.wait(`- Default Proxy: Enabled`);
chain.wait(`- Creation At:`);
chain.wait(`- Status: Active`);
// chain.expect('===========');
chain.run(function (err, stdout, exitcode) {
utils.logOutput('stdout', stdout);
utils.logOutput('exitcode', exitcode);
should.not.exist(err);
exitcode.should.equal(0);
done();
});
});
step(`should install release ${customRelease} into namespace ${customNamespace}`, function(done) {
let params = [
'install',
customRelease,
'-n',
customNamespace,
'-f',
path.join(temdir, sampleChartName)
];
utils.logOutput('ack', params.join(' '));
nexpect.spawn(ack, params, nexpectOpts)
.wait('Release installed successfully', (line) => { utils.logOutput(line) })
.run(function (err, stdout, exitcode) {
utils.logOutput('stdout', stdout);
utils.logOutput('exitcode', exitcode);
should.not.exist(err);
exitcode.should.equal(0);
done();
});
});
// ack get status
step(`should get release status "Deployed" in namespace ${customNamespace}`, function(done) {
function getStatus(runHandler) {
utils.logOutput("ack get status...")
nexpect.spawn(ack, ['get', 'status', '-n', customNamespace], nexpectOpts)
.wait('- Status: deployed', (line) => { utils.logOutput(line) })
.wait('- Description: Install complete', (line) => { utils.logOutput(line) })
.run(runHandler);
}
utils.runCommandAndWait(getStatus, 30, done);
});
// ack get deployments
step(`should get deployments in namespace ${customNamespace}`, function(done) {
function getDeployment(runHandler) {
utils.logOutput("ack get deployment...")
let chain = nexpect.spawn(ack, ['get', 'deployments', '-n', customNamespace], nexpectOpts)
chain.wait('Name: acksample', (line) => { utils.logOutput(line) })
utils.verifyAdjentLines(chain, utils.getDeployInfo(customNamespace, 1, 1 ,1));
chain.run(runHandler);
}
utils.runCommandAndWait(getDeployment, 20, 5000, done);
});
// check pods
step(`should get pods from namespace ${customNamespace}`, function(done) {
let chain = nexpect.spawn(ack, ['get', 'pods', '-n', customNamespace], nexpectOpts)
chain.wait('Name: acksample', (line) => { utils.logOutput(line) });
utils.verifyAdjentLines(chain, utils.getPodInfo(customNamespace, 'Dev'));
chain.run(function (err, stdout, exitcode) {
utils.logOutput('stdout', stdout);
utils.logOutput('exitcode', exitcode);
should.not.exist(err);
exitcode.should.equal(0);
done();
});
});
// check ingresses
step(`should get ingresses from namespace ${customNamespace}`, function(done) {
let chain = nexpect.spawn(ack, ['get', 'ingresses', '-n', customNamespace], nexpectOpts)
chain.wait('Name: acksample', (line) => { utils.logOutput(line) });
utils.verifyAdjentLines(chain, utils.getIngressInfo(customNamespace, nginxHost, 'acksample'));
chain.run(function (err, stdout, exitcode) {
utils.logOutput('stdout', stdout);
utils.logOutput('exitcode', exitcode);
should.not.exist(err);
exitcode.should.equal(0);
done();
});
});
step('should be able to access nginx from outside', function(done) {
function getResult(endHandler) {
chai.request(nginxHost)
.get(`/`)
.end(endHandler);
}
utils.sendRequestAndWait(getResult, 30, 2000, done);
});
step(`should remove release ${customRelease} from namespace ${customNamespace}`, function(done) {
nexpect.spawn(ack, ['rm', 'release', customRelease, '-n', customNamespace], nexpectOpts)
.wait('Release removed successfully', (line) => { utils.logOutput(line) })
.run(function (err, stdout, exitcode) {
utils.logOutput('stdout', stdout);
utils.logOutput('exitcode', exitcode);
should.not.exist(err);
exitcode.should.equal(0);
done();
});
});
step(`should remove namespace ${customNamespace}`, function(done) {
nexpect.spawn(ack, ['rm', 'namespace', customNamespace, '-o', (argv.orgid || config.orgid)], nexpectOpts)
.wait('Namespace removed successfully', (line) => { utils.logOutput(line) })
.wait('Kubeconfig file deleted', (line) => { utils.logOutput(line) })
.run(function (err, stdout, exitcode) {
utils.logOutput('stdout', stdout);
utils.logOutput('exitcode', exitcode);
should.not.exist(err);
exitcode.should.equal(0);
done();
});
});
});
after(function(done) {
nexpect.spawn(ack, ['rm', 'release', customRelease, '-n', customNamespace], nexpectOpts)
.run(function (err, stdout, exitcode) {
nexpect.spawn(ack, ['rm', 'namespace', customNamespace, '-o', (argv.orgid || config.orgid)], nexpectOpts)
.run(function (err, stdout, exitcode) {
nexpect.spawn("rm", ['-rf', path.join(temdir, sampleChartName)], nexpectOpts)
.run(function (err, stdout, exitcode) {
done();
});
});
});
});
});