From ea017eb760da75d485cc728e42223b560099b2aa Mon Sep 17 00:00:00 2001 From: Guilherme Moraes Date: Wed, 27 Mar 2019 22:01:14 -0300 Subject: [PATCH] fix(CommandLineParser): When using as a library, enqueuer handles an empty command line argument. --- README.md | 8 +- docs/index.html | 8 +- output/examples.json | 1246 ++++++++--------- output/examples.yml | 1242 ++++++++-------- package.json | 6 +- .../command-line-configuration.test.ts | 10 +- .../command-line-configuration.ts | 9 +- src/configurations/configuration.ts | 3 +- 8 files changed, 1273 insertions(+), 1259 deletions(-) diff --git a/README.md b/README.md index 8be8d139..b821bfcb 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ And then, run this other one: I told you it was simple. Now go nuts! It's all yours. Have fun. +If you want more examples about `http`, consider looking at [this test](https://github.com/enqueuer-land/enqueuer/blob/master/examples/http-more-examples.yml). Check [this out](https://github.com/enqueuer-land/enqueuer/blob/master/examples/), you'll find countless examples. Certainly one is what you need. @@ -683,8 +684,8 @@ Consider looking at the example of [configuration file](https://github.com/enque #### plugin use -In order to enqueuer get awareness that you want to you a plugin, you have to tell it, right? -You can tell enqueuer to use a plugin in three manners. Using it as a command line argument, through the configuration file or letting enqueuer finding it in it's home directory folder. +In order to enqueuer get awareness that you want to use a plugin, you have to tell it, right? +You can tell enqueuer to use a plugin in three manners: using it as a command line argument, through the configuration file or letting enqueuer finding it in a default location. ##### command line Tell enqueuer to use your plugin through command line this way `$ nqr -l -l `. @@ -700,7 +701,8 @@ Tell enqueuer to use your plugin through configuration file this way: Where plugin-folder and another-plugin-folder are the directories where the plugins are installed in. ##### implicitly -When enqueuer runs, it looks for modules in `.nqr` folder in your home directory. Every enqueuer compatible module get implicitly loaded. +When enqueuer runs, it looks for modules in `.nqr` folder in your home, a.k.a. ~/ folder, in linux distributions, directory. +Every enqueuer compatible module get implicitly loaded. In order to be enqueuer compatible, a module has to have an `entryPoint` exported function in its main file and, in its package.json file, it has to have either 'enqueuer' or 'nqr' as keywords. ---- diff --git a/docs/index.html b/docs/index.html index d87e5021..693169e8 100644 --- a/docs/index.html +++ b/docs/index.html @@ -323,6 +323,7 @@

1.1 install it

I told you it was simple. Now go nuts! It's all yours. Have fun. +If you want more examples about http, consider looking at this test. Check this out, you'll find countless examples. Certainly one is what you need.

@@ -1004,8 +1005,8 @@
8.1.4 report formatter

8.2 plugin use

-

In order to enqueuer get awareness that you want to you a plugin, you have to tell it, right? -You can tell enqueuer to use a plugin in three manners. Using it as a command line argument, through the configuration file or letting enqueuer finding it in it's home directory folder.

+

In order to enqueuer get awareness that you want to use a plugin, you have to tell it, right? +You can tell enqueuer to use a plugin in three manners: using it as a command line argument, through the configuration file or letting enqueuer finding it in a default location.

8.2.1 command line
@@ -1025,7 +1026,8 @@
8.2.2 configuration file<
8.2.3 implicitly
-

When enqueuer runs, it looks for modules in .nqr folder in your home directory. Every enqueuer compatible module get implicitly loaded. +

When enqueuer runs, it looks for modules in .nqr folder in your home, a.k.a. ~/ folder, in linux distributions, directory. +Every enqueuer compatible module get implicitly loaded. In order to be enqueuer compatible, a module has to have an entryPoint exported function in its main file and, in its package.json file, it has to have either 'enqueuer' or 'nqr' as keywords.


diff --git a/output/examples.json b/output/examples.json index c8665824..8e31abd7 100644 --- a/output/examples.json +++ b/output/examples.json @@ -2,14 +2,14 @@ "valid": true, "tests": [], "name": "enqueuer", - "id": "0025420522_9f21eb60ba_782209", + "id": "2029380825_9f21eb60ba_738302", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.691Z", - "endTime": "2019-03-27T03:25:45.889Z", - "totalTime": 3198 + "startTime": "2019-03-27T23:29:38.988Z", + "endTime": "2019-03-27T23:29:42.175Z", + "totalTime": 3187 }, "requisitions": [ { @@ -112,14 +112,14 @@ } ], "name": "examples/assertions.yml", - "id": "0025420524_bd5f045815_216880", + "id": "2029380827_119d3aa2d6_42115", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.696Z", - "endTime": "2019-03-27T03:25:42.799Z", - "totalTime": 103, + "startTime": "2019-03-27T23:29:38.992Z", + "endTime": "2019-03-27T23:29:39.087Z", + "totalTime": 95, "timeout": 5000 }, "requisitions": [] @@ -128,11 +128,11 @@ "valid": true, "tests": [], "name": "examples/avoid.yml", - "id": "0025420525_b559f37be0_512965", + "id": "2029380829_25d6aa9c34_45458", "ignored": false, "subscriptions": [ { - "id": "0025420525_2e0cc1fd7c_870769", + "id": "2029380829_2e0cc1fd7c_17818", "name": "Subscription #0", "type": "tcp", "tests": [ @@ -143,10 +143,10 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z" + "connectionTime": "2019-03-27T23:29:39.127Z" }, { - "id": "0025420525_8444956d6a_821350", + "id": "2029380829_8444956d6a_549193", "name": "Subscription #1", "type": "HTTP", "tests": [ @@ -157,14 +157,14 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z" + "connectionTime": "2019-03-27T23:29:39.128Z" } ], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.697Z", - "endTime": "2019-03-27T03:25:45.768Z", - "totalTime": 3071, + "startTime": "2019-03-27T23:29:38.993Z", + "endTime": "2019-03-27T23:29:42.057Z", + "totalTime": 3064, "timeout": 5000 }, "requisitions": [] @@ -179,14 +179,14 @@ } ], "name": "examples/crypto-require.yml", - "id": "0025420526_d4bf63907d_708086", + "id": "2029380831_8c2496e7c4_804780", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.699Z", - "endTime": "2019-03-27T03:25:42.800Z", - "totalTime": 101, + "startTime": "2019-03-27T23:29:38.994Z", + "endTime": "2019-03-27T23:29:39.088Z", + "totalTime": 94, "timeout": 5000 }, "requisitions": [] @@ -195,11 +195,11 @@ "valid": true, "tests": [], "name": "examples/custom.yml", - "id": "0025420528_947ffcf172_290213", + "id": "2029380833_88e588cb96_829026", "ignored": false, "subscriptions": [ { - "id": "0025420528_32e9fee766_718553", + "id": "2029380833_32e9fee766_301265", "name": "subscription description", "type": "custom", "tests": [ @@ -220,7 +220,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.794Z", + "connectionTime": "2019-03-27T23:29:39.082Z", "messageReceived": { "payload": { "type": "Buffer", @@ -232,7 +232,7 @@ "remoteInfo": { "address": "127.0.0.1", "family": "IPv4", - "port": 54722, + "port": 55248, "size": 2 } } @@ -240,7 +240,7 @@ ], "publishers": [ { - "id": "0025420528_816cec1424_674357", + "id": "2029380833_816cec1424_347145", "name": "publisher description", "valid": true, "type": "custom", @@ -251,13 +251,13 @@ "description": "Published successfully" } ], - "publishTime": "2019-03-27T03:25:42.865Z" + "publishTime": "2019-03-27T23:29:39.151Z" } ], "time": { - "startTime": "2019-03-27T03:25:42.700Z", - "endTime": "2019-03-27T03:25:42.869Z", - "totalTime": 169, + "startTime": "2019-03-27T23:29:38.995Z", + "endTime": "2019-03-27T23:29:39.155Z", + "totalTime": 160, "timeout": 5000 }, "requisitions": [] @@ -266,14 +266,14 @@ "valid": true, "tests": [], "name": "examples/file-placeholder.yml", - "id": "0025420530_e9252be8ef_600796", + "id": "2029380834_191444857f_65807", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.702Z", - "endTime": "2019-03-27T03:25:42.817Z", - "totalTime": 115, + "startTime": "2019-03-27T23:29:39.002Z", + "endTime": "2019-03-27T23:29:39.105Z", + "totalTime": 103, "timeout": 5000 }, "requisitions": [ @@ -302,14 +302,14 @@ } ], "name": "Requisition #0", - "id": "0025420532_f898f752fc_201280", + "id": "2029380836_96d82d46f6_738507", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.755Z", - "endTime": "2019-03-27T03:25:42.804Z", - "totalTime": 49, + "startTime": "2019-03-27T23:29:39.046Z", + "endTime": "2019-03-27T23:29:39.091Z", + "totalTime": 45, "timeout": 5000 }, "requisitions": [] @@ -324,14 +324,14 @@ } ], "name": "Requisition #1", - "id": "0025420534_5095207cef_410918", + "id": "2029380837_fa81613bf0_333521", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.810Z", - "endTime": "2019-03-27T03:25:42.815Z", - "totalTime": 5, + "startTime": "2019-03-27T23:29:39.097Z", + "endTime": "2019-03-27T23:29:39.101Z", + "totalTime": 4, "timeout": 5000 }, "requisitions": [] @@ -342,23 +342,23 @@ "valid": true, "tests": [], "name": "examples/file.yml", - "id": "0025420536_01a51001d0_60847", + "id": "2029380839_c4d6c65048_466680", "ignored": false, "subscriptions": [ { - "id": "0025420536_46b3c9d8c8_553753", + "id": "2029380839_46b3c9d8c8_422654", "name": "subscription description", "type": "file-system-watcher", "tests": [ { "name": "Some time has passed", "valid": true, - "description": "Expected 'now' to be greater than or equal to '1553657142704'. Received '1553657142863'" + "description": "Expected 'now' to be greater than or equal to '1553729379004'. Received '1553729379149'" }, { "name": "Filename", "valid": true, - "description": "Expecting 'temp/fileTest0025420800_cce5b8a3ab_695814.file' (name) to contain 'temp/'" + "description": "Expecting 'temp/fileTest2029390088_cf18ce1e28_636165.file' (name) to contain 'temp/'" }, { "name": "Content", @@ -387,19 +387,19 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.792Z", + "connectionTime": "2019-03-27T23:29:39.080Z", "messageReceived": { - "content": "1553657142704", - "name": "temp/fileTest0025420800_cce5b8a3ab_695814.file", + "content": "1553729379004", + "name": "temp/fileTest2029390088_cf18ce1e28_636165.file", "size": 13, - "modified": "2019-03-27T03:25:42.801Z", - "created": "2019-03-27T03:25:42.801Z" + "modified": "2019-03-27T23:29:39.089Z", + "created": "2019-03-27T23:29:39.089Z" } } ], "publishers": [ { - "id": "0025420536_4b5a457015_83146", + "id": "2029380839_4b5a457015_960703", "name": "publisher description", "valid": true, "type": "file", @@ -410,13 +410,13 @@ "description": "Published successfully" } ], - "publishTime": "2019-03-27T03:25:42.804Z" + "publishTime": "2019-03-27T23:29:39.091Z" } ], "time": { - "startTime": "2019-03-27T03:25:42.703Z", - "endTime": "2019-03-27T03:25:42.864Z", - "totalTime": 161, + "startTime": "2019-03-27T23:29:39.004Z", + "endTime": "2019-03-27T23:29:39.150Z", + "totalTime": 146, "timeout": 3000 }, "requisitions": [] @@ -431,11 +431,11 @@ } ], "name": "examples/hooks.yml", - "id": "0025420538_694be8e5c4_646970", + "id": "2029380841_bf6c6e2686_661204", "ignored": false, "subscriptions": [ { - "id": "0025420539_f076f53bb1_710281", + "id": "2029380841_f076f53bb1_640746", "name": "Subscription #0", "type": "tcp", "tests": [ @@ -471,7 +471,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.127Z", "messageReceived": { "payload": "it", "stream": { @@ -484,7 +484,7 @@ ], "publishers": [ { - "id": "0025420538_ce73838413_931106", + "id": "2029380841_ce73838413_893799", "name": "Publisher #0", "valid": true, "type": "tcp", @@ -535,21 +535,21 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:43.873Z", + "publishTime": "2019-03-27T23:29:40.160Z", "messageReceived": { "payload": "hook response", "stream": { "address": "127.0.0.1", "family": "IPv4", - "port": 53838 + "port": 59108 } } } ], "time": { - "startTime": "2019-03-27T03:25:42.706Z", - "endTime": "2019-03-27T03:25:43.874Z", - "totalTime": 1168, + "startTime": "2019-03-27T23:29:39.007Z", + "endTime": "2019-03-27T23:29:40.161Z", + "totalTime": 1154, "timeout": 3000 }, "requisitions": [] @@ -558,11 +558,11 @@ "valid": true, "tests": [], "name": "examples/http-auth-basic.yml", - "id": "0025420540_3b5c323e71_942846", + "id": "2029380843_4d163dbe07_33819", "ignored": false, "subscriptions": [ { - "id": "0025420540_f8b31336cb_590384", + "id": "2029380843_f8b31336cb_260906", "name": "Subscription #0", "type": "http", "tests": [ @@ -598,7 +598,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "headers": { "content-type": "application/json", @@ -615,7 +615,7 @@ ], "publishers": [ { - "id": "0025420540_f4551bd7af_96321", + "id": "2029380843_f4551bd7af_451833", "name": "Publisher #0", "valid": true, "type": "http", @@ -636,7 +636,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:42.905Z", + "publishTime": "2019-03-27T23:29:39.185Z", "messageReceived": { "statusCode": 200, "body": "basic auth response", @@ -647,7 +647,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "19", "etag": "W/\"13-nGN7LEwCUKXpQoLxNqKZXSglYNc\"", - "date": "Wed, 27 Mar 2019 03:25:42 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -676,9 +676,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.708Z", - "endTime": "2019-03-27T03:25:42.905Z", - "totalTime": 197, + "startTime": "2019-03-27T23:29:39.009Z", + "endTime": "2019-03-27T23:29:39.185Z", + "totalTime": 176, "timeout": 3000 }, "requisitions": [] @@ -687,11 +687,11 @@ "valid": true, "tests": [], "name": "examples/http-auth-bearer.yml", - "id": "0025420542_042b85b6f3_985247", + "id": "2029380844_62d8d71644_391885", "ignored": false, "subscriptions": [ { - "id": "0025420542_8b0a8f4b53_5204", + "id": "2029380844_8b0a8f4b53_195052", "name": "Subscription #0", "type": "http", "tests": [ @@ -722,7 +722,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "headers": { "content-type": "application/json", @@ -739,7 +739,7 @@ ], "publishers": [ { - "id": "0025420542_388c1593e3_833108", + "id": "2029380844_388c1593e3_317181", "name": "Publisher #0", "valid": true, "type": "http", @@ -760,7 +760,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:42.903Z", + "publishTime": "2019-03-27T23:29:39.183Z", "messageReceived": { "statusCode": 321, "body": "responsePayload", @@ -771,7 +771,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "15", "etag": "W/\"f-V9sBEzo+y6k6sqGXsr1Ql2B0tAk\"", - "date": "Wed, 27 Mar 2019 03:25:42 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -800,9 +800,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.710Z", - "endTime": "2019-03-27T03:25:42.903Z", - "totalTime": 193, + "startTime": "2019-03-27T23:29:39.010Z", + "endTime": "2019-03-27T23:29:39.183Z", + "totalTime": 173, "timeout": 3000 }, "requisitions": [] @@ -811,11 +811,11 @@ "valid": true, "tests": [], "name": "examples/http-auth-digest.yml", - "id": "0025420544_46e75f8544_370453", + "id": "2029380845_47c71d227c_745146", "ignored": false, "subscriptions": [ { - "id": "0025420544_6edffc9ab2_385918", + "id": "2029380845_6edffc9ab2_765819", "name": "Subscription #0", "type": "http", "tests": [ @@ -876,7 +876,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.792Z", + "connectionTime": "2019-03-27T23:29:39.080Z", "messageReceived": { "headers": { "content-type": "application/json", @@ -893,7 +893,7 @@ ], "publishers": [ { - "id": "0025420544_b553ccdd3b_925086", + "id": "2029380845_b553ccdd3b_873007", "name": "Publisher #0", "valid": true, "type": "http", @@ -914,7 +914,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:42.902Z", + "publishTime": "2019-03-27T23:29:39.180Z", "messageReceived": { "statusCode": 321, "body": "responsePayload", @@ -925,7 +925,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "15", "etag": "W/\"f-V9sBEzo+y6k6sqGXsr1Ql2B0tAk\"", - "date": "Wed, 27 Mar 2019 03:25:42 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -954,9 +954,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.711Z", - "endTime": "2019-03-27T03:25:42.902Z", - "totalTime": 191, + "startTime": "2019-03-27T23:29:39.012Z", + "endTime": "2019-03-27T23:29:39.180Z", + "totalTime": 168, "timeout": 3000 }, "requisitions": [] @@ -965,14 +965,14 @@ "valid": true, "tests": [], "name": "examples/http-more-examples.yml", - "id": "0025420546_13d8980e1b_897904", + "id": "2029380847_7826d43c66_781142", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.718Z", - "endTime": "2019-03-27T03:25:45.109Z", - "totalTime": 2391, + "startTime": "2019-03-27T23:29:39.017Z", + "endTime": "2019-03-27T23:29:41.394Z", + "totalTime": 2377, "timeout": 5000 }, "requisitions": [ @@ -980,11 +980,11 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420548_725d1b5c55_853047", + "id": "2029380849_af5d85dafa_413892", "ignored": false, "subscriptions": [ { - "id": "0025420548_b9fd747935_349626", + "id": "2029380849_b9fd747935_557590", "name": "Subscription #0", "type": "http", "tests": [ @@ -1015,7 +1015,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.798Z", + "connectionTime": "2019-03-27T23:29:39.087Z", "messageReceived": { "headers": { "content-type": "application/json", @@ -1034,7 +1034,7 @@ } }, { - "id": "0025420548_97c8fb993f_694306", + "id": "2029380849_97c8fb993f_719771", "name": "same port", "type": "http", "tests": [ @@ -1045,7 +1045,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.798Z", + "connectionTime": "2019-03-27T23:29:39.087Z", "messageReceived": { "headers": { "content-length": "5", @@ -1058,7 +1058,7 @@ } }, { - "id": "0025420548_42d8fc1293_701137", + "id": "2029380849_42d8fc1293_834138", "name": "yet another, but avoidable", "type": "http", "tests": [ @@ -1069,12 +1069,12 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.798Z" + "connectionTime": "2019-03-27T23:29:39.087Z" } ], "publishers": [ { - "id": "0025420548_254b0b3fae_797920", + "id": "2029380849_254b0b3fae_679818", "name": "Publisher #0", "valid": true, "type": "http", @@ -1105,7 +1105,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:42.904Z", + "publishTime": "2019-03-27T23:29:39.184Z", "messageReceived": { "statusCode": 321, "body": "dynamically changed payload", @@ -1117,7 +1117,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "27", "etag": "W/\"1b-e5esTWfu+XftewZ5g2Tclr7ClTo\"", - "date": "Wed, 27 Mar 2019 03:25:42 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -1145,7 +1145,7 @@ } }, { - "id": "0025420548_92ae58473e_952607", + "id": "2029380849_92ae58473e_975398", "name": "Publisher #1", "valid": true, "type": "http", @@ -1166,7 +1166,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:42.904Z", + "publishTime": "2019-03-27T23:29:39.184Z", "messageReceived": { "statusCode": 444, "body": "blah", @@ -1177,7 +1177,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "4", "etag": "W/\"4-W/H9kn37hnlJai5s8Ay+UMHIcUU\"", - "date": "Wed, 27 Mar 2019 03:25:42 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -1204,9 +1204,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.757Z", - "endTime": "2019-03-27T03:25:43.096Z", - "totalTime": 339, + "startTime": "2019-03-27T23:29:39.048Z", + "endTime": "2019-03-27T23:29:39.383Z", + "totalTime": 335, "timeout": 3000 }, "requisitions": [] @@ -1215,11 +1215,11 @@ "valid": true, "tests": [], "name": "Requisition #1", - "id": "0025420550_22f610ef86_543217", + "id": "2029380850_bbc120dccb_369822", "ignored": false, "subscriptions": [ { - "id": "0025420550_4010211a40_635273", + "id": "2029380850_4010211a40_914257", "name": "Subscription #0", "type": "http", "tests": [ @@ -1235,7 +1235,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:43.098Z", + "connectionTime": "2019-03-27T23:29:39.385Z", "messageReceived": { "headers": { "content-type": "application/json", @@ -1255,7 +1255,7 @@ ], "publishers": [ { - "id": "0025420550_7630ef29c8_622638", + "id": "2029380850_7630ef29c8_489964", "name": "publisher description", "valid": true, "type": "http", @@ -1281,7 +1281,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:43.101Z", + "publishTime": "2019-03-27T23:29:39.389Z", "messageReceived": { "statusCode": 321, "body": "duplicatedResponsePayload", @@ -1292,7 +1292,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "25", "etag": "W/\"19-yZRAgggcER0sMyRTVBBpErTPT/A\"", - "date": "Wed, 27 Mar 2019 03:25:43 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -1320,9 +1320,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:43.097Z", - "endTime": "2019-03-27T03:25:43.101Z", - "totalTime": 4, + "startTime": "2019-03-27T23:29:39.384Z", + "endTime": "2019-03-27T23:29:39.389Z", + "totalTime": 5, "timeout": 5000 }, "requisitions": [] @@ -1331,11 +1331,11 @@ "valid": true, "tests": [], "name": "requisition 2 (port 23076)", - "id": "0025420551_55f7e56431_564250", + "id": "2029380851_bfaf87b767_868076", "ignored": false, "subscriptions": [ { - "id": "0025420551_e5e0d9ff8c_241952", + "id": "2029380851_e5e0d9ff8c_868522", "name": "subscription description", "type": "http", "tests": [ @@ -1346,14 +1346,14 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:43.102Z" + "connectionTime": "2019-03-27T23:29:39.390Z" } ], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:43.101Z", - "endTime": "2019-03-27T03:25:44.105Z", - "totalTime": 1004, + "startTime": "2019-03-27T23:29:39.389Z", + "endTime": "2019-03-27T23:29:40.391Z", + "totalTime": 1002, "timeout": 5000 }, "requisitions": [] @@ -1362,11 +1362,11 @@ "valid": true, "tests": [], "name": "check port releasing (23076)", - "id": "0025420552_a506b81dd1_529381", + "id": "2029380852_438e4249cd_228018", "ignored": false, "subscriptions": [ { - "id": "0025420552_3861169172_803658", + "id": "2029380852_3861169172_164714", "name": "same port subscription", "type": "tcp", "tests": [ @@ -1377,14 +1377,14 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:44.106Z" + "connectionTime": "2019-03-27T23:29:40.393Z" } ], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:44.106Z", - "endTime": "2019-03-27T03:25:45.109Z", - "totalTime": 1003, + "startTime": "2019-03-27T23:29:40.392Z", + "endTime": "2019-03-27T23:29:41.394Z", + "totalTime": 1002, "timeout": 5000 }, "requisitions": [] @@ -1395,11 +1395,11 @@ "valid": true, "tests": [], "name": "examples/http-proxy.yml", - "id": "0025420553_1809cace72_781479", + "id": "2029380853_f3fdc80718_223534", "ignored": false, "subscriptions": [ { - "id": "0025420554_ef12dc14a5_816675", + "id": "2029380854_ef12dc14a5_295595", "name": "proxy server", "type": "http-proxy", "tests": [ @@ -1445,7 +1445,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "headers": { "content-type": "application/json", @@ -1465,7 +1465,7 @@ } }, { - "id": "0025420554_f7b397b2a5_871311", + "id": "2029380854_f7b397b2a5_456276", "name": "real server", "type": "http", "tests": [ @@ -1511,7 +1511,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "headers": { "content-type": "application/json", @@ -1532,7 +1532,7 @@ ], "publishers": [ { - "id": "0025420553_375842a323_871841", + "id": "2029380854_375842a323_290623", "name": "publisher proxy", "valid": true, "type": "http", @@ -1558,7 +1558,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:42.913Z", + "publishTime": "2019-03-27T23:29:39.200Z", "messageReceived": { "statusCode": 333, "body": "responsePayload", @@ -1569,7 +1569,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "15", "etag": "W/\"f-V9sBEzo+y6k6sqGXsr1Ql2B0tAk\"", - "date": "Wed, 27 Mar 2019 03:25:42 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -1598,9 +1598,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.720Z", - "endTime": "2019-03-27T03:25:42.913Z", - "totalTime": 193, + "startTime": "2019-03-27T23:29:39.019Z", + "endTime": "2019-03-27T23:29:39.200Z", + "totalTime": 181, "timeout": 5000 }, "requisitions": [] @@ -1609,11 +1609,11 @@ "valid": true, "tests": [], "name": "examples/http.yml", - "id": "0025420555_ac165393f9_805450", + "id": "2029380855_5126925584_760839", "ignored": false, "subscriptions": [ { - "id": "0025420555_36baa23c89_852929", + "id": "2029380855_36baa23c89_525542", "name": "Subscription #0", "type": "http", "tests": [ @@ -1624,7 +1624,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "headers": { "content-length": "5", @@ -1639,7 +1639,7 @@ ], "publishers": [ { - "id": "0025420555_3f90d159b3_130752", + "id": "2029380855_3f90d159b3_400132", "name": "Publisher #0", "valid": true, "type": "http", @@ -1660,7 +1660,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:42.904Z", + "publishTime": "2019-03-27T23:29:39.184Z", "messageReceived": { "statusCode": 444, "body": "blah", @@ -1671,7 +1671,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "4", "etag": "W/\"4-W/H9kn37hnlJai5s8Ay+UMHIcUU\"", - "date": "Wed, 27 Mar 2019 03:25:42 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -1698,9 +1698,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.721Z", - "endTime": "2019-03-27T03:25:42.905Z", - "totalTime": 184, + "startTime": "2019-03-27T23:29:39.020Z", + "endTime": "2019-03-27T23:29:39.185Z", + "totalTime": 165, "timeout": 5000 }, "requisitions": [] @@ -1709,11 +1709,11 @@ "valid": true, "tests": [], "name": "examples/https.yml", - "id": "0025420556_c28f514982_850670", + "id": "2029380856_343c8aedd4_133230", "ignored": false, "subscriptions": [ { - "id": "0025420556_b985f54687_893659", + "id": "2029380856_b985f54687_672956", "name": "Subscription #0", "type": "https", "tests": [ @@ -1729,7 +1729,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "headers": { "content-type": "application/json", @@ -1745,7 +1745,7 @@ ], "publishers": [ { - "id": "0025420556_e61bd763bd_612961", + "id": "2029380856_e61bd763bd_53068", "name": "publisher description", "valid": true, "type": "HTTPS", @@ -1771,7 +1771,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:42.912Z", + "publishTime": "2019-03-27T23:29:39.199Z", "messageReceived": { "statusCode": 200, "body": "https", @@ -1782,7 +1782,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "5", "etag": "W/\"5-w0N9vHwSVdOiHURNhuvy6SNMIr0\"", - "date": "Wed, 27 Mar 2019 03:25:42 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -1810,9 +1810,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.722Z", - "endTime": "2019-03-27T03:25:42.912Z", - "totalTime": 190, + "startTime": "2019-03-27T23:29:39.022Z", + "endTime": "2019-03-27T23:29:39.200Z", + "totalTime": 178, "timeout": 3000 }, "requisitions": [] @@ -1821,14 +1821,14 @@ "valid": true, "tests": [], "name": "examples/ignore.yml", - "id": "0025420557_fa56409929_680083", + "id": "2029380857_55b13bb02d_445390", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.724Z", - "endTime": "2019-03-27T03:25:42.819Z", - "totalTime": 95, + "startTime": "2019-03-27T23:29:39.023Z", + "endTime": "2019-03-27T23:29:39.106Z", + "totalTime": 83, "timeout": 5000 }, "requisitions": [ @@ -1836,12 +1836,12 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420558_2f8d7b0ce1_405654", + "id": "2029380858_e8c0df567e_645690", "ignored": false, "subscriptions": [], "publishers": [ { - "id": "0025420558_4d6240ee37_627060", + "id": "2029380858_4d6240ee37_377980", "name": "Publisher #0", "ignored": true, "valid": true, @@ -1850,9 +1850,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.758Z", - "endTime": "2019-03-27T03:25:42.805Z", - "totalTime": 47, + "startTime": "2019-03-27T23:29:39.049Z", + "endTime": "2019-03-27T23:29:39.093Z", + "totalTime": 44, "timeout": 5000 }, "requisitions": [] @@ -1861,11 +1861,11 @@ "valid": true, "tests": [], "name": "Requisition #1", - "id": "0025420560_5ce8f910f0_248352", + "id": "2029380860_833821bbdb_939235", "ignored": false, "subscriptions": [ { - "id": "0025420560_41bbcab029_744345", + "id": "2029380860_41bbcab029_714994", "name": "Subscription #0", "ignored": true, "type": "file", @@ -1875,9 +1875,9 @@ ], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.813Z", - "endTime": "2019-03-27T03:25:42.816Z", - "totalTime": 3, + "startTime": "2019-03-27T23:29:39.100Z", + "endTime": "2019-03-27T23:29:39.102Z", + "totalTime": 2, "timeout": 5000 }, "requisitions": [] @@ -1886,13 +1886,13 @@ "valid": true, "tests": [], "name": "Requisition #2", - "id": "0025420561_4cc03ed6cb_442381", + "id": "2029380861_5b2b72c312_697257", "ignored": true, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.817Z", - "endTime": "2019-03-27T03:25:42.817Z", + "startTime": "2019-03-27T23:29:39.104Z", + "endTime": "2019-03-27T23:29:39.104Z", "totalTime": 0 }, "requisitions": [] @@ -1903,14 +1903,14 @@ "valid": true, "tests": [], "name": "examples/import.yml", - "id": "0025420564_0cece633dd_681274", + "id": "2029380863_62db714b49_947590", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.724Z", - "endTime": "2019-03-27T03:25:42.817Z", - "totalTime": 93, + "startTime": "2019-03-27T23:29:39.024Z", + "endTime": "2019-03-27T23:29:39.105Z", + "totalTime": 81, "timeout": 5000 }, "requisitions": [ @@ -1924,14 +1924,14 @@ } ], "name": "static import", - "id": "0025420565_dd7995a876_59701", + "id": "2029380864_f030a7c4d4_13133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.758Z", - "endTime": "2019-03-27T03:25:42.805Z", - "totalTime": 47, + "startTime": "2019-03-27T23:29:39.049Z", + "endTime": "2019-03-27T23:29:39.092Z", + "totalTime": 43, "timeout": 5000 }, "requisitions": [] @@ -1946,14 +1946,14 @@ } ], "name": "dynamic import", - "id": "0025420567_75d2f1f8f9_949437", + "id": "2029380866_e9d028aa8c_801214", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.810Z", - "endTime": "2019-03-27T03:25:42.815Z", - "totalTime": 5, + "startTime": "2019-03-27T23:29:39.098Z", + "endTime": "2019-03-27T23:29:39.101Z", + "totalTime": 3, "timeout": 5000 }, "requisitions": [] @@ -1964,14 +1964,14 @@ "valid": true, "tests": [], "name": "examples/no-tests.yml", - "id": "0025420568_85163ddbe6_953519", + "id": "2029380867_1afee006a6_971919", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.725Z", - "endTime": "2019-03-27T03:25:42.949Z", - "totalTime": 224, + "startTime": "2019-03-27T23:29:39.024Z", + "endTime": "2019-03-27T23:29:39.235Z", + "totalTime": 211, "timeout": 5000 }, "requisitions": [ @@ -1979,14 +1979,14 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420569_572a7aa7a3_824453", + "id": "2029380868_fbad77f905_832398", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.848Z", - "endTime": "2019-03-27T03:25:42.949Z", - "totalTime": 101, + "startTime": "2019-03-27T23:29:39.135Z", + "endTime": "2019-03-27T23:29:39.235Z", + "totalTime": 100, "timeout": 5000 }, "requisitions": [] @@ -1997,12 +1997,12 @@ "valid": true, "tests": [], "name": "examples/parallel-pub.yml", - "id": "0025420570_31e3cad0c3_816608", + "id": "2029380869_009e83a792_303756", "ignored": false, "subscriptions": [], "publishers": [ { - "id": "0025420570_2955c0f42c_327285", + "id": "2029380869_2955c0f42c_286418", "name": "Publisher #0", "valid": true, "type": "tcp", @@ -2023,21 +2023,21 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:43.235Z", + "publishTime": "2019-03-27T23:29:39.529Z", "messageReceived": { "payload": "anyValue", "stream": { "address": "127.0.0.1", "family": "IPv4", - "port": 53853 + "port": 59122 } } } ], "time": { - "startTime": "2019-03-27T03:25:42.725Z", - "endTime": "2019-03-27T03:25:43.235Z", - "totalTime": 510, + "startTime": "2019-03-27T23:29:39.024Z", + "endTime": "2019-03-27T23:29:39.529Z", + "totalTime": 505, "timeout": 3000 }, "requisitions": [] @@ -2046,11 +2046,11 @@ "valid": true, "tests": [], "name": "examples/parallel-sub.yml", - "id": "0025420572_25c06b5a2e_197825", + "id": "2029380871_8aaf9c6622_951353", "ignored": false, "subscriptions": [ { - "id": "0025420572_b419ff22d8_393605", + "id": "2029380871_b419ff22d8_485733", "name": "Subscription #0", "type": "tcp", "tests": [ @@ -2066,7 +2066,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "payload": "anything", "stream": { @@ -2079,9 +2079,9 @@ ], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.726Z", - "endTime": "2019-03-27T03:25:43.234Z", - "totalTime": 508, + "startTime": "2019-03-27T23:29:39.025Z", + "endTime": "2019-03-27T23:29:39.528Z", + "totalTime": 503, "timeout": 3000 }, "requisitions": [] @@ -2090,14 +2090,14 @@ "valid": true, "tests": [], "name": "examples/parallel.yml", - "id": "0025420573_9a41a6b480_138720", + "id": "2029380872_547efbb4f2_945998", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.729Z", - "endTime": "2019-03-27T03:25:43.604Z", - "totalTime": 875, + "startTime": "2019-03-27T23:29:39.028Z", + "endTime": "2019-03-27T23:29:39.892Z", + "totalTime": 864, "timeout": 5000 }, "requisitions": [ @@ -2112,18 +2112,18 @@ { "name": "Assertion #1", "valid": true, - "description": "Expected 'elapsedTime' not to be less than or equal to '400'. Received '335'" + "description": "Expected 'elapsedTime' not to be less than or equal to '400'. Received '330'" } ], "name": "Requisition #0", - "id": "0025420575_96e132953e_923760", + "id": "2029380873_a3dfb74307_801976", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.759Z", - "endTime": "2019-03-27T03:25:43.094Z", - "totalTime": 335, + "startTime": "2019-03-27T23:29:39.050Z", + "endTime": "2019-03-27T23:29:39.381Z", + "totalTime": 331, "timeout": 5000 }, "requisitions": [ @@ -2131,14 +2131,14 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420576_443bf9b9e1_610527", + "id": "2029380875_78bd5a8b4e_980832", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.790Z", - "endTime": "2019-03-27T03:25:42.990Z", - "totalTime": 200, + "startTime": "2019-03-27T23:29:39.079Z", + "endTime": "2019-03-27T23:29:39.281Z", + "totalTime": 202, "timeout": 5000 }, "requisitions": [] @@ -2147,14 +2147,14 @@ "valid": true, "tests": [], "name": "Requisition #1", - "id": "0025420577_1d40dbad3a_606388", + "id": "2029380876_e778f93f24_198428", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.790Z", - "endTime": "2019-03-27T03:25:43.093Z", - "totalTime": 303, + "startTime": "2019-03-27T23:29:39.079Z", + "endTime": "2019-03-27T23:29:39.380Z", + "totalTime": 301, "timeout": 5000 }, "requisitions": [] @@ -2167,7 +2167,7 @@ { "name": "started after the other", "valid": true, - "description": "Expected 'requisition.requisitions[1].startTime.getTime() - requisition.requisitions[0].startTime.getTime()' to be greater than or equal to '200'. Received '205'" + "description": "Expected 'requisition.requisitions[1].startTime.getTime() - requisition.requisitions[0].startTime.getTime()' to be greater than or equal to '200'. Received '206'" }, { "name": "Assertion #1", @@ -2176,14 +2176,14 @@ } ], "name": "Requisition #1", - "id": "0025420579_2475384852_854612", + "id": "2029380877_89f04b5355_7045", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:43.095Z", - "endTime": "2019-03-27T03:25:43.604Z", - "totalTime": 509, + "startTime": "2019-03-27T23:29:39.382Z", + "endTime": "2019-03-27T23:29:39.892Z", + "totalTime": 510, "timeout": 5000 }, "requisitions": [ @@ -2191,13 +2191,13 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420580_c74a061415_642958", + "id": "2029380878_9624ac97cb_634448", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:43.095Z", - "endTime": "2019-03-27T03:25:43.299Z", + "startTime": "2019-03-27T23:29:39.382Z", + "endTime": "2019-03-27T23:29:39.586Z", "totalTime": 204, "timeout": 5000 }, @@ -2207,13 +2207,13 @@ "valid": true, "tests": [], "name": "Requisition #1", - "id": "0025420582_6c36d9a9c6_642926", + "id": "2029380879_8597b951fb_628287", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:43.300Z", - "endTime": "2019-03-27T03:25:43.603Z", + "startTime": "2019-03-27T23:29:39.588Z", + "endTime": "2019-03-27T23:29:39.891Z", "totalTime": 303, "timeout": 5000 }, @@ -2227,11 +2227,11 @@ "valid": true, "tests": [], "name": "examples/readme-enqueuer-http-selftest.yml", - "id": "0025420583_97ef513fca_920740", + "id": "2029380881_6f3e51d5d8_195477", "ignored": false, "subscriptions": [ { - "id": "0025420583_a39e6dfed9_884097", + "id": "2029380881_a39e6dfed9_959751", "name": "Subscription #0", "type": "http", "tests": [ @@ -2247,7 +2247,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "headers": { "content-length": "19", @@ -2262,7 +2262,7 @@ ], "publishers": [ { - "id": "0025420583_5469489be6_617721", + "id": "2029380881_5469489be6_593087", "name": "Publisher #0", "valid": true, "type": "http", @@ -2288,7 +2288,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:42.906Z", + "publishTime": "2019-03-27T23:29:39.186Z", "messageReceived": { "statusCode": 200, "body": "yes, it does", @@ -2299,7 +2299,7 @@ "content-type": "text/html; charset=utf-8", "content-length": "12", "etag": "W/\"c-L77LCgbriBu9ecOhh8oKMV0oK0I\"", - "date": "Wed, 27 Mar 2019 03:25:42 GMT", + "date": "Wed, 27 Mar 2019 23:29:39 GMT", "connection": "close" }, "request": { @@ -2326,9 +2326,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.730Z", - "endTime": "2019-03-27T03:25:42.906Z", - "totalTime": 176, + "startTime": "2019-03-27T23:29:39.029Z", + "endTime": "2019-03-27T23:29:39.186Z", + "totalTime": 157, "timeout": 5000 }, "requisitions": [] @@ -2337,12 +2337,12 @@ "valid": true, "tests": [], "name": "examples/readme-enqueuer-repo-hit.yml", - "id": "0025420585_33ba44cb81_441332", + "id": "2029380882_e07de8e5e0_836949", "ignored": false, "subscriptions": [], "publishers": [ { - "id": "0025420585_e52e80891e_488871", + "id": "2029380882_e52e80891e_738297", "name": "Publisher #0", "valid": true, "type": "http", @@ -2363,33 +2363,33 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:44.232Z", + "publishTime": "2019-03-27T23:29:40.620Z", "messageReceived": { "statusCode": 200, - "body": "\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n\n\n\n \n \n \n \n \n \n \n\n \n \n GitHub - enqueuer-land/enqueuer: https://enqueuer-land.github.io/enqueuer/\n \n \n \n \n\n \n \n\n \n \n \n \n \n\n\n \n\n \n\n \n \n \n\n \n\n\n\n\n \n\n\n\n\n\n\n \n\n \n \n\n \n \n\n \n\n \n\n \n \n\n \n\n \n\n \n\n\n \n\n\n \n\n \n\n \n \n\n\n\n\n\n\n \n\n \n\n \n \n\n
\n Skip to content\n
\n\n \n \n \n\n\n \n
\n
\n
\n \n \n \n
\n\n
\n
\n \n
\n\n \n\n \n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n\n\n\n
\n
\n
\n \n \n\n\n\n \n\n\n\n\n
\n
\n\n \n\n

\n \n enqueuer-land/enqueuer\n\n

\n\n
\n \n\n\n\n
\n
\n
\n\n \n \n
\n
\n
\n
\n \n

Join GitHub today

\n

GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.

\n Sign up\n
\n
\n
\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n\n\n\n
\n \n
\n \n Branch:\n master\n \n\n \n \n \n \n \n
\n\n\n \n\n
\n \n
\n\n
\n\n Find File\n
\n\n\n
\n \n Clone or download\n \n
\n
\n\n
\n
\n\n

\n Clone with HTTPS\n \n \n \n

\n

\n Use Git or checkout with SVN using the web URL.\n

\n\n
\n \n
\n \n
\n
\n\n
\n\n
\n \nDownload ZIP\n\n
\n
\n\n \n\n
\n

Launching GitHub Desktop...

\n

If nothing happens, download GitHub Desktop and try again.

\n

\n
\n\n
\n

Launching GitHub Desktop...

\n

If nothing happens, download GitHub Desktop and try again.

\n

\n
\n\n
\n

Launching Xcode...

\n

If nothing happens, download Xcode and try again.

\n

\n
\n\n
\n

Launching Visual Studio...

\n

If nothing happens, download the GitHub extension for Visual Studio and try again.

\n

\n
\n\n
\n
\n
\n\n
\n\n\n \n\n\n
\n \"\"\n Fetching latest commit…\n
\n
\n Cannot retrieve the latest commit at this time.\n
\n
\n\n\n\n Permalink\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TypeNameLatest commit messageCommit time
Failed to load latest commit information.
\n \n \"\"\n \n .github/ISSUE_TEMPLATE\n \n \n \n \n \n
\n \n \"\"\n \n conf\n \n \n \n \n \n
\n \n \"\"\n \n docs\n \n \n \n \n \n
\n \n \"\"\n \n examples\n \n \n \n \n \n
\n \n \"\"\n \n https-cert\n \n \n \n \n \n
\n \n \"\"\n \n misc\n \n \n \n \n \n
\n \n \"\"\n \n output\n \n \n \n \n \n
\n \n \"\"\n \n src\n \n \n \n \n \n
\n \n \"\"\n \n temp\n \n \n \n \n \n
\n \n \"\"\n \n .codeclimate.yml\n \n \n \n \n \n
\n \n \"\"\n \n .gitignore\n \n \n \n \n \n
\n \n \"\"\n \n .npmignore\n \n \n \n \n \n
\n \n \"\"\n \n .travis.yml\n \n \n \n \n \n
\n \n \"\"\n \n CONTRIBUTING.md\n \n \n \n \n \n
\n \n \"\"\n \n License\n \n \n \n \n \n
\n \n \"\"\n \n README.md\n \n \n \n \n \n
\n \n \"\"\n \n package-lock.json\n \n \n \n \n \n
\n \n \"\"\n \n package.json\n \n \n \n \n \n
\n \n \"\"\n \n tsconfig.json\n \n \n \n \n \n
\n \n \"\"\n \n tslint.json\n \n \n \n \n \n
\n\n
\n\n\n\n
\n
\n

\n \n README.md\n

\n
\n
\n

\"npm\"\"Build\n\"Maintainability\" \"Greenkeeper\"Known\n\"License:

\n

\"enqueuerlogo\"

\n

Want to ensure that a user journey which involves several steps with different protocols is working properly?\nHave you ever struggled with testing multi protocol flows?\nDepending services have become a pain?\nDon't you worry anymore. Enqueuer is what you're looking for.

\n

What it is

\n

It's not just an integration testing tool. It is a platform that provides the following capabilities:

\n
    \n
  • Support for many protocols out of the box
  • \n
  • Chainable message flows
  • \n
  • Easily mock numerous services to alleviate the headaches of functional and integration tests
  • \n
  • Friendly for developers and non developers
  • \n
  • Built in assertion library to verify response data coming from/going to your services
  • \n
  • Easily extensible behavior through third party plugins, including your own custom ones
  • \n
  • CLI is easy to add to your team's existing CI pipelines
  • \n
  • Act and react on you system under test
  • \n
  • Place tests front and center
  • \n
\n

Welcome to the enqueuer world.

\n

install it

\n

First things first, let's get the enqueuer installed on your machine.

\n
$ npm install --global enqueuer\n
\n

Next up, it's time create a requisition file.\nSomething like:

\n
#enqueuer-repo-hit.yml\npublishers:\n-   type: http\n    url: https://github.com/enqueuer-land/enqueuer\n    method: GET\n    onMessageReceived:\n        assertions:\n        -   expect: statusCode\n            toBeEqualTo: 200\n
\n

Pretty simple, hum? Small and concise, how it should be!\nRun it:

\n
$ enqueuer enqueuer-repo-hit.yml\n
\n

What if I want to mock a http server and hit it at the same time, you may ask. Not a big deal for enqueuer lovers:

\n
#http-self-test.yml\npublishers:\n-   type: http\n    url: http://localhost:9085/readme-example\n    method: POST\n    payload: does enqueuer rock?\n    onMessageReceived:\n        script: statusCode *= 2\n        assertions:\n            -   expect: body\n                toBeEqualTo: `yes, it does`\n            -   expect: statusCode\n                toBeLessThan: 300\nsubscriptions:\n-   type: http\n    endpoint: /readme-example\n    port: 9085\n    method: POST\n    response:\n        status: 200\n        payload: yes, it does\n    onMessageReceived:\n        assertions:\n        -   expect: message.body\n            toContain: `enqueuer`\n
\n

And then, run this other one:

\n
$ nqr http-self-test.yml\n
\n

I told you it was simple.\nNow go nuts!\nIt's all yours. Have fun.\nCheck this out, you'll find countless examples.\nCertainly one is what you need.

\n

if you need more

\n
$ nqr -h\nUsage: nqr [options] <test-file> [other-test-files...]\n\nTake a look at the full documentation: http://enqueuer-land.github.io/enqueuer\n\nOptions:\n  -v, --version                             output the version number\n  -b, --verbosity <level>                   set verbosity (default: \"warn\")\n  -c, --config-file <path>                  set configurationFile\n  -e, --parsers-list [parser]               list available object parsers\n  -f, --formatters-description [formatter]  describe report formatters\n  -o, --stdout-requisition-output           add stdout as requisition output\n  -m, --max-report-level-print <level>      set max report level print\n  -p, --protocols-description [protocol]    describe protocols\n  -t, --tests-list                          list available tests assertions\n  -s, --store [store]                       add variables values to this session (default: [])\n  -l, --add-plugin [plugin]                 add plugin (default: [])\n  -a, --add-file <file>                     add file to be tested (default: [])\n  -A, --add-file-and-ignore-others <file>   add file to be tested and ignore others (default: [])\n  -h, --help                                output usage information\n\nExamples:\n  $ nqr --config-file config-file.yml --verbosity error --store key=value\n  $ enqueuer -c config-file.yml test-file.yml --add-file another-test-file.yml -b info\n  $ enqueuer test-file.yml --store someKey=true --store someOtherKey=false\n  $ nqr --protocols-description -s key=value\n  $ nqr -t expect\n  $ nqr -l my-enqueuer-plugin-name -p plugin-protocol\n  $ nqr -p http\n  $ nqr --formatters-description json\n
\n
\n

Components

\n

In order to accomplish more than just hitting enqueuer's repo or doing a quick self http hit, there are a few things that you'll probably need to know.\nDon't worry, it's not too much and, as mentioned earlier, there is a lot of examples here, just in case.\nThere are only three important component concepts: requisitions, publishers and subscriptions.\nThey work along with each other and are responsible for the full behavior of enqueuer.

\n

requisition

\n

Test scenario description. It tells what, when, and how test your applications and services.\nPicture it as if it was a collection of publishers, subscriptions and other requisitions.\nIt helps because this is exactly what it is.\nAs the others components, it has some attributes. All of them are optionals. And it supports multi-level test scenarios out of the box. Yeap, go as recursive as you want.\nEvery test file is a requisition.\nYou don't know some of these attributes values yet? Don't worry, just put a variable there and let enqueuer replace it with the value you set later.\nVariable replacements are available through the entire requisition.

\n
requisition attributes
\n

These are the requisition attributes:

\n

name
\nDescribes what the requisition is suppose to do.\nDefaults to requisition index.

\n
name: requisition action\n
\n

timeout
\nDefaults to 5000.\nSets in milliseconds how long the requisition waits to expire.\nSet to zero or less than zero to run it endlessly.

\n
timeout: 3000\n
\n

delay
\nDefaults to 0. Sets in milliseconds how long the test waits before starting. Check this to get the full idea.

\n
delay: 0\n
\n

iterations
\nDefaults to 1. Sets how many times this test will be executed. Check this and this to get the full idea.

\n
iterations: 3\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this requisitions should be skipped. Check this to see it working.

\n
ignore: true\n
\n

parallel
\nDefaults to false. Immediate children requisitions should be executed in parallel mode.\nTake a look at this to see it working.

\n
parallel: true\n
\n

import
\nAllows requisition to be dynamically defined, be it by loading an external file or creating dynamically by other requisitions. Want to reuse the same requisition multiple times? This is you you need.\nTake a look at this and this to behold this feature.

\n
import: path/to/another/requisition/file\n
\n

publishers
\nList of publishers

\n
publishers:\n- name: some publisher name\n  type: http\n- type: tcp\n
\n

subscriptions
\nList of subscriptions

\n
subscriptions:\n- name: some subscription name\n  type: udp\n- name: another subscription name\n  type: file\n
\n

requisitions
\nA list of child scenarios. List of requisitions.\nCheck this example, it may help.

\n
requisitions:\n- name: some requisition name\n  iterations: 2\n- name: another requisition name\n  delay: 200\n
\n
events
\n

Available events are described here. A requisition object is available to access and change its attributes.

\n
name: my name\nonInit:\n  script: requisition.delay = 3000;\n  assertions:\n  - expectToBeDefined: requisition.name\nonFinish:  \n  assertions:\n  - expectToBeDefined: requisition.name\n
\n

publisher

\n

A publisher action is triggered by enqueuer itself. It acts whereas a subscription reacts.\nIt publishes something, it writes, it enqueues, hits and endpoint... These kinds of actions.

\n
publisher attributes
\n

Every publisher has its own properties, depending on its protocol and implementation.\nThe built-in http publisher implementation, for instance, demands a url, a method, and a payload, if the method is not a GET.\nOn the other hand, the built-in tcp publisher implementation requires a serverAddress and a port.\nThese are the publisher attributes:

\n

name
\nDefaults to publisher index.\nDescribes what the publisher is supposed to do.

\n
name: publisher action\n
\n

type
\nMandatory. Key tag to identify which publisher will be instantiated

\n
type: http\n
\n

payload
\nSince a publisher usually publishes something, it's very likely you have to set a value here.\nThe message itself that will be send through this protocol. Be it a string, a number, a boolean value or even whole objects.

\n
payload: value\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this publisher should be skipped. Check this to see it working.

\n
ignore: true\n
\n
events
\n

Available events are described here. A publisher object is available to access and change its attributes.\nDepending on the protocol and its implementation, such as http and tcp, there may exist a onMessageReceived event and a special object given message.\nOn the other hand, an asynchronous protocol, like: udp and amqp, usually does not provide it.

\n
onInit:\n  script: publisher.ignore = false\n  assertions:\n  - expectToBeDefined: publisher.type\nonMessageReceived: #Provided in synchronous protocols  \n  assertions:\n  - expectToBeDefined: message\nonFinish:  \n  assertions:\n  - expectToBeDefined: publisher.type\n
\n

subscription

\n

A subscription is an \"under demand\" event. It reacts whereas a publisher acts.\nIt consumes something, it reads, it dequeues, gets hit... These kinds of actions.\nThis means that it is not triggered by enqueuer itself.\nRather than that, enqueuer waits on an external event to be triggered and then it asserts against the message that was passed to the subscription.

\n
subscription attributes
\n

Every subscription has its own properties, depending on its protocol and implementation.\nThe built-in http subscription implementation, for instance, demands an endpoint, a method, and a port, if the method is not a GET.\nOn the other hand, the built-in tcp subscription implementation requires only a port.

\n

These are the subscription attributes:

\n

name
\nDefaults to subscription index.\nDescribes what the subscription is supposed to do.

\n
name: subscription action\n
\n

type
\nMandatory. Key tag to identify which subscription will be instantiated

\n
type: http\n
\n

avoid
\nIdentifies whether or not this subscription should not receive any message. Defaults to false.\nIf set and a message is received a failing test will be generated.\nTake a look at this to see it working.\nOn the other hand, when it's false and no message is received in a given timeout. The subscription is valid.

\n
avoid: false\n
\n

timeout
\nSets in milliseconds how long the subscription waits to expire. Defaults to 3000.\nSet to zero or less than zero to run it endlessly.

\n
timeout: 3000\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this subscription should be skipped. Check this to see it working.

\n
ignore: true    \n
\n
events
\n

Available events are described here. A subscription object is available to access and change its attributes.

\n
onInit:\n  script: subscription.avoid = false;\n  assertions:\n  - expectToBeDefined: subscription.type\nonMessageReceived:  \n  assertions:\n  - expectToBeDefined: message\nonFinish:  \n  assertions:\n  - expectToBeDefined: subscription.type\n
\n
\n

Event

\n

Events are hook methods executed by enqueuer when an action occurs on publishers, subscriptions or requisitions.\nThis is where you'll write your tests. In its assertions field.\nDepending on the event's owner, there may be a variable called publisher, subscription or requisition.\nYou're free to explore them however you want, even doing things like this:

\n
publisher.parent.subscriptions[0].timeout = 1000;\n
\n

hooks

\n

There are three hook events available:

\n

onInit
\nAvailable in requisitions, publishers and subscriptions. It gets executed as soon as the test is initialized.

\n

onFinish
\nAvailable in requisitions, publishers and subscriptions. It gets executed when the test is about to finish.\nAs available parameter, an elapsedTime variable is given, counting every milliseconds since the instantiation of this component.

\n

onMessageReceived
\nAvailable in every subscription and in publishers that provide synchronous properties.\nIt gets executed when the subscription or publisher receives a message.\nA message object is available having all of attributes returned from the received message.\nDepending on the protocol implementation, there'll be additional objects to this hook.\nFor instance, in the built-in http publisher implementation, there's a statusCode, headers and a body among others, and the subscription implementation has body, query, params and headers , among other variables.\nelapsedTime is also available here, counting every milliseconds since the instantiation of this component.

\n

fields

\n

Every hook object has 3 properties:

\n

script
\nJavascript code snippet executed when the event is triggered.\nYeah, I mean it. See it it by yourself.\nBut be careful, with great power comes great responsibility.

\n

store
\nData to be persisted across requisitions.

\n

assertions
\nArray of assertions.\nRun $ nqr -t to see available ones.\nConsider looking at this test example.\nOf course, just like almost everything else in enqueuer world, you can extend this available list using some plugin.\nYou can check them out or even write your own.

\n
onInit:\n  script: variableIdentifier = 'string value'\n\n  assertions:\n  - expect: variableIdentifier\n    toBeEqualTo: `string value`\n\nonMessageReceived:\n  script: |-\n    message += 3;\n    console.log(`Message received plus 3 is: ${message}`);\n\n  store:\n    key: message\n\n  assertions:\n  - name: anyValue #optional\n    expect: message\n    toBeEqualTo: store.key\n  - expect: message + 3\n    toBeGreaterThan: 3\n
\n

event example

\n

Check this test file to see it in practice.

\n
\n

Requisition Flow

\n

Now that you know what are requisitions, publishers, subscriptions and events. How about seeing how they interact with each other in a fancier way?

\n

\"enqueuerInstanceFlow\"

\n

\"NPM\"

\n
\n

Configuration File

\n

To save yourself some time, a configuration file may be used.\nConfiguration files tell enqueuer which tests will be executed, log-level, and which output test report files should be generated.\nThis file tells how enqueuer should be executed.\nTo run enqueuer with the configuration:

\n
$ nqr -c path/to/configuration/file.yml\n
\n

or

\n
$ nqr --config-file path/to/configuration/file.yml\n
\n

configuration file attributes

\n

These are the configuration file attributes:

\n

files
\nRequisition file names or glob. Enqueuer runs every file that matches an element value.

\n
files:\n- 1.yml\n- 2.yml\n- *.json\n
\n

parallel
\nDefaults to false. Requisition files should be executed in parallel mode. The requisition file itself is still sequential, but the files are executes in parallel.

\n
parallel: true\n
\n

log-level
\nDefaults to warning. Defines how information are logged in the console. Accepted values are: trace; debug; info; warning (default); error; and fatal.

\n
log-level: trace\n
\n

max-report-level-print
\nDefaults to 1. The deepest level of report to be printed to the console.

\n
max-report-level-print: 2\n
\n

plugins
\nList of in plugins used by the test scenarios. You can check them out or write your own.

\n
plugins:\n- enqueuer-plugin-amqp \n- enqueuer-plugin-ws \n- enqueuer-plugin-mqtt\n- enqueuer-plugin-html-report\n
\n

outputs
\nOnce enqueuer runs every execution, it compiles a summary and sends it to every publisher listed in output.\nAn important thing to note is that every available report publisher is available here.\nYes, it means that you are able to send this report through http, tcp, etc. or through a plugin one or a custom one.\nYou can run $ nqr -p to check available report publishers installed.\nAnother important thing to note is the format value. By default a json summary is generated, but you can change it to whatever format you would like, such as: Xunit, html\nYou can run $ nqr -f to check available installed formats or even write your own

\n
outputs:\n- type: file\n  format: json (default)\n  filename: output/examples.json\n- type: file\n  format: yml\n  filename: output/examples.yml\n- type: standard-output (default)\n  format: console\n
\n

store
\nValues defined here use the 'key: value' pattern and are available to every test scenario throughout the entire execution

\n
store:\n  variableKey: \"my value\" # Defines 'variableKey' key and its value 'my value'. \n  \n  'separated key': 6\n  \n  object: # You can even define whole objects here:\n    first: first value\n    second:\n      nested: thing\n
\n

configuration file example

\n

Here's a complete example of a configuration file.

\n
\n

Variables

\n

Providing power and flexibility, enqueuer allows you to use variables placeholder replacement.\nThat's why there is a store field and you'll see a lot of << and {{ being used in the examples files.\nIt works as simple as this:

\n
name: my name is <<variableKey>>\n
\n

Every time enqueuer sees these kind of notations, it searches in its store for a key/value pair like:

\n
variableKey: `enqueuer`\n
\n

Then, when enqueuer parses the original map, it gets translated to this:

\n
name: my name is enqueuer\n
\n

By default, every ENV_VAR set is loaded automatically to the store. Check this example.

\n

set a variable

\n

There are a few ways to set a value in the store.

\n
configuration file
\n

Configuration file store object. Set it as you wish, as you can see here

\n
command line
\n

A command line argument using the key=value format. This way:

\n
$ nqr --store key=value -s anotherVariable=true\n
\n
event
\n

Dynamically set it through any event.\nBe it in its script field or straight through its store field.\nBoth ways work:

\n
onInit:\n    script: store.key = 123;\n    store:\n        anotherKey: `another Value` \n
\n

use a variable

\n

There are two ways two use a variable:

\n
non js code snippet
\n

The easiest one is to type <<variableKey>> or {{variableKey}} where you want it to be replaced in a test file, as you can see here

\n
js code snippet
\n

Using the store object. It's attributes are the keys and their values are their respective values.\nTherefore, you're free to use store.variableKey, console.log(store.variableKey); or console.log(2 * store['separated key']); and get them.\nLike this one.

\n

variables example

\n

Check out this test example test to see it working.

\n
\n

Content File Injection

\n

You are able to inject file content into a requisition/publisher/subscription field.

\n
file: <<file://path/to/file.txt>>\n
\n

Other than that, enqueuer can read it and parse its content as an object using this familiar syntax: <<tag://path/to/file?query=value&other=true>>.

\n
requisition:\n    json: <<json://path/to/file.json>>\n    yml: <<yml://path/to/file.yml>>\n    csv: <<csv://path/to/file.csv?header=true&delimiter=;>>\n    file: <<file://path/to/file.txt>>\n
\n

Once the object is parsed, your free to use it as a regular object in any event

\n
onInit:\n    script: console.log(requisition.yml.deep.field);\nonFinish:\n    assertions:\n    -   expect: json.key\n        toBeEqualTo: csv[0].key\n
\n

It get's event better.\nDue its fantastic plugin architecture design, you can extend its default modules and use any of these plugins or event write your own to parse however you want.\nThe built-in modules for object parsers are: json, yml, csv and file.\nRun $ nqr -e to see available ones.

\n

content file injection example

\n

Check out this test example test to get a full picture of it.

\n
\n

Plugins

\n

You're probably aware by now but it doesn't hurt do emphasize it: enqueuer provides an amazingly powerful plugin extensible architecture.\nIt has several plugins available, but if none of them pleases you, you're free to create your own.\nAlbeit you don't have to share the one you created, we encourage you to do so. Then go ahead and publish yours to npm and add it to our plugins list.

\n

plugin types

\n

So far, you're able to extend enqueuer default behavior in four ways. Using a protocol plugin, an object parser plugin, an asserter plugin and using a report formatter plugin.

\n
protocol
\n

A protocol plugin enables you to use a different publisher/subscription types.\nRun $ nqr -p [protocol-name] to get the full available list:

\n
publishers: \n-   name:                  custom\n-   name:                  file\n-   name:                  http\n    messageReceivedParams: statusCode, statusMessage, body\n-   name:                  stdout\n-   name:                  tcp\n-   ...\nsubscriptions: \n-   name:                  custom\n-   name:                  file\n    messageReceivedParams: content, name, size, modified, created\n-   name:                  http\n    messageReceivedParams: headers, params, query, body\n-   name:                  stdin\n-   name:                  tcp\n    messageReceivedParams: payload, stream\n-   ...\n
\n

Each one listed above has a respective example in the examples folder.\nThis one, for instance, provides support for amqp protocol, so you can create this publisher and subscription:

\n
publishers:\n-   type: amqp\n    payload: enqueuermaniac\n    exchange: enqueuer.exchange\n    routingKey: enqueuer.integration.test.routing.key\nsubscriptions:\n-   type: amqp\n    exchange: enqueuer.exchange\n    routingKey: enqueuer.integration.test.routing.#\n    onMessageReceived:\n        assertions:\n        -   expect: payload\n            toBeEqualTo: `enqueuermaniac`\n
\n
object parser
\n

An object parser plugin enables you to read and parse files as you wish.\nThis test example demonstrates how to use it,\nRun $ nqr -e [object-parser-name] to check available ones:

\n
parsers: \n- yml, yaml\n- json\n- file\n- csv\n
\n

This one, for example, provides the ability to read xml files and inject their values like this:

\n
xmlContent: <<xml://path/to/xml/file.xml>>\n
\n
asserter
\n

An asserter plugin provides you a nicely way to use different assertions than these built-in ones.

\n
asserters: \n-   expect: \n        required:    true\n        type:        string, array\n        description: actual value\n    not: \n        required:    false\n        type:        null\n        description: negates\n    toContain: \n        required:    true\n        type:        string, any\n        description: element\n
\n

Looking at the asserter above, we can create assertions like these:

\n
assertions:\n-   expect: [`a`, 1, true]\n    not:\n    toContain: `b`\n-   expect: [`a`, 1, true]\n    toContain: 1\n
\n

Run $ nqr -t to get the full available list.\nConsider looking at this test example.

\n
report formatter
\n

A report formatter plugin gives you the ability to export enqueuer reports the way you want.\nRun $ nqr -f [formatter-name] to list available report formatters:

\n
formatters: \n- console, stdout\n- json\n- yml, yaml\n
\n

Consider looking at the example of configuration file to see it in use.\nThis one, for instance, generates xUnit like reports from enqueuer's output.

\n

plugin use

\n

In order to enqueuer get awareness that you want to you a plugin, you have to tell it, right?\nYou can tell enqueuer to use a plugin in three manners. Using it as a command line argument, through the configuration file or letting enqueuer finding it in it's home directory folder.

\n
command line
\n

Tell enqueuer to use your plugin through command line this way $ nqr -l <plugin-folder> -l <another-plugin-folder>.\nWhere plugin-folder and another-plugin-folder are the directories where the plugins are installed in.

\n
configuration file
\n

Tell enqueuer to use your plugin through configuration file this way:

\n
plugins: \n-   plugin-folder\n-   another-plugin-folder\n
\n

Where plugin-folder and another-plugin-folder are the directories where the plugins are installed in.

\n
implicitly
\n

When enqueuer runs, it looks for modules in .nqr folder in your home directory. Every enqueuer compatible module get implicitly loaded.\nIn order to be enqueuer compatible, a module has to have an entryPoint exported function in its main file and, in its package.json file, it has to have either 'enqueuer' or 'nqr' as keywords.

\n
\n

Open source

\n

We, by 'we' we mean enqueuer's maintainers not the human race; unfortunately, are very opened any kind of contribution in general.\nAs long as they make sense and add value to the product, you're free to go.\nWe mean it, do it. Even if it's a typo fix in this README file. Go ahead.\nIf you like it but don't want to waste time creating a pull request, no problem neither.\nCreate an issue, or, even easier, give it a github star. It's cheap and it doesn't hurt anyone.\nYou know what? Just head up to enqueuer's github repo and keep staring at its webpage.\nIt may help somehow.

\n

contributors

\n

Thank you. It sounds cliché, but this project wouldn't be the same without the massive contribution from everyone.

\n

code it

\n

In order to contribute with some code, you have to follow a few steps.\nFirst of all, get the code:

\n
$ git clone git@github.com:enqueuer-land/enqueuer.git\n$ cd enqueuer\n
\n

Get its dependencies installed:

\n
$ npm install\n
\n

Build it:

\n
$ npm run build\n
\n

Go for it. Make the changes you want.\nAfter everything is done:

\n
$ npm run all\n
\n

Commit it:

\n
$ npm run commit\n
\n

Push it:

\n
$ git push\n
\n

feedback

\n

We'd love to get your feedback!\nIf you have any comments, suggestions, etc. you can reach us here.

\n
\n
\n
\n\n\n\n
\n
\n
\n\n
\n
\n \n\n
\n\n \n
\n
\n \n\n \n \n\n \n
\n
\n \n
\n
\n\n\n\n
\n \n \n You can’t perform that action at this time.\n
\n\n\n \n \n \n \n \n \n \n
\n \n You signed in with another tab or window. Reload to refresh your session.\n You signed out in another tab or window. Reload to refresh your session.\n
\n \n\n
\n
\n
\n
\n\n
\n\n \n\n\n", + "body": "\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n\n\n\n \n \n \n \n \n \n \n\n \n \n GitHub - enqueuer-land/enqueuer: https://enqueuer-land.github.io/enqueuer/\n \n \n \n \n\n \n \n\n \n \n \n \n \n\n\n \n\n \n\n \n \n \n\n \n\n\n\n\n \n\n\n\n\n\n\n \n\n \n \n\n \n \n\n \n\n \n\n \n \n\n \n\n \n\n \n\n\n \n\n\n \n\n \n\n \n \n\n\n\n\n\n\n \n\n \n\n \n \n\n
\n Skip to content\n
\n\n \n \n \n\n\n \n
\n
\n
\n \n \n \n
\n\n
\n
\n \n
\n\n \n\n \n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n\n\n\n
\n
\n
\n \n \n\n\n\n \n\n\n\n\n
\n
\n\n \n\n

\n \n enqueuer-land/enqueuer\n\n

\n\n
\n \n\n\n\n
\n
\n
\n\n \n \n
\n
\n
\n
\n \n

Join GitHub today

\n

GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.

\n Sign up\n
\n
\n
\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n\n\n\n
\n \n
\n \n Branch:\n master\n \n\n \n \n \n \n \n
\n\n\n \n\n
\n \n
\n\n
\n\n Find File\n
\n\n\n
\n \n Clone or download\n \n
\n
\n\n
\n
\n\n

\n Clone with HTTPS\n \n \n \n

\n

\n Use Git or checkout with SVN using the web URL.\n

\n\n
\n \n
\n \n
\n
\n\n
\n\n
\n \nDownload ZIP\n\n
\n
\n\n \n\n
\n

Launching GitHub Desktop...

\n

If nothing happens, download GitHub Desktop and try again.

\n

\n
\n\n
\n

Launching GitHub Desktop...

\n

If nothing happens, download GitHub Desktop and try again.

\n

\n
\n\n
\n

Launching Xcode...

\n

If nothing happens, download Xcode and try again.

\n

\n
\n\n
\n

Launching Visual Studio...

\n

If nothing happens, download the GitHub extension for Visual Studio and try again.

\n

\n
\n\n
\n
\n
\n\n
\n\n\n \n\n\n
\n \"\"\n Fetching latest commit…\n
\n
\n Cannot retrieve the latest commit at this time.\n
\n
\n\n\n\n Permalink\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TypeNameLatest commit messageCommit time
Failed to load latest commit information.
\n \n \"\"\n \n .github/ISSUE_TEMPLATE\n \n \n \n \n \n
\n \n \"\"\n \n conf\n \n \n \n \n \n
\n \n \"\"\n \n docs\n \n \n \n \n \n
\n \n \"\"\n \n examples\n \n \n fix(EqualAssertion): Ignore object keys order when asserting object e…\n \n \n Mar 27, 2019\n
\n \n \"\"\n \n https-cert\n \n \n \n \n \n
\n \n \"\"\n \n misc\n \n \n \n \n \n
\n \n \"\"\n \n output\n \n \n \n \n \n
\n \n \"\"\n \n src\n \n \n \n \n \n
\n \n \"\"\n \n temp\n \n \n \n \n \n
\n \n \"\"\n \n .codeclimate.yml\n \n \n \n \n \n
\n \n \"\"\n \n .gitignore\n \n \n \n \n \n
\n \n \"\"\n \n .npmignore\n \n \n \n \n \n
\n \n \"\"\n \n .travis.yml\n \n \n \n \n \n
\n \n \"\"\n \n CONTRIBUTING.md\n \n \n \n \n \n
\n \n \"\"\n \n License\n \n \n \n \n \n
\n \n \"\"\n \n README.md\n \n \n \n \n \n
\n \n \"\"\n \n package-lock.json\n \n \n \n \n \n
\n \n \"\"\n \n package.json\n \n \n \n \n \n
\n \n \"\"\n \n tsconfig.json\n \n \n \n \n \n
\n \n \"\"\n \n tslint.json\n \n \n \n \n \n
\n\n
\n\n\n\n
\n
\n

\n \n README.md\n

\n
\n
\n

\"npm\"\"Build\n\"Maintainability\" \"Greenkeeper\"Known\n\"License:

\n

\"enqueuerlogo\"

\n

Want to ensure that a user journey which involves several steps with different protocols is working properly?\nHave you ever struggled with testing multi protocol flows?\nDepending services have become a pain?\nDon't you worry anymore. Enqueuer is what you're looking for.

\n

What it is

\n

It's not just an integration testing tool. It is a platform that provides the following capabilities:

\n
    \n
  • Support for many protocols out of the box
  • \n
  • Chainable message flows
  • \n
  • Easily mock numerous services to alleviate the headaches of functional and integration tests
  • \n
  • Friendly for developers and non developers
  • \n
  • Built in assertion library to verify response data coming from/going to your services
  • \n
  • Easily extensible behavior through third party plugins, including your own custom ones
  • \n
  • CLI is easy to add to your team's existing CI pipelines
  • \n
  • Act and react on you system under test
  • \n
  • Place tests front and center
  • \n
\n

Welcome to the enqueuer world.

\n

install it

\n

First things first, let's get the enqueuer installed on your machine.

\n
$ npm install --global enqueuer\n
\n

Next up, it's time create a requisition file.\nSomething like:

\n
#enqueuer-repo-hit.yml\npublishers:\n-   type: http\n    url: https://github.com/enqueuer-land/enqueuer\n    method: GET\n    onMessageReceived:\n        assertions:\n        -   expect: statusCode\n            toBeEqualTo: 200\n
\n

Pretty simple, hum? Small and concise, how it should be!\nRun it:

\n
$ enqueuer enqueuer-repo-hit.yml\n
\n

What if I want to mock a http server and hit it at the same time, you may ask. Not a big deal for enqueuer lovers:

\n
#http-self-test.yml\npublishers:\n-   type: http\n    url: http://localhost:9085/readme-example\n    method: POST\n    payload: does enqueuer rock?\n    onMessageReceived:\n        script: statusCode *= 2\n        assertions:\n            -   expect: body\n                toBeEqualTo: `yes, it does`\n            -   expect: statusCode\n                toBeLessThan: 300\nsubscriptions:\n-   type: http\n    endpoint: /readme-example\n    port: 9085\n    method: POST\n    response:\n        status: 200\n        payload: yes, it does\n    onMessageReceived:\n        assertions:\n        -   expect: message.body\n            toContain: `enqueuer`\n
\n

And then, run this other one:

\n
$ nqr http-self-test.yml\n
\n

I told you it was simple.\nNow go nuts!\nIt's all yours. Have fun.\nCheck this out, you'll find countless examples.\nCertainly one is what you need.

\n

if you need more

\n
$ nqr -h\nUsage: nqr [options] <test-file> [other-test-files...]\n\nTake a look at the full documentation: http://enqueuer-land.github.io/enqueuer\n\nOptions:\n  -v, --version                             output the version number\n  -b, --verbosity <level>                   set verbosity (default: \"warn\")\n  -c, --config-file <path>                  set configurationFile\n  -e, --parsers-list [parser]               list available object parsers\n  -f, --formatters-description [formatter]  describe report formatters\n  -o, --stdout-requisition-output           add stdout as requisition output\n  -m, --max-report-level-print <level>      set max report level print\n  -p, --protocols-description [protocol]    describe protocols\n  -t, --tests-list                          list available tests assertions\n  -s, --store [store]                       add variables values to this session (default: [])\n  -l, --add-plugin [plugin]                 add plugin (default: [])\n  -a, --add-file <file>                     add file to be tested (default: [])\n  -A, --add-file-and-ignore-others <file>   add file to be tested and ignore others (default: [])\n  -h, --help                                output usage information\n\nExamples:\n  $ nqr --config-file config-file.yml --verbosity error --store key=value\n  $ enqueuer -c config-file.yml test-file.yml --add-file another-test-file.yml -b info\n  $ enqueuer test-file.yml --store someKey=true --store someOtherKey=false\n  $ nqr --protocols-description -s key=value\n  $ nqr -t expect\n  $ nqr -l my-enqueuer-plugin-name -p plugin-protocol\n  $ nqr -p http\n  $ nqr --formatters-description json\n
\n
\n

Components

\n

In order to accomplish more than just hitting enqueuer's repo or doing a quick self http hit, there are a few things that you'll probably need to know.\nDon't worry, it's not too much and, as mentioned earlier, there is a lot of examples here, just in case.\nThere are only three important component concepts: requisitions, publishers and subscriptions.\nThey work along with each other and are responsible for the full behavior of enqueuer.

\n

requisition

\n

Test scenario description. It tells what, when, and how test your applications and services.\nPicture it as if it was a collection of publishers, subscriptions and other requisitions.\nIt helps because this is exactly what it is.\nAs the others components, it has some attributes. All of them are optionals. And it supports multi-level test scenarios out of the box. Yeap, go as recursive as you want.\nEvery test file is a requisition.\nYou don't know some of these attributes values yet? Don't worry, just put a variable there and let enqueuer replace it with the value you set later.\nVariable replacements are available through the entire requisition.

\n
requisition attributes
\n

These are the requisition attributes:

\n

name
\nDescribes what the requisition is suppose to do.\nDefaults to requisition index.

\n
name: requisition action\n
\n

timeout
\nDefaults to 5000.\nSets in milliseconds how long the requisition waits to expire.\nSet to zero or less than zero to run it endlessly.

\n
timeout: 3000\n
\n

delay
\nDefaults to 0. Sets in milliseconds how long the test waits before starting. Check this to get the full idea.

\n
delay: 0\n
\n

iterations
\nDefaults to 1. Sets how many times this test will be executed. Check this and this to get the full idea.

\n
iterations: 3\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this requisitions should be skipped. Check this to see it working.

\n
ignore: true\n
\n

parallel
\nDefaults to false. Immediate children requisitions should be executed in parallel mode.\nTake a look at this to see it working.

\n
parallel: true\n
\n

import
\nAllows requisition to be dynamically defined, be it by loading an external file or creating dynamically by other requisitions. Want to reuse the same requisition multiple times? This is you you need.\nTake a look at this and this to behold this feature.

\n
import: path/to/another/requisition/file\n
\n

publishers
\nList of publishers

\n
publishers:\n- name: some publisher name\n  type: http\n- type: tcp\n
\n

subscriptions
\nList of subscriptions

\n
subscriptions:\n- name: some subscription name\n  type: udp\n- name: another subscription name\n  type: file\n
\n

requisitions
\nA list of child scenarios. List of requisitions.\nCheck this example, it may help.

\n
requisitions:\n- name: some requisition name\n  iterations: 2\n- name: another requisition name\n  delay: 200\n
\n
events
\n

Available events are described here. A requisition object is available to access and change its attributes.

\n
name: my name\nonInit:\n  script: requisition.delay = 3000;\n  assertions:\n  - expectToBeDefined: requisition.name\nonFinish:  \n  assertions:\n  - expectToBeDefined: requisition.name\n
\n

publisher

\n

A publisher action is triggered by enqueuer itself. It acts whereas a subscription reacts.\nIt publishes something, it writes, it enqueues, hits and endpoint... These kinds of actions.

\n
publisher attributes
\n

Every publisher has its own properties, depending on its protocol and implementation.\nThe built-in http publisher implementation, for instance, demands a url, a method, and a payload, if the method is not a GET.\nOn the other hand, the built-in tcp publisher implementation requires a serverAddress and a port.\nThese are the publisher attributes:

\n

name
\nDefaults to publisher index.\nDescribes what the publisher is supposed to do.

\n
name: publisher action\n
\n

type
\nMandatory. Key tag to identify which publisher will be instantiated

\n
type: http\n
\n

payload
\nSince a publisher usually publishes something, it's very likely you have to set a value here.\nThe message itself that will be send through this protocol. Be it a string, a number, a boolean value or even whole objects.

\n
payload: value\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this publisher should be skipped. Check this to see it working.

\n
ignore: true\n
\n
events
\n

Available events are described here. A publisher object is available to access and change its attributes.\nDepending on the protocol and its implementation, such as http and tcp, there may exist a onMessageReceived event and a special object given message.\nOn the other hand, an asynchronous protocol, like: udp and amqp, usually does not provide it.

\n
onInit:\n  script: publisher.ignore = false\n  assertions:\n  - expectToBeDefined: publisher.type\nonMessageReceived: #Provided in synchronous protocols  \n  assertions:\n  - expectToBeDefined: message\nonFinish:  \n  assertions:\n  - expectToBeDefined: publisher.type\n
\n

subscription

\n

A subscription is an \"under demand\" event. It reacts whereas a publisher acts.\nIt consumes something, it reads, it dequeues, gets hit... These kinds of actions.\nThis means that it is not triggered by enqueuer itself.\nRather than that, enqueuer waits on an external event to be triggered and then it asserts against the message that was passed to the subscription.

\n
subscription attributes
\n

Every subscription has its own properties, depending on its protocol and implementation.\nThe built-in http subscription implementation, for instance, demands an endpoint, a method, and a port, if the method is not a GET.\nOn the other hand, the built-in tcp subscription implementation requires only a port.

\n

These are the subscription attributes:

\n

name
\nDefaults to subscription index.\nDescribes what the subscription is supposed to do.

\n
name: subscription action\n
\n

type
\nMandatory. Key tag to identify which subscription will be instantiated

\n
type: http\n
\n

avoid
\nIdentifies whether or not this subscription should not receive any message. Defaults to false.\nIf set and a message is received a failing test will be generated.\nTake a look at this to see it working.\nOn the other hand, when it's false and no message is received in a given timeout. The subscription is valid.

\n
avoid: false\n
\n

timeout
\nSets in milliseconds how long the subscription waits to expire. Defaults to 3000.\nSet to zero or less than zero to run it endlessly.

\n
timeout: 3000\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this subscription should be skipped. Check this to see it working.

\n
ignore: true    \n
\n
events
\n

Available events are described here. A subscription object is available to access and change its attributes.

\n
onInit:\n  script: subscription.avoid = false;\n  assertions:\n  - expectToBeDefined: subscription.type\nonMessageReceived:  \n  assertions:\n  - expectToBeDefined: message\nonFinish:  \n  assertions:\n  - expectToBeDefined: subscription.type\n
\n
\n

Event

\n

Events are hook methods executed by enqueuer when an action occurs on publishers, subscriptions or requisitions.\nThis is where you'll write your tests. In its assertions field.\nDepending on the event's owner, there may be a variable called publisher, subscription or requisition.\nYou're free to explore them however you want, even doing things like this:

\n
publisher.parent.subscriptions[0].timeout = 1000;\n
\n

hooks

\n

There are three hook events available:

\n

onInit
\nAvailable in requisitions, publishers and subscriptions. It gets executed as soon as the test is initialized.

\n

onFinish
\nAvailable in requisitions, publishers and subscriptions. It gets executed when the test is about to finish.\nAs available parameter, an elapsedTime variable is given, counting every milliseconds since the instantiation of this component.

\n

onMessageReceived
\nAvailable in every subscription and in publishers that provide synchronous properties.\nIt gets executed when the subscription or publisher receives a message.\nA message object is available having all of attributes returned from the received message.\nDepending on the protocol implementation, there'll be additional objects to this hook.\nFor instance, in the built-in http publisher implementation, there's a statusCode, headers and a body among others, and the subscription implementation has body, query, params and headers , among other variables.\nelapsedTime is also available here, counting every milliseconds since the instantiation of this component.

\n

fields

\n

Every hook object has 3 properties:

\n

script
\nJavascript code snippet executed when the event is triggered.\nYeah, I mean it. See it it by yourself.\nBut be careful, with great power comes great responsibility.

\n

store
\nData to be persisted across requisitions.

\n

assertions
\nArray of assertions.\nRun $ nqr -t to see available ones.\nConsider looking at this test example.\nOf course, just like almost everything else in enqueuer world, you can extend this available list using some plugin.\nYou can check them out or even write your own.

\n
onInit:\n  script: variableIdentifier = 'string value'\n\n  assertions:\n  - expect: variableIdentifier\n    toBeEqualTo: `string value`\n\nonMessageReceived:\n  script: |-\n    message += 3;\n    console.log(`Message received plus 3 is: ${message}`);\n\n  store:\n    key: message\n\n  assertions:\n  - name: anyValue #optional\n    expect: message\n    toBeEqualTo: store.key\n  - expect: message + 3\n    toBeGreaterThan: 3\n
\n

event example

\n

Check this test file to see it in practice.

\n
\n

Requisition Flow

\n

Now that you know what are requisitions, publishers, subscriptions and events. How about seeing how they interact with each other in a fancier way?

\n

\"enqueuerInstanceFlow\"

\n

\"NPM\"

\n
\n

Configuration File

\n

To save yourself some time, a configuration file may be used.\nConfiguration files tell enqueuer which tests will be executed, log-level, and which output test report files should be generated.\nThis file tells how enqueuer should be executed.\nTo run enqueuer with the configuration:

\n
$ nqr -c path/to/configuration/file.yml\n
\n

or

\n
$ nqr --config-file path/to/configuration/file.yml\n
\n

configuration file attributes

\n

These are the configuration file attributes:

\n

files
\nRequisition file names or glob. Enqueuer runs every file that matches an element value.

\n
files:\n- 1.yml\n- 2.yml\n- *.json\n
\n

parallel
\nDefaults to false. Requisition files should be executed in parallel mode. The requisition file itself is still sequential, but the files are executes in parallel.

\n
parallel: true\n
\n

log-level
\nDefaults to warning. Defines how information are logged in the console. Accepted values are: trace; debug; info; warning (default); error; and fatal.

\n
log-level: trace\n
\n

max-report-level-print
\nDefaults to 1. The deepest level of report to be printed to the console.

\n
max-report-level-print: 2\n
\n

plugins
\nList of in plugins used by the test scenarios. You can check them out or write your own.

\n
plugins:\n- enqueuer-plugin-amqp \n- enqueuer-plugin-ws \n- enqueuer-plugin-mqtt\n- enqueuer-plugin-html-report\n
\n

outputs
\nOnce enqueuer runs every execution, it compiles a summary and sends it to every publisher listed in output.\nAn important thing to note is that every available report publisher is available here.\nYes, it means that you are able to send this report through http, tcp, etc. or through a plugin one or a custom one.\nYou can run $ nqr -p to check available report publishers installed.\nAnother important thing to note is the format value. By default a json summary is generated, but you can change it to whatever format you would like, such as: Xunit, html\nYou can run $ nqr -f to check available installed formats or even write your own

\n
outputs:\n- type: file\n  format: json (default)\n  filename: output/examples.json\n- type: file\n  format: yml\n  filename: output/examples.yml\n- type: standard-output (default)\n  format: console\n
\n

store
\nValues defined here use the 'key: value' pattern and are available to every test scenario throughout the entire execution

\n
store:\n  variableKey: \"my value\" # Defines 'variableKey' key and its value 'my value'. \n  \n  'separated key': 6\n  \n  object: # You can even define whole objects here:\n    first: first value\n    second:\n      nested: thing\n
\n

configuration file example

\n

Here's a complete example of a configuration file.

\n
\n

Variables

\n

Providing power and flexibility, enqueuer allows you to use variables placeholder replacement.\nThat's why there is a store field and you'll see a lot of << and {{ being used in the examples files.\nIt works as simple as this:

\n
name: my name is <<variableKey>>\n
\n

Every time enqueuer sees these kind of notations, it searches in its store for a key/value pair like:

\n
variableKey: `enqueuer`\n
\n

Then, when enqueuer parses the original map, it gets translated to this:

\n
name: my name is enqueuer\n
\n

By default, every ENV_VAR set is loaded automatically to the store. Check this example.

\n

set a variable

\n

There are a few ways to set a value in the store.

\n
configuration file
\n

Configuration file store object. Set it as you wish, as you can see here

\n
command line
\n

A command line argument using the key=value format. This way:

\n
$ nqr --store key=value -s anotherVariable=true\n
\n
event
\n

Dynamically set it through any event.\nBe it in its script field or straight through its store field.\nBoth ways work:

\n
onInit:\n    script: store.key = 123;\n    store:\n        anotherKey: `another Value` \n
\n

use a variable

\n

There are two ways two use a variable:

\n
non js code snippet
\n

The easiest one is to type <<variableKey>> or {{variableKey}} where you want it to be replaced in a test file, as you can see here

\n
js code snippet
\n

Using the store object. It's attributes are the keys and their values are their respective values.\nTherefore, you're free to use store.variableKey, console.log(store.variableKey); or console.log(2 * store['separated key']); and get them.\nLike this one.

\n

variables example

\n

Check out this test example test to see it working.

\n
\n

Content File Injection

\n

You are able to inject file content into a requisition/publisher/subscription field.

\n
file: <<file://path/to/file.txt>>\n
\n

Other than that, enqueuer can read it and parse its content as an object using this familiar syntax: <<tag://path/to/file?query=value&other=true>>.

\n
requisition:\n    json: <<json://path/to/file.json>>\n    yml: <<yml://path/to/file.yml>>\n    csv: <<csv://path/to/file.csv?header=true&delimiter=;>>\n    file: <<file://path/to/file.txt>>\n
\n

Once the object is parsed, your free to use it as a regular object in any event

\n
onInit:\n    script: console.log(requisition.yml.deep.field);\nonFinish:\n    assertions:\n    -   expect: json.key\n        toBeEqualTo: csv[0].key\n
\n

It get's event better.\nDue its fantastic plugin architecture design, you can extend its default modules and use any of these plugins or event write your own to parse however you want.\nThe built-in modules for object parsers are: json, yml, csv and file.\nRun $ nqr -e to see available ones.

\n

content file injection example

\n

Check out this test example test to get a full picture of it.

\n
\n

Plugins

\n

You're probably aware by now but it doesn't hurt do emphasize it: enqueuer provides an amazingly powerful plugin extensible architecture.\nIt has several plugins available, but if none of them pleases you, you're free to create your own.\nAlbeit you don't have to share the one you created, we encourage you to do so. Then go ahead and publish yours to npm and add it to our plugins list.

\n

plugin types

\n

So far, you're able to extend enqueuer default behavior in four ways. Using a protocol plugin, an object parser plugin, an asserter plugin and using a report formatter plugin.

\n
protocol
\n

A protocol plugin enables you to use a different publisher/subscription types.\nRun $ nqr -p [protocol-name] to get the full available list:

\n
publishers: \n-   name:                  custom\n-   name:                  file\n-   name:                  http\n    messageReceivedParams: statusCode, statusMessage, body\n-   name:                  stdout\n-   name:                  tcp\n-   ...\nsubscriptions: \n-   name:                  custom\n-   name:                  file\n    messageReceivedParams: content, name, size, modified, created\n-   name:                  http\n    messageReceivedParams: headers, params, query, body\n-   name:                  stdin\n-   name:                  tcp\n    messageReceivedParams: payload, stream\n-   ...\n
\n

Each one listed above has a respective example in the examples folder.\nThis one, for instance, provides support for amqp protocol, so you can create this publisher and subscription:

\n
publishers:\n-   type: amqp\n    payload: enqueuermaniac\n    exchange: enqueuer.exchange\n    routingKey: enqueuer.integration.test.routing.key\nsubscriptions:\n-   type: amqp\n    exchange: enqueuer.exchange\n    routingKey: enqueuer.integration.test.routing.#\n    onMessageReceived:\n        assertions:\n        -   expect: payload\n            toBeEqualTo: `enqueuermaniac`\n
\n
object parser
\n

An object parser plugin enables you to read and parse files as you wish.\nThis test example demonstrates how to use it,\nRun $ nqr -e [object-parser-name] to check available ones:

\n
parsers: \n- yml, yaml\n- json\n- file\n- csv\n
\n

This one, for example, provides the ability to read xml files and inject their values like this:

\n
xmlContent: <<xml://path/to/xml/file.xml>>\n
\n
asserter
\n

An asserter plugin provides you a nicely way to use different assertions than these built-in ones.

\n
asserters: \n-   expect: \n        required:    true\n        type:        string, array\n        description: actual value\n    not: \n        required:    false\n        type:        null\n        description: negates\n    toContain: \n        required:    true\n        type:        string, any\n        description: element\n
\n

Looking at the asserter above, we can create assertions like these:

\n
assertions:\n-   expect: [`a`, 1, true]\n    not:\n    toContain: `b`\n-   expect: [`a`, 1, true]\n    toContain: 1\n
\n

Run $ nqr -t to get the full available list.\nConsider looking at this test example.

\n
report formatter
\n

A report formatter plugin gives you the ability to export enqueuer reports the way you want.\nRun $ nqr -f [formatter-name] to list available report formatters:

\n
formatters: \n- console, stdout\n- json\n- yml, yaml\n
\n

Consider looking at the example of configuration file to see it in use.\nThis one, for instance, generates xUnit like reports from enqueuer's output.

\n

plugin use

\n

In order to enqueuer get awareness that you want to you a plugin, you have to tell it, right?\nYou can tell enqueuer to use a plugin in three manners. Using it as a command line argument, through the configuration file or letting enqueuer finding it in it's home directory folder.

\n
command line
\n

Tell enqueuer to use your plugin through command line this way $ nqr -l <plugin-folder> -l <another-plugin-folder>.\nWhere plugin-folder and another-plugin-folder are the directories where the plugins are installed in.

\n
configuration file
\n

Tell enqueuer to use your plugin through configuration file this way:

\n
plugins: \n-   plugin-folder\n-   another-plugin-folder\n
\n

Where plugin-folder and another-plugin-folder are the directories where the plugins are installed in.

\n
implicitly
\n

When enqueuer runs, it looks for modules in .nqr folder in your home directory. Every enqueuer compatible module get implicitly loaded.\nIn order to be enqueuer compatible, a module has to have an entryPoint exported function in its main file and, in its package.json file, it has to have either 'enqueuer' or 'nqr' as keywords.

\n
\n

Open source

\n

We, by 'we' we mean enqueuer's maintainers not the human race; unfortunately, are very opened any kind of contribution in general.\nAs long as they make sense and add value to the product, you're free to go.\nWe mean it, do it. Even if it's a typo fix in this README file. Go ahead.\nIf you like it but don't want to waste time creating a pull request, no problem neither.\nCreate an issue, or, even easier, give it a github star. It's cheap and it doesn't hurt anyone.\nYou know what? Just head up to enqueuer's github repo and keep staring at its webpage.\nIt may help somehow.

\n

contributors

\n

Thank you. It sounds cliché, but this project wouldn't be the same without the massive contribution from everyone.

\n

code it

\n

In order to contribute with some code, you have to follow a few steps.\nFirst of all, get the code:

\n
$ git clone git@github.com:enqueuer-land/enqueuer.git\n$ cd enqueuer\n
\n

Get its dependencies installed:

\n
$ npm install\n
\n

Build it:

\n
$ npm run build\n
\n

Go for it. Make the changes you want.\nAfter everything is done:

\n
$ npm run all\n
\n

Commit it:

\n
$ npm run commit\n
\n

Push it:

\n
$ git push\n
\n

feedback

\n

We'd love to get your feedback!\nIf you have any comments, suggestions, etc. you can reach us here.

\n
\n
\n
\n\n\n\n
\n
\n
\n\n
\n
\n \n\n
\n\n \n
\n
\n \n\n \n \n\n \n
\n
\n \n
\n
\n\n\n\n
\n \n \n You can’t perform that action at this time.\n
\n\n\n \n \n \n \n \n \n \n
\n \n You signed in with another tab or window. Reload to refresh your session.\n You signed out in another tab or window. Reload to refresh your session.\n
\n \n\n
\n
\n
\n
\n\n
\n\n \n\n\n", "headers": { "server": "GitHub.com", - "date": "Wed, 27 Mar 2019 03:25:47 GMT", + "date": "Wed, 27 Mar 2019 23:29:44 GMT", "content-type": "text/html; charset=utf-8", "transfer-encoding": "chunked", "connection": "close", "status": "200 OK", "vary": "X-PJAX", - "etag": "W/\"321e7db57d0e7d026ddc61bd8e208060\"", + "etag": "W/\"2f386ddefa290c2c6d854f1bafcfc639\"", "cache-control": "max-age=0, private, must-revalidate", "set-cookie": [ - "has_recent_activity=1; path=/; expires=Wed, 27 Mar 2019 04:25:47 -0000", - "logged_in=no; domain=.github.com; path=/; expires=Sun, 27 Mar 2039 03:25:47 -0000; secure; HttpOnly", - "_gh_sess=dzQzT2oyTkd2RDB0QW1va3ZiMnMrSTQwOE83NVk0U3JHUG9rZHlzRUZjZ285RUZibTR4QXBPTk5GaWRGR3BWdEtUQlJzYjBOL0h1NjhJaG9rdThzTnJYbUUxL3h1cWExNVZwbFF3UkcraUlrMUxDczNvdVp5YUxDMC9WTGhTR2F0b3J0NnIwSjRtbjJRUG9HZWNyL1JlQi84MXFFTTFnd0hqUWh3YXB0ZDJnSGs2UzgwWm1LcERkV2crT1VTVTJXZWRvR29PQVZkbjViWE9qSnNibG8yQjB1bm1RQThpU24rM2NtT09haENhY08vTTlxcEp6OXZJTUNoYUlJaGJrYm1pRzRHRkRFVlp1QUtGWG1WcWhOVFcxSjVVR3FrK2o2RWJCOTU2ejB3TUE9LS1nNjREcDAvczlRbTlaRGMveG8yK1NRPT0%3D--e5cfb69894e7ec9fb5ff31168cb32a9011984d86; path=/; secure; HttpOnly" + "has_recent_activity=1; path=/; expires=Thu, 28 Mar 2019 00:29:43 -0000", + "logged_in=no; domain=.github.com; path=/; expires=Sun, 27 Mar 2039 23:29:44 -0000; secure; HttpOnly", + "_gh_sess=ZmRRNzFKWmVNN0RIQU9kZzhYd0ZFdysyZ1lHUnVlOWtwbTE2WDAxckxIbGNmVVRZZkthUThBcEF1OGgvZE41cko1TWhmdGxES2NrT0ZKRWVVRmozNHlJTTlMSUxqWWJlOGdxY2R6SVR4eXJzY3VDazVDYmJxOGE2QWZ2ZDBlS1NUVUo4KzQzN3liSnV1TGNmMWVnelpMRTlNNzdUeTFhR0FKSnByUDlTMllmSnB0bHhLY2lMUmc4S2VqMnJBSXg1K3JDRkZsZnJITHJidUdRQlpkK242emx3MEJ6QTN6OElZMHZwY1lSK09weTZkMlhpYlNrUlhQeGJZY2hkR2lsZXd0MTM3MkJLeWx5dUx0dU5nbHF4bERCRUR3bmtxekVEVTNGdWpIVzFDUFk9LS1GaTFoOWF1RVV1cHlZczFOZG54YVRRPT0%3D--3ef776c2cb8d92fd6051e88627f53f7388947137; path=/; secure; HttpOnly" ], - "x-request-id": "e44b277b-7abd-464a-bd7b-863a52e8c9d4", + "x-request-id": "921cb34c-8725-4782-8ed3-592a00fc7c21", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "x-frame-options": "deny", "x-content-type-options": "nosniff", "x-xss-protection": "1; mode=block", "expect-ct": "max-age=2592000, report-uri=\"https://api.github.com/_private/browser/errors\"", "content-security-policy": "default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com", - "x-github-request-id": "3718:1BD3:231EDC:3AE660:5C9AED3A" + "x-github-request-id": "37CF:4BF5:136965:21FFF5:5C9C0767" }, "request": { "uri": { @@ -2415,9 +2415,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.731Z", - "endTime": "2019-03-27T03:25:44.232Z", - "totalTime": 1501, + "startTime": "2019-03-27T23:29:39.029Z", + "endTime": "2019-03-27T23:29:40.621Z", + "totalTime": 1592, "timeout": 5000 }, "requisitions": [] @@ -2426,14 +2426,14 @@ "valid": true, "tests": [], "name": "examples/recursion.yml", - "id": "0025420586_8fda7870a1_314023", + "id": "2029380883_c581f9fbc0_89101", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.733Z", - "endTime": "2019-03-27T03:25:42.838Z", - "totalTime": 105, + "startTime": "2019-03-27T23:29:39.030Z", + "endTime": "2019-03-27T23:29:39.124Z", + "totalTime": 94, "timeout": 5000 }, "requisitions": [ @@ -2441,14 +2441,14 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420587_e3b415ed80_412695", + "id": "2029380885_0b060c871d_639654", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.759Z", - "endTime": "2019-03-27T03:25:42.805Z", - "totalTime": 46, + "startTime": "2019-03-27T23:29:39.050Z", + "endTime": "2019-03-27T23:29:39.092Z", + "totalTime": 42, "timeout": 5000 }, "requisitions": [] @@ -2457,13 +2457,13 @@ "valid": true, "tests": [], "name": "Requisition #1 [0]", - "id": "0025420589_2e6a4c2a37_983608", + "id": "2029380886_d8bf406dd6_192587", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.810Z", - "endTime": "2019-03-27T03:25:42.828Z", + "startTime": "2019-03-27T23:29:39.098Z", + "endTime": "2019-03-27T23:29:39.116Z", "totalTime": 18, "timeout": 5000 }, @@ -2472,14 +2472,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420590_fab2a74954_657563", + "id": "2029380887_913318a0bc_45133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.813Z", - "endTime": "2019-03-27T03:25:42.821Z", - "totalTime": 8, + "startTime": "2019-03-27T23:29:39.101Z", + "endTime": "2019-03-27T23:29:39.108Z", + "totalTime": 7, "timeout": 5000 }, "requisitions": [ @@ -2487,14 +2487,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.814Z", - "endTime": "2019-03-27T03:25:42.815Z", - "totalTime": 1, + "startTime": "2019-03-27T23:29:39.101Z", + "endTime": "2019-03-27T23:29:39.101Z", + "totalTime": 0, "timeout": 5000 }, "requisitions": [] @@ -2503,13 +2503,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.816Z", - "endTime": "2019-03-27T03:25:42.818Z", + "startTime": "2019-03-27T23:29:39.103Z", + "endTime": "2019-03-27T23:29:39.105Z", "totalTime": 2, "timeout": 5000 }, @@ -2519,13 +2519,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.819Z", - "endTime": "2019-03-27T03:25:42.820Z", + "startTime": "2019-03-27T23:29:39.106Z", + "endTime": "2019-03-27T23:29:39.107Z", "totalTime": 1, "timeout": 5000 }, @@ -2537,13 +2537,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420590_fab2a74954_657563", + "id": "2029380887_913318a0bc_45133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.823Z", - "endTime": "2019-03-27T03:25:42.826Z", + "startTime": "2019-03-27T23:29:39.110Z", + "endTime": "2019-03-27T23:29:39.113Z", "totalTime": 3, "timeout": 5000 }, @@ -2552,13 +2552,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.823Z", - "endTime": "2019-03-27T03:25:42.823Z", + "startTime": "2019-03-27T23:29:39.110Z", + "endTime": "2019-03-27T23:29:39.110Z", "totalTime": 0, "timeout": 5000 }, @@ -2568,14 +2568,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.824Z", - "endTime": "2019-03-27T03:25:42.825Z", - "totalTime": 1, + "startTime": "2019-03-27T23:29:39.111Z", + "endTime": "2019-03-27T23:29:39.111Z", + "totalTime": 0, "timeout": 5000 }, "requisitions": [] @@ -2584,13 +2584,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.825Z", - "endTime": "2019-03-27T03:25:42.825Z", + "startTime": "2019-03-27T23:29:39.112Z", + "endTime": "2019-03-27T23:29:39.112Z", "totalTime": 0, "timeout": 5000 }, @@ -2602,14 +2602,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420590_fab2a74954_657563", + "id": "2029380887_913318a0bc_45133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.826Z", - "endTime": "2019-03-27T03:25:42.828Z", - "totalTime": 2, + "startTime": "2019-03-27T23:29:39.114Z", + "endTime": "2019-03-27T23:29:39.115Z", + "totalTime": 1, "timeout": 5000 }, "requisitions": [ @@ -2617,13 +2617,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.827Z", - "endTime": "2019-03-27T03:25:42.827Z", + "startTime": "2019-03-27T23:29:39.114Z", + "endTime": "2019-03-27T23:29:39.114Z", "totalTime": 0, "timeout": 5000 }, @@ -2633,13 +2633,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.828Z", - "endTime": "2019-03-27T03:25:42.828Z", + "startTime": "2019-03-27T23:29:39.115Z", + "endTime": "2019-03-27T23:29:39.115Z", "totalTime": 0, "timeout": 5000 }, @@ -2649,13 +2649,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.828Z", - "endTime": "2019-03-27T03:25:42.828Z", + "startTime": "2019-03-27T23:29:39.115Z", + "endTime": "2019-03-27T23:29:39.115Z", "totalTime": 0, "timeout": 5000 }, @@ -2669,14 +2669,14 @@ "valid": true, "tests": [], "name": "Requisition #1 [1]", - "id": "0025420589_2e6a4c2a37_983608", + "id": "2029380886_d8bf406dd6_192587", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.829Z", - "endTime": "2019-03-27T03:25:42.832Z", - "totalTime": 3, + "startTime": "2019-03-27T23:29:39.116Z", + "endTime": "2019-03-27T23:29:39.120Z", + "totalTime": 4, "timeout": 5000 }, "requisitions": [ @@ -2684,13 +2684,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420590_fab2a74954_657563", + "id": "2029380887_913318a0bc_45133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.829Z", - "endTime": "2019-03-27T03:25:42.830Z", + "startTime": "2019-03-27T23:29:39.116Z", + "endTime": "2019-03-27T23:29:39.117Z", "totalTime": 1, "timeout": 5000 }, @@ -2699,13 +2699,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.829Z", - "endTime": "2019-03-27T03:25:42.829Z", + "startTime": "2019-03-27T23:29:39.116Z", + "endTime": "2019-03-27T23:29:39.116Z", "totalTime": 0, "timeout": 5000 }, @@ -2715,13 +2715,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.829Z", - "endTime": "2019-03-27T03:25:42.829Z", + "startTime": "2019-03-27T23:29:39.117Z", + "endTime": "2019-03-27T23:29:39.117Z", "totalTime": 0, "timeout": 5000 }, @@ -2731,13 +2731,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.830Z", - "endTime": "2019-03-27T03:25:42.830Z", + "startTime": "2019-03-27T23:29:39.117Z", + "endTime": "2019-03-27T23:29:39.117Z", "totalTime": 0, "timeout": 5000 }, @@ -2749,13 +2749,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420590_fab2a74954_657563", + "id": "2029380887_913318a0bc_45133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.830Z", - "endTime": "2019-03-27T03:25:42.831Z", + "startTime": "2019-03-27T23:29:39.117Z", + "endTime": "2019-03-27T23:29:39.118Z", "totalTime": 1, "timeout": 5000 }, @@ -2764,13 +2764,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.830Z", - "endTime": "2019-03-27T03:25:42.830Z", + "startTime": "2019-03-27T23:29:39.118Z", + "endTime": "2019-03-27T23:29:39.118Z", "totalTime": 0, "timeout": 5000 }, @@ -2780,14 +2780,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.830Z", - "endTime": "2019-03-27T03:25:42.831Z", - "totalTime": 1, + "startTime": "2019-03-27T23:29:39.118Z", + "endTime": "2019-03-27T23:29:39.118Z", + "totalTime": 0, "timeout": 5000 }, "requisitions": [] @@ -2796,13 +2796,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.831Z", - "endTime": "2019-03-27T03:25:42.831Z", + "startTime": "2019-03-27T23:29:39.118Z", + "endTime": "2019-03-27T23:29:39.118Z", "totalTime": 0, "timeout": 5000 }, @@ -2814,13 +2814,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420590_fab2a74954_657563", + "id": "2029380887_913318a0bc_45133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.831Z", - "endTime": "2019-03-27T03:25:42.832Z", + "startTime": "2019-03-27T23:29:39.119Z", + "endTime": "2019-03-27T23:29:39.120Z", "totalTime": 1, "timeout": 5000 }, @@ -2829,14 +2829,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.831Z", - "endTime": "2019-03-27T03:25:42.832Z", - "totalTime": 1, + "startTime": "2019-03-27T23:29:39.119Z", + "endTime": "2019-03-27T23:29:39.119Z", + "totalTime": 0, "timeout": 5000 }, "requisitions": [] @@ -2845,13 +2845,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.832Z", - "endTime": "2019-03-27T03:25:42.832Z", + "startTime": "2019-03-27T23:29:39.119Z", + "endTime": "2019-03-27T23:29:39.119Z", "totalTime": 0, "timeout": 5000 }, @@ -2861,13 +2861,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.832Z", - "endTime": "2019-03-27T03:25:42.832Z", + "startTime": "2019-03-27T23:29:39.119Z", + "endTime": "2019-03-27T23:29:39.119Z", "totalTime": 0, "timeout": 5000 }, @@ -2881,13 +2881,13 @@ "valid": true, "tests": [], "name": "Requisition #1 [2]", - "id": "0025420589_2e6a4c2a37_983608", + "id": "2029380886_d8bf406dd6_192587", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.833Z", - "endTime": "2019-03-27T03:25:42.837Z", + "startTime": "2019-03-27T23:29:39.120Z", + "endTime": "2019-03-27T23:29:39.124Z", "totalTime": 4, "timeout": 5000 }, @@ -2896,14 +2896,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420590_fab2a74954_657563", + "id": "2029380887_913318a0bc_45133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.833Z", - "endTime": "2019-03-27T03:25:42.835Z", - "totalTime": 2, + "startTime": "2019-03-27T23:29:39.120Z", + "endTime": "2019-03-27T23:29:39.121Z", + "totalTime": 1, "timeout": 5000 }, "requisitions": [ @@ -2911,13 +2911,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.834Z", - "endTime": "2019-03-27T03:25:42.834Z", + "startTime": "2019-03-27T23:29:39.121Z", + "endTime": "2019-03-27T23:29:39.121Z", "totalTime": 0, "timeout": 5000 }, @@ -2927,13 +2927,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.834Z", - "endTime": "2019-03-27T03:25:42.834Z", + "startTime": "2019-03-27T23:29:39.121Z", + "endTime": "2019-03-27T23:29:39.121Z", "totalTime": 0, "timeout": 5000 }, @@ -2943,13 +2943,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.834Z", - "endTime": "2019-03-27T03:25:42.834Z", + "startTime": "2019-03-27T23:29:39.121Z", + "endTime": "2019-03-27T23:29:39.121Z", "totalTime": 0, "timeout": 5000 }, @@ -2961,14 +2961,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420590_fab2a74954_657563", + "id": "2029380887_913318a0bc_45133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.835Z", - "endTime": "2019-03-27T03:25:42.836Z", - "totalTime": 1, + "startTime": "2019-03-27T23:29:39.122Z", + "endTime": "2019-03-27T23:29:39.122Z", + "totalTime": 0, "timeout": 5000 }, "requisitions": [ @@ -2976,13 +2976,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.835Z", - "endTime": "2019-03-27T03:25:42.835Z", + "startTime": "2019-03-27T23:29:39.122Z", + "endTime": "2019-03-27T23:29:39.122Z", "totalTime": 0, "timeout": 5000 }, @@ -2992,13 +2992,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.836Z", - "endTime": "2019-03-27T03:25:42.836Z", + "startTime": "2019-03-27T23:29:39.122Z", + "endTime": "2019-03-27T23:29:39.122Z", "totalTime": 0, "timeout": 5000 }, @@ -3008,13 +3008,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.836Z", - "endTime": "2019-03-27T03:25:42.836Z", + "startTime": "2019-03-27T23:29:39.122Z", + "endTime": "2019-03-27T23:29:39.122Z", "totalTime": 0, "timeout": 5000 }, @@ -3026,13 +3026,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420590_fab2a74954_657563", + "id": "2029380887_913318a0bc_45133", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.836Z", - "endTime": "2019-03-27T03:25:42.837Z", + "startTime": "2019-03-27T23:29:39.123Z", + "endTime": "2019-03-27T23:29:39.124Z", "totalTime": 1, "timeout": 5000 }, @@ -3041,13 +3041,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.837Z", - "endTime": "2019-03-27T03:25:42.837Z", + "startTime": "2019-03-27T23:29:39.123Z", + "endTime": "2019-03-27T23:29:39.123Z", "totalTime": 0, "timeout": 5000 }, @@ -3057,13 +3057,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.837Z", - "endTime": "2019-03-27T03:25:42.837Z", + "startTime": "2019-03-27T23:29:39.123Z", + "endTime": "2019-03-27T23:29:39.123Z", "totalTime": 0, "timeout": 5000 }, @@ -3073,13 +3073,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420591_04356910aa_563423", + "id": "2029380888_8031f7d61d_291000", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.837Z", - "endTime": "2019-03-27T03:25:42.837Z", + "startTime": "2019-03-27T23:29:39.124Z", + "endTime": "2019-03-27T23:29:39.124Z", "totalTime": 0, "timeout": 5000 }, @@ -3099,13 +3099,13 @@ } ], "name": "Requisition #2", - "id": "0025420593_7e8a0ac72f_401249", + "id": "2029380889_ba09c5f53f_293153", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.838Z", - "endTime": "2019-03-27T03:25:42.838Z", + "startTime": "2019-03-27T23:29:39.124Z", + "endTime": "2019-03-27T23:29:39.124Z", "totalTime": 0, "timeout": 5000 }, @@ -3117,14 +3117,14 @@ "valid": true, "tests": [], "name": "examples/requisition-delay-iterations.yml", - "id": "0025420594_7dd65c6d4e_984337", + "id": "2029380891_31d5b89807_565471", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.734Z", - "endTime": "2019-03-27T03:25:45.831Z", - "totalTime": 3097, + "startTime": "2019-03-27T23:29:39.031Z", + "endTime": "2019-03-27T23:29:42.119Z", + "totalTime": 3088, "timeout": 5000 }, "requisitions": [ @@ -3132,14 +3132,14 @@ "valid": true, "tests": [], "name": "iterations [0]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.760Z", - "endTime": "2019-03-27T03:25:42.805Z", - "totalTime": 45, + "startTime": "2019-03-27T23:29:39.050Z", + "endTime": "2019-03-27T23:29:39.092Z", + "totalTime": 42, "timeout": 5000 }, "requisitions": [] @@ -3148,13 +3148,13 @@ "valid": true, "tests": [], "name": "iterations [1]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.809Z", - "endTime": "2019-03-27T03:25:42.814Z", + "startTime": "2019-03-27T23:29:39.096Z", + "endTime": "2019-03-27T23:29:39.101Z", "totalTime": 5, "timeout": 5000 }, @@ -3164,13 +3164,13 @@ "valid": true, "tests": [], "name": "iterations [2]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.815Z", - "endTime": "2019-03-27T03:25:42.817Z", + "startTime": "2019-03-27T23:29:39.102Z", + "endTime": "2019-03-27T23:29:39.104Z", "totalTime": 2, "timeout": 5000 }, @@ -3180,13 +3180,13 @@ "valid": true, "tests": [], "name": "iterations [3]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.818Z", - "endTime": "2019-03-27T03:25:42.819Z", + "startTime": "2019-03-27T23:29:39.105Z", + "endTime": "2019-03-27T23:29:39.106Z", "totalTime": 1, "timeout": 5000 }, @@ -3196,13 +3196,13 @@ "valid": true, "tests": [], "name": "iterations [4]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.820Z", - "endTime": "2019-03-27T03:25:42.820Z", + "startTime": "2019-03-27T23:29:39.107Z", + "endTime": "2019-03-27T23:29:39.107Z", "totalTime": 0, "timeout": 5000 }, @@ -3212,13 +3212,13 @@ "valid": true, "tests": [], "name": "iterations [5]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.821Z", - "endTime": "2019-03-27T03:25:42.823Z", + "startTime": "2019-03-27T23:29:39.108Z", + "endTime": "2019-03-27T23:29:39.110Z", "totalTime": 2, "timeout": 5000 }, @@ -3228,13 +3228,13 @@ "valid": true, "tests": [], "name": "iterations [6]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.823Z", - "endTime": "2019-03-27T03:25:42.824Z", + "startTime": "2019-03-27T23:29:39.110Z", + "endTime": "2019-03-27T23:29:39.111Z", "totalTime": 1, "timeout": 5000 }, @@ -3244,13 +3244,13 @@ "valid": true, "tests": [], "name": "iterations [7]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.824Z", - "endTime": "2019-03-27T03:25:42.825Z", + "startTime": "2019-03-27T23:29:39.111Z", + "endTime": "2019-03-27T23:29:39.112Z", "totalTime": 1, "timeout": 5000 }, @@ -3260,13 +3260,13 @@ "valid": true, "tests": [], "name": "iterations [8]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.825Z", - "endTime": "2019-03-27T03:25:42.826Z", + "startTime": "2019-03-27T23:29:39.112Z", + "endTime": "2019-03-27T23:29:39.113Z", "totalTime": 1, "timeout": 5000 }, @@ -3276,14 +3276,14 @@ "valid": true, "tests": [], "name": "iterations [9]", - "id": "0025420597_ed99f02020_872425", + "id": "2029380892_6f92ae778f_826401", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.826Z", - "endTime": "2019-03-27T03:25:42.826Z", - "totalTime": 0, + "startTime": "2019-03-27T23:29:39.113Z", + "endTime": "2019-03-27T23:29:39.114Z", + "totalTime": 1, "timeout": 5000 }, "requisitions": [] @@ -3299,23 +3299,23 @@ { "name": "Elapsed time", "valid": true, - "description": "Expected 'elapsedTime' to be greater than or equal to '3000'. Received '3003'" + "description": "Expected 'elapsedTime' to be greater than or equal to '3000'. Received '3005'" }, { "name": "Assertion #2", "valid": true, - "description": "Expected 'new Date().getTime() - requisition.startTime.getTime()' to be greater than or equal to '3000'. Received '3004'" + "description": "Expected 'new Date().getTime() - requisition.startTime.getTime()' to be greater than or equal to '3000'. Received '3005'" } ], "name": "delayed", - "id": "0025420600_1b4ad3f717_995374", + "id": "2029380893_e633fb209d_197775", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.827Z", - "endTime": "2019-03-27T03:25:45.831Z", - "totalTime": 3004, + "startTime": "2019-03-27T23:29:39.114Z", + "endTime": "2019-03-27T23:29:42.119Z", + "totalTime": 3005, "timeout": 5000 }, "requisitions": [] @@ -3326,14 +3326,14 @@ "valid": true, "tests": [], "name": "examples/skipped.yml", - "id": "0025420601_fa14306c8d_599182", + "id": "2029380895_f96c501693_449153", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.737Z", - "endTime": "2019-03-27T03:25:42.828Z", - "totalTime": 91, + "startTime": "2019-03-27T23:29:39.033Z", + "endTime": "2019-03-27T23:29:39.115Z", + "totalTime": 82, "timeout": 5000 }, "requisitions": [ @@ -3341,14 +3341,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [0]", - "id": "0025420603_b8f3c48419_210230", + "id": "2029380896_52ca556abd_107592", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.760Z", - "endTime": "2019-03-27T03:25:42.805Z", - "totalTime": 45, + "startTime": "2019-03-27T23:29:39.051Z", + "endTime": "2019-03-27T23:29:39.092Z", + "totalTime": 41, "timeout": 5000 }, "requisitions": [] @@ -3357,14 +3357,14 @@ "valid": true, "tests": [], "name": "Requisition #0 [1]", - "id": "0025420603_b8f3c48419_210230", + "id": "2029380896_52ca556abd_107592", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.809Z", - "endTime": "2019-03-27T03:25:42.814Z", - "totalTime": 5, + "startTime": "2019-03-27T23:29:39.097Z", + "endTime": "2019-03-27T23:29:39.101Z", + "totalTime": 4, "timeout": 5000 }, "requisitions": [] @@ -3373,13 +3373,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [2]", - "id": "0025420603_b8f3c48419_210230", + "id": "2029380896_52ca556abd_107592", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.815Z", - "endTime": "2019-03-27T03:25:42.817Z", + "startTime": "2019-03-27T23:29:39.102Z", + "endTime": "2019-03-27T23:29:39.104Z", "totalTime": 2, "timeout": 5000 }, @@ -3389,13 +3389,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [3]", - "id": "0025420603_b8f3c48419_210230", + "id": "2029380896_52ca556abd_107592", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.818Z", - "endTime": "2019-03-27T03:25:42.819Z", + "startTime": "2019-03-27T23:29:39.105Z", + "endTime": "2019-03-27T23:29:39.106Z", "totalTime": 1, "timeout": 5000 }, @@ -3405,13 +3405,13 @@ "valid": true, "tests": [], "name": "Requisition #0 [4]", - "id": "0025420603_b8f3c48419_210230", + "id": "2029380896_52ca556abd_107592", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.820Z", - "endTime": "2019-03-27T03:25:42.820Z", + "startTime": "2019-03-27T23:29:39.107Z", + "endTime": "2019-03-27T23:29:39.107Z", "totalTime": 0, "timeout": 5000 }, @@ -3427,13 +3427,13 @@ } ], "name": "Requisition #1", - "id": "0025420604_ee8b8895a4_20486", + "id": "2029380897_dd53bf7b9b_317370", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.821Z", - "endTime": "2019-03-27T03:25:42.823Z", + "startTime": "2019-03-27T23:29:39.108Z", + "endTime": "2019-03-27T23:29:39.110Z", "totalTime": 2, "timeout": 5000 }, @@ -3449,12 +3449,12 @@ } ], "name": "Requisition #2", - "id": "0025420606_c254033458_679502", + "id": "2029380898_e7a63a9601_517639", "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.823Z", - "endTime": "2019-03-27T03:25:42.823Z", + "startTime": "2019-03-27T23:29:39.110Z", + "endTime": "2019-03-27T23:29:39.110Z", "totalTime": 0 }, "requisitions": [] @@ -3469,12 +3469,12 @@ } ], "name": "Requisition #3", - "id": "0025420607_71bd549601_862837", + "id": "2029380900_7c49914bfc_483559", "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.824Z", - "endTime": "2019-03-27T03:25:42.824Z", + "startTime": "2019-03-27T23:29:39.111Z", + "endTime": "2019-03-27T23:29:39.111Z", "totalTime": 0 }, "requisitions": [] @@ -3489,12 +3489,12 @@ } ], "name": "Requisition #4", - "id": "0025420609_922f0d838e_197648", + "id": "2029380901_cba228d86d_656111", "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.824Z", - "endTime": "2019-03-27T03:25:42.824Z", + "startTime": "2019-03-27T23:29:39.111Z", + "endTime": "2019-03-27T23:29:39.111Z", "totalTime": 0 }, "requisitions": [] @@ -3509,13 +3509,13 @@ } ], "name": "Requisition #5", - "id": "0025420610_d5f44eb3d0_380622", + "id": "2029380902_156e8c99fb_403622", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.824Z", - "endTime": "2019-03-27T03:25:42.825Z", + "startTime": "2019-03-27T23:29:39.111Z", + "endTime": "2019-03-27T23:29:39.112Z", "totalTime": 1, "timeout": 5000 }, @@ -3525,13 +3525,13 @@ "valid": true, "tests": [], "name": "Requisition #6", - "id": "0025420611_b8fed6771f_731170", + "id": "2029380903_e6cfdb3632_323935", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.825Z", - "endTime": "2019-03-27T03:25:42.826Z", + "startTime": "2019-03-27T23:29:39.112Z", + "endTime": "2019-03-27T23:29:39.113Z", "totalTime": 1, "timeout": 5000 }, @@ -3547,13 +3547,13 @@ } ], "name": "Requisition #7", - "id": "0025420613_9151bd798f_767867", + "id": "2029380904_6faa711392_819786", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.826Z", - "endTime": "2019-03-27T03:25:42.827Z", + "startTime": "2019-03-27T23:29:39.113Z", + "endTime": "2019-03-27T23:29:39.114Z", "totalTime": 1, "timeout": 5000 }, @@ -3565,14 +3565,14 @@ "valid": true, "tests": [], "name": "examples/ssl.yml", - "id": "0025420614_5a7af2b063_696748", + "id": "2029380906_3e6222b730_1000171", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.740Z", - "endTime": "2019-03-27T03:25:44.916Z", - "totalTime": 2176, + "startTime": "2019-03-27T23:29:39.035Z", + "endTime": "2019-03-27T23:29:41.203Z", + "totalTime": 2168, "timeout": 5000 }, "requisitions": [ @@ -3580,11 +3580,11 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420616_f453973db9_114562", + "id": "2029380907_6c5c8a4dc9_819317", "ignored": false, "subscriptions": [ { - "id": "0025420616_d5884fd0ec_636682", + "id": "2029380907_d5884fd0ec_740090", "name": "Subscription #0", "type": "ssl", "tests": [ @@ -3600,7 +3600,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "payload": "secureMessagereusingSecureMessage", "stream": { @@ -3613,7 +3613,7 @@ ], "publishers": [ { - "id": "0025420616_e063362e26_860289", + "id": "2029380907_e063362e26_264856", "name": "Publisher #0", "valid": true, "type": "ssl", @@ -3634,21 +3634,21 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:43.910Z", + "publishTime": "2019-03-27T23:29:40.195Z", "messageReceived": { "payload": "hisecureResponse", "stream": { "address": "127.0.0.1", "family": "IPv4", - "port": 53839 + "port": 59107 } } } ], "time": { - "startTime": "2019-03-27T03:25:42.761Z", - "endTime": "2019-03-27T03:25:43.910Z", - "totalTime": 1149, + "startTime": "2019-03-27T23:29:39.052Z", + "endTime": "2019-03-27T23:29:40.195Z", + "totalTime": 1143, "timeout": 5000 }, "requisitions": [] @@ -3657,11 +3657,11 @@ "valid": true, "tests": [], "name": "Requisition #1", - "id": "0025420617_6c0a26af21_132844", + "id": "2029380908_65ab341c9d_894092", "ignored": false, "subscriptions": [ { - "id": "0025420617_464eaccac3_715495", + "id": "2029380908_464eaccac3_792328", "name": "Subscription #0", "type": "ssl", "tests": [ @@ -3677,7 +3677,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:43.912Z", + "connectionTime": "2019-03-27T23:29:40.196Z", "messageReceived": { "payload": "reusingSecureMessage", "stream": { @@ -3690,7 +3690,7 @@ ], "publishers": [ { - "id": "0025420617_26f6887fe6_574808", + "id": "2029380908_26f6887fe6_505887", "name": "Publisher #0", "valid": true, "type": "ssl", @@ -3711,21 +3711,21 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:44.915Z", + "publishTime": "2019-03-27T23:29:41.202Z", "messageReceived": { "payload": "reusingSecureResponse", "stream": { "address": "127.0.0.1", "family": "IPv4", - "port": 53839 + "port": 59107 } } } ], "time": { - "startTime": "2019-03-27T03:25:43.911Z", - "endTime": "2019-03-27T03:25:44.916Z", - "totalTime": 1005, + "startTime": "2019-03-27T23:29:40.196Z", + "endTime": "2019-03-27T23:29:41.203Z", + "totalTime": 1007, "timeout": 5000 }, "requisitions": [] @@ -3736,7 +3736,7 @@ "valid": true, "tests": [], "name": "examples/stdin.yml", - "id": "0025420619_78b9250560_204582", + "id": "2029380909_8bc9248709_274697", "ignored": false, "subscriptions": [ { @@ -3756,15 +3756,15 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.793Z", + "connectionTime": "2019-03-27T23:29:39.081Z", "messageReceived": "enqueuer standard-input payload" } ], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.740Z", - "endTime": "2019-03-27T03:25:42.866Z", - "totalTime": 126, + "startTime": "2019-03-27T23:29:39.035Z", + "endTime": "2019-03-27T23:29:39.152Z", + "totalTime": 117, "timeout": 5000 }, "requisitions": [] @@ -3773,14 +3773,14 @@ "valid": true, "tests": [], "name": "examples/store.yml", - "id": "0025420620_65c838ef2d_335713", + "id": "2029380910_8c78d1aafb_601685", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.742Z", - "endTime": "2019-03-27T03:25:42.820Z", - "totalTime": 78, + "startTime": "2019-03-27T23:29:39.036Z", + "endTime": "2019-03-27T23:29:39.107Z", + "totalTime": 71, "timeout": 5000 }, "requisitions": [ @@ -3788,14 +3788,14 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420621_bed402d2e2_995414", + "id": "2029380912_4bc33bf83e_730917", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.762Z", - "endTime": "2019-03-27T03:25:42.805Z", - "totalTime": 43, + "startTime": "2019-03-27T23:29:39.052Z", + "endTime": "2019-03-27T23:29:39.092Z", + "totalTime": 40, "timeout": 5000 }, "requisitions": [] @@ -3815,14 +3815,14 @@ } ], "name": "Requisition #1", - "id": "0025420623_af444e9c5e_292843", + "id": "2029380913_3134190492_183491", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.811Z", - "endTime": "2019-03-27T03:25:42.815Z", - "totalTime": 4, + "startTime": "2019-03-27T23:29:39.099Z", + "endTime": "2019-03-27T23:29:39.101Z", + "totalTime": 2, "timeout": 5000 }, "requisitions": [] @@ -3837,13 +3837,13 @@ } ], "name": "Requisition #2", - "id": "0025420624_fd8c489e5b_190973", + "id": "2029380915_52d14ff36e_7202", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.817Z", - "endTime": "2019-03-27T03:25:42.818Z", + "startTime": "2019-03-27T23:29:39.104Z", + "endTime": "2019-03-27T23:29:39.105Z", "totalTime": 1, "timeout": 5000 }, @@ -3855,14 +3855,14 @@ "valid": true, "tests": [], "name": "examples/tcp.yml", - "id": "0025420626_8bce837b8c_791769", + "id": "2029380916_155831b155_27441", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.745Z", - "endTime": "2019-03-27T03:25:45.889Z", - "totalTime": 3144, + "startTime": "2019-03-27T23:29:39.039Z", + "endTime": "2019-03-27T23:29:42.174Z", + "totalTime": 3135, "timeout": 5000 }, "requisitions": [ @@ -3870,11 +3870,11 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420627_ed5d6415e9_53371", + "id": "2029380917_0b630c6389_414939", "ignored": false, "subscriptions": [ { - "id": "0025420627_4e5617f719_602409", + "id": "2029380917_4e5617f719_930791", "name": "Subscription #0", "type": "tcp", "tests": [ @@ -3895,7 +3895,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "payload": "Hey Jude", "stream": { @@ -3908,7 +3908,7 @@ ], "publishers": [ { - "id": "0025420627_3b7a9e3645_448069", + "id": "2029380917_3b7a9e3645_449901", "name": "Publisher #0", "valid": true, "type": "tcp", @@ -3929,21 +3929,21 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:43.874Z", + "publishTime": "2019-03-27T23:29:40.162Z", "messageReceived": { "payload": "Do not make it bad", "stream": { "address": "127.0.0.1", "family": "IPv4", - "port": 53840 + "port": 59109 } } } ], "time": { - "startTime": "2019-03-27T03:25:42.763Z", - "endTime": "2019-03-27T03:25:43.875Z", - "totalTime": 1112, + "startTime": "2019-03-27T23:29:39.053Z", + "endTime": "2019-03-27T23:29:40.162Z", + "totalTime": 1109, "timeout": 3000 }, "requisitions": [] @@ -3952,11 +3952,11 @@ "valid": true, "tests": [], "name": "Requisition #1", - "id": "0025420629_93b3f188b3_408579", + "id": "2029380918_13b5d344d7_330309", "ignored": false, "subscriptions": [ { - "id": "0025420629_944c1488d1_178620", + "id": "2029380918_944c1488d1_126866", "name": "Subscription #0", "type": "tcp", "tests": [ @@ -3972,7 +3972,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:43.876Z", + "connectionTime": "2019-03-27T23:29:40.164Z", "messageReceived": { "payload": "I do not careThe socket is still open", "stream": { @@ -3985,7 +3985,7 @@ ], "publishers": [ { - "id": "0025420629_369e07d49e_601435", + "id": "2029380918_369e07d49e_173714", "name": "Publisher #0", "valid": true, "type": "tcp", @@ -4006,20 +4006,20 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:44.881Z", + "publishTime": "2019-03-27T23:29:41.169Z", "messageReceived": { "payload": "EnqueuerRocks", "stream": { "address": "127.0.0.1", "family": "IPv4", - "port": 53854 + "port": 59123 } } } ], "time": { - "startTime": "2019-03-27T03:25:43.876Z", - "endTime": "2019-03-27T03:25:44.882Z", + "startTime": "2019-03-27T23:29:40.163Z", + "endTime": "2019-03-27T23:29:41.169Z", "totalTime": 1006, "timeout": 3000 }, @@ -4029,11 +4029,11 @@ "valid": true, "tests": [], "name": "Requisition #2", - "id": "0025420630_afb8734e3f_878906", + "id": "2029380920_e05a1cd22b_858469", "ignored": false, "subscriptions": [ { - "id": "0025420630_a5c6b9dc6a_669237", + "id": "2029380920_a5c6b9dc6a_523195", "name": "Subscription #0", "type": "tcp", "tests": [ @@ -4049,7 +4049,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:44.884Z", + "connectionTime": "2019-03-27T23:29:41.171Z", "messageReceived": { "payload": "The socket is still open", "stream": { @@ -4062,7 +4062,7 @@ ], "publishers": [ { - "id": "0025420630_c04ec1e8aa_484872", + "id": "2029380920_c04ec1e8aa_721047", "name": "Publisher #0", "valid": true, "type": "tcp", @@ -4083,21 +4083,21 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:45.888Z", + "publishTime": "2019-03-27T23:29:42.174Z", "messageReceived": { "payload": "enqueuer Rocks", "stream": { "address": "127.0.0.1", "family": "IPv4", - "port": 53854 + "port": 59123 } } } ], "time": { - "startTime": "2019-03-27T03:25:44.883Z", - "endTime": "2019-03-27T03:25:45.888Z", - "totalTime": 1005, + "startTime": "2019-03-27T23:29:41.171Z", + "endTime": "2019-03-27T23:29:42.174Z", + "totalTime": 1003, "timeout": 3000 }, "requisitions": [] @@ -4108,14 +4108,14 @@ "valid": true, "tests": [], "name": "examples/udp.yml", - "id": "0025420632_73c2676c0f_700732", + "id": "2029380921_7cd47d677b_740246", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.747Z", - "endTime": "2019-03-27T03:25:42.870Z", - "totalTime": 123, + "startTime": "2019-03-27T23:29:39.040Z", + "endTime": "2019-03-27T23:29:39.154Z", + "totalTime": 114, "timeout": 5000 }, "requisitions": [ @@ -4123,11 +4123,11 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420633_06f271dc55_579127", + "id": "2029380922_2d7ba19dd6_223512", "ignored": false, "subscriptions": [ { - "id": "0025420634_81a962f56b_631888", + "id": "2029380922_81a962f56b_195411", "name": "subscription description", "type": "udp", "tests": [ @@ -4148,7 +4148,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.798Z", + "connectionTime": "2019-03-27T23:29:39.087Z", "messageReceived": { "payload": { "type": "Buffer", @@ -4160,7 +4160,7 @@ "remoteInfo": { "address": "127.0.0.1", "family": "IPv4", - "port": 49724, + "port": 56767, "size": 2 } } @@ -4168,7 +4168,7 @@ ], "publishers": [ { - "id": "0025420633_f1c5db9ba9_480712", + "id": "2029380922_f1c5db9ba9_971298", "name": "publisher description", "valid": true, "type": "udp", @@ -4179,13 +4179,13 @@ "description": "Published successfully" } ], - "publishTime": "2019-03-27T03:25:42.865Z" + "publishTime": "2019-03-27T23:29:39.151Z" } ], "time": { - "startTime": "2019-03-27T03:25:42.764Z", - "endTime": "2019-03-27T03:25:42.869Z", - "totalTime": 105, + "startTime": "2019-03-27T23:29:39.054Z", + "endTime": "2019-03-27T23:29:39.154Z", + "totalTime": 100, "timeout": 5000 }, "requisitions": [] @@ -4196,13 +4196,13 @@ "valid": true, "tests": [], "name": "examples/uds.yml", - "id": "0025420635_244bb06361_798569", + "id": "2029380923_ee821f6592_986088", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.751Z", - "endTime": "2019-03-27T03:25:45.864Z", + "startTime": "2019-03-27T23:29:39.042Z", + "endTime": "2019-03-27T23:29:42.155Z", "totalTime": 3113, "timeout": 5000 }, @@ -4211,11 +4211,11 @@ "valid": true, "tests": [], "name": "Requisition #0", - "id": "0025420637_8bab253099_955355", + "id": "2029380925_0ccf9fc221_997491", "ignored": false, "subscriptions": [ { - "id": "0025420637_649bd5228c_698245", + "id": "2029380925_649bd5228c_32340", "name": "Subscription #0", "type": "uds", "tests": [ @@ -4231,7 +4231,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:42.841Z", + "connectionTime": "2019-03-27T23:29:39.128Z", "messageReceived": { "payload": "enqueuer", "stream": {}, @@ -4241,7 +4241,7 @@ ], "publishers": [ { - "id": "0025420637_b14ca3892b_892214", + "id": "2029380925_b14ca3892b_919652", "name": "Publisher #0", "valid": true, "type": "uds", @@ -4262,7 +4262,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:43.855Z", + "publishTime": "2019-03-27T23:29:40.143Z", "messageReceived": { "payload": "responsePayload", "stream": {} @@ -4270,9 +4270,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:42.765Z", - "endTime": "2019-03-27T03:25:43.856Z", - "totalTime": 1091, + "startTime": "2019-03-27T23:29:39.055Z", + "endTime": "2019-03-27T23:29:40.144Z", + "totalTime": 1089, "timeout": 3000 }, "requisitions": [] @@ -4281,11 +4281,11 @@ "valid": true, "tests": [], "name": "Requisition #1", - "id": "0025420638_77cb1aef06_894671", + "id": "2029380926_5a50f82008_737192", "ignored": false, "subscriptions": [ { - "id": "0025420638_84a1c6e69b_161774", + "id": "2029380926_84a1c6e69b_495375", "name": "Subscription #0", "type": "uds", "tests": [ @@ -4301,7 +4301,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:43.858Z", + "connectionTime": "2019-03-27T23:29:40.147Z", "messageReceived": { "payload": "enqueuerI am still bidirectional", "stream": {}, @@ -4311,7 +4311,7 @@ ], "publishers": [ { - "id": "0025420638_297aae1eb3_684165", + "id": "2029380926_297aae1eb3_856980", "name": "Publisher #0", "valid": true, "type": "uds", @@ -4327,13 +4327,13 @@ "description": "Published successfully" } ], - "publishTime": "2019-03-27T03:25:44.859Z" + "publishTime": "2019-03-27T23:29:41.151Z" } ], "time": { - "startTime": "2019-03-27T03:25:43.858Z", - "endTime": "2019-03-27T03:25:44.859Z", - "totalTime": 1001, + "startTime": "2019-03-27T23:29:40.146Z", + "endTime": "2019-03-27T23:29:41.151Z", + "totalTime": 1005, "timeout": 5000 }, "requisitions": [] @@ -4342,11 +4342,11 @@ "valid": true, "tests": [], "name": "Requisition #2", - "id": "0025420640_cb80073ab6_798442", + "id": "2029380928_015c0d03fa_363776", "ignored": false, "subscriptions": [ { - "id": "0025420640_d308bbf817_193920", + "id": "2029380928_d308bbf817_54614", "name": "Subscription #0", "type": "uds", "tests": [ @@ -4362,7 +4362,7 @@ } ], "valid": true, - "connectionTime": "2019-03-27T03:25:44.861Z", + "connectionTime": "2019-03-27T23:29:41.153Z", "messageReceived": { "payload": "I am still opened", "stream": {} @@ -4371,7 +4371,7 @@ ], "publishers": [ { - "id": "0025420640_b6920facd0_727694", + "id": "2029380928_b6920facd0_918630", "name": "Publisher #0", "valid": true, "type": "uds", @@ -4392,7 +4392,7 @@ "description": "Response message was received" } ], - "publishTime": "2019-03-27T03:25:45.863Z", + "publishTime": "2019-03-27T23:29:42.154Z", "messageReceived": { "payload": "I am still bidirectional", "stream": {} @@ -4400,9 +4400,9 @@ } ], "time": { - "startTime": "2019-03-27T03:25:44.861Z", - "endTime": "2019-03-27T03:25:45.864Z", - "totalTime": 1003, + "startTime": "2019-03-27T23:29:41.153Z", + "endTime": "2019-03-27T23:29:42.154Z", + "totalTime": 1001, "timeout": 5000 }, "requisitions": [] @@ -4413,14 +4413,14 @@ "valid": true, "tests": [], "name": "examples/variables.yml", - "id": "0025420641_4f35c4ee22_834654", + "id": "2029380929_dc27d5da4e_373985", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.752Z", - "endTime": "2019-03-27T03:25:42.817Z", - "totalTime": 65, + "startTime": "2019-03-27T23:29:39.043Z", + "endTime": "2019-03-27T23:29:39.105Z", + "totalTime": 62, "timeout": 5000 }, "requisitions": [ @@ -4439,14 +4439,14 @@ } ], "name": "Requisition #0", - "id": "0025420643_a965de8a99_967401", + "id": "2029380930_915f7da296_402215", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.766Z", - "endTime": "2019-03-27T03:25:42.805Z", - "totalTime": 39, + "startTime": "2019-03-27T23:29:39.055Z", + "endTime": "2019-03-27T23:29:39.093Z", + "totalTime": 38, "timeout": 5000 }, "requisitions": [] @@ -4471,14 +4471,14 @@ } ], "name": "Requisition #1", - "id": "0025420644_02fb9801d0_857225", + "id": "2029380932_9075aab192_14172", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.812Z", - "endTime": "2019-03-27T03:25:42.815Z", - "totalTime": 3, + "startTime": "2019-03-27T23:29:39.099Z", + "endTime": "2019-03-27T23:29:39.101Z", + "totalTime": 2, "timeout": 5000 }, "requisitions": [] @@ -4500,14 +4500,14 @@ } ], "name": "examples/number.json", - "id": "0025420646_d70bdd7d5f_982953", + "id": "2029380933_2551f475ab_8025", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.752Z", - "endTime": "2019-03-27T03:25:42.803Z", - "totalTime": 51, + "startTime": "2019-03-27T23:29:39.044Z", + "endTime": "2019-03-27T23:29:39.090Z", + "totalTime": 46, "timeout": 5000 }, "requisitions": [] @@ -4516,14 +4516,14 @@ "valid": true, "tests": [], "name": "examples/requisition-navigation.yaml", - "id": "0025420648_cfb886e8fa_732895", + "id": "2029380935_b678970db3_167093", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.753Z", - "endTime": "2019-03-27T03:25:42.817Z", - "totalTime": 64, + "startTime": "2019-03-27T23:29:39.044Z", + "endTime": "2019-03-27T23:29:39.105Z", + "totalTime": 61, "timeout": 5000 }, "requisitions": [ @@ -4537,14 +4537,14 @@ } ], "name": "first", - "id": "0025420650_ba0d7aa88f_630122", + "id": "2029380936_14bb955430_157832", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.767Z", - "endTime": "2019-03-27T03:25:42.805Z", - "totalTime": 38, + "startTime": "2019-03-27T23:29:39.056Z", + "endTime": "2019-03-27T23:29:39.093Z", + "totalTime": 37, "timeout": 5000 }, "requisitions": [] @@ -4559,14 +4559,14 @@ } ], "name": "second", - "id": "0025420651_e2d77d685d_45548", + "id": "2029380938_f5a9656162_813830", "ignored": false, "subscriptions": [], "publishers": [], "time": { - "startTime": "2019-03-27T03:25:42.812Z", - "endTime": "2019-03-27T03:25:42.815Z", - "totalTime": 3, + "startTime": "2019-03-27T23:29:39.100Z", + "endTime": "2019-03-27T23:29:39.101Z", + "totalTime": 1, "timeout": 5000 }, "requisitions": [] diff --git a/output/examples.yml b/output/examples.yml index 63b022c0..ea55aec2 100644 --- a/output/examples.yml +++ b/output/examples.yml @@ -1,14 +1,14 @@ valid: true tests: [] name: enqueuer -id: 0025420522_9f21eb60ba_782209 +id: 2029380825_9f21eb60ba_738302 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.691Z' - endTime: '2019-03-27T03:25:45.889Z' - totalTime: 3198 + startTime: '2019-03-27T23:29:38.988Z' + endTime: '2019-03-27T23:29:42.175Z' + totalTime: 3187 requisitions: - valid: true @@ -90,25 +90,25 @@ requisitions: valid: true description: 'Expected ''1'' not to be equal to ''0''. Received ''1''' name: examples/assertions.yml - id: 0025420524_bd5f045815_216880 + id: 2029380827_119d3aa2d6_42115 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.696Z' - endTime: '2019-03-27T03:25:42.799Z' - totalTime: 103 + startTime: '2019-03-27T23:29:38.992Z' + endTime: '2019-03-27T23:29:39.087Z' + totalTime: 95 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/avoid.yml - id: 0025420525_b559f37be0_512965 + id: 2029380829_25d6aa9c34_45458 ignored: false subscriptions: - - id: 0025420525_2e0cc1fd7c_870769 + id: 2029380829_2e0cc1fd7c_17818 name: 'Subscription #0' type: tcp tests: @@ -117,9 +117,9 @@ requisitions: name: 'Subscription avoided' description: 'Avoidable subscription has not received any message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.127Z' - - id: 0025420525_8444956d6a_821350 + id: 2029380829_8444956d6a_549193 name: 'Subscription #1' type: HTTP tests: @@ -128,12 +128,12 @@ requisitions: name: 'Subscription avoided' description: 'Avoidable subscription has not received any message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' publishers: [] time: - startTime: '2019-03-27T03:25:42.697Z' - endTime: '2019-03-27T03:25:45.768Z' - totalTime: 3071 + startTime: '2019-03-27T23:29:38.993Z' + endTime: '2019-03-27T23:29:42.057Z' + totalTime: 3064 timeout: 5000 requisitions: [] - @@ -144,25 +144,25 @@ requisitions: valid: true description: 'Expected ''requisition.toEncrypt'' to be equal to ''7aad9a1a6a91e0f18c417cb3aa0e0217b283778e636c580509e494eeec1472e0''. Received ''7aad9a1a6a91e0f18c417cb3aa0e0217b283778e636c580509e494eeec1472e0''' name: examples/crypto-require.yml - id: 0025420526_d4bf63907d_708086 + id: 2029380831_8c2496e7c4_804780 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.699Z' - endTime: '2019-03-27T03:25:42.800Z' - totalTime: 101 + startTime: '2019-03-27T23:29:38.994Z' + endTime: '2019-03-27T23:29:39.088Z' + totalTime: 94 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/custom.yml - id: 0025420528_947ffcf172_290213 + id: 2029380833_88e588cb96_829026 ignored: false subscriptions: - - id: 0025420528_32e9fee766_718553 + id: 2029380833_32e9fee766_301265 name: 'subscription description' type: custom tests: @@ -179,7 +179,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.794Z' + connectionTime: '2019-03-27T23:29:39.082Z' messageReceived: payload: type: Buffer @@ -189,11 +189,11 @@ requisitions: remoteInfo: address: 127.0.0.1 family: IPv4 - port: 54722 + port: 55248 size: 2 publishers: - - id: 0025420528_816cec1424_674357 + id: 2029380833_816cec1424_347145 name: 'publisher description' valid: true type: custom @@ -202,25 +202,25 @@ requisitions: name: Published valid: true description: 'Published successfully' - publishTime: '2019-03-27T03:25:42.865Z' + publishTime: '2019-03-27T23:29:39.151Z' time: - startTime: '2019-03-27T03:25:42.700Z' - endTime: '2019-03-27T03:25:42.869Z' - totalTime: 169 + startTime: '2019-03-27T23:29:38.995Z' + endTime: '2019-03-27T23:29:39.155Z' + totalTime: 160 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/file-placeholder.yml - id: 0025420530_e9252be8ef_600796 + id: 2029380834_191444857f_65807 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.702Z' - endTime: '2019-03-27T03:25:42.817Z' - totalTime: 115 + startTime: '2019-03-27T23:29:39.002Z' + endTime: '2019-03-27T23:29:39.105Z' + totalTime: 103 timeout: 5000 requisitions: - @@ -243,14 +243,14 @@ requisitions: valid: true description: 'Expected ''requisition.javascript(20)'' to be equal to ''40''. Received ''40''' name: 'Requisition #0' - id: 0025420532_f898f752fc_201280 + id: 2029380836_96d82d46f6_738507 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.755Z' - endTime: '2019-03-27T03:25:42.804Z' - totalTime: 49 + startTime: '2019-03-27T23:29:39.046Z' + endTime: '2019-03-27T23:29:39.091Z' + totalTime: 45 timeout: 5000 requisitions: [] - @@ -261,36 +261,36 @@ requisitions: valid: true description: 'Expecting ''requisition.yml'' to be undefined' name: 'Requisition #1' - id: 0025420534_5095207cef_410918 + id: 2029380837_fa81613bf0_333521 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.810Z' - endTime: '2019-03-27T03:25:42.815Z' - totalTime: 5 + startTime: '2019-03-27T23:29:39.097Z' + endTime: '2019-03-27T23:29:39.101Z' + totalTime: 4 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/file.yml - id: 0025420536_01a51001d0_60847 + id: 2029380839_c4d6c65048_466680 ignored: false subscriptions: - - id: 0025420536_46b3c9d8c8_553753 + id: 2029380839_46b3c9d8c8_422654 name: 'subscription description' type: file-system-watcher tests: - name: 'Some time has passed' valid: true - description: 'Expected ''now'' to be greater than or equal to ''1553657142704''. Received ''1553657142863''' + description: 'Expected ''now'' to be greater than or equal to ''1553729379004''. Received ''1553729379149''' - name: Filename valid: true - description: 'Expecting ''temp/fileTest0025420800_cce5b8a3ab_695814.file'' (name) to contain ''temp/''' + description: 'Expecting ''temp/fileTest2029390088_cf18ce1e28_636165.file'' (name) to contain ''temp/''' - name: Content valid: true @@ -312,16 +312,16 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.792Z' + connectionTime: '2019-03-27T23:29:39.080Z' messageReceived: - content: '1553657142704' - name: temp/fileTest0025420800_cce5b8a3ab_695814.file + content: '1553729379004' + name: temp/fileTest2029390088_cf18ce1e28_636165.file size: 13 - modified: '2019-03-27T03:25:42.801Z' - created: '2019-03-27T03:25:42.801Z' + modified: '2019-03-27T23:29:39.089Z' + created: '2019-03-27T23:29:39.089Z' publishers: - - id: 0025420536_4b5a457015_83146 + id: 2029380839_4b5a457015_960703 name: 'publisher description' valid: true type: file @@ -330,11 +330,11 @@ requisitions: name: Published valid: true description: 'Published successfully' - publishTime: '2019-03-27T03:25:42.804Z' + publishTime: '2019-03-27T23:29:39.091Z' time: - startTime: '2019-03-27T03:25:42.703Z' - endTime: '2019-03-27T03:25:42.864Z' - totalTime: 161 + startTime: '2019-03-27T23:29:39.004Z' + endTime: '2019-03-27T23:29:39.150Z' + totalTime: 146 timeout: 3000 requisitions: [] - @@ -345,11 +345,11 @@ requisitions: valid: true description: 'Expecting ''requisition'' to be defined' name: examples/hooks.yml - id: 0025420538_694be8e5c4_646970 + id: 2029380841_bf6c6e2686_661204 ignored: false subscriptions: - - id: 0025420539_f076f53bb1_710281 + id: 2029380841_f076f53bb1_640746 name: 'Subscription #0' type: tcp tests: @@ -378,7 +378,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.127Z' messageReceived: payload: it stream: @@ -387,7 +387,7 @@ requisitions: port: 23080 publishers: - - id: 0025420538_ce73838413_931106 + id: 2029380841_ce73838413_893799 name: 'Publisher #0' valid: true type: tcp @@ -428,28 +428,28 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:43.873Z' + publishTime: '2019-03-27T23:29:40.160Z' messageReceived: payload: 'hook response' stream: address: 127.0.0.1 family: IPv4 - port: 53838 + port: 59108 time: - startTime: '2019-03-27T03:25:42.706Z' - endTime: '2019-03-27T03:25:43.874Z' - totalTime: 1168 + startTime: '2019-03-27T23:29:39.007Z' + endTime: '2019-03-27T23:29:40.161Z' + totalTime: 1154 timeout: 3000 requisitions: [] - valid: true tests: [] name: examples/http-auth-basic.yml - id: 0025420540_3b5c323e71_942846 + id: 2029380843_4d163dbe07_33819 ignored: false subscriptions: - - id: 0025420540_f8b31336cb_590384 + id: 2029380843_f8b31336cb_260906 name: 'Subscription #0' type: http tests: @@ -478,7 +478,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: headers: content-type: application/json @@ -491,7 +491,7 @@ requisitions: body: 'basic auth' publishers: - - id: 0025420540_f4551bd7af_96321 + id: 2029380843_f4551bd7af_451833 name: 'Publisher #0' valid: true type: http @@ -508,7 +508,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:42.905Z' + publishTime: '2019-03-27T23:29:39.185Z' messageReceived: statusCode: 200 body: 'basic auth response' @@ -519,7 +519,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '19' etag: 'W/"13-nGN7LEwCUKXpQoLxNqKZXSglYNc"' - date: 'Wed, 27 Mar 2019 03:25:42 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -541,20 +541,20 @@ requisitions: authorization: 'Basic dXNlcjpwYXNzd29yZA==' Content-Length: 10 time: - startTime: '2019-03-27T03:25:42.708Z' - endTime: '2019-03-27T03:25:42.905Z' - totalTime: 197 + startTime: '2019-03-27T23:29:39.009Z' + endTime: '2019-03-27T23:29:39.185Z' + totalTime: 176 timeout: 3000 requisitions: [] - valid: true tests: [] name: examples/http-auth-bearer.yml - id: 0025420542_042b85b6f3_985247 + id: 2029380844_62d8d71644_391885 ignored: false subscriptions: - - id: 0025420542_8b0a8f4b53_5204 + id: 2029380844_8b0a8f4b53_195052 name: 'Subscription #0' type: http tests: @@ -579,7 +579,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: headers: content-type: application/json @@ -592,7 +592,7 @@ requisitions: body: Rech publishers: - - id: 0025420542_388c1593e3_833108 + id: 2029380844_388c1593e3_317181 name: 'Publisher #0' valid: true type: http @@ -609,7 +609,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:42.903Z' + publishTime: '2019-03-27T23:29:39.183Z' messageReceived: statusCode: 321 body: responsePayload @@ -620,7 +620,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '15' etag: 'W/"f-V9sBEzo+y6k6sqGXsr1Ql2B0tAk"' - date: 'Wed, 27 Mar 2019 03:25:42 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -642,20 +642,20 @@ requisitions: authorization: 'Bearer bearerToken' Content-Length: 4 time: - startTime: '2019-03-27T03:25:42.710Z' - endTime: '2019-03-27T03:25:42.903Z' - totalTime: 193 + startTime: '2019-03-27T23:29:39.010Z' + endTime: '2019-03-27T23:29:39.183Z' + totalTime: 173 timeout: 3000 requisitions: [] - valid: true tests: [] name: examples/http-auth-digest.yml - id: 0025420544_46e75f8544_370453 + id: 2029380845_47c71d227c_745146 ignored: false subscriptions: - - id: 0025420544_6edffc9ab2_385918 + id: 2029380845_6edffc9ab2_765819 name: 'Subscription #0' type: http tests: @@ -704,7 +704,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.792Z' + connectionTime: '2019-03-27T23:29:39.080Z' messageReceived: headers: content-type: application/json @@ -717,7 +717,7 @@ requisitions: body: Rech publishers: - - id: 0025420544_b553ccdd3b_925086 + id: 2029380845_b553ccdd3b_873007 name: 'Publisher #0' valid: true type: http @@ -734,7 +734,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:42.902Z' + publishTime: '2019-03-27T23:29:39.180Z' messageReceived: statusCode: 321 body: responsePayload @@ -745,7 +745,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '15' etag: 'W/"f-V9sBEzo+y6k6sqGXsr1Ql2B0tAk"' - date: 'Wed, 27 Mar 2019 03:25:42 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -767,34 +767,34 @@ requisitions: authorization: 'Digest username="guest", realm="nqrRealm", nonce="58bac26865505", uri="/digest", algorithm="MD5", response="6309166f64557e9d56ffe6c34a0a6ca4", opaque="opaque"' Content-Length: 4 time: - startTime: '2019-03-27T03:25:42.711Z' - endTime: '2019-03-27T03:25:42.902Z' - totalTime: 191 + startTime: '2019-03-27T23:29:39.012Z' + endTime: '2019-03-27T23:29:39.180Z' + totalTime: 168 timeout: 3000 requisitions: [] - valid: true tests: [] name: examples/http-more-examples.yml - id: 0025420546_13d8980e1b_897904 + id: 2029380847_7826d43c66_781142 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.718Z' - endTime: '2019-03-27T03:25:45.109Z' - totalTime: 2391 + startTime: '2019-03-27T23:29:39.017Z' + endTime: '2019-03-27T23:29:41.394Z' + totalTime: 2377 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420548_725d1b5c55_853047 + id: 2029380849_af5d85dafa_413892 ignored: false subscriptions: - - id: 0025420548_b9fd747935_349626 + id: 2029380849_b9fd747935_557590 name: 'Subscription #0' type: http tests: @@ -819,7 +819,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.798Z' + connectionTime: '2019-03-27T23:29:39.087Z' messageReceived: headers: content-type: application/json @@ -833,7 +833,7 @@ requisitions: query: '2345' body: '{"enqueuer":"virgs"}' - - id: 0025420548_97c8fb993f_694306 + id: 2029380849_97c8fb993f_719771 name: 'same port' type: http tests: @@ -842,7 +842,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.798Z' + connectionTime: '2019-03-27T23:29:39.087Z' messageReceived: headers: content-length: '5' @@ -852,7 +852,7 @@ requisitions: query: {} body: virgs - - id: 0025420548_42d8fc1293_701137 + id: 2029380849_42d8fc1293_834138 name: 'yet another, but avoidable' type: http tests: @@ -861,10 +861,10 @@ requisitions: name: 'Subscription avoided' description: 'Avoidable subscription has not received any message' valid: true - connectionTime: '2019-03-27T03:25:42.798Z' + connectionTime: '2019-03-27T23:29:39.087Z' publishers: - - id: 0025420548_254b0b3fae_797920 + id: 2029380849_254b0b3fae_679818 name: 'Publisher #0' valid: true type: http @@ -889,7 +889,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:42.904Z' + publishTime: '2019-03-27T23:29:39.184Z' messageReceived: statusCode: 321 body: 'dynamically changed payload' @@ -901,7 +901,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '27' etag: 'W/"1b-e5esTWfu+XftewZ5g2Tclr7ClTo"' - date: 'Wed, 27 Mar 2019 03:25:42 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -923,7 +923,7 @@ requisitions: nqr: publisher Content-Length: 20 - - id: 0025420548_92ae58473e_952607 + id: 2029380849_92ae58473e_975398 name: 'Publisher #1' valid: true type: http @@ -940,7 +940,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:42.904Z' + publishTime: '2019-03-27T23:29:39.184Z' messageReceived: statusCode: 444 body: blah @@ -951,7 +951,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '4' etag: 'W/"4-W/H9kn37hnlJai5s8Ay+UMHIcUU"' - date: 'Wed, 27 Mar 2019 03:25:42 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -971,20 +971,20 @@ requisitions: headers: Content-Length: 5 time: - startTime: '2019-03-27T03:25:42.757Z' - endTime: '2019-03-27T03:25:43.096Z' - totalTime: 339 + startTime: '2019-03-27T23:29:39.048Z' + endTime: '2019-03-27T23:29:39.383Z' + totalTime: 335 timeout: 3000 requisitions: [] - valid: true tests: [] name: 'Requisition #1' - id: 0025420550_22f610ef86_543217 + id: 2029380850_bbc120dccb_369822 ignored: false subscriptions: - - id: 0025420550_4010211a40_635273 + id: 2029380850_4010211a40_914257 name: 'Subscription #0' type: http tests: @@ -997,7 +997,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:43.098Z' + connectionTime: '2019-03-27T23:29:39.385Z' messageReceived: headers: content-type: application/json @@ -1011,7 +1011,7 @@ requisitions: body: '{"duplicated":true}' publishers: - - id: 0025420550_7630ef29c8_622638 + id: 2029380850_7630ef29c8_489964 name: 'publisher description' valid: true type: http @@ -1032,7 +1032,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:43.101Z' + publishTime: '2019-03-27T23:29:39.389Z' messageReceived: statusCode: 321 body: duplicatedResponsePayload @@ -1043,7 +1043,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '25' etag: 'W/"19-yZRAgggcER0sMyRTVBBpErTPT/A"' - date: 'Wed, 27 Mar 2019 03:25:43 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -1064,20 +1064,20 @@ requisitions: content-type: application/json Content-Length: 19 time: - startTime: '2019-03-27T03:25:43.097Z' - endTime: '2019-03-27T03:25:43.101Z' - totalTime: 4 + startTime: '2019-03-27T23:29:39.384Z' + endTime: '2019-03-27T23:29:39.389Z' + totalTime: 5 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'requisition 2 (port 23076)' - id: 0025420551_55f7e56431_564250 + id: 2029380851_bfaf87b767_868076 ignored: false subscriptions: - - id: 0025420551_e5e0d9ff8c_241952 + id: 2029380851_e5e0d9ff8c_868522 name: 'subscription description' type: http tests: @@ -1086,23 +1086,23 @@ requisitions: name: 'Subscription avoided' description: 'Avoidable subscription has not received any message' valid: true - connectionTime: '2019-03-27T03:25:43.102Z' + connectionTime: '2019-03-27T23:29:39.390Z' publishers: [] time: - startTime: '2019-03-27T03:25:43.101Z' - endTime: '2019-03-27T03:25:44.105Z' - totalTime: 1004 + startTime: '2019-03-27T23:29:39.389Z' + endTime: '2019-03-27T23:29:40.391Z' + totalTime: 1002 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'check port releasing (23076)' - id: 0025420552_a506b81dd1_529381 + id: 2029380852_438e4249cd_228018 ignored: false subscriptions: - - id: 0025420552_3861169172_803658 + id: 2029380852_3861169172_164714 name: 'same port subscription' type: tcp tests: @@ -1111,23 +1111,23 @@ requisitions: name: 'Subscription avoided' description: 'Avoidable subscription has not received any message' valid: true - connectionTime: '2019-03-27T03:25:44.106Z' + connectionTime: '2019-03-27T23:29:40.393Z' publishers: [] time: - startTime: '2019-03-27T03:25:44.106Z' - endTime: '2019-03-27T03:25:45.109Z' - totalTime: 1003 + startTime: '2019-03-27T23:29:40.392Z' + endTime: '2019-03-27T23:29:41.394Z' + totalTime: 1002 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/http-proxy.yml - id: 0025420553_1809cace72_781479 + id: 2029380853_f3fdc80718_223534 ignored: false subscriptions: - - id: 0025420554_ef12dc14a5_816675 + id: 2029380854_ef12dc14a5_295595 name: 'proxy server' type: http-proxy tests: @@ -1164,7 +1164,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: headers: content-type: application/json @@ -1179,7 +1179,7 @@ requisitions: query: proxied body: '{"proxy":"test"}' - - id: 0025420554_f7b397b2a5_871311 + id: 2029380854_f7b397b2a5_456276 name: 'real server' type: http tests: @@ -1216,7 +1216,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: headers: content-type: application/json @@ -1231,7 +1231,7 @@ requisitions: body: '{"proxy":"test"}' publishers: - - id: 0025420553_375842a323_871841 + id: 2029380854_375842a323_290623 name: 'publisher proxy' valid: true type: http @@ -1252,7 +1252,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:42.913Z' + publishTime: '2019-03-27T23:29:39.200Z' messageReceived: statusCode: 333 body: responsePayload @@ -1263,7 +1263,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '15' etag: 'W/"f-V9sBEzo+y6k6sqGXsr1Ql2B0tAk"' - date: 'Wed, 27 Mar 2019 03:25:42 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -1285,20 +1285,20 @@ requisitions: authorization: 'Basic dXNlcjpwYXNzd29yZA==' Content-Length: 16 time: - startTime: '2019-03-27T03:25:42.720Z' - endTime: '2019-03-27T03:25:42.913Z' - totalTime: 193 + startTime: '2019-03-27T23:29:39.019Z' + endTime: '2019-03-27T23:29:39.200Z' + totalTime: 181 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/http.yml - id: 0025420555_ac165393f9_805450 + id: 2029380855_5126925584_760839 ignored: false subscriptions: - - id: 0025420555_36baa23c89_852929 + id: 2029380855_36baa23c89_525542 name: 'Subscription #0' type: http tests: @@ -1307,7 +1307,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: headers: content-length: '5' @@ -1318,7 +1318,7 @@ requisitions: body: virgs publishers: - - id: 0025420555_3f90d159b3_130752 + id: 2029380855_3f90d159b3_400132 name: 'Publisher #0' valid: true type: http @@ -1335,7 +1335,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:42.904Z' + publishTime: '2019-03-27T23:29:39.184Z' messageReceived: statusCode: 444 body: blah @@ -1346,7 +1346,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '4' etag: 'W/"4-W/H9kn37hnlJai5s8Ay+UMHIcUU"' - date: 'Wed, 27 Mar 2019 03:25:42 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -1366,20 +1366,20 @@ requisitions: headers: Content-Length: 5 time: - startTime: '2019-03-27T03:25:42.721Z' - endTime: '2019-03-27T03:25:42.905Z' - totalTime: 184 + startTime: '2019-03-27T23:29:39.020Z' + endTime: '2019-03-27T23:29:39.185Z' + totalTime: 165 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/https.yml - id: 0025420556_c28f514982_850670 + id: 2029380856_343c8aedd4_133230 ignored: false subscriptions: - - id: 0025420556_b985f54687_893659 + id: 2029380856_b985f54687_672956 name: 'Subscription #0' type: https tests: @@ -1392,7 +1392,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: headers: content-type: application/json @@ -1404,7 +1404,7 @@ requisitions: body: '{"https":"works!"}' publishers: - - id: 0025420556_e61bd763bd_612961 + id: 2029380856_e61bd763bd_53068 name: 'publisher description' valid: true type: HTTPS @@ -1425,7 +1425,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:42.912Z' + publishTime: '2019-03-27T23:29:39.199Z' messageReceived: statusCode: 200 body: https @@ -1436,7 +1436,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '5' etag: 'W/"5-w0N9vHwSVdOiHURNhuvy6SNMIr0"' - date: 'Wed, 27 Mar 2019 03:25:42 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -1457,55 +1457,55 @@ requisitions: content-type: application/json Content-Length: 18 time: - startTime: '2019-03-27T03:25:42.722Z' - endTime: '2019-03-27T03:25:42.912Z' - totalTime: 190 + startTime: '2019-03-27T23:29:39.022Z' + endTime: '2019-03-27T23:29:39.200Z' + totalTime: 178 timeout: 3000 requisitions: [] - valid: true tests: [] name: examples/ignore.yml - id: 0025420557_fa56409929_680083 + id: 2029380857_55b13bb02d_445390 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.724Z' - endTime: '2019-03-27T03:25:42.819Z' - totalTime: 95 + startTime: '2019-03-27T23:29:39.023Z' + endTime: '2019-03-27T23:29:39.106Z' + totalTime: 83 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420558_2f8d7b0ce1_405654 + id: 2029380858_e8c0df567e_645690 ignored: false subscriptions: [] publishers: - - id: 0025420558_4d6240ee37_627060 + id: 2029380858_4d6240ee37_377980 name: 'Publisher #0' ignored: true valid: true type: file tests: [] time: - startTime: '2019-03-27T03:25:42.758Z' - endTime: '2019-03-27T03:25:42.805Z' - totalTime: 47 + startTime: '2019-03-27T23:29:39.049Z' + endTime: '2019-03-27T23:29:39.093Z' + totalTime: 44 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #1' - id: 0025420560_5ce8f910f0_248352 + id: 2029380860_833821bbdb_939235 ignored: false subscriptions: - - id: 0025420560_41bbcab029_744345 + id: 2029380860_41bbcab029_714994 name: 'Subscription #0' ignored: true type: file @@ -1513,36 +1513,36 @@ requisitions: valid: true publishers: [] time: - startTime: '2019-03-27T03:25:42.813Z' - endTime: '2019-03-27T03:25:42.816Z' - totalTime: 3 + startTime: '2019-03-27T23:29:39.100Z' + endTime: '2019-03-27T23:29:39.102Z' + totalTime: 2 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #2' - id: 0025420561_4cc03ed6cb_442381 + id: 2029380861_5b2b72c312_697257 ignored: true subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.817Z' - endTime: '2019-03-27T03:25:42.817Z' + startTime: '2019-03-27T23:29:39.104Z' + endTime: '2019-03-27T23:29:39.104Z' totalTime: 0 requisitions: [] - valid: true tests: [] name: examples/import.yml - id: 0025420564_0cece633dd_681274 + id: 2029380863_62db714b49_947590 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.724Z' - endTime: '2019-03-27T03:25:42.817Z' - totalTime: 93 + startTime: '2019-03-27T23:29:39.024Z' + endTime: '2019-03-27T23:29:39.105Z' + totalTime: 81 timeout: 5000 requisitions: - @@ -1553,14 +1553,14 @@ requisitions: valid: true description: 'Expecting ''requisition.imported'' to be true' name: 'static import' - id: 0025420565_dd7995a876_59701 + id: 2029380864_f030a7c4d4_13133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.758Z' - endTime: '2019-03-27T03:25:42.805Z' - totalTime: 47 + startTime: '2019-03-27T23:29:39.049Z' + endTime: '2019-03-27T23:29:39.092Z' + totalTime: 43 timeout: 5000 requisitions: [] - @@ -1571,54 +1571,54 @@ requisitions: valid: true description: 'Expecting ''requisition.dynamicallyImported'' to be true' name: 'dynamic import' - id: 0025420567_75d2f1f8f9_949437 + id: 2029380866_e9d028aa8c_801214 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.810Z' - endTime: '2019-03-27T03:25:42.815Z' - totalTime: 5 + startTime: '2019-03-27T23:29:39.098Z' + endTime: '2019-03-27T23:29:39.101Z' + totalTime: 3 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/no-tests.yml - id: 0025420568_85163ddbe6_953519 + id: 2029380867_1afee006a6_971919 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.725Z' - endTime: '2019-03-27T03:25:42.949Z' - totalTime: 224 + startTime: '2019-03-27T23:29:39.024Z' + endTime: '2019-03-27T23:29:39.235Z' + totalTime: 211 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420569_572a7aa7a3_824453 + id: 2029380868_fbad77f905_832398 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.848Z' - endTime: '2019-03-27T03:25:42.949Z' - totalTime: 101 + startTime: '2019-03-27T23:29:39.135Z' + endTime: '2019-03-27T23:29:39.235Z' + totalTime: 100 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/parallel-pub.yml - id: 0025420570_31e3cad0c3_816608 + id: 2029380869_009e83a792_303756 ignored: false subscriptions: [] publishers: - - id: 0025420570_2955c0f42c_327285 + id: 2029380869_2955c0f42c_286418 name: 'Publisher #0' valid: true type: tcp @@ -1635,28 +1635,28 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:43.235Z' + publishTime: '2019-03-27T23:29:39.529Z' messageReceived: payload: anyValue stream: address: 127.0.0.1 family: IPv4 - port: 53853 + port: 59122 time: - startTime: '2019-03-27T03:25:42.725Z' - endTime: '2019-03-27T03:25:43.235Z' - totalTime: 510 + startTime: '2019-03-27T23:29:39.024Z' + endTime: '2019-03-27T23:29:39.529Z' + totalTime: 505 timeout: 3000 requisitions: [] - valid: true tests: [] name: examples/parallel-sub.yml - id: 0025420572_25c06b5a2e_197825 + id: 2029380871_8aaf9c6622_951353 ignored: false subscriptions: - - id: 0025420572_b419ff22d8_393605 + id: 2029380871_b419ff22d8_485733 name: 'Subscription #0' type: tcp tests: @@ -1669,7 +1669,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: payload: anything stream: @@ -1678,23 +1678,23 @@ requisitions: port: 23081 publishers: [] time: - startTime: '2019-03-27T03:25:42.726Z' - endTime: '2019-03-27T03:25:43.234Z' - totalTime: 508 + startTime: '2019-03-27T23:29:39.025Z' + endTime: '2019-03-27T23:29:39.528Z' + totalTime: 503 timeout: 3000 requisitions: [] - valid: true tests: [] name: examples/parallel.yml - id: 0025420573_9a41a6b480_138720 + id: 2029380872_547efbb4f2_945998 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.729Z' - endTime: '2019-03-27T03:25:43.604Z' - totalTime: 875 + startTime: '2019-03-27T23:29:39.028Z' + endTime: '2019-03-27T23:29:39.892Z' + totalTime: 864 timeout: 5000 requisitions: - @@ -1707,44 +1707,44 @@ requisitions: - name: 'Assertion #1' valid: true - description: 'Expected ''elapsedTime'' not to be less than or equal to ''400''. Received ''335''' + description: 'Expected ''elapsedTime'' not to be less than or equal to ''400''. Received ''330''' name: 'Requisition #0' - id: 0025420575_96e132953e_923760 + id: 2029380873_a3dfb74307_801976 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.759Z' - endTime: '2019-03-27T03:25:43.094Z' - totalTime: 335 + startTime: '2019-03-27T23:29:39.050Z' + endTime: '2019-03-27T23:29:39.381Z' + totalTime: 331 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420576_443bf9b9e1_610527 + id: 2029380875_78bd5a8b4e_980832 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.790Z' - endTime: '2019-03-27T03:25:42.990Z' - totalTime: 200 + startTime: '2019-03-27T23:29:39.079Z' + endTime: '2019-03-27T23:29:39.281Z' + totalTime: 202 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #1' - id: 0025420577_1d40dbad3a_606388 + id: 2029380876_e778f93f24_198428 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.790Z' - endTime: '2019-03-27T03:25:43.093Z' - totalTime: 303 + startTime: '2019-03-27T23:29:39.079Z' + endTime: '2019-03-27T23:29:39.380Z' + totalTime: 301 timeout: 5000 requisitions: [] - @@ -1753,33 +1753,33 @@ requisitions: - name: 'started after the other' valid: true - description: 'Expected ''requisition.requisitions[1].startTime.getTime() - requisition.requisitions[0].startTime.getTime()'' to be greater than or equal to ''200''. Received ''205''' + description: 'Expected ''requisition.requisitions[1].startTime.getTime() - requisition.requisitions[0].startTime.getTime()'' to be greater than or equal to ''200''. Received ''206''' - name: 'Assertion #1' valid: true description: 'Expected ''elapsedTime'' not to be less than or equal to ''600''. Received ''509''' name: 'Requisition #1' - id: 0025420579_2475384852_854612 + id: 2029380877_89f04b5355_7045 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:43.095Z' - endTime: '2019-03-27T03:25:43.604Z' - totalTime: 509 + startTime: '2019-03-27T23:29:39.382Z' + endTime: '2019-03-27T23:29:39.892Z' + totalTime: 510 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420580_c74a061415_642958 + id: 2029380878_9624ac97cb_634448 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:43.095Z' - endTime: '2019-03-27T03:25:43.299Z' + startTime: '2019-03-27T23:29:39.382Z' + endTime: '2019-03-27T23:29:39.586Z' totalTime: 204 timeout: 5000 requisitions: [] @@ -1787,13 +1787,13 @@ requisitions: valid: true tests: [] name: 'Requisition #1' - id: 0025420582_6c36d9a9c6_642926 + id: 2029380879_8597b951fb_628287 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:43.300Z' - endTime: '2019-03-27T03:25:43.603Z' + startTime: '2019-03-27T23:29:39.588Z' + endTime: '2019-03-27T23:29:39.891Z' totalTime: 303 timeout: 5000 requisitions: [] @@ -1801,11 +1801,11 @@ requisitions: valid: true tests: [] name: examples/readme-enqueuer-http-selftest.yml - id: 0025420583_97ef513fca_920740 + id: 2029380881_6f3e51d5d8_195477 ignored: false subscriptions: - - id: 0025420583_a39e6dfed9_884097 + id: 2029380881_a39e6dfed9_959751 name: 'Subscription #0' type: http tests: @@ -1818,7 +1818,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: headers: content-length: '19' @@ -1829,7 +1829,7 @@ requisitions: body: 'does enqueuer rock?' publishers: - - id: 0025420583_5469489be6_617721 + id: 2029380881_5469489be6_593087 name: 'Publisher #0' valid: true type: http @@ -1850,7 +1850,7 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:42.906Z' + publishTime: '2019-03-27T23:29:39.186Z' messageReceived: statusCode: 200 body: 'yes, it does' @@ -1861,7 +1861,7 @@ requisitions: content-type: 'text/html; charset=utf-8' content-length: '12' etag: 'W/"c-L77LCgbriBu9ecOhh8oKMV0oK0I"' - date: 'Wed, 27 Mar 2019 03:25:42 GMT' + date: 'Wed, 27 Mar 2019 23:29:39 GMT' connection: close request: uri: @@ -1881,21 +1881,21 @@ requisitions: headers: Content-Length: 19 time: - startTime: '2019-03-27T03:25:42.730Z' - endTime: '2019-03-27T03:25:42.906Z' - totalTime: 176 + startTime: '2019-03-27T23:29:39.029Z' + endTime: '2019-03-27T23:29:39.186Z' + totalTime: 157 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/readme-enqueuer-repo-hit.yml - id: 0025420585_33ba44cb81_441332 + id: 2029380882_e07de8e5e0_836949 ignored: false subscriptions: [] publishers: - - id: 0025420585_e52e80891e_488871 + id: 2029380882_e52e80891e_738297 name: 'Publisher #0' valid: true type: http @@ -1912,32 +1912,32 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:44.232Z' + publishTime: '2019-03-27T23:29:40.620Z' messageReceived: statusCode: 200 - body: "\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n\n\n\n \n \n \n \n \n \n \n\n \n \n GitHub - enqueuer-land/enqueuer: https://enqueuer-land.github.io/enqueuer/\n \n \n \n \n\n \n \n\n \n \n \n \n \n\n\n \n\n \n\n \n \n \n\n \n\n\n\n\n \n\n\n\n\n\n\n \n\n \n \n\n \n \n\n \n\n \n\n \n \n\n \n\n \n\n \n\n\n \n\n\n \n\n \n\n \n \n\n\n\n\n\n\n \n\n \n\n \n \n\n
\n Skip to content\n
\n\n \n \n \n\n\n \n
\n
\n
\n \n \n \n
\n\n
\n
\n \n
\n\n \n\n \n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n\n\n\n
\n
\n
\n \n \n\n\n\n \n\n\n\n\n
\n
\n\n \n\n

\n \n enqueuer-land/enqueuer\n\n

\n\n
\n \n\n\n\n
\n
\n
\n\n \n \n
\n
\n
\n
\n \n

Join GitHub today

\n

GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.

\n Sign up\n
\n
\n
\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n\n\n\n
\n \n
\n \n Branch:\n master\n \n\n \n \n \n \n \n
\n\n\n \n\n
\n \n
\n\n
\n\n Find File\n
\n\n\n
\n \n Clone or download\n \n
\n
\n\n
\n
\n\n

\n Clone with HTTPS\n \n \n \n

\n

\n Use Git or checkout with SVN using the web URL.\n

\n\n
\n \n
\n \n
\n
\n\n
\n\n
\n \nDownload ZIP\n\n
\n
\n\n \n\n
\n

Launching GitHub Desktop...

\n

If nothing happens, download GitHub Desktop and try again.

\n

\n
\n\n
\n

Launching GitHub Desktop...

\n

If nothing happens, download GitHub Desktop and try again.

\n

\n
\n\n
\n

Launching Xcode...

\n

If nothing happens, download Xcode and try again.

\n

\n
\n\n
\n

Launching Visual Studio...

\n

If nothing happens, download the GitHub extension for Visual Studio and try again.

\n

\n
\n\n
\n
\n
\n\n
\n\n\n \n\n\n
\n \"\"\n Fetching latest commit…\n
\n
\n Cannot retrieve the latest commit at this time.\n
\n
\n\n\n\n Permalink\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TypeNameLatest commit messageCommit time
Failed to load latest commit information.
\n \n \"\"\n \n .github/ISSUE_TEMPLATE\n \n \n \n \n \n
\n \n \"\"\n \n conf\n \n \n \n \n \n
\n \n \"\"\n \n docs\n \n \n \n \n \n
\n \n \"\"\n \n examples\n \n \n \n \n \n
\n \n \"\"\n \n https-cert\n \n \n \n \n \n
\n \n \"\"\n \n misc\n \n \n \n \n \n
\n \n \"\"\n \n output\n \n \n \n \n \n
\n \n \"\"\n \n src\n \n \n \n \n \n
\n \n \"\"\n \n temp\n \n \n \n \n \n
\n \n \"\"\n \n .codeclimate.yml\n \n \n \n \n \n
\n \n \"\"\n \n .gitignore\n \n \n \n \n \n
\n \n \"\"\n \n .npmignore\n \n \n \n \n \n
\n \n \"\"\n \n .travis.yml\n \n \n \n \n \n
\n \n \"\"\n \n CONTRIBUTING.md\n \n \n \n \n \n
\n \n \"\"\n \n License\n \n \n \n \n \n
\n \n \"\"\n \n README.md\n \n \n \n \n \n
\n \n \"\"\n \n package-lock.json\n \n \n \n \n \n
\n \n \"\"\n \n package.json\n \n \n \n \n \n
\n \n \"\"\n \n tsconfig.json\n \n \n \n \n \n
\n \n \"\"\n \n tslint.json\n \n \n \n \n \n
\n\n
\n\n\n\n
\n
\n

\n \n README.md\n

\n
\n
\n

\"npm\"\"Build\n\"Maintainability\" \"Greenkeeper\"Known\n\"License:

\n

\"enqueuerlogo\"

\n

Want to ensure that a user journey which involves several steps with different protocols is working properly?\nHave you ever struggled with testing multi protocol flows?\nDepending services have become a pain?\nDon't you worry anymore. Enqueuer is what you're looking for.

\n

What it is

\n

It's not just an integration testing tool. It is a platform that provides the following capabilities:

\n
    \n
  • Support for many protocols out of the box
  • \n
  • Chainable message flows
  • \n
  • Easily mock numerous services to alleviate the headaches of functional and integration tests
  • \n
  • Friendly for developers and non developers
  • \n
  • Built in assertion library to verify response data coming from/going to your services
  • \n
  • Easily extensible behavior through third party plugins, including your own custom ones
  • \n
  • CLI is easy to add to your team's existing CI pipelines
  • \n
  • Act and react on you system under test
  • \n
  • Place tests front and center
  • \n
\n

Welcome to the enqueuer world.

\n

install it

\n

First things first, let's get the enqueuer installed on your machine.

\n
$ npm install --global enqueuer\n
\n

Next up, it's time create a requisition file.\nSomething like:

\n
#enqueuer-repo-hit.yml\npublishers:\n-   type: http\n    url: https://github.com/enqueuer-land/enqueuer\n    method: GET\n    onMessageReceived:\n        assertions:\n        -   expect: statusCode\n            toBeEqualTo: 200\n
\n

Pretty simple, hum? Small and concise, how it should be!\nRun it:

\n
$ enqueuer enqueuer-repo-hit.yml\n
\n

What if I want to mock a http server and hit it at the same time, you may ask. Not a big deal for enqueuer lovers:

\n
#http-self-test.yml\npublishers:\n-   type: http\n    url: http://localhost:9085/readme-example\n    method: POST\n    payload: does enqueuer rock?\n    onMessageReceived:\n        script: statusCode *= 2\n        assertions:\n            -   expect: body\n                toBeEqualTo: `yes, it does`\n            -   expect: statusCode\n                toBeLessThan: 300\nsubscriptions:\n-   type: http\n    endpoint: /readme-example\n    port: 9085\n    method: POST\n    response:\n        status: 200\n        payload: yes, it does\n    onMessageReceived:\n        assertions:\n        -   expect: message.body\n            toContain: `enqueuer`\n
\n

And then, run this other one:

\n
$ nqr http-self-test.yml\n
\n

I told you it was simple.\nNow go nuts!\nIt's all yours. Have fun.\nCheck this out, you'll find countless examples.\nCertainly one is what you need.

\n

if you need more

\n
$ nqr -h\nUsage: nqr [options] <test-file> [other-test-files...]\n\nTake a look at the full documentation: http://enqueuer-land.github.io/enqueuer\n\nOptions:\n  -v, --version                             output the version number\n  -b, --verbosity <level>                   set verbosity (default: \"warn\")\n  -c, --config-file <path>                  set configurationFile\n  -e, --parsers-list [parser]               list available object parsers\n  -f, --formatters-description [formatter]  describe report formatters\n  -o, --stdout-requisition-output           add stdout as requisition output\n  -m, --max-report-level-print <level>      set max report level print\n  -p, --protocols-description [protocol]    describe protocols\n  -t, --tests-list                          list available tests assertions\n  -s, --store [store]                       add variables values to this session (default: [])\n  -l, --add-plugin [plugin]                 add plugin (default: [])\n  -a, --add-file <file>                     add file to be tested (default: [])\n  -A, --add-file-and-ignore-others <file>   add file to be tested and ignore others (default: [])\n  -h, --help                                output usage information\n\nExamples:\n  $ nqr --config-file config-file.yml --verbosity error --store key=value\n  $ enqueuer -c config-file.yml test-file.yml --add-file another-test-file.yml -b info\n  $ enqueuer test-file.yml --store someKey=true --store someOtherKey=false\n  $ nqr --protocols-description -s key=value\n  $ nqr -t expect\n  $ nqr -l my-enqueuer-plugin-name -p plugin-protocol\n  $ nqr -p http\n  $ nqr --formatters-description json\n
\n
\n

Components

\n

In order to accomplish more than just hitting enqueuer's repo or doing a quick self http hit, there are a few things that you'll probably need to know.\nDon't worry, it's not too much and, as mentioned earlier, there is a lot of examples here, just in case.\nThere are only three important component concepts: requisitions, publishers and subscriptions.\nThey work along with each other and are responsible for the full behavior of enqueuer.

\n

requisition

\n

Test scenario description. It tells what, when, and how test your applications and services.\nPicture it as if it was a collection of publishers, subscriptions and other requisitions.\nIt helps because this is exactly what it is.\nAs the others components, it has some attributes. All of them are optionals. And it supports multi-level test scenarios out of the box. Yeap, go as recursive as you want.\nEvery test file is a requisition.\nYou don't know some of these attributes values yet? Don't worry, just put a variable there and let enqueuer replace it with the value you set later.\nVariable replacements are available through the entire requisition.

\n
requisition attributes
\n

These are the requisition attributes:

\n

name
\nDescribes what the requisition is suppose to do.\nDefaults to requisition index.

\n
name: requisition action\n
\n

timeout
\nDefaults to 5000.\nSets in milliseconds how long the requisition waits to expire.\nSet to zero or less than zero to run it endlessly.

\n
timeout: 3000\n
\n

delay
\nDefaults to 0. Sets in milliseconds how long the test waits before starting. Check this to get the full idea.

\n
delay: 0\n
\n

iterations
\nDefaults to 1. Sets how many times this test will be executed. Check this and this to get the full idea.

\n
iterations: 3\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this requisitions should be skipped. Check this to see it working.

\n
ignore: true\n
\n

parallel
\nDefaults to false. Immediate children requisitions should be executed in parallel mode.\nTake a look at this to see it working.

\n
parallel: true\n
\n

import
\nAllows requisition to be dynamically defined, be it by loading an external file or creating dynamically by other requisitions. Want to reuse the same requisition multiple times? This is you you need.\nTake a look at this and this to behold this feature.

\n
import: path/to/another/requisition/file\n
\n

publishers
\nList of publishers

\n
publishers:\n- name: some publisher name\n  type: http\n- type: tcp\n
\n

subscriptions
\nList of subscriptions

\n
subscriptions:\n- name: some subscription name\n  type: udp\n- name: another subscription name\n  type: file\n
\n

requisitions
\nA list of child scenarios. List of requisitions.\nCheck this example, it may help.

\n
requisitions:\n- name: some requisition name\n  iterations: 2\n- name: another requisition name\n  delay: 200\n
\n
events
\n

Available events are described here. A requisition object is available to access and change its attributes.

\n
name: my name\nonInit:\n  script: requisition.delay = 3000;\n  assertions:\n  - expectToBeDefined: requisition.name\nonFinish:  \n  assertions:\n  - expectToBeDefined: requisition.name\n
\n

publisher

\n

A publisher action is triggered by enqueuer itself. It acts whereas a subscription reacts.\nIt publishes something, it writes, it enqueues, hits and endpoint... These kinds of actions.

\n
publisher attributes
\n

Every publisher has its own properties, depending on its protocol and implementation.\nThe built-in http publisher implementation, for instance, demands a url, a method, and a payload, if the method is not a GET.\nOn the other hand, the built-in tcp publisher implementation requires a serverAddress and a port.\nThese are the publisher attributes:

\n

name
\nDefaults to publisher index.\nDescribes what the publisher is supposed to do.

\n
name: publisher action\n
\n

type
\nMandatory. Key tag to identify which publisher will be instantiated

\n
type: http\n
\n

payload
\nSince a publisher usually publishes something, it's very likely you have to set a value here.\nThe message itself that will be send through this protocol. Be it a string, a number, a boolean value or even whole objects.

\n
payload: value\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this publisher should be skipped. Check this to see it working.

\n
ignore: true\n
\n
events
\n

Available events are described here. A publisher object is available to access and change its attributes.\nDepending on the protocol and its implementation, such as http and tcp, there may exist a onMessageReceived event and a special object given message.\nOn the other hand, an asynchronous protocol, like: udp and amqp, usually does not provide it.

\n
onInit:\n  script: publisher.ignore = false\n  assertions:\n  - expectToBeDefined: publisher.type\nonMessageReceived: #Provided in synchronous protocols  \n  assertions:\n  - expectToBeDefined: message\nonFinish:  \n  assertions:\n  - expectToBeDefined: publisher.type\n
\n

subscription

\n

A subscription is an \"under demand\" event. It reacts whereas a publisher acts.\nIt consumes something, it reads, it dequeues, gets hit... These kinds of actions.\nThis means that it is not triggered by enqueuer itself.\nRather than that, enqueuer waits on an external event to be triggered and then it asserts against the message that was passed to the subscription.

\n
subscription attributes
\n

Every subscription has its own properties, depending on its protocol and implementation.\nThe built-in http subscription implementation, for instance, demands an endpoint, a method, and a port, if the method is not a GET.\nOn the other hand, the built-in tcp subscription implementation requires only a port.

\n

These are the subscription attributes:

\n

name
\nDefaults to subscription index.\nDescribes what the subscription is supposed to do.

\n
name: subscription action\n
\n

type
\nMandatory. Key tag to identify which subscription will be instantiated

\n
type: http\n
\n

avoid
\nIdentifies whether or not this subscription should not receive any message. Defaults to false.\nIf set and a message is received a failing test will be generated.\nTake a look at this to see it working.\nOn the other hand, when it's false and no message is received in a given timeout. The subscription is valid.

\n
avoid: false\n
\n

timeout
\nSets in milliseconds how long the subscription waits to expire. Defaults to 3000.\nSet to zero or less than zero to run it endlessly.

\n
timeout: 3000\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this subscription should be skipped. Check this to see it working.

\n
ignore: true    \n
\n
events
\n

Available events are described here. A subscription object is available to access and change its attributes.

\n
onInit:\n  script: subscription.avoid = false;\n  assertions:\n  - expectToBeDefined: subscription.type\nonMessageReceived:  \n  assertions:\n  - expectToBeDefined: message\nonFinish:  \n  assertions:\n  - expectToBeDefined: subscription.type\n
\n
\n

Event

\n

Events are hook methods executed by enqueuer when an action occurs on publishers, subscriptions or requisitions.\nThis is where you'll write your tests. In its assertions field.\nDepending on the event's owner, there may be a variable called publisher, subscription or requisition.\nYou're free to explore them however you want, even doing things like this:

\n
publisher.parent.subscriptions[0].timeout = 1000;\n
\n

hooks

\n

There are three hook events available:

\n

onInit
\nAvailable in requisitions, publishers and subscriptions. It gets executed as soon as the test is initialized.

\n

onFinish
\nAvailable in requisitions, publishers and subscriptions. It gets executed when the test is about to finish.\nAs available parameter, an elapsedTime variable is given, counting every milliseconds since the instantiation of this component.

\n

onMessageReceived
\nAvailable in every subscription and in publishers that provide synchronous properties.\nIt gets executed when the subscription or publisher receives a message.\nA message object is available having all of attributes returned from the received message.\nDepending on the protocol implementation, there'll be additional objects to this hook.\nFor instance, in the built-in http publisher implementation, there's a statusCode, headers and a body among others, and the subscription implementation has body, query, params and headers , among other variables.\nelapsedTime is also available here, counting every milliseconds since the instantiation of this component.

\n

fields

\n

Every hook object has 3 properties:

\n

script
\nJavascript code snippet executed when the event is triggered.\nYeah, I mean it. See it it by yourself.\nBut be careful, with great power comes great responsibility.

\n

store
\nData to be persisted across requisitions.

\n

assertions
\nArray of assertions.\nRun $ nqr -t to see available ones.\nConsider looking at this test example.\nOf course, just like almost everything else in enqueuer world, you can extend this available list using some plugin.\nYou can check them out or even write your own.

\n
onInit:\n  script: variableIdentifier = 'string value'\n\n  assertions:\n  - expect: variableIdentifier\n    toBeEqualTo: `string value`\n\nonMessageReceived:\n  script: |-\n    message += 3;\n    console.log(`Message received plus 3 is: ${message}`);\n\n  store:\n    key: message\n\n  assertions:\n  - name: anyValue #optional\n    expect: message\n    toBeEqualTo: store.key\n  - expect: message + 3\n    toBeGreaterThan: 3\n
\n

event example

\n

Check this test file to see it in practice.

\n
\n

Requisition Flow

\n

Now that you know what are requisitions, publishers, subscriptions and events. How about seeing how they interact with each other in a fancier way?

\n

\"enqueuerInstanceFlow\"

\n

\"NPM\"

\n
\n

Configuration File

\n

To save yourself some time, a configuration file may be used.\nConfiguration files tell enqueuer which tests will be executed, log-level, and which output test report files should be generated.\nThis file tells how enqueuer should be executed.\nTo run enqueuer with the configuration:

\n
$ nqr -c path/to/configuration/file.yml\n
\n

or

\n
$ nqr --config-file path/to/configuration/file.yml\n
\n

configuration file attributes

\n

These are the configuration file attributes:

\n

files
\nRequisition file names or glob. Enqueuer runs every file that matches an element value.

\n
files:\n- 1.yml\n- 2.yml\n- *.json\n
\n

parallel
\nDefaults to false. Requisition files should be executed in parallel mode. The requisition file itself is still sequential, but the files are executes in parallel.

\n
parallel: true\n
\n

log-level
\nDefaults to warning. Defines how information are logged in the console. Accepted values are: trace; debug; info; warning (default); error; and fatal.

\n
log-level: trace\n
\n

max-report-level-print
\nDefaults to 1. The deepest level of report to be printed to the console.

\n
max-report-level-print: 2\n
\n

plugins
\nList of in plugins used by the test scenarios. You can check them out or write your own.

\n
plugins:\n- enqueuer-plugin-amqp \n- enqueuer-plugin-ws \n- enqueuer-plugin-mqtt\n- enqueuer-plugin-html-report\n
\n

outputs
\nOnce enqueuer runs every execution, it compiles a summary and sends it to every publisher listed in output.\nAn important thing to note is that every available report publisher is available here.\nYes, it means that you are able to send this report through http, tcp, etc. or through a plugin one or a custom one.\nYou can run $ nqr -p to check available report publishers installed.\nAnother important thing to note is the format value. By default a json summary is generated, but you can change it to whatever format you would like, such as: Xunit, html\nYou can run $ nqr -f to check available installed formats or even write your own

\n
outputs:\n- type: file\n  format: json (default)\n  filename: output/examples.json\n- type: file\n  format: yml\n  filename: output/examples.yml\n- type: standard-output (default)\n  format: console\n
\n

store
\nValues defined here use the 'key: value' pattern and are available to every test scenario throughout the entire execution

\n
store:\n  variableKey: \"my value\" # Defines 'variableKey' key and its value 'my value'. \n  \n  'separated key': 6\n  \n  object: # You can even define whole objects here:\n    first: first value\n    second:\n      nested: thing\n
\n

configuration file example

\n

Here's a complete example of a configuration file.

\n
\n

Variables

\n

Providing power and flexibility, enqueuer allows you to use variables placeholder replacement.\nThat's why there is a store field and you'll see a lot of << and {{ being used in the examples files.\nIt works as simple as this:

\n
name: my name is <<variableKey>>\n
\n

Every time enqueuer sees these kind of notations, it searches in its store for a key/value pair like:

\n
variableKey: `enqueuer`\n
\n

Then, when enqueuer parses the original map, it gets translated to this:

\n
name: my name is enqueuer\n
\n

By default, every ENV_VAR set is loaded automatically to the store. Check this example.

\n

set a variable

\n

There are a few ways to set a value in the store.

\n
configuration file
\n

Configuration file store object. Set it as you wish, as you can see here

\n
command line
\n

A command line argument using the key=value format. This way:

\n
$ nqr --store key=value -s anotherVariable=true\n
\n
event
\n

Dynamically set it through any event.\nBe it in its script field or straight through its store field.\nBoth ways work:

\n
onInit:\n    script: store.key = 123;\n    store:\n        anotherKey: `another Value` \n
\n

use a variable

\n

There are two ways two use a variable:

\n
non js code snippet
\n

The easiest one is to type <<variableKey>> or {{variableKey}} where you want it to be replaced in a test file, as you can see here

\n
js code snippet
\n

Using the store object. It's attributes are the keys and their values are their respective values.\nTherefore, you're free to use store.variableKey, console.log(store.variableKey); or console.log(2 * store['separated key']); and get them.\nLike this one.

\n

variables example

\n

Check out this test example test to see it working.

\n
\n

Content File Injection

\n

You are able to inject file content into a requisition/publisher/subscription field.

\n
file: <<file://path/to/file.txt>>\n
\n

Other than that, enqueuer can read it and parse its content as an object using this familiar syntax: <<tag://path/to/file?query=value&other=true>>.

\n
requisition:\n    json: <<json://path/to/file.json>>\n    yml: <<yml://path/to/file.yml>>\n    csv: <<csv://path/to/file.csv?header=true&delimiter=;>>\n    file: <<file://path/to/file.txt>>\n
\n

Once the object is parsed, your free to use it as a regular object in any event

\n
onInit:\n    script: console.log(requisition.yml.deep.field);\nonFinish:\n    assertions:\n    -   expect: json.key\n        toBeEqualTo: csv[0].key\n
\n

It get's event better.\nDue its fantastic plugin architecture design, you can extend its default modules and use any of these plugins or event write your own to parse however you want.\nThe built-in modules for object parsers are: json, yml, csv and file.\nRun $ nqr -e to see available ones.

\n

content file injection example

\n

Check out this test example test to get a full picture of it.

\n
\n

Plugins

\n

You're probably aware by now but it doesn't hurt do emphasize it: enqueuer provides an amazingly powerful plugin extensible architecture.\nIt has several plugins available, but if none of them pleases you, you're free to create your own.\nAlbeit you don't have to share the one you created, we encourage you to do so. Then go ahead and publish yours to npm and add it to our plugins list.

\n

plugin types

\n

So far, you're able to extend enqueuer default behavior in four ways. Using a protocol plugin, an object parser plugin, an asserter plugin and using a report formatter plugin.

\n
protocol
\n

A protocol plugin enables you to use a different publisher/subscription types.\nRun $ nqr -p [protocol-name] to get the full available list:

\n
publishers: \n-   name:                  custom\n-   name:                  file\n-   name:                  http\n    messageReceivedParams: statusCode, statusMessage, body\n-   name:                  stdout\n-   name:                  tcp\n-   ...\nsubscriptions: \n-   name:                  custom\n-   name:                  file\n    messageReceivedParams: content, name, size, modified, created\n-   name:                  http\n    messageReceivedParams: headers, params, query, body\n-   name:                  stdin\n-   name:                  tcp\n    messageReceivedParams: payload, stream\n-   ...\n
\n

Each one listed above has a respective example in the examples folder.\nThis one, for instance, provides support for amqp protocol, so you can create this publisher and subscription:

\n
publishers:\n-   type: amqp\n    payload: enqueuermaniac\n    exchange: enqueuer.exchange\n    routingKey: enqueuer.integration.test.routing.key\nsubscriptions:\n-   type: amqp\n    exchange: enqueuer.exchange\n    routingKey: enqueuer.integration.test.routing.#\n    onMessageReceived:\n        assertions:\n        -   expect: payload\n            toBeEqualTo: `enqueuermaniac`\n
\n
object parser
\n

An object parser plugin enables you to read and parse files as you wish.\nThis test example demonstrates how to use it,\nRun $ nqr -e [object-parser-name] to check available ones:

\n
parsers: \n- yml, yaml\n- json\n- file\n- csv\n
\n

This one, for example, provides the ability to read xml files and inject their values like this:

\n
xmlContent: <<xml://path/to/xml/file.xml>>\n
\n
asserter
\n

An asserter plugin provides you a nicely way to use different assertions than these built-in ones.

\n
asserters: \n-   expect: \n        required:    true\n        type:        string, array\n        description: actual value\n    not: \n        required:    false\n        type:        null\n        description: negates\n    toContain: \n        required:    true\n        type:        string, any\n        description: element\n
\n

Looking at the asserter above, we can create assertions like these:

\n
assertions:\n-   expect: [`a`, 1, true]\n    not:\n    toContain: `b`\n-   expect: [`a`, 1, true]\n    toContain: 1\n
\n

Run $ nqr -t to get the full available list.\nConsider looking at this test example.

\n
report formatter
\n

A report formatter plugin gives you the ability to export enqueuer reports the way you want.\nRun $ nqr -f [formatter-name] to list available report formatters:

\n
formatters: \n- console, stdout\n- json\n- yml, yaml\n
\n

Consider looking at the example of configuration file to see it in use.\nThis one, for instance, generates xUnit like reports from enqueuer's output.

\n

plugin use

\n

In order to enqueuer get awareness that you want to you a plugin, you have to tell it, right?\nYou can tell enqueuer to use a plugin in three manners. Using it as a command line argument, through the configuration file or letting enqueuer finding it in it's home directory folder.

\n
command line
\n

Tell enqueuer to use your plugin through command line this way $ nqr -l <plugin-folder> -l <another-plugin-folder>.\nWhere plugin-folder and another-plugin-folder are the directories where the plugins are installed in.

\n
configuration file
\n

Tell enqueuer to use your plugin through configuration file this way:

\n
plugins: \n-   plugin-folder\n-   another-plugin-folder\n
\n

Where plugin-folder and another-plugin-folder are the directories where the plugins are installed in.

\n
implicitly
\n

When enqueuer runs, it looks for modules in .nqr folder in your home directory. Every enqueuer compatible module get implicitly loaded.\nIn order to be enqueuer compatible, a module has to have an entryPoint exported function in its main file and, in its package.json file, it has to have either 'enqueuer' or 'nqr' as keywords.

\n
\n

Open source

\n

We, by 'we' we mean enqueuer's maintainers not the human race; unfortunately, are very opened any kind of contribution in general.\nAs long as they make sense and add value to the product, you're free to go.\nWe mean it, do it. Even if it's a typo fix in this README file. Go ahead.\nIf you like it but don't want to waste time creating a pull request, no problem neither.\nCreate an issue, or, even easier, give it a github star. It's cheap and it doesn't hurt anyone.\nYou know what? Just head up to enqueuer's github repo and keep staring at its webpage.\nIt may help somehow.

\n

contributors

\n

Thank you. It sounds cliché, but this project wouldn't be the same without the massive contribution from everyone.

\n

code it

\n

In order to contribute with some code, you have to follow a few steps.\nFirst of all, get the code:

\n
$ git clone git@github.com:enqueuer-land/enqueuer.git\n$ cd enqueuer\n
\n

Get its dependencies installed:

\n
$ npm install\n
\n

Build it:

\n
$ npm run build\n
\n

Go for it. Make the changes you want.\nAfter everything is done:

\n
$ npm run all\n
\n

Commit it:

\n
$ npm run commit\n
\n

Push it:

\n
$ git push\n
\n

feedback

\n

We'd love to get your feedback!\nIf you have any comments, suggestions, etc. you can reach us here.

\n
\n
\n
\n\n\n\n
\n
\n
\n\n
\n
\n \n\n
\n\n \n
\n
\n \n\n \n \n\n \n
\n
\n \n
\n
\n\n\n\n
\n \n \n You can’t perform that action at this time.\n
\n\n\n \n \n \n \n \n \n \n
\n \n You signed in with another tab or window. Reload to refresh your session.\n You signed out in another tab or window. Reload to refresh your session.\n
\n \n\n
\n
\n
\n
\n\n
\n\n \n\n\n" + body: "\n\n\n\n\n\n\n\n \n \n \n \n \n \n \n \n \n\n\n\n \n \n \n \n \n \n \n\n \n \n GitHub - enqueuer-land/enqueuer: https://enqueuer-land.github.io/enqueuer/\n \n \n \n \n\n \n \n\n \n \n \n \n \n\n\n \n\n \n\n \n \n \n\n \n\n\n\n\n \n\n\n\n\n\n\n \n\n \n \n\n \n \n\n \n\n \n\n \n \n\n \n\n \n\n \n\n\n \n\n\n \n\n \n\n \n \n\n\n\n\n\n\n \n\n \n\n \n \n\n
\n Skip to content\n
\n\n \n \n \n\n\n \n
\n
\n
\n \n \n \n
\n\n
\n
\n \n
\n\n \n\n \n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n\n\n\n
\n
\n
\n \n \n\n\n\n \n\n\n\n\n
\n
\n\n \n\n

\n \n enqueuer-land/enqueuer\n\n

\n\n
\n \n\n\n\n
\n
\n
\n\n \n \n
\n
\n
\n
\n \n

Join GitHub today

\n

GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.

\n Sign up\n
\n
\n
\n\n\n \n\n \n\n\n\n \n\n \n\n\n\n\n\n\n
\n \n
\n \n Branch:\n master\n \n\n \n \n \n \n \n
\n\n\n \n\n
\n \n
\n\n
\n\n Find File\n
\n\n\n
\n \n Clone or download\n \n
\n
\n\n
\n
\n\n

\n Clone with HTTPS\n \n \n \n

\n

\n Use Git or checkout with SVN using the web URL.\n

\n\n
\n \n
\n \n
\n
\n\n
\n\n
\n \nDownload ZIP\n\n
\n
\n\n \n\n
\n

Launching GitHub Desktop...

\n

If nothing happens, download GitHub Desktop and try again.

\n

\n
\n\n
\n

Launching GitHub Desktop...

\n

If nothing happens, download GitHub Desktop and try again.

\n

\n
\n\n
\n

Launching Xcode...

\n

If nothing happens, download Xcode and try again.

\n

\n
\n\n
\n

Launching Visual Studio...

\n

If nothing happens, download the GitHub extension for Visual Studio and try again.

\n

\n
\n\n
\n
\n
\n\n
\n\n\n \n\n\n
\n \"\"\n Fetching latest commit…\n
\n
\n Cannot retrieve the latest commit at this time.\n
\n
\n\n\n\n Permalink\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TypeNameLatest commit messageCommit time
Failed to load latest commit information.
\n \n \"\"\n \n .github/ISSUE_TEMPLATE\n \n \n \n \n \n
\n \n \"\"\n \n conf\n \n \n \n \n \n
\n \n \"\"\n \n docs\n \n \n \n \n \n
\n \n \"\"\n \n examples\n \n \n fix(EqualAssertion): Ignore object keys order when asserting object e…\n \n \n Mar 27, 2019\n
\n \n \"\"\n \n https-cert\n \n \n \n \n \n
\n \n \"\"\n \n misc\n \n \n \n \n \n
\n \n \"\"\n \n output\n \n \n \n \n \n
\n \n \"\"\n \n src\n \n \n \n \n \n
\n \n \"\"\n \n temp\n \n \n \n \n \n
\n \n \"\"\n \n .codeclimate.yml\n \n \n \n \n \n
\n \n \"\"\n \n .gitignore\n \n \n \n \n \n
\n \n \"\"\n \n .npmignore\n \n \n \n \n \n
\n \n \"\"\n \n .travis.yml\n \n \n \n \n \n
\n \n \"\"\n \n CONTRIBUTING.md\n \n \n \n \n \n
\n \n \"\"\n \n License\n \n \n \n \n \n
\n \n \"\"\n \n README.md\n \n \n \n \n \n
\n \n \"\"\n \n package-lock.json\n \n \n \n \n \n
\n \n \"\"\n \n package.json\n \n \n \n \n \n
\n \n \"\"\n \n tsconfig.json\n \n \n \n \n \n
\n \n \"\"\n \n tslint.json\n \n \n \n \n \n
\n\n
\n\n\n\n
\n
\n

\n \n README.md\n

\n
\n
\n

\"npm\"\"Build\n\"Maintainability\" \"Greenkeeper\"Known\n\"License:

\n

\"enqueuerlogo\"

\n

Want to ensure that a user journey which involves several steps with different protocols is working properly?\nHave you ever struggled with testing multi protocol flows?\nDepending services have become a pain?\nDon't you worry anymore. Enqueuer is what you're looking for.

\n

What it is

\n

It's not just an integration testing tool. It is a platform that provides the following capabilities:

\n
    \n
  • Support for many protocols out of the box
  • \n
  • Chainable message flows
  • \n
  • Easily mock numerous services to alleviate the headaches of functional and integration tests
  • \n
  • Friendly for developers and non developers
  • \n
  • Built in assertion library to verify response data coming from/going to your services
  • \n
  • Easily extensible behavior through third party plugins, including your own custom ones
  • \n
  • CLI is easy to add to your team's existing CI pipelines
  • \n
  • Act and react on you system under test
  • \n
  • Place tests front and center
  • \n
\n

Welcome to the enqueuer world.

\n

install it

\n

First things first, let's get the enqueuer installed on your machine.

\n
$ npm install --global enqueuer\n
\n

Next up, it's time create a requisition file.\nSomething like:

\n
#enqueuer-repo-hit.yml\npublishers:\n-   type: http\n    url: https://github.com/enqueuer-land/enqueuer\n    method: GET\n    onMessageReceived:\n        assertions:\n        -   expect: statusCode\n            toBeEqualTo: 200\n
\n

Pretty simple, hum? Small and concise, how it should be!\nRun it:

\n
$ enqueuer enqueuer-repo-hit.yml\n
\n

What if I want to mock a http server and hit it at the same time, you may ask. Not a big deal for enqueuer lovers:

\n
#http-self-test.yml\npublishers:\n-   type: http\n    url: http://localhost:9085/readme-example\n    method: POST\n    payload: does enqueuer rock?\n    onMessageReceived:\n        script: statusCode *= 2\n        assertions:\n            -   expect: body\n                toBeEqualTo: `yes, it does`\n            -   expect: statusCode\n                toBeLessThan: 300\nsubscriptions:\n-   type: http\n    endpoint: /readme-example\n    port: 9085\n    method: POST\n    response:\n        status: 200\n        payload: yes, it does\n    onMessageReceived:\n        assertions:\n        -   expect: message.body\n            toContain: `enqueuer`\n
\n

And then, run this other one:

\n
$ nqr http-self-test.yml\n
\n

I told you it was simple.\nNow go nuts!\nIt's all yours. Have fun.\nCheck this out, you'll find countless examples.\nCertainly one is what you need.

\n

if you need more

\n
$ nqr -h\nUsage: nqr [options] <test-file> [other-test-files...]\n\nTake a look at the full documentation: http://enqueuer-land.github.io/enqueuer\n\nOptions:\n  -v, --version                             output the version number\n  -b, --verbosity <level>                   set verbosity (default: \"warn\")\n  -c, --config-file <path>                  set configurationFile\n  -e, --parsers-list [parser]               list available object parsers\n  -f, --formatters-description [formatter]  describe report formatters\n  -o, --stdout-requisition-output           add stdout as requisition output\n  -m, --max-report-level-print <level>      set max report level print\n  -p, --protocols-description [protocol]    describe protocols\n  -t, --tests-list                          list available tests assertions\n  -s, --store [store]                       add variables values to this session (default: [])\n  -l, --add-plugin [plugin]                 add plugin (default: [])\n  -a, --add-file <file>                     add file to be tested (default: [])\n  -A, --add-file-and-ignore-others <file>   add file to be tested and ignore others (default: [])\n  -h, --help                                output usage information\n\nExamples:\n  $ nqr --config-file config-file.yml --verbosity error --store key=value\n  $ enqueuer -c config-file.yml test-file.yml --add-file another-test-file.yml -b info\n  $ enqueuer test-file.yml --store someKey=true --store someOtherKey=false\n  $ nqr --protocols-description -s key=value\n  $ nqr -t expect\n  $ nqr -l my-enqueuer-plugin-name -p plugin-protocol\n  $ nqr -p http\n  $ nqr --formatters-description json\n
\n
\n

Components

\n

In order to accomplish more than just hitting enqueuer's repo or doing a quick self http hit, there are a few things that you'll probably need to know.\nDon't worry, it's not too much and, as mentioned earlier, there is a lot of examples here, just in case.\nThere are only three important component concepts: requisitions, publishers and subscriptions.\nThey work along with each other and are responsible for the full behavior of enqueuer.

\n

requisition

\n

Test scenario description. It tells what, when, and how test your applications and services.\nPicture it as if it was a collection of publishers, subscriptions and other requisitions.\nIt helps because this is exactly what it is.\nAs the others components, it has some attributes. All of them are optionals. And it supports multi-level test scenarios out of the box. Yeap, go as recursive as you want.\nEvery test file is a requisition.\nYou don't know some of these attributes values yet? Don't worry, just put a variable there and let enqueuer replace it with the value you set later.\nVariable replacements are available through the entire requisition.

\n
requisition attributes
\n

These are the requisition attributes:

\n

name
\nDescribes what the requisition is suppose to do.\nDefaults to requisition index.

\n
name: requisition action\n
\n

timeout
\nDefaults to 5000.\nSets in milliseconds how long the requisition waits to expire.\nSet to zero or less than zero to run it endlessly.

\n
timeout: 3000\n
\n

delay
\nDefaults to 0. Sets in milliseconds how long the test waits before starting. Check this to get the full idea.

\n
delay: 0\n
\n

iterations
\nDefaults to 1. Sets how many times this test will be executed. Check this and this to get the full idea.

\n
iterations: 3\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this requisitions should be skipped. Check this to see it working.

\n
ignore: true\n
\n

parallel
\nDefaults to false. Immediate children requisitions should be executed in parallel mode.\nTake a look at this to see it working.

\n
parallel: true\n
\n

import
\nAllows requisition to be dynamically defined, be it by loading an external file or creating dynamically by other requisitions. Want to reuse the same requisition multiple times? This is you you need.\nTake a look at this and this to behold this feature.

\n
import: path/to/another/requisition/file\n
\n

publishers
\nList of publishers

\n
publishers:\n- name: some publisher name\n  type: http\n- type: tcp\n
\n

subscriptions
\nList of subscriptions

\n
subscriptions:\n- name: some subscription name\n  type: udp\n- name: another subscription name\n  type: file\n
\n

requisitions
\nA list of child scenarios. List of requisitions.\nCheck this example, it may help.

\n
requisitions:\n- name: some requisition name\n  iterations: 2\n- name: another requisition name\n  delay: 200\n
\n
events
\n

Available events are described here. A requisition object is available to access and change its attributes.

\n
name: my name\nonInit:\n  script: requisition.delay = 3000;\n  assertions:\n  - expectToBeDefined: requisition.name\nonFinish:  \n  assertions:\n  - expectToBeDefined: requisition.name\n
\n

publisher

\n

A publisher action is triggered by enqueuer itself. It acts whereas a subscription reacts.\nIt publishes something, it writes, it enqueues, hits and endpoint... These kinds of actions.

\n
publisher attributes
\n

Every publisher has its own properties, depending on its protocol and implementation.\nThe built-in http publisher implementation, for instance, demands a url, a method, and a payload, if the method is not a GET.\nOn the other hand, the built-in tcp publisher implementation requires a serverAddress and a port.\nThese are the publisher attributes:

\n

name
\nDefaults to publisher index.\nDescribes what the publisher is supposed to do.

\n
name: publisher action\n
\n

type
\nMandatory. Key tag to identify which publisher will be instantiated

\n
type: http\n
\n

payload
\nSince a publisher usually publishes something, it's very likely you have to set a value here.\nThe message itself that will be send through this protocol. Be it a string, a number, a boolean value or even whole objects.

\n
payload: value\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this publisher should be skipped. Check this to see it working.

\n
ignore: true\n
\n
events
\n

Available events are described here. A publisher object is available to access and change its attributes.\nDepending on the protocol and its implementation, such as http and tcp, there may exist a onMessageReceived event and a special object given message.\nOn the other hand, an asynchronous protocol, like: udp and amqp, usually does not provide it.

\n
onInit:\n  script: publisher.ignore = false\n  assertions:\n  - expectToBeDefined: publisher.type\nonMessageReceived: #Provided in synchronous protocols  \n  assertions:\n  - expectToBeDefined: message\nonFinish:  \n  assertions:\n  - expectToBeDefined: publisher.type\n
\n

subscription

\n

A subscription is an \"under demand\" event. It reacts whereas a publisher acts.\nIt consumes something, it reads, it dequeues, gets hit... These kinds of actions.\nThis means that it is not triggered by enqueuer itself.\nRather than that, enqueuer waits on an external event to be triggered and then it asserts against the message that was passed to the subscription.

\n
subscription attributes
\n

Every subscription has its own properties, depending on its protocol and implementation.\nThe built-in http subscription implementation, for instance, demands an endpoint, a method, and a port, if the method is not a GET.\nOn the other hand, the built-in tcp subscription implementation requires only a port.

\n

These are the subscription attributes:

\n

name
\nDefaults to subscription index.\nDescribes what the subscription is supposed to do.

\n
name: subscription action\n
\n

type
\nMandatory. Key tag to identify which subscription will be instantiated

\n
type: http\n
\n

avoid
\nIdentifies whether or not this subscription should not receive any message. Defaults to false.\nIf set and a message is received a failing test will be generated.\nTake a look at this to see it working.\nOn the other hand, when it's false and no message is received in a given timeout. The subscription is valid.

\n
avoid: false\n
\n

timeout
\nSets in milliseconds how long the subscription waits to expire. Defaults to 3000.\nSet to zero or less than zero to run it endlessly.

\n
timeout: 3000\n
\n

ignore
\nDefaults to false. Tells to enqueuer that this subscription should be skipped. Check this to see it working.

\n
ignore: true    \n
\n
events
\n

Available events are described here. A subscription object is available to access and change its attributes.

\n
onInit:\n  script: subscription.avoid = false;\n  assertions:\n  - expectToBeDefined: subscription.type\nonMessageReceived:  \n  assertions:\n  - expectToBeDefined: message\nonFinish:  \n  assertions:\n  - expectToBeDefined: subscription.type\n
\n
\n

Event

\n

Events are hook methods executed by enqueuer when an action occurs on publishers, subscriptions or requisitions.\nThis is where you'll write your tests. In its assertions field.\nDepending on the event's owner, there may be a variable called publisher, subscription or requisition.\nYou're free to explore them however you want, even doing things like this:

\n
publisher.parent.subscriptions[0].timeout = 1000;\n
\n

hooks

\n

There are three hook events available:

\n

onInit
\nAvailable in requisitions, publishers and subscriptions. It gets executed as soon as the test is initialized.

\n

onFinish
\nAvailable in requisitions, publishers and subscriptions. It gets executed when the test is about to finish.\nAs available parameter, an elapsedTime variable is given, counting every milliseconds since the instantiation of this component.

\n

onMessageReceived
\nAvailable in every subscription and in publishers that provide synchronous properties.\nIt gets executed when the subscription or publisher receives a message.\nA message object is available having all of attributes returned from the received message.\nDepending on the protocol implementation, there'll be additional objects to this hook.\nFor instance, in the built-in http publisher implementation, there's a statusCode, headers and a body among others, and the subscription implementation has body, query, params and headers , among other variables.\nelapsedTime is also available here, counting every milliseconds since the instantiation of this component.

\n

fields

\n

Every hook object has 3 properties:

\n

script
\nJavascript code snippet executed when the event is triggered.\nYeah, I mean it. See it it by yourself.\nBut be careful, with great power comes great responsibility.

\n

store
\nData to be persisted across requisitions.

\n

assertions
\nArray of assertions.\nRun $ nqr -t to see available ones.\nConsider looking at this test example.\nOf course, just like almost everything else in enqueuer world, you can extend this available list using some plugin.\nYou can check them out or even write your own.

\n
onInit:\n  script: variableIdentifier = 'string value'\n\n  assertions:\n  - expect: variableIdentifier\n    toBeEqualTo: `string value`\n\nonMessageReceived:\n  script: |-\n    message += 3;\n    console.log(`Message received plus 3 is: ${message}`);\n\n  store:\n    key: message\n\n  assertions:\n  - name: anyValue #optional\n    expect: message\n    toBeEqualTo: store.key\n  - expect: message + 3\n    toBeGreaterThan: 3\n
\n

event example

\n

Check this test file to see it in practice.

\n
\n

Requisition Flow

\n

Now that you know what are requisitions, publishers, subscriptions and events. How about seeing how they interact with each other in a fancier way?

\n

\"enqueuerInstanceFlow\"

\n

\"NPM\"

\n
\n

Configuration File

\n

To save yourself some time, a configuration file may be used.\nConfiguration files tell enqueuer which tests will be executed, log-level, and which output test report files should be generated.\nThis file tells how enqueuer should be executed.\nTo run enqueuer with the configuration:

\n
$ nqr -c path/to/configuration/file.yml\n
\n

or

\n
$ nqr --config-file path/to/configuration/file.yml\n
\n

configuration file attributes

\n

These are the configuration file attributes:

\n

files
\nRequisition file names or glob. Enqueuer runs every file that matches an element value.

\n
files:\n- 1.yml\n- 2.yml\n- *.json\n
\n

parallel
\nDefaults to false. Requisition files should be executed in parallel mode. The requisition file itself is still sequential, but the files are executes in parallel.

\n
parallel: true\n
\n

log-level
\nDefaults to warning. Defines how information are logged in the console. Accepted values are: trace; debug; info; warning (default); error; and fatal.

\n
log-level: trace\n
\n

max-report-level-print
\nDefaults to 1. The deepest level of report to be printed to the console.

\n
max-report-level-print: 2\n
\n

plugins
\nList of in plugins used by the test scenarios. You can check them out or write your own.

\n
plugins:\n- enqueuer-plugin-amqp \n- enqueuer-plugin-ws \n- enqueuer-plugin-mqtt\n- enqueuer-plugin-html-report\n
\n

outputs
\nOnce enqueuer runs every execution, it compiles a summary and sends it to every publisher listed in output.\nAn important thing to note is that every available report publisher is available here.\nYes, it means that you are able to send this report through http, tcp, etc. or through a plugin one or a custom one.\nYou can run $ nqr -p to check available report publishers installed.\nAnother important thing to note is the format value. By default a json summary is generated, but you can change it to whatever format you would like, such as: Xunit, html\nYou can run $ nqr -f to check available installed formats or even write your own

\n
outputs:\n- type: file\n  format: json (default)\n  filename: output/examples.json\n- type: file\n  format: yml\n  filename: output/examples.yml\n- type: standard-output (default)\n  format: console\n
\n

store
\nValues defined here use the 'key: value' pattern and are available to every test scenario throughout the entire execution

\n
store:\n  variableKey: \"my value\" # Defines 'variableKey' key and its value 'my value'. \n  \n  'separated key': 6\n  \n  object: # You can even define whole objects here:\n    first: first value\n    second:\n      nested: thing\n
\n

configuration file example

\n

Here's a complete example of a configuration file.

\n
\n

Variables

\n

Providing power and flexibility, enqueuer allows you to use variables placeholder replacement.\nThat's why there is a store field and you'll see a lot of << and {{ being used in the examples files.\nIt works as simple as this:

\n
name: my name is <<variableKey>>\n
\n

Every time enqueuer sees these kind of notations, it searches in its store for a key/value pair like:

\n
variableKey: `enqueuer`\n
\n

Then, when enqueuer parses the original map, it gets translated to this:

\n
name: my name is enqueuer\n
\n

By default, every ENV_VAR set is loaded automatically to the store. Check this example.

\n

set a variable

\n

There are a few ways to set a value in the store.

\n
configuration file
\n

Configuration file store object. Set it as you wish, as you can see here

\n
command line
\n

A command line argument using the key=value format. This way:

\n
$ nqr --store key=value -s anotherVariable=true\n
\n
event
\n

Dynamically set it through any event.\nBe it in its script field or straight through its store field.\nBoth ways work:

\n
onInit:\n    script: store.key = 123;\n    store:\n        anotherKey: `another Value` \n
\n

use a variable

\n

There are two ways two use a variable:

\n
non js code snippet
\n

The easiest one is to type <<variableKey>> or {{variableKey}} where you want it to be replaced in a test file, as you can see here

\n
js code snippet
\n

Using the store object. It's attributes are the keys and their values are their respective values.\nTherefore, you're free to use store.variableKey, console.log(store.variableKey); or console.log(2 * store['separated key']); and get them.\nLike this one.

\n

variables example

\n

Check out this test example test to see it working.

\n
\n

Content File Injection

\n

You are able to inject file content into a requisition/publisher/subscription field.

\n
file: <<file://path/to/file.txt>>\n
\n

Other than that, enqueuer can read it and parse its content as an object using this familiar syntax: <<tag://path/to/file?query=value&other=true>>.

\n
requisition:\n    json: <<json://path/to/file.json>>\n    yml: <<yml://path/to/file.yml>>\n    csv: <<csv://path/to/file.csv?header=true&delimiter=;>>\n    file: <<file://path/to/file.txt>>\n
\n

Once the object is parsed, your free to use it as a regular object in any event

\n
onInit:\n    script: console.log(requisition.yml.deep.field);\nonFinish:\n    assertions:\n    -   expect: json.key\n        toBeEqualTo: csv[0].key\n
\n

It get's event better.\nDue its fantastic plugin architecture design, you can extend its default modules and use any of these plugins or event write your own to parse however you want.\nThe built-in modules for object parsers are: json, yml, csv and file.\nRun $ nqr -e to see available ones.

\n

content file injection example

\n

Check out this test example test to get a full picture of it.

\n
\n

Plugins

\n

You're probably aware by now but it doesn't hurt do emphasize it: enqueuer provides an amazingly powerful plugin extensible architecture.\nIt has several plugins available, but if none of them pleases you, you're free to create your own.\nAlbeit you don't have to share the one you created, we encourage you to do so. Then go ahead and publish yours to npm and add it to our plugins list.

\n

plugin types

\n

So far, you're able to extend enqueuer default behavior in four ways. Using a protocol plugin, an object parser plugin, an asserter plugin and using a report formatter plugin.

\n
protocol
\n

A protocol plugin enables you to use a different publisher/subscription types.\nRun $ nqr -p [protocol-name] to get the full available list:

\n
publishers: \n-   name:                  custom\n-   name:                  file\n-   name:                  http\n    messageReceivedParams: statusCode, statusMessage, body\n-   name:                  stdout\n-   name:                  tcp\n-   ...\nsubscriptions: \n-   name:                  custom\n-   name:                  file\n    messageReceivedParams: content, name, size, modified, created\n-   name:                  http\n    messageReceivedParams: headers, params, query, body\n-   name:                  stdin\n-   name:                  tcp\n    messageReceivedParams: payload, stream\n-   ...\n
\n

Each one listed above has a respective example in the examples folder.\nThis one, for instance, provides support for amqp protocol, so you can create this publisher and subscription:

\n
publishers:\n-   type: amqp\n    payload: enqueuermaniac\n    exchange: enqueuer.exchange\n    routingKey: enqueuer.integration.test.routing.key\nsubscriptions:\n-   type: amqp\n    exchange: enqueuer.exchange\n    routingKey: enqueuer.integration.test.routing.#\n    onMessageReceived:\n        assertions:\n        -   expect: payload\n            toBeEqualTo: `enqueuermaniac`\n
\n
object parser
\n

An object parser plugin enables you to read and parse files as you wish.\nThis test example demonstrates how to use it,\nRun $ nqr -e [object-parser-name] to check available ones:

\n
parsers: \n- yml, yaml\n- json\n- file\n- csv\n
\n

This one, for example, provides the ability to read xml files and inject their values like this:

\n
xmlContent: <<xml://path/to/xml/file.xml>>\n
\n
asserter
\n

An asserter plugin provides you a nicely way to use different assertions than these built-in ones.

\n
asserters: \n-   expect: \n        required:    true\n        type:        string, array\n        description: actual value\n    not: \n        required:    false\n        type:        null\n        description: negates\n    toContain: \n        required:    true\n        type:        string, any\n        description: element\n
\n

Looking at the asserter above, we can create assertions like these:

\n
assertions:\n-   expect: [`a`, 1, true]\n    not:\n    toContain: `b`\n-   expect: [`a`, 1, true]\n    toContain: 1\n
\n

Run $ nqr -t to get the full available list.\nConsider looking at this test example.

\n
report formatter
\n

A report formatter plugin gives you the ability to export enqueuer reports the way you want.\nRun $ nqr -f [formatter-name] to list available report formatters:

\n
formatters: \n- console, stdout\n- json\n- yml, yaml\n
\n

Consider looking at the example of configuration file to see it in use.\nThis one, for instance, generates xUnit like reports from enqueuer's output.

\n

plugin use

\n

In order to enqueuer get awareness that you want to you a plugin, you have to tell it, right?\nYou can tell enqueuer to use a plugin in three manners. Using it as a command line argument, through the configuration file or letting enqueuer finding it in it's home directory folder.

\n
command line
\n

Tell enqueuer to use your plugin through command line this way $ nqr -l <plugin-folder> -l <another-plugin-folder>.\nWhere plugin-folder and another-plugin-folder are the directories where the plugins are installed in.

\n
configuration file
\n

Tell enqueuer to use your plugin through configuration file this way:

\n
plugins: \n-   plugin-folder\n-   another-plugin-folder\n
\n

Where plugin-folder and another-plugin-folder are the directories where the plugins are installed in.

\n
implicitly
\n

When enqueuer runs, it looks for modules in .nqr folder in your home directory. Every enqueuer compatible module get implicitly loaded.\nIn order to be enqueuer compatible, a module has to have an entryPoint exported function in its main file and, in its package.json file, it has to have either 'enqueuer' or 'nqr' as keywords.

\n
\n

Open source

\n

We, by 'we' we mean enqueuer's maintainers not the human race; unfortunately, are very opened any kind of contribution in general.\nAs long as they make sense and add value to the product, you're free to go.\nWe mean it, do it. Even if it's a typo fix in this README file. Go ahead.\nIf you like it but don't want to waste time creating a pull request, no problem neither.\nCreate an issue, or, even easier, give it a github star. It's cheap and it doesn't hurt anyone.\nYou know what? Just head up to enqueuer's github repo and keep staring at its webpage.\nIt may help somehow.

\n

contributors

\n

Thank you. It sounds cliché, but this project wouldn't be the same without the massive contribution from everyone.

\n

code it

\n

In order to contribute with some code, you have to follow a few steps.\nFirst of all, get the code:

\n
$ git clone git@github.com:enqueuer-land/enqueuer.git\n$ cd enqueuer\n
\n

Get its dependencies installed:

\n
$ npm install\n
\n

Build it:

\n
$ npm run build\n
\n

Go for it. Make the changes you want.\nAfter everything is done:

\n
$ npm run all\n
\n

Commit it:

\n
$ npm run commit\n
\n

Push it:

\n
$ git push\n
\n

feedback

\n

We'd love to get your feedback!\nIf you have any comments, suggestions, etc. you can reach us here.

\n
\n
\n
\n\n\n\n
\n
\n
\n\n
\n
\n \n\n
\n\n \n
\n
\n \n\n \n \n\n \n
\n
\n \n
\n
\n\n\n\n
\n \n \n You can’t perform that action at this time.\n
\n\n\n \n \n \n \n \n \n \n
\n \n You signed in with another tab or window. Reload to refresh your session.\n You signed out in another tab or window. Reload to refresh your session.\n
\n \n\n
\n
\n
\n
\n\n
\n\n \n\n\n" headers: server: GitHub.com - date: 'Wed, 27 Mar 2019 03:25:47 GMT' + date: 'Wed, 27 Mar 2019 23:29:44 GMT' content-type: 'text/html; charset=utf-8' transfer-encoding: chunked connection: close status: '200 OK' vary: X-PJAX - etag: 'W/"321e7db57d0e7d026ddc61bd8e208060"' + etag: 'W/"2f386ddefa290c2c6d854f1bafcfc639"' cache-control: 'max-age=0, private, must-revalidate' set-cookie: - - 'has_recent_activity=1; path=/; expires=Wed, 27 Mar 2019 04:25:47 -0000' - - 'logged_in=no; domain=.github.com; path=/; expires=Sun, 27 Mar 2039 03:25:47 -0000; secure; HttpOnly' - - '_gh_sess=dzQzT2oyTkd2RDB0QW1va3ZiMnMrSTQwOE83NVk0U3JHUG9rZHlzRUZjZ285RUZibTR4QXBPTk5GaWRGR3BWdEtUQlJzYjBOL0h1NjhJaG9rdThzTnJYbUUxL3h1cWExNVZwbFF3UkcraUlrMUxDczNvdVp5YUxDMC9WTGhTR2F0b3J0NnIwSjRtbjJRUG9HZWNyL1JlQi84MXFFTTFnd0hqUWh3YXB0ZDJnSGs2UzgwWm1LcERkV2crT1VTVTJXZWRvR29PQVZkbjViWE9qSnNibG8yQjB1bm1RQThpU24rM2NtT09haENhY08vTTlxcEp6OXZJTUNoYUlJaGJrYm1pRzRHRkRFVlp1QUtGWG1WcWhOVFcxSjVVR3FrK2o2RWJCOTU2ejB3TUE9LS1nNjREcDAvczlRbTlaRGMveG8yK1NRPT0%3D--e5cfb69894e7ec9fb5ff31168cb32a9011984d86; path=/; secure; HttpOnly' - x-request-id: e44b277b-7abd-464a-bd7b-863a52e8c9d4 + - 'has_recent_activity=1; path=/; expires=Thu, 28 Mar 2019 00:29:43 -0000' + - 'logged_in=no; domain=.github.com; path=/; expires=Sun, 27 Mar 2039 23:29:44 -0000; secure; HttpOnly' + - '_gh_sess=ZmRRNzFKWmVNN0RIQU9kZzhYd0ZFdysyZ1lHUnVlOWtwbTE2WDAxckxIbGNmVVRZZkthUThBcEF1OGgvZE41cko1TWhmdGxES2NrT0ZKRWVVRmozNHlJTTlMSUxqWWJlOGdxY2R6SVR4eXJzY3VDazVDYmJxOGE2QWZ2ZDBlS1NUVUo4KzQzN3liSnV1TGNmMWVnelpMRTlNNzdUeTFhR0FKSnByUDlTMllmSnB0bHhLY2lMUmc4S2VqMnJBSXg1K3JDRkZsZnJITHJidUdRQlpkK242emx3MEJ6QTN6OElZMHZwY1lSK09weTZkMlhpYlNrUlhQeGJZY2hkR2lsZXd0MTM3MkJLeWx5dUx0dU5nbHF4bERCRUR3bmtxekVEVTNGdWpIVzFDUFk9LS1GaTFoOWF1RVV1cHlZczFOZG54YVRRPT0%3D--3ef776c2cb8d92fd6051e88627f53f7388947137; path=/; secure; HttpOnly' + x-request-id: 921cb34c-8725-4782-8ed3-592a00fc7c21 strict-transport-security: 'max-age=31536000; includeSubdomains; preload' x-frame-options: deny x-content-type-options: nosniff x-xss-protection: '1; mode=block' expect-ct: 'max-age=2592000, report-uri="https://api.github.com/_private/browser/errors"' content-security-policy: 'default-src ''none''; base-uri ''self''; block-all-mixed-content; connect-src ''self'' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action ''self'' github.com gist.github.com; frame-ancestors ''none''; frame-src render.githubusercontent.com; img-src ''self'' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src ''self''; media-src ''none''; script-src github.githubassets.com; style-src ''unsafe-inline'' github.githubassets.com' - x-github-request-id: '3718:1BD3:231EDC:3AE660:5C9AED3A' + x-github-request-id: '37CF:4BF5:136965:21FFF5:5C9C0767' request: uri: protocol: 'https:' @@ -1956,50 +1956,50 @@ requisitions: headers: content-length: 0 time: - startTime: '2019-03-27T03:25:42.731Z' - endTime: '2019-03-27T03:25:44.232Z' - totalTime: 1501 + startTime: '2019-03-27T23:29:39.029Z' + endTime: '2019-03-27T23:29:40.621Z' + totalTime: 1592 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/recursion.yml - id: 0025420586_8fda7870a1_314023 + id: 2029380883_c581f9fbc0_89101 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.733Z' - endTime: '2019-03-27T03:25:42.838Z' - totalTime: 105 + startTime: '2019-03-27T23:29:39.030Z' + endTime: '2019-03-27T23:29:39.124Z' + totalTime: 94 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420587_e3b415ed80_412695 + id: 2029380885_0b060c871d_639654 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.759Z' - endTime: '2019-03-27T03:25:42.805Z' - totalTime: 46 + startTime: '2019-03-27T23:29:39.050Z' + endTime: '2019-03-27T23:29:39.092Z' + totalTime: 42 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #1 [0]' - id: 0025420589_2e6a4c2a37_983608 + id: 2029380886_d8bf406dd6_192587 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.810Z' - endTime: '2019-03-27T03:25:42.828Z' + startTime: '2019-03-27T23:29:39.098Z' + endTime: '2019-03-27T23:29:39.116Z' totalTime: 18 timeout: 5000 requisitions: @@ -2007,41 +2007,41 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420590_fab2a74954_657563 + id: 2029380887_913318a0bc_45133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.813Z' - endTime: '2019-03-27T03:25:42.821Z' - totalTime: 8 + startTime: '2019-03-27T23:29:39.101Z' + endTime: '2019-03-27T23:29:39.108Z' + totalTime: 7 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.814Z' - endTime: '2019-03-27T03:25:42.815Z' - totalTime: 1 + startTime: '2019-03-27T23:29:39.101Z' + endTime: '2019-03-27T23:29:39.101Z' + totalTime: 0 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.816Z' - endTime: '2019-03-27T03:25:42.818Z' + startTime: '2019-03-27T23:29:39.103Z' + endTime: '2019-03-27T23:29:39.105Z' totalTime: 2 timeout: 5000 requisitions: [] @@ -2049,13 +2049,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.819Z' - endTime: '2019-03-27T03:25:42.820Z' + startTime: '2019-03-27T23:29:39.106Z' + endTime: '2019-03-27T23:29:39.107Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -2063,13 +2063,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420590_fab2a74954_657563 + id: 2029380887_913318a0bc_45133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.823Z' - endTime: '2019-03-27T03:25:42.826Z' + startTime: '2019-03-27T23:29:39.110Z' + endTime: '2019-03-27T23:29:39.113Z' totalTime: 3 timeout: 5000 requisitions: @@ -2077,13 +2077,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.823Z' - endTime: '2019-03-27T03:25:42.823Z' + startTime: '2019-03-27T23:29:39.110Z' + endTime: '2019-03-27T23:29:39.110Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2091,27 +2091,27 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.824Z' - endTime: '2019-03-27T03:25:42.825Z' - totalTime: 1 + startTime: '2019-03-27T23:29:39.111Z' + endTime: '2019-03-27T23:29:39.111Z' + totalTime: 0 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.825Z' - endTime: '2019-03-27T03:25:42.825Z' + startTime: '2019-03-27T23:29:39.112Z' + endTime: '2019-03-27T23:29:39.112Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2119,27 +2119,27 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420590_fab2a74954_657563 + id: 2029380887_913318a0bc_45133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.826Z' - endTime: '2019-03-27T03:25:42.828Z' - totalTime: 2 + startTime: '2019-03-27T23:29:39.114Z' + endTime: '2019-03-27T23:29:39.115Z' + totalTime: 1 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.827Z' - endTime: '2019-03-27T03:25:42.827Z' + startTime: '2019-03-27T23:29:39.114Z' + endTime: '2019-03-27T23:29:39.114Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2147,13 +2147,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.828Z' - endTime: '2019-03-27T03:25:42.828Z' + startTime: '2019-03-27T23:29:39.115Z' + endTime: '2019-03-27T23:29:39.115Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2161,13 +2161,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.828Z' - endTime: '2019-03-27T03:25:42.828Z' + startTime: '2019-03-27T23:29:39.115Z' + endTime: '2019-03-27T23:29:39.115Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2175,27 +2175,27 @@ requisitions: valid: true tests: [] name: 'Requisition #1 [1]' - id: 0025420589_2e6a4c2a37_983608 + id: 2029380886_d8bf406dd6_192587 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.829Z' - endTime: '2019-03-27T03:25:42.832Z' - totalTime: 3 + startTime: '2019-03-27T23:29:39.116Z' + endTime: '2019-03-27T23:29:39.120Z' + totalTime: 4 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420590_fab2a74954_657563 + id: 2029380887_913318a0bc_45133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.829Z' - endTime: '2019-03-27T03:25:42.830Z' + startTime: '2019-03-27T23:29:39.116Z' + endTime: '2019-03-27T23:29:39.117Z' totalTime: 1 timeout: 5000 requisitions: @@ -2203,13 +2203,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.829Z' - endTime: '2019-03-27T03:25:42.829Z' + startTime: '2019-03-27T23:29:39.116Z' + endTime: '2019-03-27T23:29:39.116Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2217,13 +2217,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.829Z' - endTime: '2019-03-27T03:25:42.829Z' + startTime: '2019-03-27T23:29:39.117Z' + endTime: '2019-03-27T23:29:39.117Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2231,13 +2231,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.830Z' - endTime: '2019-03-27T03:25:42.830Z' + startTime: '2019-03-27T23:29:39.117Z' + endTime: '2019-03-27T23:29:39.117Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2245,13 +2245,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420590_fab2a74954_657563 + id: 2029380887_913318a0bc_45133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.830Z' - endTime: '2019-03-27T03:25:42.831Z' + startTime: '2019-03-27T23:29:39.117Z' + endTime: '2019-03-27T23:29:39.118Z' totalTime: 1 timeout: 5000 requisitions: @@ -2259,13 +2259,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.830Z' - endTime: '2019-03-27T03:25:42.830Z' + startTime: '2019-03-27T23:29:39.118Z' + endTime: '2019-03-27T23:29:39.118Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2273,27 +2273,27 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.830Z' - endTime: '2019-03-27T03:25:42.831Z' - totalTime: 1 + startTime: '2019-03-27T23:29:39.118Z' + endTime: '2019-03-27T23:29:39.118Z' + totalTime: 0 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.831Z' - endTime: '2019-03-27T03:25:42.831Z' + startTime: '2019-03-27T23:29:39.118Z' + endTime: '2019-03-27T23:29:39.118Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2301,13 +2301,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420590_fab2a74954_657563 + id: 2029380887_913318a0bc_45133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.831Z' - endTime: '2019-03-27T03:25:42.832Z' + startTime: '2019-03-27T23:29:39.119Z' + endTime: '2019-03-27T23:29:39.120Z' totalTime: 1 timeout: 5000 requisitions: @@ -2315,27 +2315,27 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.831Z' - endTime: '2019-03-27T03:25:42.832Z' - totalTime: 1 + startTime: '2019-03-27T23:29:39.119Z' + endTime: '2019-03-27T23:29:39.119Z' + totalTime: 0 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.832Z' - endTime: '2019-03-27T03:25:42.832Z' + startTime: '2019-03-27T23:29:39.119Z' + endTime: '2019-03-27T23:29:39.119Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2343,13 +2343,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.832Z' - endTime: '2019-03-27T03:25:42.832Z' + startTime: '2019-03-27T23:29:39.119Z' + endTime: '2019-03-27T23:29:39.119Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2357,13 +2357,13 @@ requisitions: valid: true tests: [] name: 'Requisition #1 [2]' - id: 0025420589_2e6a4c2a37_983608 + id: 2029380886_d8bf406dd6_192587 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.833Z' - endTime: '2019-03-27T03:25:42.837Z' + startTime: '2019-03-27T23:29:39.120Z' + endTime: '2019-03-27T23:29:39.124Z' totalTime: 4 timeout: 5000 requisitions: @@ -2371,27 +2371,27 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420590_fab2a74954_657563 + id: 2029380887_913318a0bc_45133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.833Z' - endTime: '2019-03-27T03:25:42.835Z' - totalTime: 2 + startTime: '2019-03-27T23:29:39.120Z' + endTime: '2019-03-27T23:29:39.121Z' + totalTime: 1 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.834Z' - endTime: '2019-03-27T03:25:42.834Z' + startTime: '2019-03-27T23:29:39.121Z' + endTime: '2019-03-27T23:29:39.121Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2399,13 +2399,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.834Z' - endTime: '2019-03-27T03:25:42.834Z' + startTime: '2019-03-27T23:29:39.121Z' + endTime: '2019-03-27T23:29:39.121Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2413,13 +2413,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.834Z' - endTime: '2019-03-27T03:25:42.834Z' + startTime: '2019-03-27T23:29:39.121Z' + endTime: '2019-03-27T23:29:39.121Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2427,27 +2427,27 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420590_fab2a74954_657563 + id: 2029380887_913318a0bc_45133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.835Z' - endTime: '2019-03-27T03:25:42.836Z' - totalTime: 1 + startTime: '2019-03-27T23:29:39.122Z' + endTime: '2019-03-27T23:29:39.122Z' + totalTime: 0 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.835Z' - endTime: '2019-03-27T03:25:42.835Z' + startTime: '2019-03-27T23:29:39.122Z' + endTime: '2019-03-27T23:29:39.122Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2455,13 +2455,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.836Z' - endTime: '2019-03-27T03:25:42.836Z' + startTime: '2019-03-27T23:29:39.122Z' + endTime: '2019-03-27T23:29:39.122Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2469,13 +2469,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.836Z' - endTime: '2019-03-27T03:25:42.836Z' + startTime: '2019-03-27T23:29:39.122Z' + endTime: '2019-03-27T23:29:39.122Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2483,13 +2483,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420590_fab2a74954_657563 + id: 2029380887_913318a0bc_45133 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.836Z' - endTime: '2019-03-27T03:25:42.837Z' + startTime: '2019-03-27T23:29:39.123Z' + endTime: '2019-03-27T23:29:39.124Z' totalTime: 1 timeout: 5000 requisitions: @@ -2497,13 +2497,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.837Z' - endTime: '2019-03-27T03:25:42.837Z' + startTime: '2019-03-27T23:29:39.123Z' + endTime: '2019-03-27T23:29:39.123Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2511,13 +2511,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.837Z' - endTime: '2019-03-27T03:25:42.837Z' + startTime: '2019-03-27T23:29:39.123Z' + endTime: '2019-03-27T23:29:39.123Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2525,13 +2525,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420591_04356910aa_563423 + id: 2029380888_8031f7d61d_291000 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.837Z' - endTime: '2019-03-27T03:25:42.837Z' + startTime: '2019-03-27T23:29:39.124Z' + endTime: '2019-03-27T23:29:39.124Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2543,13 +2543,13 @@ requisitions: valid: true description: 'Expected ''store.counter'' to be equal to ''27''. Received ''27''' name: 'Requisition #2' - id: 0025420593_7e8a0ac72f_401249 + id: 2029380889_ba09c5f53f_293153 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.838Z' - endTime: '2019-03-27T03:25:42.838Z' + startTime: '2019-03-27T23:29:39.124Z' + endTime: '2019-03-27T23:29:39.124Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2557,41 +2557,41 @@ requisitions: valid: true tests: [] name: examples/requisition-delay-iterations.yml - id: 0025420594_7dd65c6d4e_984337 + id: 2029380891_31d5b89807_565471 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.734Z' - endTime: '2019-03-27T03:25:45.831Z' - totalTime: 3097 + startTime: '2019-03-27T23:29:39.031Z' + endTime: '2019-03-27T23:29:42.119Z' + totalTime: 3088 timeout: 5000 requisitions: - valid: true tests: [] name: 'iterations [0]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.760Z' - endTime: '2019-03-27T03:25:42.805Z' - totalTime: 45 + startTime: '2019-03-27T23:29:39.050Z' + endTime: '2019-03-27T23:29:39.092Z' + totalTime: 42 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'iterations [1]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.809Z' - endTime: '2019-03-27T03:25:42.814Z' + startTime: '2019-03-27T23:29:39.096Z' + endTime: '2019-03-27T23:29:39.101Z' totalTime: 5 timeout: 5000 requisitions: [] @@ -2599,13 +2599,13 @@ requisitions: valid: true tests: [] name: 'iterations [2]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.815Z' - endTime: '2019-03-27T03:25:42.817Z' + startTime: '2019-03-27T23:29:39.102Z' + endTime: '2019-03-27T23:29:39.104Z' totalTime: 2 timeout: 5000 requisitions: [] @@ -2613,13 +2613,13 @@ requisitions: valid: true tests: [] name: 'iterations [3]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.818Z' - endTime: '2019-03-27T03:25:42.819Z' + startTime: '2019-03-27T23:29:39.105Z' + endTime: '2019-03-27T23:29:39.106Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -2627,13 +2627,13 @@ requisitions: valid: true tests: [] name: 'iterations [4]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.820Z' - endTime: '2019-03-27T03:25:42.820Z' + startTime: '2019-03-27T23:29:39.107Z' + endTime: '2019-03-27T23:29:39.107Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2641,13 +2641,13 @@ requisitions: valid: true tests: [] name: 'iterations [5]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.821Z' - endTime: '2019-03-27T03:25:42.823Z' + startTime: '2019-03-27T23:29:39.108Z' + endTime: '2019-03-27T23:29:39.110Z' totalTime: 2 timeout: 5000 requisitions: [] @@ -2655,13 +2655,13 @@ requisitions: valid: true tests: [] name: 'iterations [6]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.823Z' - endTime: '2019-03-27T03:25:42.824Z' + startTime: '2019-03-27T23:29:39.110Z' + endTime: '2019-03-27T23:29:39.111Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -2669,13 +2669,13 @@ requisitions: valid: true tests: [] name: 'iterations [7]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.824Z' - endTime: '2019-03-27T03:25:42.825Z' + startTime: '2019-03-27T23:29:39.111Z' + endTime: '2019-03-27T23:29:39.112Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -2683,13 +2683,13 @@ requisitions: valid: true tests: [] name: 'iterations [8]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.825Z' - endTime: '2019-03-27T03:25:42.826Z' + startTime: '2019-03-27T23:29:39.112Z' + endTime: '2019-03-27T23:29:39.113Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -2697,14 +2697,14 @@ requisitions: valid: true tests: [] name: 'iterations [9]' - id: 0025420597_ed99f02020_872425 + id: 2029380892_6f92ae778f_826401 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.826Z' - endTime: '2019-03-27T03:25:42.826Z' - totalTime: 0 + startTime: '2019-03-27T23:29:39.113Z' + endTime: '2019-03-27T23:29:39.114Z' + totalTime: 1 timeout: 5000 requisitions: [] - @@ -2717,75 +2717,75 @@ requisitions: - name: 'Elapsed time' valid: true - description: 'Expected ''elapsedTime'' to be greater than or equal to ''3000''. Received ''3003''' + description: 'Expected ''elapsedTime'' to be greater than or equal to ''3000''. Received ''3005''' - name: 'Assertion #2' valid: true - description: 'Expected ''new Date().getTime() - requisition.startTime.getTime()'' to be greater than or equal to ''3000''. Received ''3004''' + description: 'Expected ''new Date().getTime() - requisition.startTime.getTime()'' to be greater than or equal to ''3000''. Received ''3005''' name: delayed - id: 0025420600_1b4ad3f717_995374 + id: 2029380893_e633fb209d_197775 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.827Z' - endTime: '2019-03-27T03:25:45.831Z' - totalTime: 3004 + startTime: '2019-03-27T23:29:39.114Z' + endTime: '2019-03-27T23:29:42.119Z' + totalTime: 3005 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/skipped.yml - id: 0025420601_fa14306c8d_599182 + id: 2029380895_f96c501693_449153 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.737Z' - endTime: '2019-03-27T03:25:42.828Z' - totalTime: 91 + startTime: '2019-03-27T23:29:39.033Z' + endTime: '2019-03-27T23:29:39.115Z' + totalTime: 82 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0 [0]' - id: 0025420603_b8f3c48419_210230 + id: 2029380896_52ca556abd_107592 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.760Z' - endTime: '2019-03-27T03:25:42.805Z' - totalTime: 45 + startTime: '2019-03-27T23:29:39.051Z' + endTime: '2019-03-27T23:29:39.092Z' + totalTime: 41 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #0 [1]' - id: 0025420603_b8f3c48419_210230 + id: 2029380896_52ca556abd_107592 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.809Z' - endTime: '2019-03-27T03:25:42.814Z' - totalTime: 5 + startTime: '2019-03-27T23:29:39.097Z' + endTime: '2019-03-27T23:29:39.101Z' + totalTime: 4 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #0 [2]' - id: 0025420603_b8f3c48419_210230 + id: 2029380896_52ca556abd_107592 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.815Z' - endTime: '2019-03-27T03:25:42.817Z' + startTime: '2019-03-27T23:29:39.102Z' + endTime: '2019-03-27T23:29:39.104Z' totalTime: 2 timeout: 5000 requisitions: [] @@ -2793,13 +2793,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [3]' - id: 0025420603_b8f3c48419_210230 + id: 2029380896_52ca556abd_107592 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.818Z' - endTime: '2019-03-27T03:25:42.819Z' + startTime: '2019-03-27T23:29:39.105Z' + endTime: '2019-03-27T23:29:39.106Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -2807,13 +2807,13 @@ requisitions: valid: true tests: [] name: 'Requisition #0 [4]' - id: 0025420603_b8f3c48419_210230 + id: 2029380896_52ca556abd_107592 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.820Z' - endTime: '2019-03-27T03:25:42.820Z' + startTime: '2019-03-27T23:29:39.107Z' + endTime: '2019-03-27T23:29:39.107Z' totalTime: 0 timeout: 5000 requisitions: [] @@ -2825,13 +2825,13 @@ requisitions: valid: true description: 'Expected ''store.skippedExecutions'' to be equal to ''5''. Received ''5''' name: 'Requisition #1' - id: 0025420604_ee8b8895a4_20486 + id: 2029380897_dd53bf7b9b_317370 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.821Z' - endTime: '2019-03-27T03:25:42.823Z' + startTime: '2019-03-27T23:29:39.108Z' + endTime: '2019-03-27T23:29:39.110Z' totalTime: 2 timeout: 5000 requisitions: [] @@ -2843,12 +2843,12 @@ requisitions: name: 'Requisition skipped' description: 'There is no iterations set to this requisition' name: 'Requisition #2' - id: 0025420606_c254033458_679502 + id: 2029380898_e7a63a9601_517639 subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.823Z' - endTime: '2019-03-27T03:25:42.823Z' + startTime: '2019-03-27T23:29:39.110Z' + endTime: '2019-03-27T23:29:39.110Z' totalTime: 0 requisitions: [] - @@ -2859,12 +2859,12 @@ requisitions: name: 'Requisition skipped' description: 'There is no iterations set to this requisition' name: 'Requisition #3' - id: 0025420607_71bd549601_862837 + id: 2029380900_7c49914bfc_483559 subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.824Z' - endTime: '2019-03-27T03:25:42.824Z' + startTime: '2019-03-27T23:29:39.111Z' + endTime: '2019-03-27T23:29:39.111Z' totalTime: 0 requisitions: [] - @@ -2875,12 +2875,12 @@ requisitions: name: 'Requisition skipped' description: 'There is no iterations set to this requisition' name: 'Requisition #4' - id: 0025420609_922f0d838e_197648 + id: 2029380901_cba228d86d_656111 subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.824Z' - endTime: '2019-03-27T03:25:42.824Z' + startTime: '2019-03-27T23:29:39.111Z' + endTime: '2019-03-27T23:29:39.111Z' totalTime: 0 requisitions: [] - @@ -2891,13 +2891,13 @@ requisitions: valid: true description: 'Expecting ''true'' to be true' name: 'Requisition #5' - id: 0025420610_d5f44eb3d0_380622 + id: 2029380902_156e8c99fb_403622 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.824Z' - endTime: '2019-03-27T03:25:42.825Z' + startTime: '2019-03-27T23:29:39.111Z' + endTime: '2019-03-27T23:29:39.112Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -2905,13 +2905,13 @@ requisitions: valid: true tests: [] name: 'Requisition #6' - id: 0025420611_b8fed6771f_731170 + id: 2029380903_e6cfdb3632_323935 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.825Z' - endTime: '2019-03-27T03:25:42.826Z' + startTime: '2019-03-27T23:29:39.112Z' + endTime: '2019-03-27T23:29:39.113Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -2923,13 +2923,13 @@ requisitions: valid: true description: 'Expecting ''store.executed'' to be defined' name: 'Requisition #7' - id: 0025420613_9151bd798f_767867 + id: 2029380904_6faa711392_819786 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.826Z' - endTime: '2019-03-27T03:25:42.827Z' + startTime: '2019-03-27T23:29:39.113Z' + endTime: '2019-03-27T23:29:39.114Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -2937,25 +2937,25 @@ requisitions: valid: true tests: [] name: examples/ssl.yml - id: 0025420614_5a7af2b063_696748 + id: 2029380906_3e6222b730_1000171 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.740Z' - endTime: '2019-03-27T03:25:44.916Z' - totalTime: 2176 + startTime: '2019-03-27T23:29:39.035Z' + endTime: '2019-03-27T23:29:41.203Z' + totalTime: 2168 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420616_f453973db9_114562 + id: 2029380907_6c5c8a4dc9_819317 ignored: false subscriptions: - - id: 0025420616_d5884fd0ec_636682 + id: 2029380907_d5884fd0ec_740090 name: 'Subscription #0' type: ssl tests: @@ -2968,7 +2968,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: payload: secureMessagereusingSecureMessage stream: @@ -2977,7 +2977,7 @@ requisitions: port: 23082 publishers: - - id: 0025420616_e063362e26_860289 + id: 2029380907_e063362e26_264856 name: 'Publisher #0' valid: true type: ssl @@ -2994,28 +2994,28 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:43.910Z' + publishTime: '2019-03-27T23:29:40.195Z' messageReceived: payload: hisecureResponse stream: address: 127.0.0.1 family: IPv4 - port: 53839 + port: 59107 time: - startTime: '2019-03-27T03:25:42.761Z' - endTime: '2019-03-27T03:25:43.910Z' - totalTime: 1149 + startTime: '2019-03-27T23:29:39.052Z' + endTime: '2019-03-27T23:29:40.195Z' + totalTime: 1143 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #1' - id: 0025420617_6c0a26af21_132844 + id: 2029380908_65ab341c9d_894092 ignored: false subscriptions: - - id: 0025420617_464eaccac3_715495 + id: 2029380908_464eaccac3_792328 name: 'Subscription #0' type: ssl tests: @@ -3028,12 +3028,12 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:43.912Z' + connectionTime: '2019-03-27T23:29:40.196Z' messageReceived: payload: reusingSecureMessage publishers: - - id: 0025420617_26f6887fe6_574808 + id: 2029380908_26f6887fe6_505887 name: 'Publisher #0' valid: true type: ssl @@ -3050,20 +3050,20 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:44.915Z' + publishTime: '2019-03-27T23:29:41.202Z' messageReceived: payload: reusingSecureResponse time: - startTime: '2019-03-27T03:25:43.911Z' - endTime: '2019-03-27T03:25:44.916Z' - totalTime: 1005 + startTime: '2019-03-27T23:29:40.196Z' + endTime: '2019-03-27T23:29:41.203Z' + totalTime: 1007 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/stdin.yml - id: 0025420619_78b9250560_204582 + id: 2029380909_8bc9248709_274697 ignored: false subscriptions: - @@ -3080,41 +3080,41 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.793Z' + connectionTime: '2019-03-27T23:29:39.081Z' messageReceived: 'enqueuer standard-input payload' publishers: [] time: - startTime: '2019-03-27T03:25:42.740Z' - endTime: '2019-03-27T03:25:42.866Z' - totalTime: 126 + startTime: '2019-03-27T23:29:39.035Z' + endTime: '2019-03-27T23:29:39.152Z' + totalTime: 117 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/store.yml - id: 0025420620_65c838ef2d_335713 + id: 2029380910_8c78d1aafb_601685 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.742Z' - endTime: '2019-03-27T03:25:42.820Z' - totalTime: 78 + startTime: '2019-03-27T23:29:39.036Z' + endTime: '2019-03-27T23:29:39.107Z' + totalTime: 71 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420621_bed402d2e2_995414 + id: 2029380912_4bc33bf83e_730917 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.762Z' - endTime: '2019-03-27T03:25:42.805Z' - totalTime: 43 + startTime: '2019-03-27T23:29:39.052Z' + endTime: '2019-03-27T23:29:39.092Z' + totalTime: 40 timeout: 5000 requisitions: [] - @@ -3129,14 +3129,14 @@ requisitions: valid: true description: 'Expecting ''store.PATH'' to be defined' name: 'Requisition #1' - id: 0025420623_af444e9c5e_292843 + id: 2029380913_3134190492_183491 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.811Z' - endTime: '2019-03-27T03:25:42.815Z' - totalTime: 4 + startTime: '2019-03-27T23:29:39.099Z' + endTime: '2019-03-27T23:29:39.101Z' + totalTime: 2 timeout: 5000 requisitions: [] - @@ -3147,13 +3147,13 @@ requisitions: valid: true description: 'Expected ''124'' to be equal to ''124''. Received ''124''' name: 'Requisition #2' - id: 0025420624_fd8c489e5b_190973 + id: 2029380915_52d14ff36e_7202 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.817Z' - endTime: '2019-03-27T03:25:42.818Z' + startTime: '2019-03-27T23:29:39.104Z' + endTime: '2019-03-27T23:29:39.105Z' totalTime: 1 timeout: 5000 requisitions: [] @@ -3161,25 +3161,25 @@ requisitions: valid: true tests: [] name: examples/tcp.yml - id: 0025420626_8bce837b8c_791769 + id: 2029380916_155831b155_27441 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.745Z' - endTime: '2019-03-27T03:25:45.889Z' - totalTime: 3144 + startTime: '2019-03-27T23:29:39.039Z' + endTime: '2019-03-27T23:29:42.174Z' + totalTime: 3135 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420627_ed5d6415e9_53371 + id: 2029380917_0b630c6389_414939 ignored: false subscriptions: - - id: 0025420627_4e5617f719_602409 + id: 2029380917_4e5617f719_930791 name: 'Subscription #0' type: tcp tests: @@ -3196,7 +3196,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: payload: 'Hey Jude' stream: @@ -3205,7 +3205,7 @@ requisitions: port: 23069 publishers: - - id: 0025420627_3b7a9e3645_448069 + id: 2029380917_3b7a9e3645_449901 name: 'Publisher #0' valid: true type: tcp @@ -3222,28 +3222,28 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:43.874Z' + publishTime: '2019-03-27T23:29:40.162Z' messageReceived: payload: 'Do not make it bad' stream: address: 127.0.0.1 family: IPv4 - port: 53840 + port: 59109 time: - startTime: '2019-03-27T03:25:42.763Z' - endTime: '2019-03-27T03:25:43.875Z' - totalTime: 1112 + startTime: '2019-03-27T23:29:39.053Z' + endTime: '2019-03-27T23:29:40.162Z' + totalTime: 1109 timeout: 3000 requisitions: [] - valid: true tests: [] name: 'Requisition #1' - id: 0025420629_93b3f188b3_408579 + id: 2029380918_13b5d344d7_330309 ignored: false subscriptions: - - id: 0025420629_944c1488d1_178620 + id: 2029380918_944c1488d1_126866 name: 'Subscription #0' type: tcp tests: @@ -3256,7 +3256,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:43.876Z' + connectionTime: '2019-03-27T23:29:40.164Z' messageReceived: payload: 'I do not careThe socket is still open' stream: @@ -3265,7 +3265,7 @@ requisitions: port: 23070 publishers: - - id: 0025420629_369e07d49e_601435 + id: 2029380918_369e07d49e_173714 name: 'Publisher #0' valid: true type: tcp @@ -3282,16 +3282,16 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:44.881Z' + publishTime: '2019-03-27T23:29:41.169Z' messageReceived: payload: EnqueuerRocks stream: address: 127.0.0.1 family: IPv4 - port: 53854 + port: 59123 time: - startTime: '2019-03-27T03:25:43.876Z' - endTime: '2019-03-27T03:25:44.882Z' + startTime: '2019-03-27T23:29:40.163Z' + endTime: '2019-03-27T23:29:41.169Z' totalTime: 1006 timeout: 3000 requisitions: [] @@ -3299,11 +3299,11 @@ requisitions: valid: true tests: [] name: 'Requisition #2' - id: 0025420630_afb8734e3f_878906 + id: 2029380920_e05a1cd22b_858469 ignored: false subscriptions: - - id: 0025420630_a5c6b9dc6a_669237 + id: 2029380920_a5c6b9dc6a_523195 name: 'Subscription #0' type: tcp tests: @@ -3316,12 +3316,12 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:44.884Z' + connectionTime: '2019-03-27T23:29:41.171Z' messageReceived: payload: 'The socket is still open' publishers: - - id: 0025420630_c04ec1e8aa_484872 + id: 2029380920_c04ec1e8aa_721047 name: 'Publisher #0' valid: true type: tcp @@ -3338,38 +3338,38 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:45.888Z' + publishTime: '2019-03-27T23:29:42.174Z' messageReceived: payload: 'enqueuer Rocks' time: - startTime: '2019-03-27T03:25:44.883Z' - endTime: '2019-03-27T03:25:45.888Z' - totalTime: 1005 + startTime: '2019-03-27T23:29:41.171Z' + endTime: '2019-03-27T23:29:42.174Z' + totalTime: 1003 timeout: 3000 requisitions: [] - valid: true tests: [] name: examples/udp.yml - id: 0025420632_73c2676c0f_700732 + id: 2029380921_7cd47d677b_740246 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.747Z' - endTime: '2019-03-27T03:25:42.870Z' - totalTime: 123 + startTime: '2019-03-27T23:29:39.040Z' + endTime: '2019-03-27T23:29:39.154Z' + totalTime: 114 timeout: 5000 requisitions: - valid: true tests: [] name: 'Requisition #0' - id: 0025420633_06f271dc55_579127 + id: 2029380922_2d7ba19dd6_223512 ignored: false subscriptions: - - id: 0025420634_81a962f56b_631888 + id: 2029380922_81a962f56b_195411 name: 'subscription description' type: udp tests: @@ -3386,7 +3386,7 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.798Z' + connectionTime: '2019-03-27T23:29:39.087Z' messageReceived: payload: type: Buffer @@ -3396,11 +3396,11 @@ requisitions: remoteInfo: address: 127.0.0.1 family: IPv4 - port: 49724 + port: 56767 size: 2 publishers: - - id: 0025420633_f1c5db9ba9_480712 + id: 2029380922_f1c5db9ba9_971298 name: 'publisher description' valid: true type: udp @@ -3409,24 +3409,24 @@ requisitions: name: Published valid: true description: 'Published successfully' - publishTime: '2019-03-27T03:25:42.865Z' + publishTime: '2019-03-27T23:29:39.151Z' time: - startTime: '2019-03-27T03:25:42.764Z' - endTime: '2019-03-27T03:25:42.869Z' - totalTime: 105 + startTime: '2019-03-27T23:29:39.054Z' + endTime: '2019-03-27T23:29:39.154Z' + totalTime: 100 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/uds.yml - id: 0025420635_244bb06361_798569 + id: 2029380923_ee821f6592_986088 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.751Z' - endTime: '2019-03-27T03:25:45.864Z' + startTime: '2019-03-27T23:29:39.042Z' + endTime: '2019-03-27T23:29:42.155Z' totalTime: 3113 timeout: 5000 requisitions: @@ -3434,11 +3434,11 @@ requisitions: valid: true tests: [] name: 'Requisition #0' - id: 0025420637_8bab253099_955355 + id: 2029380925_0ccf9fc221_997491 ignored: false subscriptions: - - id: 0025420637_649bd5228c_698245 + id: 2029380925_649bd5228c_32340 name: 'Subscription #0' type: uds tests: @@ -3451,14 +3451,14 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:42.841Z' + connectionTime: '2019-03-27T23:29:39.128Z' messageReceived: payload: enqueuer stream: {} path: /tmp/unix.sock publishers: - - id: 0025420637_b14ca3892b_892214 + id: 2029380925_b14ca3892b_919652 name: 'Publisher #0' valid: true type: uds @@ -3475,25 +3475,25 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:43.855Z' + publishTime: '2019-03-27T23:29:40.143Z' messageReceived: payload: responsePayload stream: {} time: - startTime: '2019-03-27T03:25:42.765Z' - endTime: '2019-03-27T03:25:43.856Z' - totalTime: 1091 + startTime: '2019-03-27T23:29:39.055Z' + endTime: '2019-03-27T23:29:40.144Z' + totalTime: 1089 timeout: 3000 requisitions: [] - valid: true tests: [] name: 'Requisition #1' - id: 0025420638_77cb1aef06_894671 + id: 2029380926_5a50f82008_737192 ignored: false subscriptions: - - id: 0025420638_84a1c6e69b_161774 + id: 2029380926_84a1c6e69b_495375 name: 'Subscription #0' type: uds tests: @@ -3506,14 +3506,14 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:43.858Z' + connectionTime: '2019-03-27T23:29:40.147Z' messageReceived: payload: 'enqueuerI am still bidirectional' stream: {} path: /tmp/unix2.sock publishers: - - id: 0025420638_297aae1eb3_684165 + id: 2029380926_297aae1eb3_856980 name: 'Publisher #0' valid: true type: uds @@ -3526,22 +3526,22 @@ requisitions: name: Published valid: true description: 'Published successfully' - publishTime: '2019-03-27T03:25:44.859Z' + publishTime: '2019-03-27T23:29:41.151Z' time: - startTime: '2019-03-27T03:25:43.858Z' - endTime: '2019-03-27T03:25:44.859Z' - totalTime: 1001 + startTime: '2019-03-27T23:29:40.146Z' + endTime: '2019-03-27T23:29:41.151Z' + totalTime: 1005 timeout: 5000 requisitions: [] - valid: true tests: [] name: 'Requisition #2' - id: 0025420640_cb80073ab6_798442 + id: 2029380928_015c0d03fa_363776 ignored: false subscriptions: - - id: 0025420640_d308bbf817_193920 + id: 2029380928_d308bbf817_54614 name: 'Subscription #0' type: uds tests: @@ -3554,13 +3554,13 @@ requisitions: name: 'Message received' description: 'Subscription has received its message' valid: true - connectionTime: '2019-03-27T03:25:44.861Z' + connectionTime: '2019-03-27T23:29:41.153Z' messageReceived: payload: 'I am still opened' stream: {} publishers: - - id: 0025420640_b6920facd0_727694 + id: 2029380928_b6920facd0_918630 name: 'Publisher #0' valid: true type: uds @@ -3577,28 +3577,28 @@ requisitions: name: 'Response message received' valid: true description: 'Response message was received' - publishTime: '2019-03-27T03:25:45.863Z' + publishTime: '2019-03-27T23:29:42.154Z' messageReceived: payload: 'I am still bidirectional' stream: {} time: - startTime: '2019-03-27T03:25:44.861Z' - endTime: '2019-03-27T03:25:45.864Z' - totalTime: 1003 + startTime: '2019-03-27T23:29:41.153Z' + endTime: '2019-03-27T23:29:42.154Z' + totalTime: 1001 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/variables.yml - id: 0025420641_4f35c4ee22_834654 + id: 2029380929_dc27d5da4e_373985 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.752Z' - endTime: '2019-03-27T03:25:42.817Z' - totalTime: 65 + startTime: '2019-03-27T23:29:39.043Z' + endTime: '2019-03-27T23:29:39.105Z' + totalTime: 62 timeout: 5000 requisitions: - @@ -3613,14 +3613,14 @@ requisitions: valid: true description: 'Expected ''store.otherKey / 2'' to be equal to ''1''. Received ''1''' name: 'Requisition #0' - id: 0025420643_a965de8a99_967401 + id: 2029380930_915f7da296_402215 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.766Z' - endTime: '2019-03-27T03:25:42.805Z' - totalTime: 39 + startTime: '2019-03-27T23:29:39.055Z' + endTime: '2019-03-27T23:29:39.093Z' + totalTime: 38 timeout: 5000 requisitions: [] - @@ -3639,14 +3639,14 @@ requisitions: valid: true description: 'Expected ''2 * 5'' to be equal to ''10''. Received ''10''' name: 'Requisition #1' - id: 0025420644_02fb9801d0_857225 + id: 2029380932_9075aab192_14172 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.812Z' - endTime: '2019-03-27T03:25:42.815Z' - totalTime: 3 + startTime: '2019-03-27T23:29:39.099Z' + endTime: '2019-03-27T23:29:39.101Z' + totalTime: 2 timeout: 5000 requisitions: [] - @@ -3661,28 +3661,28 @@ requisitions: valid: true description: 'Expected ''requisition.number'' to be equal to ''123''. Received ''123''' name: examples/number.json - id: 0025420646_d70bdd7d5f_982953 + id: 2029380933_2551f475ab_8025 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.752Z' - endTime: '2019-03-27T03:25:42.803Z' - totalTime: 51 + startTime: '2019-03-27T23:29:39.044Z' + endTime: '2019-03-27T23:29:39.090Z' + totalTime: 46 timeout: 5000 requisitions: [] - valid: true tests: [] name: examples/requisition-navigation.yaml - id: 0025420648_cfb886e8fa_732895 + id: 2029380935_b678970db3_167093 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.753Z' - endTime: '2019-03-27T03:25:42.817Z' - totalTime: 64 + startTime: '2019-03-27T23:29:39.044Z' + endTime: '2019-03-27T23:29:39.105Z' + totalTime: 61 timeout: 5000 requisitions: - @@ -3693,14 +3693,14 @@ requisitions: valid: true description: 'Expected ''requisition.parent.requisitions[1].name'' to be equal to ''second''. Received ''second''' name: first - id: 0025420650_ba0d7aa88f_630122 + id: 2029380936_14bb955430_157832 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.767Z' - endTime: '2019-03-27T03:25:42.805Z' - totalTime: 38 + startTime: '2019-03-27T23:29:39.056Z' + endTime: '2019-03-27T23:29:39.093Z' + totalTime: 37 timeout: 5000 requisitions: [] - @@ -3711,13 +3711,13 @@ requisitions: valid: true description: 'Expected ''requisition.parent.requisitions[0].name'' to be equal to ''first''. Received ''first''' name: second - id: 0025420651_e2d77d685d_45548 + id: 2029380938_f5a9656162_813830 ignored: false subscriptions: [] publishers: [] time: - startTime: '2019-03-27T03:25:42.812Z' - endTime: '2019-03-27T03:25:42.815Z' - totalTime: 3 + startTime: '2019-03-27T23:29:39.100Z' + endTime: '2019-03-27T23:29:39.101Z' + totalTime: 1 timeout: 5000 requisitions: [] diff --git a/package.json b/package.json index b6cb0b1e..625e8470 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,11 @@ "type": "git", "url": "git+https://github.com/enqueuer-land/enqueuer" }, - "author": "Virgs", + "author": { + "name": "Virgs", + "email": "guilherme.moraes@outlook.com", + "url": "http://github.com/lopidio" + }, "license": "MIT", "bin": { "enqueuer": "js/index.js", diff --git a/src/configurations/command-line-configuration.test.ts b/src/configurations/command-line-configuration.test.ts index 24134b61..b95b5827 100644 --- a/src/configurations/command-line-configuration.test.ts +++ b/src/configurations/command-line-configuration.test.ts @@ -46,6 +46,11 @@ describe('CommandLineConfiguration', () => { process.exit = exitMock; }); + it('should not throw', () => { + // @ts-ignore + expect(() => new CommandLineConfiguration(undefined)).not.toThrow(); + }); + it('verbosity -b', () => { const logLevel = 'info'; const commandLineConfiguration = new CommandLineConfiguration(['node', 'test', '-b', logLevel]); @@ -252,11 +257,6 @@ describe('CommandLineConfiguration', () => { expect(commandLineConfiguration.getTestFilesIgnoringOthers()).toEqual(['file', 'file2']); }); - it('handle null process.argv', () => { - // @ts-ignore - expect(() => new CommandLineConfiguration()).toThrow(); - }); - it('getStore -s', () => { const option = ['-s', '--store']; const store: any = { diff --git a/src/configurations/command-line-configuration.ts b/src/configurations/command-line-configuration.ts index d81c5c08..25faeb9a 100644 --- a/src/configurations/command-line-configuration.ts +++ b/src/configurations/command-line-configuration.ts @@ -1,5 +1,6 @@ import {Command} from 'commander'; import {DynamicModulesManager} from '../plugins/dynamic-modules-manager'; +import {Logger} from '../loggers/logger'; const packageJson = require('../../package.json'); @@ -33,7 +34,13 @@ export class CommandLineConfiguration { .option('-A, --add-file-and-ignore-others ', 'add file to be tested and ignore others', (val: string) => this.testFilesIgnoringOthers.push(val), []); commander.on('--help', () => this.helpDescription()); - this.parsedCommandLine = commander.parse(commandLineArguments); + try { + this.parsedCommandLine = commander.parse(commandLineArguments || ['path', 'enqueuer']); + } catch (err) { + Logger.error(`Error parsing command line: ${err}`); + this.parsedCommandLine = {}; + } + } public verifyPrematureActions(): void { diff --git a/src/configurations/configuration.ts b/src/configurations/configuration.ts index 9492a16c..28f16042 100644 --- a/src/configurations/configuration.ts +++ b/src/configurations/configuration.ts @@ -19,8 +19,7 @@ export class Configuration { private commandLineConfiguration: CommandLineConfiguration; private constructor() { - const commandLineArgs = process.env.NODE_ENV === 'TEST' ? ['path', 'enqueuer'] : process.argv; - this.commandLineConfiguration = new CommandLineConfiguration(commandLineArgs); + this.commandLineConfiguration = new CommandLineConfiguration(process.argv); const fileName = this.commandLineConfiguration.getConfigFileName(); this.adjustFromFile(fileName); this.adjustFromCommandLine();