@appium/base-driver 8.2.3 → 8.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/build/lib/basedriver/capabilities.js +2 -4
  2. package/build/lib/basedriver/commands/event.js +2 -4
  3. package/build/lib/basedriver/commands/find.js +5 -14
  4. package/build/lib/basedriver/commands/index.js +2 -4
  5. package/build/lib/basedriver/commands/log.js +4 -9
  6. package/build/lib/basedriver/commands/session.js +19 -30
  7. package/build/lib/basedriver/commands/settings.js +5 -11
  8. package/build/lib/basedriver/commands/timeout.js +11 -18
  9. package/build/lib/basedriver/desired-caps.js +2 -4
  10. package/build/lib/basedriver/device-settings.js +15 -5
  11. package/build/lib/basedriver/driver.js +36 -23
  12. package/build/lib/basedriver/helpers.js +10 -12
  13. package/build/lib/basedriver/logger.js +2 -4
  14. package/build/lib/constants.js +2 -4
  15. package/build/lib/express/crash.js +2 -4
  16. package/build/lib/express/express-logging.js +3 -5
  17. package/build/lib/express/idempotency.js +3 -5
  18. package/build/lib/express/logger.js +2 -4
  19. package/build/lib/express/middleware.js +2 -4
  20. package/build/lib/express/server.js +2 -4
  21. package/build/lib/express/static.js +2 -4
  22. package/build/lib/express/websocket.js +2 -4
  23. package/build/lib/helpers/capabilities.js +37 -0
  24. package/build/lib/index.js +4 -8
  25. package/build/lib/jsonwp-proxy/protocol-converter.js +19 -15
  26. package/build/lib/jsonwp-proxy/proxy.js +20 -15
  27. package/build/lib/jsonwp-status/status.js +2 -4
  28. package/build/lib/protocol/errors.js +2 -4
  29. package/build/lib/protocol/helpers.js +2 -4
  30. package/build/lib/protocol/index.js +2 -4
  31. package/build/lib/protocol/protocol.js +37 -30
  32. package/build/lib/protocol/routes.js +68 -4
  33. package/build/lib/protocol/validators.js +2 -4
  34. package/build/test/basedriver/README.md +5 -0
  35. package/build/test/basedriver/driver-e2e-tests.js +2 -4
  36. package/build/test/basedriver/driver-tests.js +12 -17
  37. package/build/test/basedriver/index.js +2 -4
  38. package/build/test/e2e/basedriver/driver.e2e.spec.js +15 -0
  39. package/build/test/e2e/basedriver/helpers.e2e.spec.js +192 -0
  40. package/build/test/e2e/basedriver/websockets.e2e.spec.js +82 -0
  41. package/build/test/e2e/express/server.e2e.spec.js +159 -0
  42. package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +59 -0
  43. package/build/test/e2e/protocol/fake-driver.js +163 -0
  44. package/build/test/e2e/protocol/helpers.js +25 -0
  45. package/build/test/e2e/protocol/protocol.e2e.spec.js +1186 -0
  46. package/build/test/helpers.js +2 -4
  47. package/build/test/unit/basedriver/capabilities.spec.js +672 -0
  48. package/build/test/unit/basedriver/capability.spec.js +353 -0
  49. package/build/test/unit/basedriver/commands/event.spec.js +110 -0
  50. package/build/test/unit/basedriver/commands/log.spec.js +85 -0
  51. package/build/test/unit/basedriver/driver.spec.js +15 -0
  52. package/build/test/unit/basedriver/helpers.spec.js +151 -0
  53. package/build/test/unit/basedriver/timeout.spec.js +135 -0
  54. package/build/test/unit/express/server.spec.js +155 -0
  55. package/build/test/unit/express/static.spec.js +26 -0
  56. package/build/test/unit/jsonwp-proxy/mock-request.js +91 -0
  57. package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +171 -0
  58. package/build/test/unit/jsonwp-proxy/proxy.spec.js +292 -0
  59. package/build/test/unit/jsonwp-proxy/url.spec.js +165 -0
  60. package/build/test/unit/jsonwp-status/status.spec.js +34 -0
  61. package/build/test/unit/protocol/errors.spec.js +390 -0
  62. package/build/test/unit/protocol/routes.spec.js +80 -0
  63. package/build/test/unit/protocol/validator.spec.js +149 -0
  64. package/lib/basedriver/commands/find.js +3 -6
  65. package/lib/basedriver/commands/log.js +2 -4
  66. package/lib/basedriver/commands/session.js +21 -22
  67. package/lib/basedriver/commands/settings.js +3 -5
  68. package/lib/basedriver/commands/timeout.js +9 -10
  69. package/lib/basedriver/device-settings.js +10 -1
  70. package/lib/basedriver/driver.js +36 -12
  71. package/lib/basedriver/helpers.js +13 -11
  72. package/lib/express/express-logging.js +1 -1
  73. package/lib/express/idempotency.js +1 -1
  74. package/lib/helpers/capabilities.js +25 -0
  75. package/lib/index.js +2 -2
  76. package/lib/jsonwp-proxy/protocol-converter.js +14 -13
  77. package/lib/jsonwp-proxy/proxy.js +16 -12
  78. package/lib/protocol/protocol.js +34 -29
  79. package/lib/protocol/routes.js +60 -1
  80. package/package.json +36 -24
  81. package/test/basedriver/README.md +5 -0
  82. package/test/basedriver/driver-e2e-tests.js +1 -1
  83. package/test/basedriver/driver-tests.js +12 -7
  84. package/build/lib/protocol/sessions-cache.js +0 -88
  85. package/build/test/basedriver/capabilities-specs.js +0 -632
  86. package/build/test/basedriver/capability-specs.js +0 -396
  87. package/build/test/basedriver/commands/event-specs.js +0 -112
  88. package/build/test/basedriver/commands/log-specs.js +0 -80
  89. package/build/test/basedriver/driver-e2e-specs.js +0 -17
  90. package/build/test/basedriver/driver-specs.js +0 -17
  91. package/build/test/basedriver/helpers-e2e-specs.js +0 -194
  92. package/build/test/basedriver/helpers-specs.js +0 -153
  93. package/build/test/basedriver/timeout-specs.js +0 -139
  94. package/build/test/basedriver/websockets-e2e-specs.js +0 -84
  95. package/build/test/express/server-e2e-specs.js +0 -156
  96. package/build/test/express/server-specs.js +0 -151
  97. package/build/test/express/static-specs.js +0 -23
  98. package/build/test/jsonwp-proxy/mock-request.js +0 -93
  99. package/build/test/jsonwp-proxy/protocol-converter-specs.js +0 -173
  100. package/build/test/jsonwp-proxy/proxy-e2e-specs.js +0 -61
  101. package/build/test/jsonwp-proxy/proxy-specs.js +0 -294
  102. package/build/test/jsonwp-proxy/url-specs.js +0 -167
  103. package/build/test/jsonwp-status/status-specs.js +0 -36
  104. package/build/test/protocol/errors-specs.js +0 -388
  105. package/build/test/protocol/fake-driver.js +0 -168
  106. package/build/test/protocol/helpers.js +0 -27
  107. package/build/test/protocol/protocol-e2e-specs.js +0 -1182
  108. package/build/test/protocol/routes-specs.js +0 -82
  109. package/build/test/protocol/validator-specs.js +0 -151
  110. package/lib/protocol/sessions-cache.js +0 -74
  111. package/test/basedriver/capabilities-specs.js +0 -505
  112. package/test/basedriver/capability-specs.js +0 -409
  113. package/test/basedriver/commands/event-specs.js +0 -74
  114. package/test/basedriver/commands/log-specs.js +0 -70
  115. package/test/basedriver/driver-e2e-specs.js +0 -8
  116. package/test/basedriver/driver-specs.js +0 -8
  117. package/test/basedriver/fixtures/BadZippedApp.zip +0 -1
  118. package/test/basedriver/fixtures/FakeAndroidApp.apk +0 -1
  119. package/test/basedriver/fixtures/FakeAndroidApp.asd +0 -0
  120. package/test/basedriver/fixtures/FakeIOSApp.app +0 -1
  121. package/test/basedriver/fixtures/FakeIOSApp.app.zip +0 -0
  122. package/test/basedriver/fixtures/FakeIOSApp.ipa +0 -0
  123. package/test/basedriver/fixtures/custom-element-finder-bad.js +0 -5
  124. package/test/basedriver/fixtures/custom-element-finder.js +0 -29
  125. package/test/basedriver/helpers-e2e-specs.js +0 -187
  126. package/test/basedriver/helpers-specs.js +0 -137
  127. package/test/basedriver/timeout-specs.js +0 -133
  128. package/test/basedriver/websockets-e2e-specs.js +0 -75
@@ -1,139 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _lib = _interopRequireDefault(require("../../lib"));
8
-
9
- var _sinon = _interopRequireDefault(require("sinon"));
10
-
11
- describe('timeout', function () {
12
- let driver = new _lib.default();
13
- let implicitWaitSpy, newCommandTimeoutSpy;
14
- before(function () {
15
- implicitWaitSpy = _sinon.default.spy(driver, 'setImplicitWait');
16
- newCommandTimeoutSpy = _sinon.default.spy(driver, 'setNewCommandTimeout');
17
- });
18
- beforeEach(function () {
19
- driver.implicitWaitMs = 0;
20
- });
21
- afterEach(function () {
22
- implicitWaitSpy.resetHistory();
23
- newCommandTimeoutSpy.resetHistory();
24
- });
25
- describe('timeouts', function () {
26
- describe('errors', function () {
27
- it('should throw an error if something random is sent', async function () {
28
- await driver.timeouts('random timeout', 'howdy').should.eventually.be.rejected;
29
- });
30
- it('should throw an error if timeout is negative', async function () {
31
- await driver.timeouts('random timeout', -42).should.eventually.be.rejected;
32
- });
33
- it('should throw an errors if timeout type is unknown', async function () {
34
- await driver.timeouts('random timeout', 42).should.eventually.be.rejected;
35
- });
36
- it('should throw an error if something random is sent to scriptDuration', async function () {
37
- await driver.timeouts(undefined, undefined, 123, undefined, undefined).should.eventually.be.rejected;
38
- });
39
- it('should throw an error if something random is sent to pageLoadDuration', async function () {
40
- await driver.timeouts(undefined, undefined, undefined, 123, undefined).should.eventually.be.rejected;
41
- });
42
- });
43
- describe('implicit wait', function () {
44
- it('should call setImplicitWait when given an integer', async function () {
45
- await driver.timeouts('implicit', 42);
46
- implicitWaitSpy.calledOnce.should.be.true;
47
- implicitWaitSpy.firstCall.args[0].should.equal(42);
48
- driver.implicitWaitMs.should.eql(42);
49
- });
50
- it('should call setImplicitWait when given a string', async function () {
51
- await driver.timeouts('implicit', '42');
52
- implicitWaitSpy.calledOnce.should.be.true;
53
- implicitWaitSpy.firstCall.args[0].should.equal(42);
54
- driver.implicitWaitMs.should.eql(42);
55
- });
56
- it('should call setImplicitWait when given an integer to implicitDuration', async function () {
57
- await driver.timeouts(undefined, undefined, undefined, undefined, 42);
58
- implicitWaitSpy.calledOnce.should.be.true;
59
- implicitWaitSpy.firstCall.args[0].should.equal(42);
60
- driver.implicitWaitMs.should.eql(42);
61
- });
62
- it('should call setImplicitWait when given a string to implicitDuration', async function () {
63
- await driver.timeouts(undefined, undefined, undefined, undefined, '42');
64
- implicitWaitSpy.calledOnce.should.be.true;
65
- implicitWaitSpy.firstCall.args[0].should.equal(42);
66
- driver.implicitWaitMs.should.eql(42);
67
- });
68
- });
69
- });
70
- describe('implicitWait', function () {
71
- it('should call setImplicitWait when given an integer', async function () {
72
- await driver.implicitWait(42);
73
- implicitWaitSpy.calledOnce.should.be.true;
74
- implicitWaitSpy.firstCall.args[0].should.equal(42);
75
- driver.implicitWaitMs.should.eql(42);
76
- });
77
- it('should call setImplicitWait when given a string', async function () {
78
- await driver.implicitWait('42');
79
- implicitWaitSpy.calledOnce.should.be.true;
80
- implicitWaitSpy.firstCall.args[0].should.equal(42);
81
- driver.implicitWaitMs.should.eql(42);
82
- });
83
- it('should throw an error if something random is sent', async function () {
84
- await driver.implicitWait('howdy').should.eventually.be.rejected;
85
- });
86
- it('should throw an error if timeout is negative', async function () {
87
- await driver.implicitWait(-42).should.eventually.be.rejected;
88
- });
89
- });
90
- describe('set implicit wait', function () {
91
- it('should set the implicit wait with an integer', function () {
92
- driver.setImplicitWait(42);
93
- driver.implicitWaitMs.should.eql(42);
94
- });
95
- describe('with managed driver', function () {
96
- let managedDriver1 = new _lib.default();
97
- let managedDriver2 = new _lib.default();
98
- before(function () {
99
- driver.addManagedDriver(managedDriver1);
100
- driver.addManagedDriver(managedDriver2);
101
- });
102
- after(function () {
103
- driver.managedDrivers = [];
104
- });
105
- it('should set the implicit wait on managed drivers', function () {
106
- driver.setImplicitWait(42);
107
- driver.implicitWaitMs.should.eql(42);
108
- managedDriver1.implicitWaitMs.should.eql(42);
109
- managedDriver2.implicitWaitMs.should.eql(42);
110
- });
111
- });
112
- });
113
- describe('set new command timeout', function () {
114
- it('should set the new command timeout with an integer', function () {
115
- driver.setNewCommandTimeout(42);
116
- driver.newCommandTimeoutMs.should.eql(42);
117
- });
118
- describe('with managed driver', function () {
119
- let managedDriver1 = new _lib.default();
120
- let managedDriver2 = new _lib.default();
121
- before(function () {
122
- driver.addManagedDriver(managedDriver1);
123
- driver.addManagedDriver(managedDriver2);
124
- });
125
- after(function () {
126
- driver.managedDrivers = [];
127
- });
128
- it('should set the new command timeout on managed drivers', function () {
129
- driver.setNewCommandTimeout(42);
130
- driver.newCommandTimeoutMs.should.eql(42);
131
- managedDriver1.newCommandTimeoutMs.should.eql(42);
132
- managedDriver2.newCommandTimeoutMs.should.eql(42);
133
- });
134
- });
135
- });
136
- });require('source-map-support').install();
137
-
138
-
139
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci90aW1lb3V0LXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiZHJpdmVyIiwiQmFzZURyaXZlciIsImltcGxpY2l0V2FpdFNweSIsIm5ld0NvbW1hbmRUaW1lb3V0U3B5IiwiYmVmb3JlIiwic2lub24iLCJzcHkiLCJiZWZvcmVFYWNoIiwiaW1wbGljaXRXYWl0TXMiLCJhZnRlckVhY2giLCJyZXNldEhpc3RvcnkiLCJpdCIsInRpbWVvdXRzIiwic2hvdWxkIiwiZXZlbnR1YWxseSIsImJlIiwicmVqZWN0ZWQiLCJ1bmRlZmluZWQiLCJjYWxsZWRPbmNlIiwidHJ1ZSIsImZpcnN0Q2FsbCIsImFyZ3MiLCJlcXVhbCIsImVxbCIsImltcGxpY2l0V2FpdCIsInNldEltcGxpY2l0V2FpdCIsIm1hbmFnZWREcml2ZXIxIiwibWFuYWdlZERyaXZlcjIiLCJhZGRNYW5hZ2VkRHJpdmVyIiwiYWZ0ZXIiLCJtYW5hZ2VkRHJpdmVycyIsInNldE5ld0NvbW1hbmRUaW1lb3V0IiwibmV3Q29tbWFuZFRpbWVvdXRNcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBS0FBLFFBQVEsQ0FBQyxTQUFELEVBQVksWUFBWTtBQUM5QixNQUFJQyxNQUFNLEdBQUcsSUFBSUMsWUFBSixFQUFiO0FBQ0EsTUFBSUMsZUFBSixFQUFxQkMsb0JBQXJCO0FBQ0FDLEVBQUFBLE1BQU0sQ0FBQyxZQUFZO0FBQ2pCRixJQUFBQSxlQUFlLEdBQUdHLGVBQU1DLEdBQU4sQ0FBVU4sTUFBVixFQUFrQixpQkFBbEIsQ0FBbEI7QUFDQUcsSUFBQUEsb0JBQW9CLEdBQUdFLGVBQU1DLEdBQU4sQ0FBVU4sTUFBVixFQUFrQixzQkFBbEIsQ0FBdkI7QUFDRCxHQUhLLENBQU47QUFJQU8sRUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJQLElBQUFBLE1BQU0sQ0FBQ1EsY0FBUCxHQUF3QixDQUF4QjtBQUNELEdBRlMsQ0FBVjtBQUdBQyxFQUFBQSxTQUFT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b250ZW50IjpbImltcG9ydCBCYXNlRHJpdmVyIGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgc2lub24gZnJvbSAnc2lub24nO1xuXG5cblxuXG5kZXNjcmliZSgndGltZW91dCcsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGRyaXZlciA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gIGxldCBpbXBsaWNpdFdhaXRTcHksIG5ld0NvbW1hbmRUaW1lb3V0U3B5O1xuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGltcGxpY2l0V2FpdFNweSA9IHNpbm9uLnNweShkcml2ZXIsICdzZXRJbXBsaWNpdFdhaXQnKTtcbiAgICBuZXdDb21tYW5kVGltZW91dFNweSA9IHNpbm9uLnNweShkcml2ZXIsICdzZXROZXdDb21tYW5kVGltZW91dCcpO1xuICB9KTtcbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zID0gMDtcbiAgfSk7XG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgaW1wbGljaXRXYWl0U3B5LnJlc2V0SGlzdG9yeSgpO1xuICAgIG5ld0NvbW1hbmRUaW1lb3V0U3B5LnJlc2V0SGlzdG9yeSgpO1xuICB9KTtcbiAgZGVzY3JpYmUoJ3RpbWVvdXRzJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCdlcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHNvbWV0aGluZyByYW5kb20gaXMgc2VudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKCdyYW5kb20gdGltZW91dCcsICdob3dkeScpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHRpbWVvdXQgaXMgbmVnYXRpdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cygncmFuZG9tIHRpbWVvdXQnLCAtNDIpLnNob3VsZC5ldmVudHVhbGx5LmJlLnJlamVjdGVkO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9ycyBpZiB0aW1lb3V0IHR5cGUgaXMgdW5rbm93bicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKCdyYW5kb20gdGltZW91dCcsIDQyKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiBzb21ldGhpbmcgcmFuZG9tIGlzIHNlbnQgdG8gc2NyaXB0RHVyYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgMTIzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgc29tZXRoaW5nIHJhbmRvbSBpcyBzZW50IHRvIHBhZ2VMb2FkRHVyYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGRyaXZlci50aW1lb3V0cyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAxMjMsIHVuZGVmaW5lZCkuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnaW1wbGljaXQgd2FpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhbiBpbnRlZ2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHMoJ2ltcGxpY2l0JywgNDIpO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgaW1wbGljaXRXYWl0U3B5LmZpcnN0Q2FsbC5hcmdzWzBdLnNob3VsZC5lcXVhbCg0Mik7XG4gICAgICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBjYWxsIHNldEltcGxpY2l0V2FpdCB3aGVuIGdpdmVuIGEgc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHMoJ2ltcGxpY2l0JywgJzQyJyk7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgc2V0SW1wbGljaXRXYWl0IHdoZW4gZ2l2ZW4gYW4gaW50ZWdlciB0byBpbXBsaWNpdER1cmF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBkcml2ZXIudGltZW91dHModW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCA0Mik7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGNhbGwgc2V0SW1wbGljaXRXYWl0IHdoZW4gZ2l2ZW4gYSBzdHJpbmcgdG8gaW1wbGljaXREdXJhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgZHJpdmVyLnRpbWVvdXRzKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJzQyJyk7XG4gICAgICAgIGltcGxpY2l0V2FpdFNweS5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBpbXBsaWNpdFdhaXRTcHkuZmlyc3RDYWxsLmFyZ3NbMF0uc2hvdWxkLmVxdWFsKDQyKTtcbiAgICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnaW1wbGljaXRXYWl0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhbiBpbnRlZ2VyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZHJpdmVyLmltcGxpY2l0V2FpdCg0Mik7XG4gICAgICBpbXBsaWNpdFdhaXRTcHkuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGltcGxpY2l0V2FpdFNweS5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoNDIpO1xuICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgY2FsbCBzZXRJbXBsaWNpdFdhaXQgd2hlbiBnaXZlbiBhIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGRyaXZlci5pbXBsaWNpdFdhaXQoJzQyJyk7XG4gICAgICBpbXBsaWNpdFdhaXRTcHkuY2FsbGVkT25jZS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgIGltcGxpY2l0V2FpdFNweS5maXJzdENhbGwuYXJnc1swXS5zaG91bGQuZXF1YWwoNDIpO1xuICAgICAgZHJpdmVyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgaWYgc29tZXRoaW5nIHJhbmRvbSBpcyBzZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgZHJpdmVyLmltcGxpY2l0V2FpdCgnaG93ZHknKS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZDtcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIHRpbWVvdXQgaXMgbmVnYXRpdmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBkcml2ZXIuaW1wbGljaXRXYWl0KC00Mikuc2hvdWxkLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWQ7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXQgaW1wbGljaXQgd2FpdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCB0aGUgaW1wbGljaXQgd2FpdCB3aXRoIGFuIGludGVnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkcml2ZXIuc2V0SW1wbGljaXRXYWl0KDQyKTtcbiAgICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnd2l0aCBtYW5hZ2VkIGRyaXZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCBtYW5hZ2VkRHJpdmVyMSA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgICBsZXQgbWFuYWdlZERyaXZlcjIgPSBuZXcgQmFzZURyaXZlcigpO1xuICAgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZHJpdmVyLmFkZE1hbmFnZWREcml2ZXIobWFuYWdlZERyaXZlcjEpO1xuICAgICAgICBkcml2ZXIuYWRkTWFuYWdlZERyaXZlcihtYW5hZ2VkRHJpdmVyMik7XG4gICAgICB9KTtcbiAgICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZHJpdmVyLm1hbmFnZWREcml2ZXJzID0gW107XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgc2V0IHRoZSBpbXBsaWNpdCB3YWl0IG9uIG1hbmFnZWQgZHJpdmVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZHJpdmVyLnNldEltcGxpY2l0V2FpdCg0Mik7XG4gICAgICAgIGRyaXZlci5pbXBsaWNpdFdhaXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjEuaW1wbGljaXRXYWl0TXMuc2hvdWxkLmVxbCg0Mik7XG4gICAgICAgIG1hbmFnZWREcml2ZXIyLmltcGxpY2l0V2FpdE1zLnNob3VsZC5lcWwoNDIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBkZXNjcmliZSgnc2V0IG5ldyBjb21tYW5kIHRpbWVvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgdGhlIG5ldyBjb21tYW5kIHRpbWVvdXQgd2l0aCBhbiBpbnRlZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgZHJpdmVyLnNldE5ld0NvbW1hbmRUaW1lb3V0KDQyKTtcbiAgICAgIGRyaXZlci5uZXdDb21tYW5kVGltZW91dE1zLnNob3VsZC5lcWwoNDIpO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCd3aXRoIG1hbmFnZWQgZHJpdmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IG1hbmFnZWREcml2ZXIxID0gbmV3IEJhc2VEcml2ZXIoKTtcbiAgICAgIGxldCBtYW5hZ2VkRHJpdmVyMiA9IG5ldyBCYXNlRHJpdmVyKCk7XG4gICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIuYWRkTWFuYWdlZERyaXZlcihtYW5hZ2VkRHJpdmVyMSk7XG4gICAgICAgIGRyaXZlci5hZGRNYW5hZ2VkRHJpdmVyKG1hbmFnZWREcml2ZXIyKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIubWFuYWdlZERyaXZlcnMgPSBbXTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIG5ldyBjb21tYW5kIHRpbWVvdXQgb24gbWFuYWdlZCBkcml2ZXJzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkcml2ZXIuc2V0TmV3Q29tbWFuZFRpbWVvdXQoNDIpO1xuICAgICAgICBkcml2ZXIubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjEubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgICAgbWFuYWdlZERyaXZlcjIubmV3Q29tbWFuZFRpbWVvdXRNcy5zaG91bGQuZXFsKDQyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2Jhc2Vkcml2ZXIvdGltZW91dC1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -1,84 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _lodash = _interopRequireDefault(require("lodash"));
8
-
9
- var _lib = require("../../lib");
10
-
11
- var _fakeDriver = require("../protocol/fake-driver");
12
-
13
- var _ws = _interopRequireDefault(require("ws"));
14
-
15
- var _bluebird = _interopRequireDefault(require("bluebird"));
16
-
17
- var _helpers = require("../helpers");
18
-
19
- describe('Websockets (e2e)', function () {
20
- let baseServer;
21
- let driver;
22
- let port;
23
- const SESSION_ID = 'foo';
24
- const WS_DATA = 'Hello';
25
- before(async function () {
26
- driver = new _fakeDriver.FakeDriver();
27
- driver.sessionId = SESSION_ID;
28
- port = await (0, _helpers.getTestPort)();
29
- baseServer = await (0, _lib.server)({
30
- routeConfiguringFunction: (0, _lib.routeConfiguringFunction)(driver),
31
- port
32
- });
33
- });
34
- after(async function () {
35
- await baseServer.close();
36
- });
37
- describe('web sockets support', function () {
38
- it('should be able to add websocket handler and remove it', async function () {
39
- const wss = new _ws.default.Server({
40
- noServer: true
41
- });
42
- wss.on('connection', ws => {
43
- if (ws && ws.readyState === _ws.default.OPEN) {
44
- ws.send(WS_DATA);
45
- }
46
- });
47
- const previousListenerCount = baseServer.listenerCount('upgrade');
48
- const endpoint = `${_lib.DEFAULT_WS_PATHNAME_PREFIX}/hello`;
49
- const timeout = 5000;
50
- await baseServer.addWebSocketHandler(endpoint, wss);
51
- baseServer.listenerCount('upgrade').should.be.above(previousListenerCount);
52
-
53
- _lodash.default.keys(await baseServer.getWebSocketHandlers()).length.should.eql(1);
54
-
55
- await new _bluebird.default((resolve, reject) => {
56
- const client = new _ws.default(`ws://${_helpers.TEST_HOST}:${port}${endpoint}`);
57
- client.on('connection', (ws, req) => {
58
- ws.should.not.be.empty;
59
- req.connection.remoteAddress.should.not.be.empty;
60
- });
61
- client.on('message', data => {
62
- data.should.eql(WS_DATA);
63
- resolve();
64
- });
65
- client.on('error', reject);
66
- setTimeout(() => reject(new Error('No websocket messages have been received after the timeout')), timeout);
67
- });
68
- (await baseServer.removeWebSocketHandler(endpoint)).should.be.true;
69
-
70
- _lodash.default.keys(await baseServer.getWebSocketHandlers()).length.should.eql(0);
71
-
72
- await new _bluebird.default((resolve, reject) => {
73
- const client = new _ws.default(`ws://${_helpers.TEST_HOST}:${port}${endpoint}`);
74
- client.on('message', data => reject(new Error(`No websocket messages are expected after the handler ` + `has been removed. '${data}' is received instead. `)));
75
- client.on('error', resolve);
76
- setTimeout(resolve, timeout);
77
- });
78
- baseServer.listenerCount('upgrade').should.be.above(previousListenerCount);
79
- });
80
- });
81
- });require('source-map-support').install();
82
-
83
-
84
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci93ZWJzb2NrZXRzLWUyZS1zcGVjcy5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImJhc2VTZXJ2ZXIiLCJkcml2ZXIiLCJwb3J0IiwiU0VTU0lPTl9JRCIsIldTX0RBVEEiLCJiZWZvcmUiLCJGYWtlRHJpdmVyIiwic2Vzc2lvbklkIiwicm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIiwiYWZ0ZXIiLCJjbG9zZSIsIml0Iiwid3NzIiwiV2ViU29ja2V0IiwiU2VydmVyIiwibm9TZXJ2ZXIiLCJvbiIsIndzIiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJzZW5kIiwicHJldmlvdXNMaXN0ZW5lckNvdW50IiwibGlzdGVuZXJDb3VudCIsImVuZHBvaW50IiwiREVGQVVMVF9XU19QQVRITkFNRV9QUkVGSVgiLCJ0aW1lb3V0IiwiYWRkV2ViU29ja2V0SGFuZGxlciIsInNob3VsZCIsImJlIiwiYWJvdmUiLCJfIiwia2V5cyIsImdldFdlYlNvY2tldEhhbmRsZXJzIiwibGVuZ3RoIiwiZXFsIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJjbGllbnQiLCJURVNUX0hPU1QiLCJyZXEiLCJub3QiLCJlbXB0eSIsImNvbm5lY3Rpb24iLCJyZW1vdGVBZGRyZXNzIiwiZGF0YSIsInNldFRpbWVvdXQiLCJFcnJvciIsInJlbW92ZVdlYlNvY2tldEhhbmRsZXIiLCJ0cnVlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQUEsUUFBUSxDQUFDLGtCQUFELEVBQXFCLFlBQVk7QUFDdkMsTUFBSUMsVUFBSjtBQUNBLE1BQUlDLE1BQUo7QUFDQSxNQUFJQyxJQUFKO0FBQ0EsUUFBTUMsVUFBVSxHQUFHLEtBQW5CO0FBQ0EsUUFBTUMsT0FBTyxHQUFHLE9BQWhCO0FBRUFDLEVBQUFBLE1BQU0sQ0FBQyxrQkFBa0I7QUFDdkJKLElBQUFBLE1BQU0sR0FBRyxJQUFJSyxzQkFBSixFQUFUO0FBQ0FMLElBQUFBLE1BQU0sQ0FBQ00sU0FBUCxHQUFtQkosVUFBbkI7QUFDQUQsSUFBQUEsSUFBSSxHQUFHLE1BQU0sMkJBQWI7QUFDQUYsSUFBQUEsVUFBVSxHQUFHLE1BQU0saUJBQU87QUFDeEJRLE1BQUFBLHdCQUF3QixFQUFFLG1DQUF5QlAsTUFBekIsQ0FERjtBQUV4QkMsTUFBQUE7QUFGd0IsS0FBUCxDQUFuQjtBQUlELEdBUkssQ0FBTjtBQVNBTyxFQUFBQSxLQUFLLENBQUMsa0JBQWtCO0FBQ3RCLFVBQU1ULFVBQVUsQ0FBQ1UsS0FBWCxFQUFOO0FBQ0QsR0FGSSxDQUFMO0FBSUFYLEVBQUFBLFFBQVEsQ0FBQyxxQkFBRCxFQUF3QixZQUFZO0FBQzFDWSxJQUFBQSxFQUFFLENBQUMsdURBQUQsRUFBMEQsa0JBQWtCO0FBQzVFLFlBQU1DLEdBQUcsR0FBRyxJQUFJQyxZQUFVQyxNQUFkLENBQXFCO0FBQy9CQyxRQUFBQSxRQUFRLEVBQUU7QUFEcUIsT0FBckIsQ0FBWjtBQUdBSCxNQUFBQSxHQUFHLENBQUNJLEVBQUosQ0FBTyxZQUFQLEVBQXNCQyxFQUFELElBQVE7QUFDM0IsWUFBSUEsRUFBRSxJQUFJQSxFQUFFLENBQUNDLFVBQUgsS0FBa0JMLFlBQVVNLElBQXRDLEVBQTRDO0FBQzFDRixVQUFBQSxFQUFFLENBQUNHLElBQUgsQ0FBUWhCLE9BQVI7QUFDRDtBQUNGLE9BSkQ7QUFLQSxZQUFNaUIscUJBQXFCLEdBQUdyQixVQUFVLENBQUNzQixhQUFYLENBQXlCLFNBQXpCLENBQTlCO0FBQ0EsWUFBTUMsUUFBUSxHQUFJLEdBQUVDLCtCQUEyQixRQUEvQztBQUNBLFlBQU1DLE9BQU8sR0FBRyxJQUFoQjtBQUNBLFlBQU16QixVQUFVLENBQUMwQixtQkFBWCxDQUErQkgsUUFBL0IsRUFBeUNYLEdBQXpDLENBQU47QUFDQVosTUFBQUEsVUFBVSxDQUFDc0IsYUFBWCxDQUF5QixTQUF6QixFQUFvQ0ssTUFBcEMsQ0FBMkNDLEVBQTNDLENBQThDQyxLQUE5QyxDQUFvRFIscUJBQXBEOztBQUNBUyxzQkFBRUMsSUFBRixDQUFPLE1BQU0vQixVQUFVLENBQUNnQyxvQkFBWCxFQUFiLEVBQWdEQyxNQUFoRCxDQUF1RE4sTUFBdkQsQ0FBOERPLEdBQTlELENBQWtFLENBQWxFOztBQUNBLFlBQU0sSUFBSUMsaUJBQUosQ0FBTSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDL0IsY0FBTUMsTUFBTSxHQUFHLElBQUl6QixXQUFKLENBQWUsUUFBTzBCLGtCQUFVLElBQUdyQyxJQUFLLEdBQUVxQixRQUFTLEVBQW5ELENBQWY7QUFDQWUsUUFBQUEsTUFBTSxDQUFDdEIsRUFBUCxDQUFVLFlBQVYsRUFBd0IsQ0FBQ0MsRUFBRCxFQUFLdUIsR0FBTCxLQUFhO0FBQ25DdkIsVUFBQUEsRUFBRSxDQUFDVSxNQUFILENBQVVjLEdBQVYsQ0FBY2IsRUFBZCxDQUFpQmMsS0FBakI7QUFDQUYsVUFBQUEsR0FBRyxDQUFDRyxVQUFKLENBQWVDLGFBQWYsQ0FBNkJqQixNQUE3QixDQUFvQ2MsR0FBcEMsQ0FBd0NiLEVBQXhDLENBQTJDYyxLQUEzQztBQUNELFNBSEQ7QUFJQUosUUFBQUEsTUFBTSxDQUFDdEIsRUFBUCxDQUFVLFNBQVYsRUFBc0I2QixJQUFELElBQVU7QUFDN0JBLFVBQUFBLElBQUksQ0FBQ2xCLE1BQUwsQ0FBWU8sR0FBWixDQUFnQjlCLE9BQWhCO0FBQ0FnQyxVQUFBQSxPQUFPO0FBQ1IsU0FIRDtBQUlBRSxRQUFBQSxNQUFNLENBQUN0QixFQUFQLENBQVUsT0FBVixFQUFtQnFCLE1BQW5CO0FBQ0FTLFFBQUFBLFVBQVUsQ0FBQyxNQUFNVCxNQUFNLENBQUMsSUFBSVUsS0FBSixDQUFVLDREQUFWLENBQUQsQ0FBYixFQUNDdEIsT0FERCxDQUFWO0FBRUQsT0FiSyxDQUFOO0FBZUEsT0FBQyxNQUFNekIsVUFBVSxDQUFDZ0Qsc0JBQVgsQ0FBa0N6QixRQUFsQyxDQUFQLEVBQW9ESSxNQUFwRCxDQUEyREMsRUFBM0QsQ0FBOERxQixJQUE5RDs7QUFDQW5CLHNCQUFFQyxJQUFGLENBQU8sTUFBTS9CLFVBQVUsQ0FBQ2dDLG9CQUFYLEVBQWIsRUFBZ0RDLE1BQWhELENBQXVETixNQUF2RCxDQUE4RE8sR0FBOUQsQ0FBa0UsQ0FBbEU7O0FBQ0EsWUFBTSxJQUFJQyxpQkFBSixDQUFNLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUMvQixjQUFNQyxNQUFNLEdBQUcsSUFBSXpCLFdBQUosQ0FBZSxRQUFPMEIsa0JBQVUsSUFBR3JDLElBQUssR0FBRXFCLFFBQVMsRUFBbkQsQ0FBZjtBQUNBZSxRQUFBQSxNQUFNLENBQUN0QixFQUFQLENBQVUsU0FBVixFQUFzQjZCLElBQUQsSUFDbkJSLE1BQU0sQ0FBQyxJQUFJVSxLQUFKLENBQVcsdURBQUQsR0FDQyxzQkFBcUJGLElBQUsseUJBRHJDLENBQUQsQ0FEUjtBQUlBUCxRQUFBQSxNQUFNLENBQUN0QixFQUFQLENBQVUsT0FBVixFQUFtQm9CLE9BQW5CO0FBQ0FVLFFBQUFBLFVBQVUsQ0FBQ1YsT0FBRCxFQUFVWCxPQUFWLENBQVY7QUFDRCxPQVJLLENBQU47QUFTQXpCLE1BQUFBLFVBQVUsQ0FBQ3NCLGFBQVgsQ0FBeUIsU0FBekIsRUFBb0NLLE1BQXBDLENBQTJDQyxFQUEzQyxDQUE4Q0MsS0FBOUMsQ0FBb0RSLHFCQUFwRDtBQUNELEtBMUNDLENBQUY7QUEyQ0QsR0E1Q08sQ0FBUjtBQTZDRCxDQWpFTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHNlcnZlciwgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLFxuICAgICAgICAgREVGQVVMVF9XU19QQVRITkFNRV9QUkVGSVggfSBmcm9tICcuLi8uLi9saWInO1xuaW1wb3J0IHsgRmFrZURyaXZlciB9IGZyb20gJy4uL3Byb3RvY29sL2Zha2UtZHJpdmVyJztcbmltcG9ydCBXZWJTb2NrZXQgZnJvbSAnd3MnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHtURVNUX0hPU1QsIGdldFRlc3RQb3J0fSBmcm9tICcuLi9oZWxwZXJzJztcblxuXG5kZXNjcmliZSgnV2Vic29ja2V0cyAoZTJlKScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJhc2VTZXJ2ZXI7XG4gIGxldCBkcml2ZXI7XG4gIGxldCBwb3J0O1xuICBjb25zdCBTRVNTSU9OX0lEID0gJ2Zvbyc7XG4gIGNvbnN0IFdTX0RBVEEgPSAnSGVsbG8nO1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgZHJpdmVyID0gbmV3IEZha2VEcml2ZXIoKTtcbiAgICBkcml2ZXIuc2Vzc2lvbklkID0gU0VTU0lPTl9JRDtcbiAgICBwb3J0ID0gYXdhaXQgZ2V0VGVzdFBvcnQoKTtcbiAgICBiYXNlU2VydmVyID0gYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uKGRyaXZlciksXG4gICAgICBwb3J0LFxuICAgIH0pO1xuICB9KTtcbiAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGJhc2VTZXJ2ZXIuY2xvc2UoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dlYiBzb2NrZXRzIHN1cHBvcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIGFkZCB3ZWJzb2NrZXQgaGFuZGxlciBhbmQgcmVtb3ZlIGl0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldC5TZXJ2ZXIoe1xuICAgICAgICBub1NlcnZlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgd3NzLm9uKCdjb25uZWN0aW9uJywgKHdzKSA9PiB7XG4gICAgICAgIGlmICh3cyAmJiB3cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgICAgIHdzLnNlbmQoV1NfREFUQSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJldmlvdXNMaXN0ZW5lckNvdW50ID0gYmFzZVNlcnZlci5saXN0ZW5lckNvdW50KCd1cGdyYWRlJyk7XG4gICAgICBjb25zdCBlbmRwb2ludCA9IGAke0RFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYfS9oZWxsb2A7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gNTAwMDtcbiAgICAgIGF3YWl0IGJhc2VTZXJ2ZXIuYWRkV2ViU29ja2V0SGFuZGxlcihlbmRwb2ludCwgd3NzKTtcbiAgICAgIGJhc2VTZXJ2ZXIubGlzdGVuZXJDb3VudCgndXBncmFkZScpLnNob3VsZC5iZS5hYm92ZShwcmV2aW91c0xpc3RlbmVyQ291bnQpO1xuICAgICAgXy5rZXlzKGF3YWl0IGJhc2VTZXJ2ZXIuZ2V0V2ViU29ja2V0SGFuZGxlcnMoKSkubGVuZ3RoLnNob3VsZC5lcWwoMSk7XG4gICAgICBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0ke2VuZHBvaW50fWApO1xuICAgICAgICBjbGllbnQub24oJ2Nvbm5lY3Rpb24nLCAod3MsIHJlcSkgPT4ge1xuICAgICAgICAgIHdzLnNob3VsZC5ub3QuYmUuZW1wdHk7XG4gICAgICAgICAgcmVxLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzcy5zaG91bGQubm90LmJlLmVtcHR5O1xuICAgICAgICB9KTtcbiAgICAgICAgY2xpZW50Lm9uKCdtZXNzYWdlJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBkYXRhLnNob3VsZC5lcWwoV1NfREFUQSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY2xpZW50Lm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignTm8gd2Vic29ja2V0IG1lc3NhZ2VzIGhhdmUgYmVlbiByZWNlaXZlZCBhZnRlciB0aGUgdGltZW91dCcpKSxcbiAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTtcbiAgICAgIH0pO1xuXG4gICAgICAoYXdhaXQgYmFzZVNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKGVuZHBvaW50KSkuc2hvdWxkLmJlLnRydWU7XG4gICAgICBfLmtleXMoYXdhaXQgYmFzZVNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycygpKS5sZW5ndGguc2hvdWxkLmVxbCgwKTtcbiAgICAgIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fSR7ZW5kcG9pbnR9YCk7XG4gICAgICAgIGNsaWVudC5vbignbWVzc2FnZScsIChkYXRhKSA9PlxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYE5vIHdlYnNvY2tldCBtZXNzYWdlcyBhcmUgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGhhbmRsZXIgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBgaGFzIGJlZW4gcmVtb3ZlZC4gJyR7ZGF0YX0nIGlzIHJlY2VpdmVkIGluc3RlYWQuIGApKVxuICAgICAgICApO1xuICAgICAgICBjbGllbnQub24oJ2Vycm9yJywgcmVzb2x2ZSk7XG4gICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gICAgICB9KTtcbiAgICAgIGJhc2VTZXJ2ZXIubGlzdGVuZXJDb3VudCgndXBncmFkZScpLnNob3VsZC5iZS5hYm92ZShwcmV2aW91c0xpc3RlbmVyQ291bnQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2Jhc2Vkcml2ZXIvd2Vic29ja2V0cy1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -1,156 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _lib = require("../../lib");
8
-
9
- var _axios = _interopRequireDefault(require("axios"));
10
-
11
- var _sinon = _interopRequireDefault(require("sinon"));
12
-
13
- var _bluebird = _interopRequireDefault(require("bluebird"));
14
-
15
- var _lodash = _interopRequireDefault(require("lodash"));
16
-
17
- var _helpers = require("../helpers");
18
-
19
- describe('server', function () {
20
- let hwServer;
21
- let errorStub;
22
- let port;
23
- before(async function () {
24
- port = await (0, _helpers.getTestPort)(true);
25
- errorStub = _sinon.default.stub(console, 'error');
26
-
27
- function configureRoutes(app) {
28
- app.get('/', (req, res) => {
29
- res.header['content-type'] = 'text/html';
30
- res.status(200).send('Hello World!');
31
- });
32
- app.get('/python', (req, res) => {
33
- res.status(200).send(req.headers['content-type']);
34
- });
35
- app.get('/error', () => {
36
- throw new Error('hahaha');
37
- });
38
- app.get('/pause', async (req, res) => {
39
- res.header['content-type'] = 'text/html';
40
- await _bluebird.default.delay(1000);
41
- res.status(200).send('We have waited!');
42
- });
43
- }
44
-
45
- hwServer = await (0, _lib.server)({
46
- routeConfiguringFunction: configureRoutes,
47
- port
48
- });
49
- });
50
- after(async function () {
51
- await hwServer.close();
52
- errorStub.restore();
53
- });
54
- it('should start up with our middleware', async function () {
55
- const {
56
- data
57
- } = await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/`);
58
- data.should.eql('Hello World!');
59
- });
60
- it('should fix broken context type', async function () {
61
- const {
62
- data
63
- } = await (0, _axios.default)({
64
- url: `http://${_helpers.TEST_HOST}:${port}/python`,
65
- headers: {
66
- 'user-agent': 'Python',
67
- 'content-type': 'application/x-www-form-urlencoded'
68
- }
69
- });
70
- data.should.eql('application/json; charset=utf-8');
71
- });
72
- it('should catch errors in the catchall', async function () {
73
- await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/error`).should.be.rejected;
74
- });
75
- it('should error if we try to start again on a port that is used', async function () {
76
- await (0, _lib.server)({
77
- routeConfiguringFunction() {},
78
-
79
- port
80
- }).should.be.rejectedWith(/EADDRINUSE/);
81
- });
82
- it('should not wait for the server close connections before finishing closing', async function () {
83
- let bodyPromise = _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/pause`).catch(() => {});
84
-
85
- await _bluebird.default.delay(100);
86
- let before = Date.now();
87
- await hwServer.close();
88
- (Date.now() - before).should.not.be.above(800);
89
- await bodyPromise;
90
- });
91
- it('should error if we try to start on a bad hostname', async function () {
92
- this.timeout(60000);
93
- await (0, _lib.server)({
94
- routeConfiguringFunction: _lodash.default.noop,
95
- port,
96
- hostname: 'lolcathost'
97
- }).should.be.rejectedWith(/ENOTFOUND|EADDRNOTAVAIL|EAI_AGAIN/);
98
- await (0, _lib.server)({
99
- routeConfiguringFunction: _lodash.default.noop,
100
- port,
101
- hostname: '1.1.1.1'
102
- }).should.be.rejectedWith(/EADDRNOTAVAIL/);
103
- });
104
- });
105
- describe('server plugins', function () {
106
- let hwServer;
107
- let port;
108
- before(async function () {
109
- port = await (0, _helpers.getTestPort)(true);
110
- });
111
- afterEach(async function () {
112
- try {
113
- await hwServer.close();
114
- } catch (ign) {}
115
- });
116
-
117
- function updaterWithGetRoute(route, reply) {
118
- return async (app, httpServer) => {
119
- app.get(`/${route}`, (req, res) => {
120
- res.header['content-type'] = 'text/html';
121
- res.status(200).send(reply);
122
- });
123
- httpServer[`_updated_${route}`] = true;
124
- };
125
- }
126
-
127
- it('should allow one or more plugins to update the server', async function () {
128
- hwServer = await (0, _lib.server)({
129
- routeConfiguringFunction: _lodash.default.noop,
130
- port,
131
- serverUpdaters: [updaterWithGetRoute('plugin1', 'res from plugin1 route'), updaterWithGetRoute('plugin2', 'res from plugin2 route')]
132
- });
133
- let {
134
- data
135
- } = await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/plugin1`);
136
- data.should.eql('res from plugin1 route');
137
- ({
138
- data
139
- } = await _axios.default.get(`http://${_helpers.TEST_HOST}:${port}/plugin2`));
140
- data.should.eql('res from plugin2 route');
141
- hwServer._updated_plugin1.should.be.true;
142
- hwServer._updated_plugin2.should.be.true;
143
- });
144
- it('should pass on errors from the plugin updateServer method', async function () {
145
- await (0, _lib.server)({
146
- routeConfiguringFunction: _lodash.default.noop,
147
- port,
148
- serverUpdaters: [() => {
149
- throw new Error('ugh');
150
- }]
151
- }).should.eventually.be.rejectedWith(/ugh/);
152
- });
153
- });require('source-map-support').install();
154
-
155
-
156
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZXhwcmVzcy9zZXJ2ZXItZTJlLXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaHdTZXJ2ZXIiLCJlcnJvclN0dWIiLCJwb3J0IiwiYmVmb3JlIiwic2lub24iLCJzdHViIiwiY29uc29sZSIsImNvbmZpZ3VyZVJvdXRlcyIsImFwcCIsImdldCIsInJlcSIsInJlcyIsImhlYWRlciIsInN0YXR1cyIsInNlbmQiLCJoZWFkZXJzIiwiRXJyb3IiLCJCIiwiZGVsYXkiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJhZnRlciIsImNsb3NlIiwicmVzdG9yZSIsIml0IiwiZGF0YSIsImF4aW9zIiwiVEVTVF9IT1NUIiwic2hvdWxkIiwiZXFsIiwidXJsIiwiYmUiLCJyZWplY3RlZCIsInJlamVjdGVkV2l0aCIsImJvZHlQcm9taXNlIiwiY2F0Y2giLCJEYXRlIiwibm93Iiwibm90IiwiYWJvdmUiLCJ0aW1lb3V0IiwiXyIsIm5vb3AiLCJob3N0bmFtZSIsImFmdGVyRWFjaCIsImlnbiIsInVwZGF0ZXJXaXRoR2V0Um91dGUiLCJyb3V0ZSIsInJlcGx5IiwiaHR0cFNlcnZlciIsInNlcnZlclVwZGF0ZXJzIiwiX3VwZGF0ZWRfcGx1Z2luMSIsInRydWUiLCJfdXBkYXRlZF9wbHVnaW4yIiwiZXZlbnR1YWxseSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0FBLFFBQVEsQ0FBQyxRQUFELEVBQVcsWUFBWTtBQUM3QixNQUFJQyxRQUFKO0FBQ0EsTUFBSUMsU0FBSjtBQUNBLE1BQUlDLElBQUo7QUFDQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QkQsSUFBQUEsSUFBSSxHQUFHLE1BQU0sMEJBQVksSUFBWixDQUFiO0FBQ0FELElBQUFBLFNBQVMsR0FBR0csZUFBTUMsSUFBTixDQUFXQyxPQUFYLEVBQW9CLE9BQXBCLENBQVo7O0FBQ0EsYUFBU0MsZUFBVCxDQUEwQkMsR0FB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QUFDRyxNQUFMLENBQVlDLEdBQVosQ0FBZ0Isd0JBQWhCO0FBQ0EsS0FBQztBQUFDSixNQUFBQTtBQUFELFFBQVMsTUFBTUMsZUFBTWhCLEdBQU4sQ0FBVyxVQUFTaUIsa0JBQVUsSUFBR3hCLElBQUssVUFBdEMsQ0FBaEI7QUFDQXNCLElBQUFBLElBQUksQ0FBQ0csTUFBTCxDQUFZQyxHQUFaLENBQWdCLHdCQUFoQjtBQUNBNUIsSUFBQUEsUUFBUSxDQUFDa0QsZ0JBQVQsQ0FBMEJ2QixNQUExQixDQUFpQ0csRUFBakMsQ0FBb0NxQixJQUFwQztBQUNBbkQsSUFBQUEsUUFBUSxDQUFDb0QsZ0JBQVQsQ0FBMEJ6QixNQUExQixDQUFpQ0csRUFBakMsQ0FBb0NxQixJQUFwQztBQUNELEdBZkMsQ0FBRjtBQWdCQTVCLEVBQUFBLEVBQUUsQ0FBQywyREFBRCxFQUE4RCxrQkFBa0I7QUFDaEYsVUFBTSxpQkFBTztBQUNYSixNQUFBQSx3QkFBd0IsRUFBRXFCLGdCQUFFQyxJQURqQjtBQUVYdkMsTUFBQUEsSUFGVztBQUdYK0MsTUFBQUEsY0FBYyxFQUFFLENBQUMsTUFBTTtBQUFFLGNBQU0sSUFBSWpDLEtBQUosQ0FBVSxLQUFWLENBQU47QUFBd0IsT0FBakM7QUFITCxLQUFQLEVBSUhXLE1BSkcsQ0FJSTBCLFVBSkosQ0FJZXZCLEVBSmYsQ0FJa0JFLFlBSmxCLENBSStCLEtBSi9CLENBQU47QUFLRCxHQU5DLENBQUY7QUFPRCxDQS9DTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCB7IHNlcnZlciB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1RFU1RfSE9TVCwgZ2V0VGVzdFBvcnR9IGZyb20gJy4uL2hlbHBlcnMnO1xuXG5cbmRlc2NyaWJlKCdzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBod1NlcnZlcjtcbiAgbGV0IGVycm9yU3R1YjtcbiAgbGV0IHBvcnQ7XG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KHRydWUpO1xuICAgIGVycm9yU3R1YiA9IHNpbm9uLnN0dWIoY29uc29sZSwgJ2Vycm9yJyk7XG4gICAgZnVuY3Rpb24gY29uZmlndXJlUm91dGVzIChhcHApIHtcbiAgICAgIGFwcC5nZXQoJy8nLCAocmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmhlYWRlclsnY29udGVudC10eXBlJ10gPSAndGV4dC9odG1sJztcbiAgICAgICAgcmVzLnN0YXR1cygyMDApLnNlbmQoJ0hlbGxvIFdvcmxkIScpO1xuICAgICAgfSk7XG4gICAgICBhcHAuZ2V0KCcvcHl0aG9uJywgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSk7XG4gICAgICB9KTtcbiAgICAgIGFwcC5nZXQoJy9lcnJvcicsICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYWhhaGEnKTtcbiAgICAgIH0pO1xuICAgICAgYXBwLmdldCgnL3BhdXNlJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIHJlcy5oZWFkZXJbJ2NvbnRlbnQtdHlwZSddID0gJ3RleHQvaHRtbCc7XG4gICAgICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKS5zZW5kKCdXZSBoYXZlIHdhaXRlZCEnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBod1NlcnZlciA9IGF3YWl0IHNlcnZlcih7XG4gICAgICByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb246IGNvbmZpZ3VyZVJvdXRlcyxcbiAgICAgIHBvcnQsXG4gICAgfSk7XG4gIH0pO1xuICBhZnRlcihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgaHdTZXJ2ZXIuY2xvc2UoKTtcbiAgICBlcnJvclN0dWIucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHN0YXJ0IHVwIHdpdGggb3VyIG1pZGRsZXdhcmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3MuZ2V0KGBodHRwOi8vJHtURVNUX0hPU1R9OiR7cG9ydH0vYCk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdIZWxsbyBXb3JsZCEnKTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgZml4IGJyb2tlbiBjb250ZXh0IHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgdXJsOiBgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3B5dGhvbmAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogJ1B5dGhvbicsXG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRhdGEuc2hvdWxkLmVxbCgnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBjYXRjaCBlcnJvcnMgaW4gdGhlIGNhdGNoYWxsJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGF4aW9zLmdldChgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L2Vycm9yYCkuc2hvdWxkLmJlLnJlamVjdGVkO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBlcnJvciBpZiB3ZSB0cnkgdG8gc3RhcnQgYWdhaW4gb24gYSBwb3J0IHRoYXQgaXMgdXNlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uICgpIHt9LFxuICAgICAgcG9ydCxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9FQUREUklOVVNFLyk7XG4gIH0pO1xuICBpdCgnc2hvdWxkIG5vdCB3YWl0IGZvciB0aGUgc2VydmVyIGNsb3NlIGNvbm5lY3Rpb25zIGJlZm9yZSBmaW5pc2hpbmcgY2xvc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgYm9keVByb21pc2UgPSBheGlvcy5nZXQoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9wYXVzZWApLmNhdGNoKCgpID0+IHt9KTtcblxuICAgIC8vIHJlbGlucXVpc2ggY29udHJvbCBzbyB0aGF0IHdlIGRvbid0IGNsb3NlIGJlZm9yZSB0aGUgcmVxdWVzdCBpcyByZWNlaXZlZFxuICAgIGF3YWl0IEIuZGVsYXkoMTAwKTtcblxuICAgIGxldCBiZWZvcmUgPSBEYXRlLm5vdygpO1xuICAgIGF3YWl0IGh3U2VydmVyLmNsb3NlKCk7XG4gICAgLy8gZXhwZWN0IHNsaWdodGx5IGxlc3MgdGhhbiB0aGUgcmVxdWVzdCB3YWl0ZWQsIHNpbmNlIHdlIHBhdXNlZCBhYm92ZVxuICAgIChEYXRlLm5vdygpIC0gYmVmb3JlKS5zaG91bGQubm90LmJlLmFib3ZlKDgwMCk7XG5cbiAgICBhd2FpdCBib2R5UHJvbWlzZTtcbiAgfSk7XG4gIGl0KCdzaG91bGQgZXJyb3IgaWYgd2UgdHJ5IHRvIHN0YXJ0IG9uIGEgYmFkIGhvc3RuYW1lJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudGltZW91dCg2MDAwMCk7XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogXy5ub29wLFxuICAgICAgcG9ydCxcbiAgICAgIGhvc3RuYW1lOiAnbG9sY2F0aG9zdCcsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvRU5PVEZPVU5EfEVBRERSTk9UQVZBSUx8RUFJX0FHQUlOLyk7XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogXy5ub29wLFxuICAgICAgcG9ydCxcbiAgICAgIGhvc3RuYW1lOiAnMS4xLjEuMScsXG4gICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvRUFERFJOT1RBVkFJTC8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc2VydmVyIHBsdWdpbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBod1NlcnZlcjtcbiAgbGV0IHBvcnQ7XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBwb3J0ID0gYXdhaXQgZ2V0VGVzdFBvcnQodHJ1ZSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGh3U2VydmVyLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICB9KTtcblxuICBmdW5jdGlvbiB1cGRhdGVyV2l0aEdldFJvdXRlIChyb3V0ZSwgcmVwbHkpIHtcbiAgICByZXR1cm4gYXN5bmMgKGFwcCwgaHR0cFNlcnZlcikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICAgIGFwcC5nZXQoYC8ke3JvdXRlfWAsIChyZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMuaGVhZGVyWydjb250ZW50LXR5cGUnXSA9ICd0ZXh0L2h0bWwnO1xuICAgICAgICByZXMuc3RhdHVzKDIwMCkuc2VuZChyZXBseSk7XG4gICAgICB9KTtcbiAgICAgIGh0dHBTZXJ2ZXJbYF91cGRhdGVkXyR7cm91dGV9YF0gPSB0cnVlO1xuICAgIH07XG4gIH1cblxuICBpdCgnc2hvdWxkIGFsbG93IG9uZSBvciBtb3JlIHBsdWdpbnMgdG8gdXBkYXRlIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgaHdTZXJ2ZXIgPSBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiBfLm5vb3AsXG4gICAgICBwb3J0LFxuICAgICAgc2VydmVyVXBkYXRlcnM6IFtcbiAgICAgICAgdXBkYXRlcldpdGhHZXRSb3V0ZSgncGx1Z2luMScsICdyZXMgZnJvbSBwbHVnaW4xIHJvdXRlJyksXG4gICAgICAgIHVwZGF0ZXJXaXRoR2V0Um91dGUoJ3BsdWdpbjInLCAncmVzIGZyb20gcGx1Z2luMiByb3V0ZScpLFxuICAgICAgXVxuICAgIH0pO1xuICAgIGxldCB7ZGF0YX0gPSBhd2FpdCBheGlvcy5nZXQoYGh0dHA6Ly8ke1RFU1RfSE9TVH06JHtwb3J0fS9wbHVnaW4xYCk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdyZXMgZnJvbSBwbHVnaW4xIHJvdXRlJyk7XG4gICAgKHtkYXRhfSA9IGF3YWl0IGF4aW9zLmdldChgaHR0cDovLyR7VEVTVF9IT1NUfToke3BvcnR9L3BsdWdpbjJgKSk7XG4gICAgZGF0YS5zaG91bGQuZXFsKCdyZXMgZnJvbSBwbHVnaW4yIHJvdXRlJyk7XG4gICAgaHdTZXJ2ZXIuX3VwZGF0ZWRfcGx1Z2luMS5zaG91bGQuYmUudHJ1ZTtcbiAgICBod1NlcnZlci5fdXBkYXRlZF9wbHVnaW4yLnNob3VsZC5iZS50cnVlO1xuICB9KTtcbiAgaXQoJ3Nob3VsZCBwYXNzIG9uIGVycm9ycyBmcm9tIHRoZSBwbHVnaW4gdXBkYXRlU2VydmVyIG1ldGhvZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiBfLm5vb3AsXG4gICAgICBwb3J0LFxuICAgICAgc2VydmVyVXBkYXRlcnM6IFsoKSA9PiB7IHRocm93IG5ldyBFcnJvcigndWdoJyk7fV1cbiAgICB9KS5zaG91bGQuZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoL3VnaC8pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2V4cHJlc3Mvc2VydmVyLWUyZS1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -1,151 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _lib = require("../../lib");
8
-
9
- var _server2 = require("../../lib/express/server");
10
-
11
- var _sinon = _interopRequireDefault(require("sinon"));
12
-
13
- var _helpers = require("../helpers");
14
-
15
- function fakeApp() {
16
- const app = {
17
- use: _sinon.default.spy(),
18
- all: _sinon.default.spy(),
19
- get: _sinon.default.spy(),
20
- post: _sinon.default.spy(),
21
- delete: _sinon.default.spy(),
22
- totalCount: () => app.use.callCount + app.all.callCount + app.get.callCount + app.post.callCount + app.delete.callCount
23
- };
24
- return app;
25
- }
26
-
27
- const newMethodMap = {
28
- '/session/:sessionId/fake': {
29
- GET: {
30
- command: 'fakeGet'
31
- },
32
- POST: {
33
- command: 'fakePost',
34
- payloadParams: {
35
- required: ['fakeParam']
36
- }
37
- }
38
- }
39
- };
40
-
41
- const updateServer = (app, httpServer) => {
42
- app.updated = true;
43
- httpServer.updated = true;
44
- };
45
-
46
- function fakeDriver() {
47
- return {
48
- sessionExists: () => {},
49
- executeCommand: () => {}
50
- };
51
- }
52
-
53
- describe('server configuration', function () {
54
- let port;
55
- before(async function () {
56
- port = await (0, _helpers.getTestPort)(true);
57
- });
58
- it('should actually use the middleware', function () {
59
- const app = fakeApp();
60
-
61
- const configureRoutes = () => {};
62
-
63
- (0, _server2.configureServer)({
64
- app,
65
- addRoutes: configureRoutes
66
- });
67
- app.use.callCount.should.equal(14);
68
- app.all.callCount.should.equal(4);
69
- });
70
- it('should apply new methods in plugins to the standard method map', function () {
71
- const app1 = fakeApp();
72
- const app2 = fakeApp();
73
- const driver = fakeDriver();
74
- const addRoutes = (0, _lib.routeConfiguringFunction)(driver);
75
- (0, _server2.configureServer)({
76
- app: app1,
77
- addRoutes
78
- });
79
- (0, _server2.configureServer)({
80
- app: app2,
81
- addRoutes,
82
- extraMethodMap: newMethodMap
83
- });
84
- app2.totalCount().should.eql(app1.totalCount() + 2);
85
- });
86
- it('should silently reject new methods in plugins if not plain objects', function () {
87
- const app1 = fakeApp();
88
- const app2 = fakeApp();
89
- const driver = fakeDriver();
90
- const addRoutes = (0, _lib.routeConfiguringFunction)(driver);
91
- (0, _server2.configureServer)({
92
- app: app1,
93
- addRoutes
94
- });
95
- (0, _server2.configureServer)({
96
- app: app2,
97
- addRoutes,
98
- extraMethodMap: []
99
- });
100
- app2.totalCount().should.eql(app1.totalCount());
101
- });
102
- it('should allow plugins to update the server', async function () {
103
- const driver = fakeDriver();
104
-
105
- const _server = await (0, _lib.server)({
106
- routeConfiguringFunction: (0, _lib.routeConfiguringFunction)(driver),
107
- port,
108
- extraMethodMap: newMethodMap,
109
- serverUpdaters: [updateServer]
110
- });
111
-
112
- try {
113
- _server.updated.should.be.true;
114
- } finally {
115
- await _server.close();
116
- }
117
- });
118
- it('should reject if error thrown in configureRoutes parameter', async function () {
119
- const configureRoutes = () => {
120
- throw new Error('I am Mr. MeeSeeks look at me!');
121
- };
122
-
123
- await (0, _lib.server)({
124
- routeConfiguringFunction: configureRoutes,
125
- port
126
- }).should.be.rejectedWith('MeeSeeks');
127
- });
128
- describe('#normalizeBasePath', function () {
129
- it('should throw an error for paths of the wrong type', function () {
130
- should.throw(() => {
131
- (0, _server2.normalizeBasePath)(null);
132
- });
133
- should.throw(() => {
134
- (0, _server2.normalizeBasePath)(1);
135
- });
136
- });
137
- it('should remove trailing slashes', function () {
138
- (0, _server2.normalizeBasePath)('/wd/hub/').should.eql('/wd/hub');
139
- (0, _server2.normalizeBasePath)('/foo/').should.eql('/foo');
140
- (0, _server2.normalizeBasePath)('/').should.eql('');
141
- });
142
- it('should ensure a leading slash is present', function () {
143
- (0, _server2.normalizeBasePath)('foo').should.eql('/foo');
144
- (0, _server2.normalizeBasePath)('wd/hub').should.eql('/wd/hub');
145
- (0, _server2.normalizeBasePath)('wd/hub/').should.eql('/wd/hub');
146
- });
147
- });
148
- });require('source-map-support').install();
149
-
150
-
151
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZXhwcmVzcy9zZXJ2ZXItc3BlY3MuanMiXSwibmFtZXMiOlsiZmFrZUFwcCIsImFwcCIsInVzZSIsInNpbm9uIiwic3B5IiwiYWxsIiwiZ2V0IiwicG9zdCIsImRlbGV0ZSIsInRvdGFsQ291bnQiLCJjYWxsQ291bnQiLCJuZXdNZXRob2RNYXAiLCJHRVQiLCJjb21tYW5kIiwiUE9TVCIsInBheWxvYWRQYXJhbXMiLCJyZXF1aXJlZCIsInVwZGF0ZVNlcnZlciIsImh0dHBTZXJ2ZXIiLCJ1cGRhdGVkIiwiZmFrZURyaXZlciIsInNlc3Npb25FeGlzdHMiLCJleGVjdXRlQ29tbWFuZCIsImRlc2NyaWJlIiwicG9ydCIsImJlZm9yZSIsIml0IiwiY29uZmlndXJlUm91dGVzIiwiYWRkUm91dGVzIiwic2hvdWxkIiwiZXF1YWwiLCJhcHAxIiwiYXBwMiIsImRyaXZlciIsImV4dHJhTWV0aG9kTWFwIiwiZXFsIiwiX3NlcnZlciIsInJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiIsInNlcnZlclVwZGF0ZXJzIiwiYmUiLCJ0cnVlIiwiY2xvc2UiLCJFcnJvciIsInJlamVjdGVkV2l0aCIsInRocm93Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxTQUFTQSxPQUFULEdBQW9CO0FBQ2xCLFFBQU1DLEdBQUcsR0FBRztBQUNWQyxJQUFBQSxHQUFHLEVBQUVDLGVBQU1DLEdBQU4sRUFESztBQUVWQyxJQUFBQSxHQUFHLEVBQUVGLGVBQU1DLEdBQU4sRUFGSztBQUdWRSxJQUFBQSxHQUFHLEVBQUVILGVBQU1DLEdBQU4sRUFISztBQUlWRyxJQUFBQSxJQUFJLEVBQUVKLGVBQU1DLEdBQU4sRUFKSTtBQUtWSSxJQUFBQSxNQUFNLEVBQUVMLGVBQU1DLEdBQU4sRUFMRTtBQU1WSyxJQUFBQSxVQUFVLEVBQUUsTUFDVlIsR0FBRyxDQUFDQyxHQUFKLENBQVFRLFNBQVIsR0FBb0JULEdBQUcsQ0FBQ0ksR0FBSixDQUFRSyxT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QUFZO0FBQ3pDRyxJQUFBQSxFQUFFLENBQUMsbURBQUQsRUFBc0QsWUFBWTtBQUNsRUcsTUFBQUEsTUFBTSxDQUFDZSxLQUFQLENBQWEsTUFBTTtBQUNqQix3Q0FBa0IsSUFBbEI7QUFDRCxPQUZEO0FBR0FmLE1BQUFBLE1BQU0sQ0FBQ2UsS0FBUCxDQUFhLE1BQU07QUFDakIsd0NBQWtCLENBQWxCO0FBQ0QsT0FGRDtBQUdELEtBUEMsQ0FBRjtBQVFBbEIsSUFBQUEsRUFBRSxDQUFDLGdDQUFELEVBQW1DLFlBQVk7QUFDL0Msc0NBQWtCLFVBQWxCLEVBQThCRyxNQUE5QixDQUFxQ00sR0FBckMsQ0FBeUMsU0FBekM7QUFDQSxzQ0FBa0IsT0FBbEIsRUFBMkJOLE1BQTNCLENBQWtDTSxHQUFsQyxDQUFzQyxNQUF0QztBQUNBLHNDQUFrQixHQUFsQixFQUF1Qk4sTUFBdkIsQ0FBOEJNLEdBQTlCLENBQWtDLEVBQWxDO0FBQ0QsS0FKQyxDQUFGO0FBS0FULElBQUFBLEVBQUUsQ0FBQywwQ0FBRCxFQUE2QyxZQUFZO0FBQ3pELHNDQUFrQixLQUFsQixFQUF5QkcsTUFBekIsQ0FBZ0NNLEdBQWhDLENBQW9DLE1BQXBDO0FBQ0Esc0NBQWtCLFFBQWxCLEVBQTRCTixNQUE1QixDQUFtQ00sR0FBbkMsQ0FBdUMsU0FBdkM7QUFDQSxzQ0FBa0IsU0FBbEIsRUFBNkJOLE1BQTdCLENBQW9DTSxHQUFwQyxDQUF3QyxTQUF4QztBQUNELEtBSkMsQ0FBRjtBQUtELEdBbkJPLENBQVI7QUFvQkQsQ0FoRk8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBzZXJ2ZXIsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgeyBjb25maWd1cmVTZXJ2ZXIsIG5vcm1hbGl6ZUJhc2VQYXRoIH0gZnJvbSAnLi4vLi4vbGliL2V4cHJlc3Mvc2VydmVyJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQge2dldFRlc3RQb3J0fSBmcm9tICcuLi9oZWxwZXJzJztcblxuZnVuY3Rpb24gZmFrZUFwcCAoKSB7XG4gIGNvbnN0IGFwcCA9IHtcbiAgICB1c2U6IHNpbm9uLnNweSgpLFxuICAgIGFsbDogc2lub24uc3B5KCksXG4gICAgZ2V0OiBzaW5vbi5zcHkoKSxcbiAgICBwb3N0OiBzaW5vbi5zcHkoKSxcbiAgICBkZWxldGU6IHNpbm9uLnNweSgpLFxuICAgIHRvdGFsQ291bnQ6ICgpID0+IChcbiAgICAgIGFwcC51c2UuY2FsbENvdW50ICsgYXBwLmFsbC5jYWxsQ291bnQgKyBhcHAuZ2V0LmNhbGxDb3VudCArIGFwcC5wb3N0LmNhbGxDb3VudCArXG4gICAgICBhcHAuZGVsZXRlLmNhbGxDb3VudFxuICAgIClcbiAgfTtcbiAgcmV0dXJuIGFwcDtcbn1cblxuY29uc3QgbmV3TWV0aG9kTWFwID0ge1xuICAnL3Nlc3Npb24vOnNlc3Npb25JZC9mYWtlJzoge1xuICAgIEdFVDoge2NvbW1hbmQ6ICdmYWtlR2V0J30sXG4gICAgUE9TVDoge2NvbW1hbmQ6ICdmYWtlUG9zdCcsIHBheWxvYWRQYXJhbXM6IHtyZXF1aXJlZDogWydmYWtlUGFyYW0nXX19XG4gIH0sXG59O1xuXG5jb25zdCB1cGRhdGVTZXJ2ZXIgPSAoYXBwLCBodHRwU2VydmVyKSA9PiB7XG4gIGFwcC51cGRhdGVkID0gdHJ1ZTtcbiAgaHR0cFNlcnZlci51cGRhdGVkID0gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGZha2VEcml2ZXIgKCkge1xuICByZXR1cm4ge3Nlc3Npb25FeGlzdHM6ICgpID0+IHt9LCBleGVjdXRlQ29tbWFuZDogKCkgPT4ge319O1xufVxuXG5kZXNjcmliZSgnc2VydmVyIGNvbmZpZ3VyYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBwb3J0O1xuXG4gIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydCA9IGF3YWl0IGdldFRlc3RQb3J0KHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFjdHVhbGx5IHVzZSB0aGUgbWlkZGxld2FyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcHAgPSBmYWtlQXBwKCk7XG4gICAgY29uc3QgY29uZmlndXJlUm91dGVzID0gKCkgPT4ge307XG4gICAgY29uZmlndXJlU2VydmVyKHthcHAsIGFkZFJvdXRlczogY29uZmlndXJlUm91dGVzfSk7XG4gICAgYXBwLnVzZS5jYWxsQ291bnQuc2hvdWxkLmVxdWFsKDE0KTtcbiAgICBhcHAuYWxsLmNhbGxDb3VudC5zaG91bGQuZXF1YWwoNCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYXBwbHkgbmV3IG1ldGhvZHMgaW4gcGx1Z2lucyB0byB0aGUgc3RhbmRhcmQgbWV0aG9kIG1hcCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcHAxID0gZmFrZUFwcCgpO1xuICAgIGNvbnN0IGFwcDIgPSBmYWtlQXBwKCk7XG4gICAgY29uc3QgZHJpdmVyID0gZmFrZURyaXZlcigpO1xuICAgIGNvbnN0IGFkZFJvdXRlcyA9IHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbihkcml2ZXIpO1xuICAgIGNvbmZpZ3VyZVNlcnZlcih7YXBwOiBhcHAxLCBhZGRSb3V0ZXN9KTtcbiAgICBjb25maWd1cmVTZXJ2ZXIoe2FwcDogYXBwMiwgYWRkUm91dGVzLCBleHRyYU1ldGhvZE1hcDogbmV3TWV0aG9kTWFwfSk7XG4gICAgYXBwMi50b3RhbENvdW50KCkuc2hvdWxkLmVxbChhcHAxLnRvdGFsQ291bnQoKSArIDIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpbGVudGx5IHJlamVjdCBuZXcgbWV0aG9kcyBpbiBwbHVnaW5zIGlmIG5vdCBwbGFpbiBvYmplY3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFwcDEgPSBmYWtlQXBwKCk7XG4gICAgY29uc3QgYXBwMiA9IGZha2VBcHAoKTtcbiAgICBjb25zdCBkcml2ZXIgPSBmYWtlRHJpdmVyKCk7XG4gICAgY29uc3QgYWRkUm91dGVzID0gcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uKGRyaXZlcik7XG4gICAgY29uZmlndXJlU2VydmVyKHthcHA6IGFwcDEsIGFkZFJvdXRlc30pO1xuICAgIGNvbmZpZ3VyZVNlcnZlcih7YXBwOiBhcHAyLCBhZGRSb3V0ZXMsIGV4dHJhTWV0aG9kTWFwOiBbXX0pO1xuICAgIGFwcDIudG90YWxDb3VudCgpLnNob3VsZC5lcWwoYXBwMS50b3RhbENvdW50KCkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGFsbG93IHBsdWdpbnMgdG8gdXBkYXRlIHRoZSBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZHJpdmVyID0gZmFrZURyaXZlcigpO1xuICAgIGNvbnN0IF9zZXJ2ZXIgPSBhd2FpdCBzZXJ2ZXIoe1xuICAgICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uOiByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24oZHJpdmVyKSxcbiAgICAgIHBvcnQsXG4gICAgICBleHRyYU1ldGhvZE1hcDogbmV3TWV0aG9kTWFwLFxuICAgICAgc2VydmVyVXBkYXRlcnM6IFt1cGRhdGVTZXJ2ZXJdXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIF9zZXJ2ZXIudXBkYXRlZC5zaG91bGQuYmUudHJ1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgX3NlcnZlci5jbG9zZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgaWYgZXJyb3IgdGhyb3duIGluIGNvbmZpZ3VyZVJvdXRlcyBwYXJhbWV0ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY29uZmlndXJlUm91dGVzID0gKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJIGFtIE1yLiBNZWVTZWVrcyBsb29rIGF0IG1lIScpO1xuICAgIH07XG4gICAgYXdhaXQgc2VydmVyKHtcbiAgICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbjogY29uZmlndXJlUm91dGVzLFxuICAgICAgcG9ydCxcbiAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdNZWVTZWVrcycpO1xuICB9KTtcblxuICBkZXNjcmliZSgnI25vcm1hbGl6ZUJhc2VQYXRoJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIHBhdGhzIG9mIHRoZSB3cm9uZyB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLnRocm93KCgpID0+IHtcbiAgICAgICAgbm9ybWFsaXplQmFzZVBhdGgobnVsbCk7XG4gICAgICB9KTtcbiAgICAgIHNob3VsZC50aHJvdygoKSA9PiB7XG4gICAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKDEpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgdHJhaWxpbmcgc2xhc2hlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKCcvd2QvaHViLycpLnNob3VsZC5lcWwoJy93ZC9odWInKTtcbiAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKCcvZm9vLycpLnNob3VsZC5lcWwoJy9mb28nKTtcbiAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKCcvJykuc2hvdWxkLmVxbCgnJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBlbnN1cmUgYSBsZWFkaW5nIHNsYXNoIGlzIHByZXNlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBub3JtYWxpemVCYXNlUGF0aCgnZm9vJykuc2hvdWxkLmVxbCgnL2ZvbycpO1xuICAgICAgbm9ybWFsaXplQmFzZVBhdGgoJ3dkL2h1YicpLnNob3VsZC5lcWwoJy93ZC9odWInKTtcbiAgICAgIG5vcm1hbGl6ZUJhc2VQYXRoKCd3ZC9odWIvJykuc2hvdWxkLmVxbCgnL3dkL2h1YicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2V4cHJlc3Mvc2VydmVyLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _static = require("../../lib/express/static");
8
-
9
- var _sinon = _interopRequireDefault(require("sinon"));
10
-
11
- describe('welcome', function () {
12
- it('should fill the template', async function () {
13
- let res = {
14
- send: _sinon.default.spy()
15
- };
16
- await (0, _static.welcome)({}, res);
17
- res.send.calledOnce.should.be.true;
18
- res.send.args[0][0].should.include('Let\'s browse!');
19
- });
20
- });require('source-map-support').install();
21
-
22
-
23
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvZXhwcmVzcy9zdGF0aWMtc3BlY3MuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJpdCIsInJlcyIsInNlbmQiLCJzaW5vbiIsInNweSIsImNhbGxlZE9uY2UiLCJzaG91bGQiLCJiZSIsInRydWUiLCJhcmdzIiwiaW5jbHVkZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBSUFBLFFBQVEsQ0FBQyxTQUFELEVBQVksWUFBWTtBQUM5QkMsRUFBQUEsRUFBRSxDQUFDLDBCQUFELEVBQTZCLGtCQUFrQjtBQUMvQyxRQUFJQyxHQUFHLEdBQUc7QUFDUkMsTUFBQUEsSUFBSSxFQUFFQyxlQUFNQyxHQUFOO0FBREUsS0FBVjtBQUdBLFVBQU0scUJBQVEsRUFBUixFQUFZSCxHQUFaLENBQU47QUFFQUEsSUFBQUEsR0FBRyxDQUFDQyxJQUFKLENBQVNHLFVBQVQsQ0FBb0JDLE1BQXBCLENBQTJCQyxFQUEzQixDQUE4QkMsSUFBOUI7QUFDQVAsSUFBQUEsR0FBRyxDQUFDQyxJQUFKLENBQVNPLElBQVQsQ0FBYyxDQUFkLEVBQWlCLENBQWpCLEVBQW9CSCxNQUFwQixDQUEyQkksT0FBM0IsQ0FBbUMsZ0JBQW5DO0FBQ0QsR0FSQyxDQUFGO0FBU0QsQ0FWTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHJhbnNwaWxlOm1vY2hhXG5cbmltcG9ydCB7IHdlbGNvbWUgfSBmcm9tICcuLi8uLi9saWIvZXhwcmVzcy9zdGF0aWMnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcblxuXG5cbmRlc2NyaWJlKCd3ZWxjb21lJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGZpbGwgdGhlIHRlbXBsYXRlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGxldCByZXMgPSB7XG4gICAgICBzZW5kOiBzaW5vbi5zcHkoKVxuICAgIH07XG4gICAgYXdhaXQgd2VsY29tZSh7fSwgcmVzKTtcblxuICAgIHJlcy5zZW5kLmNhbGxlZE9uY2Uuc2hvdWxkLmJlLnRydWU7XG4gICAgcmVzLnNlbmQuYXJnc1swXVswXS5zaG91bGQuaW5jbHVkZSgnTGV0XFwncyBicm93c2UhJyk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvZXhwcmVzcy9zdGF0aWMtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==