@mbtest/mountebank 2.9.2-beta.9050

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 (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +94 -0
  3. package/bin/mb +136 -0
  4. package/package.json +71 -0
  5. package/releases.json +52 -0
  6. package/src/cli/api.js +112 -0
  7. package/src/cli/cli.js +420 -0
  8. package/src/controllers/configController.js +64 -0
  9. package/src/controllers/feedController.js +115 -0
  10. package/src/controllers/homeController.js +58 -0
  11. package/src/controllers/imposterController.js +328 -0
  12. package/src/controllers/impostersController.js +215 -0
  13. package/src/controllers/logsController.js +52 -0
  14. package/src/models/behaviors.js +553 -0
  15. package/src/models/behaviorsValidator.js +186 -0
  16. package/src/models/compatibility.js +133 -0
  17. package/src/models/dryRunValidator.js +261 -0
  18. package/src/models/filesystemBackedImpostersRepository.js +908 -0
  19. package/src/models/http/baseHttpServer.js +207 -0
  20. package/src/models/http/headersMap.js +87 -0
  21. package/src/models/http/httpProxy.js +230 -0
  22. package/src/models/http/httpRequest.js +82 -0
  23. package/src/models/http/httpServer.js +18 -0
  24. package/src/models/http/index.js +18 -0
  25. package/src/models/https/cert/mb-cert.pem +20 -0
  26. package/src/models/https/cert/mb-csr.pem +16 -0
  27. package/src/models/https/cert/mb-key.pem +27 -0
  28. package/src/models/https/httpsServer.js +42 -0
  29. package/src/models/https/index.js +18 -0
  30. package/src/models/imposter.js +243 -0
  31. package/src/models/imposterPrinter.js +120 -0
  32. package/src/models/impostersRepository.js +49 -0
  33. package/src/models/inMemoryImpostersRepository.js +418 -0
  34. package/src/models/jsonpath.js +44 -0
  35. package/src/models/mbConnection.js +107 -0
  36. package/src/models/predicates.js +438 -0
  37. package/src/models/protocols.js +242 -0
  38. package/src/models/responseResolver.js +398 -0
  39. package/src/models/smtp/index.js +16 -0
  40. package/src/models/smtp/smtpRequest.js +60 -0
  41. package/src/models/smtp/smtpServer.js +109 -0
  42. package/src/models/tcp/index.js +18 -0
  43. package/src/models/tcp/tcpProxy.js +110 -0
  44. package/src/models/tcp/tcpRequest.js +23 -0
  45. package/src/models/tcp/tcpServer.js +156 -0
  46. package/src/models/tcp/tcpValidator.js +19 -0
  47. package/src/models/xpath.js +95 -0
  48. package/src/mountebank.js +245 -0
  49. package/src/public/images/arrow_down.png +0 -0
  50. package/src/public/images/arrow_up.png +0 -0
  51. package/src/public/images/book.jpg +0 -0
  52. package/src/public/images/dataflow.png +0 -0
  53. package/src/public/images/favicon.ico +0 -0
  54. package/src/public/images/forkme_right_orange_ff7600.png +0 -0
  55. package/src/public/images/mountebank.png +0 -0
  56. package/src/public/images/overview.gif +0 -0
  57. package/src/public/images/quote.png +0 -0
  58. package/src/public/images/tw-logo.png +0 -0
  59. package/src/public/scripts/jquery/jquery-3.6.1.min.js +2 -0
  60. package/src/public/scripts/urlHashHandler.js +31 -0
  61. package/src/public/stylesheets/application.css +424 -0
  62. package/src/public/stylesheets/ie.css +14 -0
  63. package/src/public/stylesheets/imposters.css +121 -0
  64. package/src/public/stylesheets/jqueryui/1.10.4/themes/smoothness/jquery-ui.css +1178 -0
  65. package/src/util/combinators.js +68 -0
  66. package/src/util/date.js +51 -0
  67. package/src/util/errors.js +55 -0
  68. package/src/util/helpers.js +131 -0
  69. package/src/util/inherit.js +28 -0
  70. package/src/util/ip.js +54 -0
  71. package/src/util/logger.js +83 -0
  72. package/src/util/middleware.js +256 -0
  73. package/src/util/scopedLogger.js +47 -0
  74. package/src/views/_footer.ejs +20 -0
  75. package/src/views/_header.ejs +113 -0
  76. package/src/views/_imposter.ejs +8 -0
  77. package/src/views/config.ejs +71 -0
  78. package/src/views/docs/api/behaviors/copy.ejs +427 -0
  79. package/src/views/docs/api/behaviors/decorate.ejs +182 -0
  80. package/src/views/docs/api/behaviors/lookup.ejs +220 -0
  81. package/src/views/docs/api/behaviors/shellTransform.ejs +153 -0
  82. package/src/views/docs/api/behaviors/wait.ejs +121 -0
  83. package/src/views/docs/api/behaviors.ejs +141 -0
  84. package/src/views/docs/api/contracts/addStub-description.ejs +10 -0
  85. package/src/views/docs/api/contracts/addStub.ejs +10 -0
  86. package/src/views/docs/api/contracts/config-description.ejs +32 -0
  87. package/src/views/docs/api/contracts/config.ejs +23 -0
  88. package/src/views/docs/api/contracts/home-description.ejs +18 -0
  89. package/src/views/docs/api/contracts/home.ejs +13 -0
  90. package/src/views/docs/api/contracts/imposter-description.ejs +439 -0
  91. package/src/views/docs/api/contracts/imposter.ejs +182 -0
  92. package/src/views/docs/api/contracts/imposters-description.ejs +13 -0
  93. package/src/views/docs/api/contracts/imposters.ejs +13 -0
  94. package/src/views/docs/api/contracts/logs-description.ejs +3 -0
  95. package/src/views/docs/api/contracts/logs.ejs +14 -0
  96. package/src/views/docs/api/contracts/stub-description.ejs +4 -0
  97. package/src/views/docs/api/contracts/stub.ejs +7 -0
  98. package/src/views/docs/api/contracts/stubs-description.ejs +4 -0
  99. package/src/views/docs/api/contracts/stubs.ejs +11 -0
  100. package/src/views/docs/api/contracts.ejs +133 -0
  101. package/src/views/docs/api/errors.ejs +64 -0
  102. package/src/views/docs/api/fault/connectionReset.ejs +31 -0
  103. package/src/views/docs/api/fault/randomDataThenClose.ejs +31 -0
  104. package/src/views/docs/api/faults.ejs +57 -0
  105. package/src/views/docs/api/injection.ejs +426 -0
  106. package/src/views/docs/api/json.ejs +205 -0
  107. package/src/views/docs/api/jsonpath.ejs +210 -0
  108. package/src/views/docs/api/mocks.ejs +130 -0
  109. package/src/views/docs/api/overview.ejs +968 -0
  110. package/src/views/docs/api/predicates/and.ejs +62 -0
  111. package/src/views/docs/api/predicates/contains.ejs +64 -0
  112. package/src/views/docs/api/predicates/deepEquals.ejs +114 -0
  113. package/src/views/docs/api/predicates/endsWith.ejs +66 -0
  114. package/src/views/docs/api/predicates/equals.ejs +125 -0
  115. package/src/views/docs/api/predicates/exists.ejs +118 -0
  116. package/src/views/docs/api/predicates/inject.ejs +67 -0
  117. package/src/views/docs/api/predicates/matches.ejs +66 -0
  118. package/src/views/docs/api/predicates/not.ejs +52 -0
  119. package/src/views/docs/api/predicates/or.ejs +79 -0
  120. package/src/views/docs/api/predicates/startsWith.ejs +62 -0
  121. package/src/views/docs/api/predicates.ejs +382 -0
  122. package/src/views/docs/api/proxies.ejs +191 -0
  123. package/src/views/docs/api/proxy/addDecorateBehavior.ejs +115 -0
  124. package/src/views/docs/api/proxy/addWaitBehavior.ejs +96 -0
  125. package/src/views/docs/api/proxy/injectHeaders.ejs +91 -0
  126. package/src/views/docs/api/proxy/predicateGenerators.ejs +600 -0
  127. package/src/views/docs/api/proxy/proxyModes.ejs +495 -0
  128. package/src/views/docs/api/stubs.ejs +391 -0
  129. package/src/views/docs/api/xpath.ejs +281 -0
  130. package/src/views/docs/cli/configFiles.ejs +133 -0
  131. package/src/views/docs/cli/customFormatters.ejs +53 -0
  132. package/src/views/docs/cli/help.ejs +6 -0
  133. package/src/views/docs/cli/replay.ejs +42 -0
  134. package/src/views/docs/cli/restart.ejs +10 -0
  135. package/src/views/docs/cli/save.ejs +68 -0
  136. package/src/views/docs/cli/start.ejs +234 -0
  137. package/src/views/docs/cli/stop.ejs +32 -0
  138. package/src/views/docs/commandLine.ejs +93 -0
  139. package/src/views/docs/communityExtensions.ejs +233 -0
  140. package/src/views/docs/gettingStarted.ejs +146 -0
  141. package/src/views/docs/mentalModel.ejs +51 -0
  142. package/src/views/docs/protocols/custom.ejs +231 -0
  143. package/src/views/docs/protocols/http.ejs +238 -0
  144. package/src/views/docs/protocols/https.ejs +246 -0
  145. package/src/views/docs/protocols/smtp.ejs +142 -0
  146. package/src/views/docs/protocols/tcp.ejs +431 -0
  147. package/src/views/docs/security.ejs +38 -0
  148. package/src/views/faqs.ejs +65 -0
  149. package/src/views/feed.ejs +33 -0
  150. package/src/views/imposter.ejs +22 -0
  151. package/src/views/imposters.ejs +33 -0
  152. package/src/views/index.ejs +89 -0
  153. package/src/views/license.ejs +30 -0
  154. package/src/views/logs.ejs +77 -0
  155. package/src/views/releases/v1.1.0.ejs +55 -0
  156. package/src/views/releases/v1.1.36.ejs +84 -0
  157. package/src/views/releases/v1.1.72.ejs +92 -0
  158. package/src/views/releases/v1.10.0.ejs +108 -0
  159. package/src/views/releases/v1.11.0.ejs +109 -0
  160. package/src/views/releases/v1.12.0.ejs +96 -0
  161. package/src/views/releases/v1.13.0.ejs +118 -0
  162. package/src/views/releases/v1.14.0.ejs +107 -0
  163. package/src/views/releases/v1.14.1.ejs +94 -0
  164. package/src/views/releases/v1.15.0.ejs +113 -0
  165. package/src/views/releases/v1.16.0.ejs +104 -0
  166. package/src/views/releases/v1.2.0.ejs +78 -0
  167. package/src/views/releases/v1.2.103.ejs +86 -0
  168. package/src/views/releases/v1.2.122.ejs +86 -0
  169. package/src/views/releases/v1.2.30.ejs +84 -0
  170. package/src/views/releases/v1.2.45.ejs +84 -0
  171. package/src/views/releases/v1.2.56.ejs +79 -0
  172. package/src/views/releases/v1.3.0.ejs +86 -0
  173. package/src/views/releases/v1.3.1.ejs +100 -0
  174. package/src/views/releases/v1.4.0.ejs +96 -0
  175. package/src/views/releases/v1.4.1.ejs +103 -0
  176. package/src/views/releases/v1.4.2.ejs +100 -0
  177. package/src/views/releases/v1.4.3.ejs +113 -0
  178. package/src/views/releases/v1.5.0.ejs +104 -0
  179. package/src/views/releases/v1.5.1.ejs +91 -0
  180. package/src/views/releases/v1.6.0.ejs +109 -0
  181. package/src/views/releases/v1.7.0.ejs +113 -0
  182. package/src/views/releases/v1.7.1.ejs +90 -0
  183. package/src/views/releases/v1.7.2.ejs +96 -0
  184. package/src/views/releases/v1.8.0.ejs +121 -0
  185. package/src/views/releases/v1.9.0.ejs +111 -0
  186. package/src/views/releases/v2.0.0.ejs +159 -0
  187. package/src/views/releases/v2.1.0.ejs +121 -0
  188. package/src/views/releases/v2.1.1.ejs +106 -0
  189. package/src/views/releases/v2.1.2.ejs +84 -0
  190. package/src/views/releases/v2.2.0.ejs +115 -0
  191. package/src/views/releases/v2.2.1.ejs +102 -0
  192. package/src/views/releases/v2.3.0.ejs +121 -0
  193. package/src/views/releases/v2.3.1.ejs +100 -0
  194. package/src/views/releases/v2.3.2.ejs +102 -0
  195. package/src/views/releases/v2.3.3.ejs +97 -0
  196. package/src/views/releases/v2.4.0.ejs +114 -0
  197. package/src/views/releases/v2.5.0.ejs +51 -0
  198. package/src/views/releases/v2.6.0.ejs +35 -0
  199. package/src/views/releases/v2.7.0.ejs +32 -0
  200. package/src/views/releases/v2.8.0.ejs +36 -0
  201. package/src/views/releases/v2.8.1.ejs +7 -0
  202. package/src/views/releases/v2.8.2.ejs +26 -0
  203. package/src/views/releases/v2.9.0.ejs +32 -0
  204. package/src/views/releases/v2.9.1.ejs +10 -0
  205. package/src/views/releases.ejs +26 -0
  206. package/src/views/sitemap.ejs +36 -0
  207. package/src/views/support.ejs +14 -0
@@ -0,0 +1,38 @@
1
+ <%
2
+ title = 'security'
3
+ description = 'Securing mountebank against remote execution attacks'
4
+ %>
5
+
6
+ <%- include('../_header') -%>
7
+
8
+ <h1>Security</h1>
9
+
10
+ <p>mountebank is programmable through <a href='/docs/api/injection'>injection</a>. This makes
11
+ the tool very extensible and flexible, but it should only be used with an understanding of the
12
+ security implications. When you enable the <a href='/docs/commandLine'><code>--allowInjection</code></a>
13
+ flag, you aren't just giving yourself the ability to extend mountebank: you're also potentially enabling
14
+ attackers remote execution capabilities on your machine.</p>
15
+
16
+ <p>mountebank highly recommends you take the following approaches to securing your environment if you
17
+ require <code>--allowInjection</code>:</p>
18
+
19
+ <ul class='bullet-list'>
20
+ <li>ALWAYS run <code>mb</code> as an unprivileged user</li>
21
+ <li>If possible, set the <a href='/docs/commandLine'><code>--localOnly</code></a> flag to only accept
22
+ requests from localhost. There's no reason not to do this when running directly (e.g., not inside
23
+ Docker or a VM) on your local developer machine.</li>
24
+ <li>Whitelist all IP addresses allowed to connect to mountebank by setting the
25
+ <a href='/docs/commandLine'><code>--ipWhitelist</code></a> flag.</li>
26
+ <li>Consider using a local OS level firewall like iptables</li>
27
+ <li>Consider running <code>mb</code> in a Docker environment or under a <code>chroot</code> operation
28
+ to prevent access to the full filesystem</li>
29
+ </ul>
30
+
31
+ <p>The most secure option, of course, is to simply not use the <code>--allowInjection</code> flag.
32
+ If there are common operations you find yourself using injection for, feel free to suggest those operations
33
+ as core features in a future release of mountebank.</p>
34
+
35
+ <p>By default, CORS is disabled to prevent CSRF attacks. To enable, you must explicitly pass safe origins
36
+ on the command line using the <a href='/docs/commandLine'><code>--origin</code></a> flag.</p>
37
+
38
+ <%- include('../_footer') -%>
@@ -0,0 +1,65 @@
1
+ <%
2
+ title = 'FAQs'
3
+ description = 'Frequently asked questions about using mountebank'
4
+ %>
5
+
6
+ <%- include('_header') -%>
7
+
8
+ <h1>Frequently Asked Questions</h1>
9
+
10
+ <dl>
11
+ <dt>How do you pronounce mountebank?</dt>
12
+ <dd>mountebank pronounces it with a plain and unpretentious accent,
13
+ reflecting his humble roots as a man of the people.</dd>
14
+
15
+ <dt>How can I post-process a response, for example, to add a custom header to
16
+ a proxied response or add a current timestamp into the response</dt>
17
+ <dd>See the <a href='/docs/api/behaviors'><code>decorate</code> behavior</a> for general purpose decoration.
18
+ You can inject headers into proxied responses using the <a href='/docs/api/proxies#proxy-inject-headers'>
19
+ <code>injectHeaders</code></a> field</dd>
20
+
21
+ <dt>How can I split my imposters into multiple files and have them automatically
22
+ loaded when <code>mb</code> restarts?</dt>
23
+ <dd>See the <a href='/docs/commandLine#config-file'><code>--configfile</code> command line option</a>
24
+ It can either be a single file containing the JSON that you get back when you call
25
+ <a href='/docs/api/overview#get-imposters'><code>GET /imposters?replayable=true</code></a>
26
+ or multiple files that will be collected via templating. Alternatively, starting <code>mb</code>
27
+ with the <code>--datadir</code> command line option will load all previously saved imposters
28
+ in the database.</dd>
29
+
30
+ <dt>I'm adding mountebank as an npm dependency to my project. Why isn't npm shrinkwrap working?</dt>
31
+ <dd>This is actually a npm issue, not a bug in mountebank. Mountebank is published using npm v3, which
32
+ modifies the behavior of where npm dependencies are installed. npm v2 does not expect this, and will
33
+ throw errors because of it when trying to shrinkwrap. Upgrading to npm v3 solves this issue.
34
+ If for some reason you are stuck on npm v2, there is an only moderately inconvenient workaround.
35
+ Add all of mountebanks top level dependencies to your own package.json. Then, between npm install
36
+ and npm shrinkwrap, delete the node_modules/mountebank/node_modules folder. This workaround works
37
+ for grunt-mountebank, if you are using that as well (thanks Adam Kalman for the explanation).</dd>
38
+
39
+ <dt>I'm proxying to a server that returns gzipped (compressed) data, but I'd like to save the
40
+ data uncompressed. Is there a way to do that?</dt>
41
+ <dd>Yes! Using the <a href='/docs/api/proxies'><code>injectHeaders</code></a> field on the proxy,
42
+ add an 'Accept-Encoding: identity' header. That's an HTTP-based way of the proxy client telling
43
+ the server that it won't accept compressed data.</dd>
44
+
45
+ <dt>Can I use mountebank for load testing?</dt>
46
+ <dd>Yes, and field reports have indicated that mountebank may be the only open source
47
+ service virtualization tool that performs under significant load. For any long-running process, make
48
+ sure you run with the <code>--datadir</code> command line option so mountebank doesn't leak memory
49
+ during proxy recording or saving requests. You'll also want to use keepalive connections
50
+ for HTTP connections, so consider setting the <a href='/docs/protocols/http'><code>defaultResponse</code></a>
51
+ to make all <code>Connection</code> headers as <code>Keep-Alive</code>. As long as you set up each <code>mb</code>
52
+ instance with the same configuration, you can run multiple instances behind a load balancer (they should all
53
+ share the same volume for the <code>--datadir</code> option). A common
54
+ strategy is to set up a <a href='/docs/api/proxies'>proxy</a> in <code>proxyAlways</code> or <code>proxyTransparent</code> mode
55
+ and to capture the downstream latency by using the <code>addWaitBehavior</code> field to the proxy.
56
+ When you replay the saved responses, they will add the perform with roughly the same latency the
57
+ downstream services had.</dd>
58
+
59
+ <dt>Why did you misspell impostor?</dt>
60
+ <dd>mountebank is not an educated man, having spent the waking hours of his
61
+ youth caring for the poor and the sick.</dd>
62
+
63
+ </dl>
64
+
65
+ <%- include('_footer') -%>
@@ -0,0 +1,33 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+
3
+ <feed xmlns='http://www.w3.org/2005/Atom'>
4
+
5
+ <title>mountebank releases</title>
6
+ <subtitle>Release notes for mountebank</subtitle>
7
+ <link href='http://<%= host %>/feed' rel='self' />
8
+ <% if (hasNextPage) { %>
9
+ <link href='http://<%= host %><%= nextLink %>' rel='next' />
10
+ <% } %>
11
+ <link href='http://<%= host %>/' />
12
+ <id>http://<%= host %>/feed</id>
13
+ <updated><%= releases[0].date %>T00:00:00Z</updated>
14
+ <author>
15
+ <name>Brandon Byars</name>
16
+ <email>brandon.byars@gmail.com</email>
17
+ <uri>http://<%= host %></uri>
18
+ </author>
19
+
20
+ <% releases.forEach(release => { %>
21
+ <entry>
22
+ <title>mountebank <%= release.version %> release</title>
23
+ <id>http://<%= host %>/releases/<%= release.version %></id>
24
+ <updated><%= release.date %>T00:00:00Z</updated>
25
+ <content type='html'>
26
+ <![CDATA[
27
+ <%- release.view %>
28
+ ]]>
29
+ </content>
30
+ </entry>
31
+ <% }); %>
32
+
33
+ </feed>
@@ -0,0 +1,22 @@
1
+ <%
2
+ title = 'imposter information'
3
+ description = 'Information about a specific mountebank imposter'
4
+ %>
5
+
6
+ <%- include('_header') -%>
7
+
8
+ <h1><%= imposter.protocol %> Imposter on port <%= imposter.port %></h1>
9
+
10
+ <h2>Requests</h2>
11
+
12
+ <% imposter.requests.forEach(request => { -%>
13
+ <pre><code><%= JSON.stringify(request, null, 2) %></code></pre>
14
+ <% }); -%>
15
+
16
+ <h2>Stubs</h2>
17
+
18
+ <% imposter.stubs.forEach(stub => { -%>
19
+ <pre><code><%= JSON.stringify(stub, null, 2) %></code></pre>
20
+ <% }); -%>
21
+
22
+ <%- include('_footer') -%>
@@ -0,0 +1,33 @@
1
+ <%
2
+ title = 'running imposters'
3
+ description = 'Information about the currently running imposters'
4
+ %>
5
+
6
+ <%- include('_header') -%>
7
+
8
+ <link rel='stylesheet' type='text/css' href='/stylesheets/imposters.css' />
9
+
10
+ <h1>Imposters</h1>
11
+
12
+ <p><em>You may explore other UIs, including:</em></p>
13
+ <ul class='bullet-list'>
14
+ <li><em><a href='http://donhenton.github.io/mountebank-UI/public_html/index.html#/'>Mountebank-UI by Don Henton</a></em></li>
15
+ <li><em><a href='https://github.com/Opus-Software/disguise'>Disguise by Opus Software</a></em></li>
16
+ <li><em><a href='https://github.com/testinggospels/mountebank-ui'>Mountebank UI by The Testing Gospels</a></em></li>
17
+ </ul>
18
+
19
+ <table id='imposters'>
20
+ <tr>
21
+ <th style='width: 15em;'>name</th>
22
+ <th style='width: 6em;'>protocol</th>
23
+ <th style='width: 5em;'>port</th>
24
+ <th style='width: 6em;'># requests</th>
25
+ </tr>
26
+
27
+ <% imposters.forEach(imposter => { %>
28
+ <%- include('_imposter', {imposter}) -%>
29
+ <% }); -%>
30
+ </table>
31
+
32
+
33
+ <%- include('_footer') -%>
@@ -0,0 +1,89 @@
1
+ <%
2
+ title = 'over the wire test doubles'
3
+ description = 'mountebank is the first open source, cross-platform, multi-protocol service virtualization tool'
4
+ %>
5
+
6
+ <%- include('_header') -%>
7
+
8
+ <% if (notices.length > 0) { %>
9
+ <div id='notice'>
10
+ <% notices.forEach(function (notice) { %>
11
+ <div><a href='/releases/<%= notice.version %>'><%= notice.version %></a> was released <%= notice.when %></div>
12
+ <% }); %>
13
+ </div>
14
+ <% } %>
15
+
16
+ <h1>Welcome, friend</h1>
17
+
18
+ <p>mountebank is the first open source tool to provide cross-platform, multi-protocol test
19
+ doubles over the wire. Simply point your application under test to mountebank
20
+ instead of the real dependency, and test like you would with traditional stubs and mocks.</p>
21
+
22
+ <p>mountebank is the most capable open source service virtualization tool in existence, and
23
+ will cure what ails you, guaranteed.</p>
24
+
25
+ <h2>How it works</h2>
26
+
27
+ <p>mountebank employs a legion of <em>imposters</em> to act as on-demand test doubles.
28
+ Your test communicates to mountebank over http using the <a href='/docs/api/overview'>api</a>
29
+ to set up <a href='/docs/api/stubs'>stubs</a>, <a href='/docs/api/proxies'>record and replay proxies</a>,
30
+ and verify <a href='/docs/api/mocks'>mock expectations</a>. In the typical use case, each
31
+ test will start an imposter during test setup and stop an imposter during test teardown, although
32
+ you are also welcome to configure mountebank at startup using a <a href='/docs/commandLine#config-file'>
33
+ config file</a>.</p>
34
+
35
+ <p>mountebank employs several types of imposters, each responding to a specific protocol.
36
+ Typically, your test will tell the imposter which port to bind to, and the imposter will
37
+ open the corresponding socket.</p>
38
+
39
+ <img src='/images/overview.gif' alt='mountebank' />
40
+
41
+ <p>View the <a href='/docs/gettingStarted'>getting started guide</a> for a quick introduction.</p>
42
+
43
+ <h2>Testimonials</h2>
44
+
45
+ <blockquote>
46
+ <p>With mountebank, maybe we <em>could</em> have built it in a day.</p>
47
+ <p class='cite'>Remus and Romulus, builders of Rome</p>
48
+ </blockquote>
49
+
50
+ <blockquote>
51
+ <p class='quote'>With mountebank, all the world's a nail.</p>
52
+ <p class='cite'>Thor, God of Thunder</p>
53
+ </blockquote>
54
+
55
+ <blockquote>
56
+ <p class='quote'>In fact, halfway through we discovered our corporate mocking software couldn’t handle the
57
+ sheer amount of performance testing we were running as part of this effort (<strong>we completely crushed
58
+ some pretty industrial enterprise software in the process</strong>). As a result, we made the call to move
59
+ the entire program over to a Mountebank OSS-based solution with a custom provision to give us the ability
60
+ to expand/shrink our mocking needs on demand.</p>
61
+ <p class='cite'><a href='https://medium.com/capital-one-developers/moving-one-of-capital-ones-largest-customer-facing-apps-to-aws-668d797af6fc'>Capital One's Mobile Cloud Migration</a></p>
62
+ </blockquote>
63
+
64
+ <h2>Why mountebank?</h2>
65
+
66
+ <p>mountebank has the following goals:</p>
67
+
68
+ <dl>
69
+ <dt>Trivial to get started</dt>
70
+ <dd>mountebank is easy to install, without any platform dependencies. mountebank aims
71
+ for fun and comprehensive documentation with lots of examples, and a nice UI that lets
72
+ you explore the API interactively.</dd>
73
+
74
+ <dt>A platform, not just a tool</dt>
75
+ <dd>mountebank aims to be fully cross-platform, with <a href='/docs/communityExtensions'>native language bindings</a>.
76
+ Servers are <a href="/docs/api/injection">extensible</a> through scripting when the out of the box
77
+ functionality isn't enough.</dd>
78
+
79
+ <dt>Powerful</dt>
80
+ <dd>mountebank is the only open source service virtualization tool that is non-modal and multi-protocol.
81
+ Commercial solutions exist, but their licensed platforms make it hard to move the tests closer to development
82
+ and may even require a specialized IDE. mountebank provides service virtualization free of charge without any
83
+ platform constraints</dd>
84
+ </dl>
85
+
86
+ <p>Not all of mountebank's goals are currently implemented, but fear not, for he has
87
+ a team of top-notch open source developers, and they are legion.</p>
88
+
89
+ <%- include('_footer') -%>
@@ -0,0 +1,30 @@
1
+ <%
2
+ title = 'license'
3
+ description = 'mountebank uses the MIT license'
4
+ %>
5
+
6
+ <%- include('_header') -%>
7
+
8
+ <h1>The MIT License (MIT)</h1>
9
+
10
+ <p>Copyright &copy; 2013 mountebank</p>
11
+
12
+ <p>Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:</p>
18
+
19
+ <p>The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.</p>
21
+
22
+ <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.</p>
29
+
30
+ <%- include('_footer') -%>
@@ -0,0 +1,77 @@
1
+ <%
2
+ title = 'logs'
3
+ description = 'Logs of the currently running mb process'
4
+
5
+ function formatLogEntry (logEntry) {
6
+ return '<span><span class="' + logEntry.level + '">' + logEntry.level + '</span>: ' + escape(logEntry.message) + '</span>';
7
+ }
8
+ %>
9
+
10
+ <%- include('_header') -%>
11
+
12
+ <h1>Logs</h1>
13
+
14
+ <div id='tail' class='down-arrow-icon button'> <span>Follow log</span></div>
15
+
16
+ <pre id='logs'><code>
17
+ <% logs.forEach(function (logEntry) { -%>
18
+ <%- formatLogEntry(logEntry) %>
19
+ <% }) -%>
20
+ </code></pre>
21
+
22
+ <script type='text/javascript'>
23
+ $(document).ready(function () {
24
+ var nextIndex = <%= logs.length %>,
25
+ intervalId,
26
+ topOfTail = $('#tail').position().top,
27
+ tailset = 5;
28
+
29
+ $(document).on('scroll', window, animateTail);
30
+
31
+ <%- formatLogEntry.toString() %>
32
+
33
+ function findTop () {
34
+ return $(window).scrollTop() >= topOfTail ? $(window).scrollTop() - topOfTail + tailset : 0;
35
+ }
36
+
37
+ function scrollToBottom () {
38
+ $('html, body').animate({ scrollTop: $(document).height() }, 200);
39
+ $('#tail').css('top', findTop());
40
+ }
41
+
42
+ function getLatestLogEntries () {
43
+ $.getJSON('/logs?startIndex=' + nextIndex, json => {
44
+ var logs = json.logs;
45
+ for (let i = 0; i < logs.length; i++) {
46
+ $('#logs code').append(formatLogEntry(logs[i]) + '\n');
47
+ }
48
+ nextIndex += json.logs.length;
49
+ scrollToBottom();
50
+ });
51
+ }
52
+
53
+ function animateTail() {
54
+ $('#tail').css('top', findTop());
55
+ }
56
+
57
+ $('#tail').click(function () {
58
+ var currentLeft = parseFloat($(this).css('left').replace('px', ''));
59
+
60
+ if (this.tailing) {
61
+ this.tailing = false;
62
+ $('#tail span').text('Follow log');
63
+ $(this).css('left', (currentLeft + 12) + 'px');
64
+ clearInterval(intervalId);
65
+ }
66
+ else {
67
+ this.tailing = true;
68
+ $('#tail span').text('Unfollow log');
69
+ $(this).css('left', (currentLeft - 12) + 'px');
70
+ intervalId = setInterval(getLatestLogEntries, 250);
71
+ scrollToBottom();
72
+ }
73
+ })
74
+ });
75
+ </script>
76
+
77
+ <%- include('_footer') -%>
@@ -0,0 +1,55 @@
1
+ <h1>v1.1.0</h1>
2
+
3
+ <p>mountebank is happy to provide you with the following changes in v1.1.0</p>
4
+
5
+ <h2>More Install Options</h2>
6
+ <ul>
7
+ <li>v1.0 only supported installing through npm. mountebank now supports self-contained
8
+ packages on all supported platforms, which do not require node.js installed on the target
9
+ platform. See the [DEPRECATED - only works in versions prior to 2.5] page for details.</li>
10
+ </ul>
11
+
12
+ <h2>New Features</h2>
13
+ <ul class='bullet-list'>
14
+ <li>A new <a href='http://<%= host %>/docs/api/overview#get-imposters'><code>?replayable=true</code></a>
15
+ query parameter to retrieve all imposters or a
16
+ <a href='http://<%= host %>/docs/api/overview#get-imposter'>single imposter</a> without the
17
+ <code>requests</code> array, <code>matches</code> array, and hypermedia.
18
+ This supports runtime downloads of a configuration to replay later.</li>
19
+ <li>Mass update and delete capability. mountebank now supports
20
+ <a href='http://<%= host %>/docs/api/overview#put-imposters'><code>PUT</code></a> and
21
+ <a href='http://<%= host %>/docs/api/overview#delete-imposters'><code>DELETE</code></a> verbs
22
+ on /imposters. This is designed to support loading a configuration file of imposters at
23
+ runtime.</li>
24
+ <li>A new <a href='http://<%= host %>/docs/api/stubs#behaviors'><code>_behaviors</code></a> field available for stubs.
25
+ <code>_behaviors</code> currently supports adding latency to each response.</li>
26
+ <li>A new <a href='http://<%= host %>/docs/commandLine'><code>--nomock</code></a> command line option to prevent
27
+ mountebank from recording requests. This supports long-running processes from leaking memory
28
+ where mocking is not important.</li>
29
+ <li>A new <a href='http://<%= host %>/docs/commandLine'><code>--configfile</code></a> command line option to
30
+ load a configuration file at startup for creating imposters.</li>
31
+ <li>The <a href='http://<%= host %>/docs/api/overview#get-config'><code>config</code></a> and
32
+ <a href='http://<%= host %>/docs/api/overview#get-logs'>logs</a> resources are now exposed oer JSON.</li>
33
+ </ul>
34
+
35
+ <h2>Documentation Improvements</h2>
36
+ <ul class='bullet-list'>
37
+ <li>Example usages in multiple languages and multiple protocols.</li>
38
+ <li>An <a href='http://<%= host %>/feed'>ATOM feed</a>, which will be updated with release notes on every release. Subscribe in
39
+ <a href='http://feedly.com/index.html#discover'>feedly</a> or your favorite RSS reader.</li>
40
+ <li>A new <a href='http://<%= host %>/docs/mentalModel'>glossary</a> to help explain mountebank concepts.</li>
41
+ <li>Embedded site search, accessible through the search box in the header.</li>
42
+ </ul>
43
+
44
+ <h2>Bug Fixes</h2>
45
+ <ul class='bullet-list'>
46
+ <li>Fixed <a href='https://github.com/mountebank-testing/mountebank/issues/3'>incorrect handling of JSON null values</a></li>
47
+ <li>Fixed <a href='https://github.com/mountebank-testing/mountebank/pull/9'>inconsistent end tags</a> on the stubs
48
+ documentation.</li>
49
+ <li>mountebank now support <a href='https://github.com/mountebank-testing/mountebank/issues/4'>numbers and
50
+ booleans</a> for <code>deepEquals</code> predicates.</li>
51
+ <li>Fixed <a href='https://github.com/mountebank-testing/mountebank/issues/10'>rendering of several pages in Internet Explorer</a>.</li>
52
+ </ul>
53
+
54
+ <p>Many thanks to <a href='http://nikosbaxevanis.com/'>Nikos Baxevanis</a> and
55
+ <a href='https://github.com/Andhadley'>Andrew Hadley</a> for help with this release.</p>
@@ -0,0 +1,84 @@
1
+ <h1>v1.1.36</h1>
2
+
3
+ <p>mountebank is happy to provide you with the following changes in v1.1.36</p>
4
+
5
+ <h2>Better Windows Support</h2>
6
+
7
+ <p>The mountebank build is now fully Windows compatible, and with a couple of minor exceptions
8
+ that require the use of Unix tools, the same set of tests that run on Mac and Linux now run on
9
+ Windows as well. The <code>mb stop</code> and <code>mb restart</code> commands now work on
10
+ Windows as well as other platforms. Additionally, the <code>Content-Type</code> header is
11
+ now defaulted to <code>application/json</code> on Windows as it previously was on other platforms.</p>
12
+
13
+ <h2>New Features</h2>
14
+ <ul class='bullet-list'>
15
+ <li>Support for a custom keystore for http using the <a href='http://<%= host %>/docs/commandLine'>
16
+ command line.</a></li>
17
+ <li>The start of a <a href='http://<%= host %>/imposters'>UI</a> to help explore the API and to
18
+ support manual testing (more to come soon).</li>
19
+ </ul>
20
+
21
+ <h2>Bug Fixes</h2>
22
+ <ul class='bullet-list'>
23
+ <li>Fixed packaged install <code>mb</code> scripts to accept
24
+ command line parameters</li>
25
+ <li>Fixed <a href='https://github.com/mountebank-testing/mountebank/issues/38'>error handling for invalid JSON</a></li>
26
+ </ul>
27
+
28
+ <p>Many thanks to <a href='https://github.com/manojlds'>Manoj Mahalingam</a> for help with this release.</p>
29
+
30
+ <h2>Install</h2>
31
+
32
+ <pre><code>
33
+ npm install -g mountebank@1.1.36 --production
34
+ </code></pre>
35
+
36
+ <p>or:</p>
37
+
38
+ <table>
39
+ <tr>
40
+ <th>Option</th>
41
+ <th>node.js required?</th>
42
+ <th>sudo required?</th>
43
+ <th>links</th>
44
+ <th>Description</th>
45
+ </tr>
46
+ <tr>
47
+ <td>Self-contained archives</td>
48
+ <td>No</td>
49
+ <td>No</td>
50
+ <td style="min-width: 5em;">
51
+ <ul>
52
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.36-linux-x86.tar.gz">linux x86</a></li>
53
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.36-linux-x64.tar.gz">linux x64</a></li>
54
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.36-win-x86.zip">win x86</a></li>
55
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.36-win-x64.zip">win x64</a></li>
56
+ </ul>
57
+ </td>
58
+ <td>Simply unpack and run <code>mb</code> from inside</td>
59
+ </tr>
60
+ <tr>
61
+ <td>OS-specific packages</td>
62
+ <td>No</td>
63
+ <td>Yes</td>
64
+ <td>
65
+ <ul>
66
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.36.pkg">pkg</a></li>
67
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-1.1.36-1.x86_64.rpm">rpm</a></li>
68
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank_1.1.36_amd64.deb">deb</a></li>
69
+ </ul>
70
+ </td>
71
+ <td>Puts <code>mb</code> at <code>/usr/local/bin</code>, which is generally in the <code>PATH</code>.</td>
72
+ </tr>
73
+ <tr>
74
+ <td>source tarball</td>
75
+ <td>Yes</td>
76
+ <td>No</td>
77
+ <td>
78
+ <ul>
79
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.36-npm.tar.gz">mb</a></li>
80
+ </ul>
81
+ </td>
82
+ <td>source tarball if you roll that way.</td>
83
+ </tr>
84
+ </table>
@@ -0,0 +1,92 @@
1
+ <h1>v1.1.72</h1>
2
+
3
+ <p>This is a minor release, containing some bug fixes and minor enhancements</p>
4
+
5
+ <h2>New Features</h2>
6
+ <ul class='bullet-list'>
7
+ <li>A new page documenting <a href='http://<%= host %>/docs/communityExtensions'>client libraries</a> to make
8
+ using mountebank in your native language easier.</li>
9
+ <li>Added ability for the <a href='http://<%= host %>/docs/commandLine'>--configfile option</a> to accept a file glob
10
+ to support storing imposters in multiple files</li>
11
+ <li>Added a fake protocol
12
+ to show how to add new protocols</li>
13
+ </ul>
14
+
15
+ <h2>Bug Fixes</h2>
16
+ <ul class='bullet-list'>
17
+ <li>Fixed <a href='https://github.com/mountebank-testing/mountebank/issues/44'>proxying to https with invalid certs</a></li>
18
+ <li>Removed <a href='https://github.com/mountebank-testing/mountebank/issues/46'>unnecessary ? from proxy URLs</a> without query params</li>
19
+ <li>Attach logger to Console only when in terminal mode</li>
20
+ <li>Delaying closing tcp proxy connection immediately to support CORBA proxying</li>
21
+ <li>Fix Internal Server Error while null predicates</li>
22
+ <li>Fixed bug with predicates not working intuitively for multi-valued query string keys</li>
23
+ </ul>
24
+
25
+ <p>Many thanks to the following kind folk for help with this release, both for pull requests and bug reports:</p>
26
+
27
+ <ul class='bullet-list'>
28
+ <li><a href='https://github.com/quad'>Scott Robinson</a></li>
29
+ <li><a href='https://github.com/zedar'>Robert Zakrzewski</a></li>
30
+ <li><a href='https://github.com/ndrwdn'>Andrew Dean</a></li>
31
+ <li><a href='https://github.com/vocatan'>Bill Mitchell</a></li>
32
+ <li><a href='https://github.com/CoderKungfu'>Michael Cheng</a></li>
33
+ <li>Lee Meador</li>
34
+ <li>Michael Wongwaisayawan</li>
35
+ <li>Rohit Goyal</li>
36
+ </ul>
37
+
38
+ <h2>Install</h2>
39
+
40
+ <pre><code>
41
+ npm install -g mountebank@1.1.72 --production
42
+ </code></pre>
43
+
44
+ <p>or:</p>
45
+
46
+ <table>
47
+ <tr>
48
+ <th>Option</th>
49
+ <th>node.js required?</th>
50
+ <th>sudo required?</th>
51
+ <th>links</th>
52
+ <th>Description</th>
53
+ </tr>
54
+ <tr>
55
+ <td>Self-contained archives</td>
56
+ <td>No</td>
57
+ <td>No</td>
58
+ <td style="min-width: 5em;">
59
+ <ul>
60
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.72-linux-x86.tar.gz">linux x86</a></li>
61
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.72-linux-x64.tar.gz">linux x64</a></li>
62
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.72-win-x86.zip">win x86</a></li>
63
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.72-win-x64.zip">win x64</a></li>
64
+ </ul>
65
+ </td>
66
+ <td>Simply unpack and run <code>mb</code> from inside</td>
67
+ </tr>
68
+ <tr>
69
+ <td>OS-specific packages</td>
70
+ <td>No</td>
71
+ <td>Yes</td>
72
+ <td>
73
+ <ul>
74
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.72.pkg">pkg</a></li>
75
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-1.1.72-1.x86_64.rpm">rpm</a></li>
76
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank_1.1.72_amd64.deb">deb</a></li>
77
+ </ul>
78
+ </td>
79
+ <td>Puts <code>mb</code> at <code>/usr/local/bin</code>, which is generally in the <code>PATH</code>.</td>
80
+ </tr>
81
+ <tr>
82
+ <td>source tarball</td>
83
+ <td>Yes</td>
84
+ <td>No</td>
85
+ <td>
86
+ <ul>
87
+ <li><a href="https://s3.amazonaws.com/mountebank/v1.1/mountebank-v1.1.72-npm.tar.gz">mb</a></li>
88
+ </ul>
89
+ </td>
90
+ <td>source tarball if you roll that way.</td>
91
+ </tr>
92
+ </table>