denver
Version:
Create layers of ENV variables saved to etcd and deploy docker containers using them
257 lines (199 loc) • 4.75 kB
JavaScript
var denver = require('../');
var Etcd = require('etcdjs');
var async = require('async');
var should = require('should');
describe('denver', function(){
var settings = {
host:process.env.DENVER_HOST || '127.0.0.1',
port:process.env.DENVER_PORT || 4001,
key:process.env.DENVER_KEY || '/denver/test'
}
function make_denver(){
return denver({
key:settings.key,
host:settings.host,
port:settings.port
});
}
function make_etcd(){
return Etcd(settings.host + ':' + settings.port);
}
beforeEach(function(done){
this.timeout(1000);
var client = make_etcd();
client.del(settings.key, {
recursive:true
}, function(error){
setTimeout(done, 100);
})
})
after(function(done){
var client = make_etcd();
client.del(settings.key, {
recursive:true
}, function(error){
setTimeout(done, 100);
})
})
it('should be an Event Emitter', function(done) {
var den = make_denver();
den.on('stash', done);
den.emit('stash');
})
it('should do a basic read and write and delete to a stack', function(done) {
this.timeout(2000);
var addhit = false;
var delhit = false;
var den = make_denver();
den.on('set', function(stack, key, value){
stack.should.equal('myapp');
key.should.equal('ADMIN_EMAIL');
value.should.equal('bob@thebuilder.com');
addhit = true;
})
den.on('del', function(stack, key){
stack.should.equal('myapp');
key.should.equal('ADMIN_EMAIL');
delhit = true;
})
async.series([
function(next){
den.set('myapp', 'ADMIN_EMAIL', 'bob@thebuilder.com', next);
},
function(next){
den.get('myapp', 'ADMIN_EMAIL', function(err, val){
if(err){
throw err;
}
val.should.equal('bob@thebuilder.com');
next();
})
},
function(next){
den.del('myapp', 'ADMIN_EMAIL', next);
},
function(next){
den.get('myapp', 'ADMIN_EMAIL', function(err, val){
if(err){
throw err;
}
val.should.equal('');
addhit.should.equal(true);
delhit.should.equal(true);
next();
})
}
], done)
})
it('should list stacks', function(done) {
this.timeout(2000);
var den = make_denver();
async.series([
function(next){
den.set('app1', 'ADMIN_EMAIL', 'bob@thebuilder.com', next);
},
function(next){
den.set('app2', 'ADMIN_EMAIL', 'bob@thebuilder.com', next);
},
function(next){
den.set('app3', 'ADMIN_EMAIL', 'bob@thebuilder.com', next);
},
function(next){
den.ls(function(err, stacks){
if(err){
throw err;
}
stacks.length.should.equal(3);
var hit = {};
stacks.forEach(function(s){
hit[s] = true;
})
hit.app1.should.equal(true);
hit.app2.should.equal(true);
hit.app3.should.equal(true);
next();
})
}
], done)
})
it('should remove a stack', function(done) {
this.timeout(2000);
var den = make_denver();
async.series([
function(next){
den.set('app1', 'ADMIN_EMAIL', 'bob@thebuilder.com', next);
},
function(next){
den.set('app2', 'ADMIN_EMAIL', 'bob@thebuilder.com', next);
},
function(next){
den.set('app3', 'ADMIN_EMAIL', 'bob@thebuilder.com', next);
},
function(next){
den.rm('app2', next);
},
function(next){
den.ls(function(err, stacks){
if(err){
throw err;
}
stacks.length.should.equal(2);
var hit = {};
stacks.forEach(function(s){
hit[s] = true;
})
hit.app1.should.equal(true);
hit.app3.should.equal(true);
next();
})
}
], done)
})
it('get the environment for a single stack', function(done) {
this.timeout(2000);
var den = make_denver();
async.series([
function(next){
den.set('app1', 'ADMIN_EMAIL', 'bob@thebuilder.com', next);
},
function(next){
den.set('app1', 'OTHER_ENV', 'hello', next);
},
function(next){
den.env('app1', function(err, vars){
if(err){
throw err;
}
vars.ADMIN_EMAIL.should.equal('bob@thebuilder.com');
vars.OTHER_ENV.should.equal('hello');
next();
})
}
], done)
})
it('get the environment for a merged stack', function(done) {
this.timeout(2000);
var den = make_denver();
async.series([
function(next){
den.set('app1', 'ADMIN_EMAIL', 'bob@thebuilder.com', next);
},
function(next){
den.set('app1', 'OTHER_ENV', 'hello', next);
},
function(next){
den.set('app2', 'OTHER_ENV', 'hello2', next);
},
function(next){
den.env(['app1', 'app2'], function(err, vars){
if(err){
throw err;
}
vars.ADMIN_EMAIL.should.equal('bob@thebuilder.com');
vars.OTHER_ENV.should.equal('hello2');
next();
})
}
], done)
})
})