Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50654 views
1
/*
2
* macros.js: Test macros for the forever module
3
*
4
* (C) 2010 Nodejitsu Inc.
5
* MIT LICENCE
6
*
7
*/
8
9
var assert = require('assert'),
10
path = require('path'),
11
spawn = require('child_process').spawn,
12
nssocket = require('nssocket'),
13
forever = require('../../lib/forever'),
14
Worker = require('../../lib/forever/worker').Worker;
15
16
var macros = exports;
17
18
macros.assertTimes = function (script, times, options) {
19
options.max = times;
20
21
return {
22
topic: function () {
23
var child = new (forever.Monitor)(script, options);
24
child.on('exit', this.callback.bind({}, null));
25
child.start();
26
},
27
"should emit 'exit' when completed": function (err, child) {
28
assert.equal(child.times, times);
29
}
30
}
31
};
32
33
macros.spawn = function (args, options) {
34
options.topic = function () {
35
var self = this;
36
37
args = [path.join(__dirname, '..', 'bin', 'forever')].concat(args);
38
39
var child = spawn(process.argv[0], args),
40
stdout = '',
41
stderr = '';
42
43
child.stdout.on('data', function (data) {
44
stdout += data;
45
});
46
child.stderr.on('data', function (data) {
47
stderr += data;
48
});
49
child.once('exit', function (exitCode) {
50
//
51
// Remark: We wait 200 ms because of forever boot up time (master
52
// doesn't wait for slave to start up after it's forked, it just quits)
53
//
54
setTimeout(function () {
55
self.callback(null, exitCode, stdout, stderr);
56
}, 200);
57
});
58
};
59
return options;
60
};
61
62
macros.list = function (options) {
63
options.topic = function () {
64
forever.list(false, this.callback)
65
};
66
return options;
67
};
68
69
macros.assertStartsWith = function (string, substring) {
70
assert.equal(string.slice(0, substring.length), substring);
71
};
72
73
macros.assertList = function (list) {
74
assert.isNotNull(list);
75
assert.lengthOf(list, 1);
76
};
77
78
macros.assertWorkerConnected = function (workerOptions, batch) {
79
return {
80
topic: function () {
81
var self = this,
82
reader = new nssocket.NsSocket(),
83
worker = new Worker(workerOptions);
84
85
worker.start(function (err, sock) {
86
reader.connect(sock, function () {
87
self.callback(null, reader, worker, workerOptions);
88
});
89
});
90
},
91
'worker should connect': batch
92
};
93
};
94
95