Skip to content

Commit 7fee71c

Browse files
authored
Merge pull request #14 from dani8art/#6
added test. fixed #6
2 parents 9de1dbd + 861608c commit 7fee71c

16 files changed

+272
-103
lines changed

.jshintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"strict": true,
1717
"trailing": true,
1818
"undef": true,
19-
"unused": true,
19+
"unused": false,
2020
"esversion": 6,
2121
"validthis": true,
2222
"eqnull": true,

src/cmd/cmd.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
*/
77

88
var spawn = require('child_process').spawn,
9-
logger = require('../logger/logger'),
109
Promise = require('bluebird');
1110

1211
module.exports = {

src/docker-compose-manager.js

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,14 @@ function dockerComposeUp(file, options) {
3737
var command = 'docker-compose';
3838
var arg = ['-f', file, 'up', '-d'].concat(options);
3939

40+
var out = "";
4041
cmd.execCommand(command, arg).then(child => {
41-
child.stdout.on('data', data => console.log(data.toString()));
42-
child.stderr.on('data', data => console.log(data.toString()));
43-
child.stdout.on('close', code => { if (!code) resolve(); else reject(code); });
42+
child.stdout.on('data', data => out += data.toString());
43+
child.stderr.on('data', data => out += data.toString());
44+
child.on('close', code => {
45+
if (!code) resolve(out);
46+
else reject({ code: code, err: out });
47+
});
4448
});
4549
});
4650
}
@@ -51,10 +55,14 @@ function dockerComposeDown(file, options) {
5155
var command = 'docker-compose';
5256
var arg = ['-f', file, 'down'].concat(options);
5357

58+
var out = "";
5459
cmd.execCommand(command, arg).then(child => {
55-
child.stdout.on('data', data => console.log(data.toString()));
56-
child.stderr.on('data', data => console.log(data.toString()));
57-
child.stdout.on('close', code => { if (!code) resolve(); else reject(code); });
60+
child.stdout.on('data', data => out += data.toString());
61+
child.stderr.on('data', data => out += data.toString());
62+
child.on('close', code => {
63+
if (!code) resolve(out);
64+
else reject({ code: code, err: out });
65+
});
5866
});
5967
});
6068
}
@@ -65,10 +73,14 @@ function dockerComposeStop(file, options) {
6573
var command = 'docker-compose';
6674
var arg = ['-f', file, 'stop'].concat(options);
6775

76+
var out = "";
6877
cmd.execCommand(command, arg).then(child => {
69-
child.stdout.on('data', data => console.log(data.toString()));
70-
child.stderr.on('data', data => console.log(data.toString()));
71-
child.stdout.on('close', code => { if (!code) resolve(); else reject(code); });
78+
child.stdout.on('data', data => out += data.toString());
79+
child.stderr.on('data', data => out += data.toString());
80+
child.on('close', code => {
81+
if (!code) resolve(out);
82+
else reject({ code: code, err: out });
83+
});
7284
});
7385
});
7486
}
@@ -79,10 +91,14 @@ function dockerComposeStart(file, options) {
7991
var command = 'docker-compose';
8092
var arg = ['-f', file, 'start'].concat(options);
8193

94+
var out = "";
8295
cmd.execCommand(command, arg).then(child => {
83-
child.stdout.on('data', data => console.log(data.toString()));
84-
child.stderr.on('data', data => console.log(data.toString()));
85-
child.stdout.on('close', code => { if (!code) resolve(); else reject(code); });
96+
child.stdout.on('data', data => out += data.toString());
97+
child.stderr.on('data', data => out += data.toString());
98+
child.on('close', code => {
99+
if (!code) resolve(out);
100+
else reject({ code: code, err: out });
101+
});
86102
});
87103
});
88104
}
@@ -93,10 +109,14 @@ function dockerExec(container, exec_command, options) {
93109
var command = 'docker';
94110
var arg = ['exec'].concat(options).concat(container).concat(exec_command);
95111

112+
var out = "";
96113
cmd.execCommand(command, arg).then(child => {
97-
child.stdout.on('data', data => console.log(data.toString()));
98-
child.stderr.on('data', data => console.log(data.toString()));
99-
child.stdout.on('close', code => { if (!code) resolve(); else reject(code); });
114+
child.stdout.on('data', data => out += data.toString());
115+
child.stderr.on('data', data => out += data.toString());
116+
child.on('close', code => {
117+
if (!code) resolve(out);
118+
else reject({ code: code, err: out });
119+
});
100120
});
101121
});
102122
}
@@ -107,11 +127,14 @@ function dockerInspectIPAddressOfContainer(container, options) {
107127
var command = 'docker';
108128
var arg = ['inspect', '--format', "'{{.NetworkSettings.Networks." + options.network + ".IPAddress}}'", container];
109129

110-
var ip;
130+
var out = "";
111131
cmd.execCommand(command, arg).then(child => {
112-
child.stdout.on('data', data => ip = data.toString('utf-8').replace(/(?:\r\n|\r|\n)/g, '').replace(/'/ig, ''));
113-
child.stderr.on('data', data => console.log(data.toString()));
114-
child.stdout.on('close', code => { if (!code) resolve(ip); else reject(code); });
132+
child.stdout.on('data', data => out += data.toString());
133+
child.stderr.on('data', data => out += data.toString());
134+
child.on('close', code => {
135+
if (!code) resolve(out.toString('utf-8').replace(/(?:\r\n|\r|\n)/g, '').replace(/'/ig, ''));
136+
else reject({ code: code, err: out });
137+
});
115138
});
116139
});
117140
}
@@ -122,11 +145,14 @@ function dockerInspectPortOfContainer(container) {
122145
var command = 'docker';
123146
var arg = ['inspect', '--format', "'{{.NetworkSettings.Ports}}'", container];
124147

125-
var port;
148+
var out = "";
126149
cmd.execCommand(command, arg).then(child => {
127-
child.stdout.on('data', data => port = data.toString('utf-8').replace(/(?:\r\n|\r|\n)/g, '').split("[")[1].split("/")[0].replace(/'/ig, ''));
128-
child.stderr.on('data', data => console.log(data.toString()));
129-
child.stdout.on('close', code => { if (!code) resolve(port); else reject(code); });
150+
child.stdout.on('data', data => out += data.toString());
151+
child.stderr.on('data', data => out += data.toString());
152+
child.on('close', code => {
153+
if (!code) resolve(out.toString('utf-8').replace(/(?:\r\n|\r|\n)/g, '').split("[")[1].split("/")[0].replace(/'/ig, ''));
154+
else reject({ code: code, err: out });
155+
});
130156
});
131157
});
132158
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
'use strict';
2+
3+
process.env.NODE_ENV = "test";
4+
5+
var expect = require('chai').expect;
6+
var module = require('../../src/docker-compose-manager'),
7+
logger = require('../../src/logger/logger');
8+
9+
describe('Docker compose manager Module tests', function () {
10+
this.timeout(30000);
11+
12+
it('The module exposes "dockerComposeUp" function', () => {
13+
14+
var result = module.dockerComposeUp;
15+
expect(result).to.not.be.equal(undefined);
16+
17+
});
18+
19+
it('The module exposes "dockerComposeDown" function', () => {
20+
21+
var result = module.dockerComposeDown;
22+
expect(result).to.not.be.equal(undefined);
23+
24+
});
25+
26+
it('The module exposes "dockerComposeStop" function', () => {
27+
28+
var result = module.dockerComposeStop;
29+
expect(result).to.not.be.equal(undefined);
30+
31+
});
32+
33+
it('The module exposes "dockerComposeStart" function', () => {
34+
35+
var result = module.dockerComposeStart;
36+
expect(result).to.not.be.equal(undefined);
37+
38+
});
39+
40+
it('The module exposes "dockerExec" function', () => {
41+
42+
var result = module.dockerExec;
43+
expect(result).to.not.be.equal(undefined);
44+
45+
});
46+
47+
it('The module exposes "dockerInspectIPAddressOfContainer" function', () => {
48+
49+
var result = module.dockerInspectIPAddressOfContainer;
50+
expect(result).to.not.be.equal(undefined);
51+
52+
});
53+
54+
it('The module exposes "dockerInspectPortOfContainer" function', () => {
55+
56+
var result = module.dockerInspectPortOfContainer;
57+
expect(result).to.not.be.equal(undefined);
58+
59+
});
60+
61+
it('Functions sequence', done => {
62+
var file = __dirname + '/../docker-compose.yaml';
63+
module.dockerComposeUp(file).then(() => {
64+
return module.dockerComposeStop(file);
65+
}).then(() => {
66+
return module.dockerComposeStart(file);
67+
}).then(() => {
68+
return module.dockerExec('mongo', ['mongo', '--version']);
69+
}).then(() => {
70+
return module.dockerInspectIPAddressOfContainer('tests_mongo_1', { network: "tests_default" }).then(ip => {
71+
expect(ip).to.be.equal('172.18.0.2');
72+
});
73+
}).then(() => {
74+
return module.dockerInspectPortOfContainer('tests_mongo_1').then(port => {
75+
expect(port).to.be.equal('27017');
76+
});
77+
}).then(() => {
78+
return module.dockerComposeDown(file).then(out => done());
79+
}).catch(err => done(err));
80+
81+
});
82+
83+
});

tests/00-module/002-dc-up.test.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict';
2+
3+
process.env.NODE_ENV = "development";
4+
5+
var expect = require('chai').expect;
6+
var module = require('../../src/docker-compose-manager'),
7+
fs = require('fs');
8+
9+
describe('docker-compose up tests', function () {
10+
this.timeout(30000);
11+
12+
var file = __dirname + '/../docker-compose.yaml';
13+
it('Execute command up', done => {
14+
15+
var expected = fs.readFileSync('./tests/00-module/expected/dc-up.expected.txt', 'utf-8');
16+
module.dockerComposeUp(file).then(out => {
17+
expect(out).to.equal(expected);
18+
done();
19+
}, done);
20+
21+
});
22+
23+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict';
2+
3+
process.env.NODE_ENV = "development";
4+
5+
var expect = require('chai').expect;
6+
var module = require('../../src/docker-compose-manager'),
7+
fs = require('fs');
8+
9+
describe('docker-compose stop tests', function () {
10+
this.timeout(30000);
11+
12+
var file = __dirname + '/../docker-compose.yaml';
13+
it('Execute command stop', done => {
14+
15+
var expected = fs.readFileSync('./tests/00-module/expected/dc-stop.expected.txt', 'utf-8');
16+
module.dockerComposeStop(file).then(out => {
17+
expect(out).to.equal(expected);
18+
done();
19+
}, done);
20+
21+
});
22+
23+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict';
2+
3+
process.env.NODE_ENV = "development";
4+
5+
var expect = require('chai').expect;
6+
var module = require('../../src/docker-compose-manager'),
7+
fs = require('fs');
8+
9+
describe('docker-compose start tests', function () {
10+
this.timeout(30000);
11+
12+
var file = __dirname + '/../docker-compose.yaml';
13+
it('Execute command start', done => {
14+
15+
var expected = fs.readFileSync('./tests/00-module/expected/dc-start.expected.txt', 'utf-8');
16+
module.dockerComposeStart(file).then(out => {
17+
expect(out).to.equal(expected);
18+
done();
19+
}, done);
20+
21+
});
22+
23+
});
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict';
2+
3+
process.env.NODE_ENV = "development";
4+
5+
var expect = require('chai').expect;
6+
var module = require('../../src/docker-compose-manager'),
7+
fs = require('fs');
8+
9+
describe('docker-compose down tests', function () {
10+
this.timeout(30000);
11+
12+
var file = __dirname + '/../docker-compose.yaml';
13+
it('Execute command down', done => {
14+
15+
var expected = fs.readFileSync('./tests/00-module/expected/dc-down.expected.txt', 'utf-8');
16+
module.dockerComposeDown(file).then(out => {
17+
expect(out).to.equal(expected);
18+
done();
19+
}, done);
20+
21+
});
22+
23+
});

tests/00-module/expected/dc-down.expected.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Stopping tests_mongo_1 ...
2+
Stopping tests_mongo_1 ... doneRemoving tests_mongo_1 ...
3+
Removing tests_mongo_1 ... doneRemoving network tests_default

tests/00-module/expected/dc-start.expected.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Starting mongo ...
2+
Starting mongo ... done

0 commit comments

Comments
 (0)