Merge branch 'master' into 2.2
This commit is contained in:
@ -2,7 +2,8 @@ language: node_js
|
||||
node_js: "0.10"
|
||||
secure: "UFAGQ6m/VnEahbj9vttY9YoA5h5rEBE6K7AvEEbWnt+VKppV+w3hu3HZxgKr8C9PWhCzqlGvsLh+kCqykZhISU1fBCK/Ttp3nSpMvvF5tI2u51Rj1qZ/7NUGRU0qVI9KFt0rJeXMJwq3fivb1H6aojfPD1gsIte7NHNjUfd0iUg="
|
||||
env:
|
||||
- ES_BRANCH=1.1 ES_RELEASE=1.1.1 COVERAGE=1
|
||||
- ES_BRANCH=1.2 ES_RELEASE=1.2.0 COVERAGE=1
|
||||
- ES_BRANCH=1.1 ES_RELEASE=1.1.2 NODE_UNIT=0
|
||||
- ES_BRANCH=1.0 ES_RELEASE=1.0.3 NODE_UNIT=0
|
||||
- ES_BRANCH=0.90 ES_RELEASE=0.90.13 NODE_UNIT=0
|
||||
- NODE_UNIT=0 NODE_INTEGRATION=0 BROWSER_UNIT=1
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
# elasticsearch-js changelog
|
||||
|
||||
## 2.2 (Mar 27 2014)
|
||||
- The default API version is now `'1.2'`
|
||||
- Node clinet now supports master, 1.x, 1.2, 1.1, 1.0, and 0.90
|
||||
- Browser client now supports versions 1.0, 1.1, and 1.2
|
||||
|
||||
## 2.1 (Mar 27 2014)
|
||||
- The default API version is now `'1.1'`
|
||||
- Errors generated in the browser will now have stack traces
|
||||
|
||||
@ -49,7 +49,7 @@ bower install elasticsearch
|
||||
|
||||
[Jenkins](http://build.elasticsearch.com/job/es-js_nightly/)
|
||||
|
||||
Elasticsearch.js provides support for, and is regularly tested against, Elasticsearch releases **0.90.5 and greater**. We also test against the latest changes in the 0.90 and master branches of the Elasticsearch repository. To tell the client which version of Elastisearch you are using, and therefore the API it should provide, set the `apiVersion` config param. [More info](http://www.elasticsearch.org/guide/en/elasticsearch/client/javascript-api/current/configuration.html#_config_options)
|
||||
Elasticsearch.js provides support for, and is regularly tested against, Elasticsearch releases **0.90.5 and greater**. We also test against the latest changes in several branches in the Elasticsearch repository. To tell the client which version of Elastisearch you are using, and therefore the API it should provide, set the `apiVersion` config param. [More info](http://www.elasticsearch.org/guide/en/elasticsearch/client/javascript-api/current/configuration.html#_config_options)
|
||||
|
||||
## Examples
|
||||
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
[[api-reference]]
|
||||
== 1.1 API
|
||||
== 1.2 API
|
||||
|
||||
|
||||
NOTE: This is currently the default API, but in upcomming versions that will change. We recommend setting the `apiVersion` config param when you instantiate your client to make sure that the API does not change unexpectedly.
|
||||
|
||||
[[js-api-method-index]]
|
||||
* <<api-abortbenchmark,abortBenchmark>>
|
||||
* <<api-bulk,bulk>>
|
||||
* <<api-clearscroll,clearScroll>>
|
||||
* <<api-count,count>>
|
||||
@ -18,6 +19,7 @@ NOTE: This is currently the default API, but in upcomming versions that will cha
|
||||
* <<api-getsource,getSource>>
|
||||
* <<api-index,index>>
|
||||
* <<api-info,info>>
|
||||
* <<api-listbenchmarks,listBenchmarks>>
|
||||
* <<api-mget,mget>>
|
||||
* <<api-mlt,mlt>>
|
||||
* <<api-mpercolate,mpercolate>>
|
||||
@ -35,6 +37,7 @@ NOTE: This is currently the default API, but in upcomming versions that will cha
|
||||
* <<api-cat-aliases,cat.aliases>>
|
||||
* <<api-cat-allocation,cat.allocation>>
|
||||
* <<api-cat-count,cat.count>>
|
||||
* <<api-cat-fielddata,cat.fielddata>>
|
||||
* <<api-cat-health,cat.health>>
|
||||
* <<api-cat-help,cat.help>>
|
||||
* <<api-cat-indices,cat.indices>>
|
||||
@ -83,7 +86,6 @@ NOTE: This is currently the default API, but in upcomming versions that will cha
|
||||
* <<api-indices-recovery,indices.recovery>>
|
||||
* <<api-indices-refresh,indices.refresh>>
|
||||
* <<api-indices-segments,indices.segments>>
|
||||
* <<api-indices-snapshotindex,indices.snapshotIndex>>
|
||||
* <<api-indices-stats,indices.stats>>
|
||||
* <<api-indices-status,indices.status>>
|
||||
* <<api-indices-updatealiases,indices.updateAliases>>
|
||||
@ -101,6 +103,29 @@ NOTE: This is currently the default API, but in upcomming versions that will cha
|
||||
* <<api-snapshot-restore,snapshot.restore>>
|
||||
* <<api-snapshot-status,snapshot.status>>
|
||||
|
||||
[[api-abortbenchmark]]
|
||||
=== `abortBenchmark`
|
||||
|
||||
[source,js]
|
||||
--------
|
||||
client.abortBenchmark([params, [callback]])
|
||||
--------
|
||||
|
||||
// no description
|
||||
|
||||
The default method is `POST` and the usual <<api-conventions,params and return values>> apply. See http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-benchmark.html[the elasticsearch docs] for more about this method.
|
||||
|
||||
// no examples
|
||||
|
||||
|
||||
==== Params
|
||||
|
||||
[horizontal]
|
||||
`name`::
|
||||
`String` -- A benchmark name
|
||||
|
||||
link:#[back to top]
|
||||
|
||||
[[api-bulk]]
|
||||
=== `bulk`
|
||||
|
||||
@ -918,6 +943,31 @@ The default method is `GET` and the usual <<api-conventions,params and return va
|
||||
|
||||
|
||||
|
||||
[[api-listbenchmarks]]
|
||||
=== `listBenchmarks`
|
||||
|
||||
[source,js]
|
||||
--------
|
||||
client.listBenchmarks([params, [callback]])
|
||||
--------
|
||||
|
||||
// no description
|
||||
|
||||
The default method is `GET` and the usual <<api-conventions,params and return values>> apply. See http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-benchmark.html[the elasticsearch docs] for more about this method.
|
||||
|
||||
// no examples
|
||||
|
||||
|
||||
==== Params
|
||||
|
||||
[horizontal]
|
||||
`index`::
|
||||
`String, String[], Boolean` -- A comma-separated list of index names; use `_all` or empty string to perform the operation on all indices
|
||||
`type`::
|
||||
`String` -- The name of the document type
|
||||
|
||||
link:#[back to top]
|
||||
|
||||
[[api-mget]]
|
||||
=== `mget`
|
||||
|
||||
@ -1580,7 +1630,7 @@ client.searchTemplate([params, [callback]])
|
||||
|
||||
// no description
|
||||
|
||||
The default method is `POST` and the usual <<api-conventions,params and return values>> apply. See http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-search.html[the elasticsearch docs] for more about this method.
|
||||
The default method is `POST` and the usual <<api-conventions,params and return values>> apply. See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-template.html[the elasticsearch docs] for more about this method.
|
||||
|
||||
// no examples
|
||||
|
||||
@ -1588,6 +1638,32 @@ The default method is `POST` and the usual <<api-conventions,params and return v
|
||||
==== Params
|
||||
|
||||
[horizontal]
|
||||
`ignoreUnavailable`::
|
||||
`Boolean` -- Whether specified concrete indices should be ignored when unavailable (missing or closed)
|
||||
`allowNoIndices`::
|
||||
`Boolean` -- Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
|
||||
`[expandWildcards=open]`::
|
||||
`String` -- Whether to expand wildcard expression to concrete indices that are open, closed or both.
|
||||
Options:::
|
||||
* `"open"`
|
||||
* `"closed"`
|
||||
|
||||
`preference`::
|
||||
`String` -- Specify the node or shard the operation should be performed on (default: random)
|
||||
`routing`::
|
||||
`String, String[], Boolean` -- A comma-separated list of specific routing values
|
||||
`scroll`::
|
||||
`Duration` -- Specify how long a consistent view of the index should be maintained for scrolled search
|
||||
`searchType`::
|
||||
`String` -- Search operation type
|
||||
Options:::
|
||||
* `"query_then_fetch"`
|
||||
* `"query_and_fetch"`
|
||||
* `"dfs_query_then_fetch"`
|
||||
* `"dfs_query_and_fetch"`
|
||||
* `"count"`
|
||||
* `"scan"`
|
||||
|
||||
`index`::
|
||||
`String, String[], Boolean` -- A comma-separated list of index names to search; use `_all` or empty string to perform the operation on all indices
|
||||
`type`::
|
||||
@ -1840,8 +1916,6 @@ Options:::
|
||||
`String` -- Specific version type
|
||||
Options:::
|
||||
* `"internal"`
|
||||
* `"external"`
|
||||
* `"external_gte"`
|
||||
* `"force"`
|
||||
|
||||
`id`::
|
||||
@ -1960,6 +2034,47 @@ The default method is `GET` and the usual <<api-conventions,params and return va
|
||||
|
||||
link:#[back to top]
|
||||
|
||||
[[api-cat-fielddata]]
|
||||
=== `cat.fielddata`
|
||||
|
||||
[source,js]
|
||||
--------
|
||||
client.cat.fielddata([params, [callback]])
|
||||
--------
|
||||
|
||||
// no description
|
||||
|
||||
The default method is `GET` and the usual <<api-conventions,params and return values>> apply. See http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/cat-fielddata.html[the elasticsearch docs] for more about this method.
|
||||
|
||||
// no examples
|
||||
|
||||
|
||||
==== Params
|
||||
|
||||
[horizontal]
|
||||
`bytes`::
|
||||
`String` -- The unit in which to display byte values
|
||||
Options:::
|
||||
* `"b"`
|
||||
* `"k"`
|
||||
* `"m"`
|
||||
* `"g"`
|
||||
|
||||
`local`::
|
||||
`Boolean` -- Return local information, do not retrieve the state from master node (default: false)
|
||||
`masterTimeout`::
|
||||
`Date, Number` -- Explicit operation timeout for connection to master node
|
||||
`h`::
|
||||
`String, String[], Boolean` -- Comma-separated list of column names to display
|
||||
`help`::
|
||||
`Boolean` -- Return help information
|
||||
`v`::
|
||||
`Boolean` -- Verbose mode. Display column headers
|
||||
`fields`::
|
||||
`String, String[], Boolean` -- A comma-separated list of fields to return the fielddata size
|
||||
|
||||
link:#[back to top]
|
||||
|
||||
[[api-cat-health]]
|
||||
=== `cat.health`
|
||||
|
||||
@ -2465,8 +2580,6 @@ The default method is `GET` and the usual <<api-conventions,params and return va
|
||||
`Boolean` -- Return local information, do not retrieve the state from master node (default: false)
|
||||
`masterTimeout`::
|
||||
`Date, Number` -- Specify timeout for connection to master
|
||||
`indexTemplates`::
|
||||
`String, String[], Boolean` -- A comma separated list to return specific index templates when returning metadata
|
||||
`flatSettings`::
|
||||
`Boolean` -- Return settings in flat format (default: false)
|
||||
`index`::
|
||||
@ -3580,39 +3693,6 @@ Options:::
|
||||
|
||||
link:#[back to top]
|
||||
|
||||
[[api-indices-snapshotindex]]
|
||||
=== `indices.snapshotIndex`
|
||||
|
||||
[source,js]
|
||||
--------
|
||||
client.indices.snapshotIndex([params, [callback]])
|
||||
--------
|
||||
|
||||
Initiate a snapshot through the gateway of one or more indices.
|
||||
|
||||
The default method is `POST` and the usual <<api-conventions,params and return values>> apply. See http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/indices-gateway-snapshot.html[the elasticsearch docs] for more about this method.
|
||||
|
||||
// no examples
|
||||
|
||||
|
||||
==== Params
|
||||
|
||||
[horizontal]
|
||||
`ignoreUnavailable`::
|
||||
`Boolean` -- Whether specified concrete indices should be ignored when unavailable (missing or closed)
|
||||
`allowNoIndices`::
|
||||
`Boolean` -- Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)
|
||||
`[expandWildcards=open]`::
|
||||
`String` -- Whether to expand wildcard expression to concrete indices that are open, closed or both.
|
||||
Options:::
|
||||
* `"open"`
|
||||
* `"closed"`
|
||||
|
||||
`index`::
|
||||
`String, String[], Boolean` -- A comma-separated list of index names; use `_all` or empty string for all indices
|
||||
|
||||
link:#[back to top]
|
||||
|
||||
[[api-indices-stats]]
|
||||
=== `indices.stats`
|
||||
|
||||
|
||||
4138
docs/api_methods_1_1.asciidoc
Normal file
4138
docs/api_methods_1_1.asciidoc
Normal file
File diff suppressed because it is too large
Load Diff
@ -51,12 +51,20 @@ Default in Node:::
|
||||
+
|
||||
WARNING: This default will track the latest version of Elasticsearch, and is only intended to be used during development. It is highly recommended that you set this parameter in all code that is headed to production.
|
||||
|
||||
Default ::: `"1.1"`
|
||||
Default ::: `"1.2"`
|
||||
|
||||
Options :::
|
||||
Options in node :::
|
||||
* `"1.2"`
|
||||
* `"1.1"`
|
||||
* `"1.0"`
|
||||
* `"0.90"`
|
||||
* `"master"` (unstable)
|
||||
* `"1.x"` (unstable)
|
||||
|
||||
Options in the browser :::
|
||||
* `"1.2"`
|
||||
* `"1.1"`
|
||||
* `"1.0"`
|
||||
|
||||
|
||||
|
||||
|
||||
@ -18,6 +18,8 @@ include::development.asciidoc[]
|
||||
|
||||
include::api_methods.asciidoc[]
|
||||
|
||||
include::api_methods_1_1.asciidoc[]
|
||||
|
||||
include::api_methods_1_0.asciidoc[]
|
||||
|
||||
include::api_methods_0_90.asciidoc[]
|
||||
|
||||
@ -55,8 +55,11 @@ utils.branches.forEach(function (branch) {
|
||||
case '0.90':
|
||||
args.push('-f');
|
||||
break;
|
||||
case 'master':
|
||||
case '1.x':
|
||||
case '1.0':
|
||||
case '1.1':
|
||||
// no special treatment
|
||||
break;
|
||||
default:
|
||||
args.push('-Des.node.bench=true', '-Des.script.disable_dynamic=false');
|
||||
break;
|
||||
}
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
"pattern": "specified in test/unit/coverage.js"
|
||||
},
|
||||
"supported_es_branches": [
|
||||
"1.2",
|
||||
"1.1",
|
||||
"1.0",
|
||||
"0.90"
|
||||
@ -28,7 +29,7 @@
|
||||
"master",
|
||||
"1.x"
|
||||
],
|
||||
"default_api_branch": "1.1"
|
||||
"default_api_branch": "1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"mocha": "^1.18.2",
|
||||
|
||||
@ -71,12 +71,11 @@ function manage_es {
|
||||
local ES_URL="https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-${ES_RELEASE}.zip"
|
||||
local ES_DIR="${SNAPSHOTS}/${ES_VERSION}"
|
||||
else
|
||||
if [[ $ES_BRANCH == "master" ]]; then
|
||||
local JDK='JDK7'
|
||||
elif [[ $ES_BRANCH == "1.x" ]]; then
|
||||
local JDK='JDK7'
|
||||
else
|
||||
local JDK='JDK6'
|
||||
# TODO: TRASH THIS
|
||||
if [[ $ES_BRANCH == "master" ]]; then local JDK='JDK7'
|
||||
elif [[ $ES_BRANCH == "1.x" ]]; then local JDK='JDK7'
|
||||
elif [[ $ES_BRANCH == "1.2" ]]; then local JDK='JDK7'
|
||||
else local JDK='JDK6'
|
||||
fi
|
||||
|
||||
local ES_VERSION="${ES_BRANCH}_nightly"
|
||||
@ -135,19 +134,23 @@ function manage_es {
|
||||
return 1
|
||||
fi
|
||||
|
||||
local ES_OPTS="-p $PIDFILE -Des.http.port=9400 -Des.network.host=localhost -Des.discovery.zen.ping.multicast.enabled=false -Des.discovery.zen.ping_timeout=1"
|
||||
local ES_OPTS="-p $PIDFILE -D es.http.port=9400 -D es.network.host=localhost -D es.cluster.name=elasticsearch_js_test_runners -D es.node.name=elasticsearch_js_test_runner -D es.gateway.type=none -D es.index.store.type=memory -D es.discovery.zen.ping.multicast.enabled=false -D es.discovery.zen.ping_timeout=1 -D es.logger.level=ERROR"
|
||||
|
||||
if [ -n "$ES_NODE_NAME" ]; then
|
||||
ES_OPTS="$ES_OPTS -Des.node.name=$ES_NODE_NAME"
|
||||
fi
|
||||
|
||||
if [ "$ES_BRANCH" = "0.90" ]; then
|
||||
echo "Starting Elasticsearch $ES_VERSION"
|
||||
call $ES_BIN $ES_OPTS
|
||||
else
|
||||
echo "Starting Elasticsearch $ES_VERSION as a deamon"
|
||||
call $ES_BIN -d $ES_OPTS
|
||||
if [[ $ES_BRANCH != "0.90" ]]; then
|
||||
# explicitly run as deamon
|
||||
ES_OPTS="-d $ES_OPTS"
|
||||
fi
|
||||
|
||||
if [[ $ES_BRANCH != "1.0" && $ES_BRANCH != "1.1" ]]; then
|
||||
# enable scripting and benchmarks
|
||||
ES_OPTS="$ES_OPTS -D es.node.bench=true -D es.script.disable_dynamic=false"
|
||||
fi
|
||||
|
||||
call $ES_BIN $ES_OPTS
|
||||
;;
|
||||
stop)
|
||||
if [ -e $PIDFILE ]; then
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
source $HOME/.nvm/nvm.sh
|
||||
|
||||
HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
source $HERE/_utils.sh
|
||||
|
||||
case $1 in
|
||||
setup)
|
||||
group "installing node 0.10"
|
||||
nvm install 0.10
|
||||
|
||||
npm --quiet install
|
||||
;;
|
||||
run)
|
||||
group "test node 0.10"
|
||||
nvm use 0.10
|
||||
echo "rebuilding npm deps"
|
||||
npm rebuild &> /dev/null
|
||||
call ES_BRANCH=master COVERAGE=1 ./scripts/ci.sh
|
||||
call ES_BRANCH=1.0 NODE_UNIT=0 ./scripts/ci.sh
|
||||
call ES_BRANCH=0.90 NODE_UNIT=0 ./scripts/ci.sh
|
||||
|
||||
group "test browsers"
|
||||
call NODE_UNIT=0 NODE_INTEGRATION=0 BROWSER_UNIT=1 ./scripts/ci.sh
|
||||
;;
|
||||
esac
|
||||
@ -34,6 +34,10 @@ var optimist = require('optimist')
|
||||
help: {
|
||||
describe: 'This help message',
|
||||
type: 'boolean'
|
||||
},
|
||||
reset: {
|
||||
describe: 'Clear all logstash-* indices before genrating logs',
|
||||
type: 'boolean'
|
||||
}
|
||||
});
|
||||
|
||||
@ -270,6 +274,15 @@ queue.drain = function () {
|
||||
};
|
||||
|
||||
async.series([
|
||||
function (done) {
|
||||
if (argv.reset) {
|
||||
client.indices.delete({
|
||||
index: 'logstash-*'
|
||||
}, done);
|
||||
} else {
|
||||
done();
|
||||
}
|
||||
},
|
||||
function (done) {
|
||||
client.cluster.putSettings({
|
||||
body: {
|
||||
|
||||
@ -8,13 +8,17 @@ var bowerDir = root + '/src/bower_es_js';
|
||||
|
||||
// get both the bower and node package files
|
||||
var bowerJson = require(bowerDir + '/bower.json');
|
||||
var bowerPackageJson = require(bowerDir + '/package.json');
|
||||
var esjsJson = require(root + '/package.json');
|
||||
|
||||
// update the version to match the node version
|
||||
bowerJson.version = esjsJson.version;
|
||||
bowerPackageJson.version = esjsJson.version;
|
||||
|
||||
// write the new bower.json file
|
||||
fs.writeFileSync(bowerDir + '/bower.json', JSON.stringify(bowerJson, null, ' '));
|
||||
// write the new package.json file
|
||||
fs.writeFileSync(bowerDir + '/package.json', JSON.stringify(bowerPackageJson, null, ' '));
|
||||
|
||||
function make(cmd, args) {
|
||||
return _.bind(spawn, null, cmd, args, {
|
||||
|
||||
5518
src/lib/apis/1_2.js
Normal file
5518
src/lib/apis/1_2.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
module.exports = {
|
||||
'1.2': require('./1_2'),
|
||||
'1.1': require('./1_1'),
|
||||
'1.0': require('./1_0'),
|
||||
'0.90': require('./0_90')
|
||||
'1.0': require('./1_0')
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
module.exports = {
|
||||
'master': require('./master'),
|
||||
'1.x': require('./1_x'),
|
||||
'1.2': require('./1_2'),
|
||||
'1.1': require('./1_1'),
|
||||
'1.0': require('./1_0'),
|
||||
'0.90': require('./0_90')
|
||||
|
||||
@ -63,7 +63,7 @@ function Client(config) {
|
||||
delete this._namespaces;
|
||||
}
|
||||
|
||||
EsApiClient.prototype = _.funcEnum(config, 'apiVersion', Client.apis, '1.1');
|
||||
EsApiClient.prototype = _.funcEnum(config, 'apiVersion', Client.apis, '1.2');
|
||||
if (!config.sniffEndpoint && EsApiClient.prototype === Client.apis['0.90']) {
|
||||
config.sniffEndpoint = '/_cluster/nodes';
|
||||
}
|
||||
|
||||
@ -23,17 +23,17 @@ describe('Client instances creation', function () {
|
||||
|
||||
var def = require('../../../package.json').config.default_api_branch;
|
||||
it('inherits the ' + def + ' API by default', function () {
|
||||
expect(client.bulk).to.eql(apis[def].bulk);
|
||||
expect(client.nodes.stats).to.eql(apis[def].nodes.prototype.stats);
|
||||
expect(client.bulk).to.be(apis[def].bulk);
|
||||
expect(client.nodes.stats).to.be(apis[def].nodes.prototype.stats);
|
||||
});
|
||||
|
||||
it('inherits the 0.90 API when specified', function () {
|
||||
it('inherits the 1.0 API when specified', function () {
|
||||
client.close();
|
||||
client = es.Client({
|
||||
apiVersion: '0.90'
|
||||
apiVersion: '1.0'
|
||||
});
|
||||
expect(client.bulk).to.eql(apis['0.90'].bulk);
|
||||
expect(client.cluster.nodeStats).to.eql(apis['0.90'].cluster.prototype.nodeStats);
|
||||
expect(client.bulk).to.be(apis['1.0'].bulk);
|
||||
expect(client.cluster.nodeStats).to.be(apis['1.0'].cluster.prototype.nodeStats);
|
||||
});
|
||||
|
||||
it('closing the client causes it\'s transport to be closed', function () {
|
||||
|
||||
Reference in New Issue
Block a user