@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.
- package/LICENSE +21 -0
- package/README.md +94 -0
- package/bin/mb +136 -0
- package/package.json +71 -0
- package/releases.json +52 -0
- package/src/cli/api.js +112 -0
- package/src/cli/cli.js +420 -0
- package/src/controllers/configController.js +64 -0
- package/src/controllers/feedController.js +115 -0
- package/src/controllers/homeController.js +58 -0
- package/src/controllers/imposterController.js +328 -0
- package/src/controllers/impostersController.js +215 -0
- package/src/controllers/logsController.js +52 -0
- package/src/models/behaviors.js +553 -0
- package/src/models/behaviorsValidator.js +186 -0
- package/src/models/compatibility.js +133 -0
- package/src/models/dryRunValidator.js +261 -0
- package/src/models/filesystemBackedImpostersRepository.js +908 -0
- package/src/models/http/baseHttpServer.js +207 -0
- package/src/models/http/headersMap.js +87 -0
- package/src/models/http/httpProxy.js +230 -0
- package/src/models/http/httpRequest.js +82 -0
- package/src/models/http/httpServer.js +18 -0
- package/src/models/http/index.js +18 -0
- package/src/models/https/cert/mb-cert.pem +20 -0
- package/src/models/https/cert/mb-csr.pem +16 -0
- package/src/models/https/cert/mb-key.pem +27 -0
- package/src/models/https/httpsServer.js +42 -0
- package/src/models/https/index.js +18 -0
- package/src/models/imposter.js +243 -0
- package/src/models/imposterPrinter.js +120 -0
- package/src/models/impostersRepository.js +49 -0
- package/src/models/inMemoryImpostersRepository.js +418 -0
- package/src/models/jsonpath.js +44 -0
- package/src/models/mbConnection.js +107 -0
- package/src/models/predicates.js +438 -0
- package/src/models/protocols.js +242 -0
- package/src/models/responseResolver.js +398 -0
- package/src/models/smtp/index.js +16 -0
- package/src/models/smtp/smtpRequest.js +60 -0
- package/src/models/smtp/smtpServer.js +109 -0
- package/src/models/tcp/index.js +18 -0
- package/src/models/tcp/tcpProxy.js +110 -0
- package/src/models/tcp/tcpRequest.js +23 -0
- package/src/models/tcp/tcpServer.js +156 -0
- package/src/models/tcp/tcpValidator.js +19 -0
- package/src/models/xpath.js +95 -0
- package/src/mountebank.js +245 -0
- package/src/public/images/arrow_down.png +0 -0
- package/src/public/images/arrow_up.png +0 -0
- package/src/public/images/book.jpg +0 -0
- package/src/public/images/dataflow.png +0 -0
- package/src/public/images/favicon.ico +0 -0
- package/src/public/images/forkme_right_orange_ff7600.png +0 -0
- package/src/public/images/mountebank.png +0 -0
- package/src/public/images/overview.gif +0 -0
- package/src/public/images/quote.png +0 -0
- package/src/public/images/tw-logo.png +0 -0
- package/src/public/scripts/jquery/jquery-3.6.1.min.js +2 -0
- package/src/public/scripts/urlHashHandler.js +31 -0
- package/src/public/stylesheets/application.css +424 -0
- package/src/public/stylesheets/ie.css +14 -0
- package/src/public/stylesheets/imposters.css +121 -0
- package/src/public/stylesheets/jqueryui/1.10.4/themes/smoothness/jquery-ui.css +1178 -0
- package/src/util/combinators.js +68 -0
- package/src/util/date.js +51 -0
- package/src/util/errors.js +55 -0
- package/src/util/helpers.js +131 -0
- package/src/util/inherit.js +28 -0
- package/src/util/ip.js +54 -0
- package/src/util/logger.js +83 -0
- package/src/util/middleware.js +256 -0
- package/src/util/scopedLogger.js +47 -0
- package/src/views/_footer.ejs +20 -0
- package/src/views/_header.ejs +113 -0
- package/src/views/_imposter.ejs +8 -0
- package/src/views/config.ejs +71 -0
- package/src/views/docs/api/behaviors/copy.ejs +427 -0
- package/src/views/docs/api/behaviors/decorate.ejs +182 -0
- package/src/views/docs/api/behaviors/lookup.ejs +220 -0
- package/src/views/docs/api/behaviors/shellTransform.ejs +153 -0
- package/src/views/docs/api/behaviors/wait.ejs +121 -0
- package/src/views/docs/api/behaviors.ejs +141 -0
- package/src/views/docs/api/contracts/addStub-description.ejs +10 -0
- package/src/views/docs/api/contracts/addStub.ejs +10 -0
- package/src/views/docs/api/contracts/config-description.ejs +32 -0
- package/src/views/docs/api/contracts/config.ejs +23 -0
- package/src/views/docs/api/contracts/home-description.ejs +18 -0
- package/src/views/docs/api/contracts/home.ejs +13 -0
- package/src/views/docs/api/contracts/imposter-description.ejs +439 -0
- package/src/views/docs/api/contracts/imposter.ejs +182 -0
- package/src/views/docs/api/contracts/imposters-description.ejs +13 -0
- package/src/views/docs/api/contracts/imposters.ejs +13 -0
- package/src/views/docs/api/contracts/logs-description.ejs +3 -0
- package/src/views/docs/api/contracts/logs.ejs +14 -0
- package/src/views/docs/api/contracts/stub-description.ejs +4 -0
- package/src/views/docs/api/contracts/stub.ejs +7 -0
- package/src/views/docs/api/contracts/stubs-description.ejs +4 -0
- package/src/views/docs/api/contracts/stubs.ejs +11 -0
- package/src/views/docs/api/contracts.ejs +133 -0
- package/src/views/docs/api/errors.ejs +64 -0
- package/src/views/docs/api/fault/connectionReset.ejs +31 -0
- package/src/views/docs/api/fault/randomDataThenClose.ejs +31 -0
- package/src/views/docs/api/faults.ejs +57 -0
- package/src/views/docs/api/injection.ejs +426 -0
- package/src/views/docs/api/json.ejs +205 -0
- package/src/views/docs/api/jsonpath.ejs +210 -0
- package/src/views/docs/api/mocks.ejs +130 -0
- package/src/views/docs/api/overview.ejs +968 -0
- package/src/views/docs/api/predicates/and.ejs +62 -0
- package/src/views/docs/api/predicates/contains.ejs +64 -0
- package/src/views/docs/api/predicates/deepEquals.ejs +114 -0
- package/src/views/docs/api/predicates/endsWith.ejs +66 -0
- package/src/views/docs/api/predicates/equals.ejs +125 -0
- package/src/views/docs/api/predicates/exists.ejs +118 -0
- package/src/views/docs/api/predicates/inject.ejs +67 -0
- package/src/views/docs/api/predicates/matches.ejs +66 -0
- package/src/views/docs/api/predicates/not.ejs +52 -0
- package/src/views/docs/api/predicates/or.ejs +79 -0
- package/src/views/docs/api/predicates/startsWith.ejs +62 -0
- package/src/views/docs/api/predicates.ejs +382 -0
- package/src/views/docs/api/proxies.ejs +191 -0
- package/src/views/docs/api/proxy/addDecorateBehavior.ejs +115 -0
- package/src/views/docs/api/proxy/addWaitBehavior.ejs +96 -0
- package/src/views/docs/api/proxy/injectHeaders.ejs +91 -0
- package/src/views/docs/api/proxy/predicateGenerators.ejs +600 -0
- package/src/views/docs/api/proxy/proxyModes.ejs +495 -0
- package/src/views/docs/api/stubs.ejs +391 -0
- package/src/views/docs/api/xpath.ejs +281 -0
- package/src/views/docs/cli/configFiles.ejs +133 -0
- package/src/views/docs/cli/customFormatters.ejs +53 -0
- package/src/views/docs/cli/help.ejs +6 -0
- package/src/views/docs/cli/replay.ejs +42 -0
- package/src/views/docs/cli/restart.ejs +10 -0
- package/src/views/docs/cli/save.ejs +68 -0
- package/src/views/docs/cli/start.ejs +234 -0
- package/src/views/docs/cli/stop.ejs +32 -0
- package/src/views/docs/commandLine.ejs +93 -0
- package/src/views/docs/communityExtensions.ejs +233 -0
- package/src/views/docs/gettingStarted.ejs +146 -0
- package/src/views/docs/mentalModel.ejs +51 -0
- package/src/views/docs/protocols/custom.ejs +231 -0
- package/src/views/docs/protocols/http.ejs +238 -0
- package/src/views/docs/protocols/https.ejs +246 -0
- package/src/views/docs/protocols/smtp.ejs +142 -0
- package/src/views/docs/protocols/tcp.ejs +431 -0
- package/src/views/docs/security.ejs +38 -0
- package/src/views/faqs.ejs +65 -0
- package/src/views/feed.ejs +33 -0
- package/src/views/imposter.ejs +22 -0
- package/src/views/imposters.ejs +33 -0
- package/src/views/index.ejs +89 -0
- package/src/views/license.ejs +30 -0
- package/src/views/logs.ejs +77 -0
- package/src/views/releases/v1.1.0.ejs +55 -0
- package/src/views/releases/v1.1.36.ejs +84 -0
- package/src/views/releases/v1.1.72.ejs +92 -0
- package/src/views/releases/v1.10.0.ejs +108 -0
- package/src/views/releases/v1.11.0.ejs +109 -0
- package/src/views/releases/v1.12.0.ejs +96 -0
- package/src/views/releases/v1.13.0.ejs +118 -0
- package/src/views/releases/v1.14.0.ejs +107 -0
- package/src/views/releases/v1.14.1.ejs +94 -0
- package/src/views/releases/v1.15.0.ejs +113 -0
- package/src/views/releases/v1.16.0.ejs +104 -0
- package/src/views/releases/v1.2.0.ejs +78 -0
- package/src/views/releases/v1.2.103.ejs +86 -0
- package/src/views/releases/v1.2.122.ejs +86 -0
- package/src/views/releases/v1.2.30.ejs +84 -0
- package/src/views/releases/v1.2.45.ejs +84 -0
- package/src/views/releases/v1.2.56.ejs +79 -0
- package/src/views/releases/v1.3.0.ejs +86 -0
- package/src/views/releases/v1.3.1.ejs +100 -0
- package/src/views/releases/v1.4.0.ejs +96 -0
- package/src/views/releases/v1.4.1.ejs +103 -0
- package/src/views/releases/v1.4.2.ejs +100 -0
- package/src/views/releases/v1.4.3.ejs +113 -0
- package/src/views/releases/v1.5.0.ejs +104 -0
- package/src/views/releases/v1.5.1.ejs +91 -0
- package/src/views/releases/v1.6.0.ejs +109 -0
- package/src/views/releases/v1.7.0.ejs +113 -0
- package/src/views/releases/v1.7.1.ejs +90 -0
- package/src/views/releases/v1.7.2.ejs +96 -0
- package/src/views/releases/v1.8.0.ejs +121 -0
- package/src/views/releases/v1.9.0.ejs +111 -0
- package/src/views/releases/v2.0.0.ejs +159 -0
- package/src/views/releases/v2.1.0.ejs +121 -0
- package/src/views/releases/v2.1.1.ejs +106 -0
- package/src/views/releases/v2.1.2.ejs +84 -0
- package/src/views/releases/v2.2.0.ejs +115 -0
- package/src/views/releases/v2.2.1.ejs +102 -0
- package/src/views/releases/v2.3.0.ejs +121 -0
- package/src/views/releases/v2.3.1.ejs +100 -0
- package/src/views/releases/v2.3.2.ejs +102 -0
- package/src/views/releases/v2.3.3.ejs +97 -0
- package/src/views/releases/v2.4.0.ejs +114 -0
- package/src/views/releases/v2.5.0.ejs +51 -0
- package/src/views/releases/v2.6.0.ejs +35 -0
- package/src/views/releases/v2.7.0.ejs +32 -0
- package/src/views/releases/v2.8.0.ejs +36 -0
- package/src/views/releases/v2.8.1.ejs +7 -0
- package/src/views/releases/v2.8.2.ejs +26 -0
- package/src/views/releases/v2.9.0.ejs +32 -0
- package/src/views/releases/v2.9.1.ejs +10 -0
- package/src/views/releases.ejs +26 -0
- package/src/views/sitemap.ejs +36 -0
- 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 © 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>
|