UNPKG

5.69 kBJavaScriptView Raw
1var util = require ('util');
2var path = require ('path');
3
4var assert = require ('assert');
5
6var df = require ("../");
7var flow = require ("../flow");
8
9var baseName = path.basename (__filename, path.extname (__filename));
10
11var tests = [];
12
13//process.on('uncaughtException', failure ('unhadled exception'));
14
15var dataflows = [{
16 description: "task failed at constructor call",
17 config: {
18 tasks: [{
19 className: "non-existent-task",
20 produce: "data.ok"
21 }]
22 },
23 request: {
24 test: true
25 },
26 completed: false,
27 failed: true
28}, {
29 description: "one completed and one skipped task",
30 config: {
31 tasks: [{
32 className: "./test/task/002-ok-task",
33 produce: "data.ok"
34 }, {
35 className: "./test/task/002-skip-task",
36 requires: "{$data.ok}",
37 produce: "data.skip"
38 }]
39 },
40 request: {
41 test: true
42 },
43 failed: false,
44 completed: true
45}, {
46 description: "two skipped tasks",
47 config: {
48 tasks: [{
49 className: "./test/task/002-skip-task",
50 produce: "data.skip1"
51 }, {
52 className: "./test/task/002-skip-task",
53 produce: "data.skip2"
54 }]
55 },
56 request: {
57 test: true
58 },
59 failed: false,
60 completed: true
61}, {
62 description: "it's ok to skip some tasks if requirements not satisfied",
63 config: {
64 tasks: [{
65 className: "./test/task/002-ok-task",
66 produce: "data.ok"
67 }, {
68 className: "./test/task/002-skip-task",
69 requires: "{$data.nothing}",
70 produce: "data.skip"
71 }]
72 },
73 request: {
74 test: true
75 },
76 failed: false,
77 completed: true
78}, {
79 description: "skipped important task",
80 config: {
81 tasks: [{
82 className: "./test/task/002-ok-task",
83 produce: "data.ok"
84 }, {
85 className: "./test/task/002-skip-task",
86 important: true,
87 requires: "{$data.nothing}",
88 produce: "data.skip"
89 }]
90 },
91 request: {
92 test: true
93 },
94 failed: true,
95 completed: false
96}, {
97 description: "important task decide itself fail or skip",
98 config: {
99 tasks: [{
100 className: "./test/task/002-skip-task",
101 important: true,
102 produce: "data.ok"
103 }]
104 },
105 request: {
106 test: true
107 },
108 failed: true,
109 completed: false
110}, {
111 description: "fail task",
112 config: {
113 tasks: [{
114 className: "./test/task/002-fail-task",
115 produce: "data.fail"
116 }]
117 },
118 request: {
119 test: true
120 },
121 failed: true,
122 completed: false
123}, {
124 description: "fail task is skipped by requirements",
125 config: {
126 tasks: [{
127 className: "./test/task/002-ok-task",
128 produce: "data.ok"
129 }, {
130 className: "./test/task/002-fail-task",
131 requires: "{$data.ok}",
132 produce: "data.fail"
133 }]
134 },
135 request: {
136 test: true
137 },
138 failed: true,
139 completed: false
140//}, {
141
142}];
143
144describe (baseName + " running dataflow", function () {
145 dataflows.map (function (item) {
146 it (item.description, function (done) {
147
148 var df = new flow (
149 {
150 tasks: item.config.tasks,
151 logger: "VERBOSE" in process.env ? undefined : function () {}
152 }, {
153 request: item.request
154 }
155 );
156
157 if (!df.ready) {
158 console.log ("dataflow not ready");
159 assert (item.failed === true);
160 done ();
161 return;
162 }
163
164 df.on ('completed', function () {
165 assert (item.completed === true);
166 done ();
167 });
168
169 df.on ('failed', function () {
170 assert (item.failed === true);
171 done ();
172 });
173
174 df.on ('exception', function () {
175 assert (item.exception === true);
176 done ();
177 });
178
179 if (item.autoRun || item.autoRun == void 0)
180 df.run();
181
182 });
183 });
184});
185
186
187return;
188
189var started = new Date ();
190
191var repeat = parseInt (process.argv[2]) || 1;
192
193repeat.times (function () {
194
195 var independentConfig = {
196 description: "1000 independent tasks",
197 config: {
198 tasks: []
199 },
200 request: {
201 test: true
202 },
203 failed: failure ('1000 independent tasks'),
204 completed: ok ('1000 independent tasks')
205
206 };
207
208 1000..times (function (num) {
209 independentConfig.config.tasks.push ({
210 className: "./test/task/002-ok-task",
211 produce: "data.ok"+num
212 });
213 });
214
215 var independentDf = new flow (
216 util.extend (true, {}, independentConfig.config),
217 {request: independentConfig.request}
218 );
219
220 if (!independentDf.ready)
221 return independentConfig.failed ();
222
223 independentDf.on ('completed', independentConfig.completed);
224
225 independentDf.on ('failed', independentConfig.failed);
226
227 if (independentConfig.autoRun || independentConfig.autoRun == void 0)
228 independentDf.run();
229
230 var dependentConfig = {
231 description: "1000 dependent tasks",
232 config: {
233 tasks: []
234 },
235 request: {
236 test: true
237 },
238 failed: failure ('1000 dependent tasks'),
239 completed: ok ('1000 dependent tasks')
240
241 };
242
243 dependentConfig.config.tasks.push ({
244 className: "./test/task/002-ok-task",
245 produce: "data.ok0"
246 });
247
248 999..times (function (num) {
249 dependentConfig.config.tasks.push ({
250 className: "./test/task/002-ok-task",
251 produce: "data.ok"+(num+1),
252 require: "{$data.ok"+num+"}"
253 });
254 });
255
256 var dependentDf = new flow (
257 util.extend (true, {}, dependentConfig.config),
258 {request: dependentConfig.request}
259 );
260
261 if (!dependentDf.ready)
262 return dependentConfig.failed ();
263
264 dependentDf.on ('completed', dependentConfig.completed);
265
266 dependentDf.on ('failed', dependentConfig.failed);
267
268 if (dependentConfig.autoRun || dependentConfig.autoRun == void 0)
269 dependentDf.run();
270
271});
272
273process.on('exit', function () {
274 var finished = new Date ();
275 console.error ('finished in', finished.getTime () - started.getTime (), 'ms');
276});
277
278//test('check task requirements', {
279// 'expandFailNoThrow': function() {
280// var result = checkTaskParams (data, dict);
281// assert.deepEqual (result.failed, [
282// "checkFalse.falseExp",
283// "checkFalse.zeroExp",
284// "checkFalse.emptyExp",
285// "checkFalse.emptyArr",
286// "checkFalse.emptyObj",
287//
288// "exception.stringExp2",
289// "exception.nothing"
290// ]);
291// },
292//
293//});