UNPKG

ccxt-rest

Version:

Open Source Unified REST API of 100+ Crypto Exchange Sites

2 lines 1.41 MB
<!doctype html>
<html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>CCXT-REST Exchange Summary Dashboard</title><link rel="stylesheet" href="assets/app.css"/></head><body data-raw="{&quot;stats&quot;:{&quot;suites&quot;:248,&quot;tests&quot;:744,&quot;passes&quot;:744,&quot;pending&quot;:0,&quot;failures&quot;:0,&quot;start&quot;:&quot;2020-06-21T18:10:18.827Z&quot;,&quot;end&quot;:&quot;2020-06-21T18:12:31.086Z&quot;,&quot;duration&quot;:132259,&quot;testsRegistered&quot;:744,&quot;passPercent&quot;:100,&quot;pendingPercent&quot;:0,&quot;other&quot;:0,&quot;hasOther&quot;:false,&quot;skipped&quot;:0,&quot;hasSkipped&quot;:false,&quot;passPercentClass&quot;:&quot;success&quot;,&quot;pendingPercentClass&quot;:&quot;danger&quot;},&quot;suites&quot;:{&quot;uuid&quot;:&quot;8995d97c-05d7-40a3-a779-1712473a4c68&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;857fa333-ae3b-4191-9edc-9d3804c1a1a8&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;b57c5a73-11f3-42da-95f6-471545185839&quot;,&quot;title&quot;:&quot;&gt; [bibox] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bibox-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bibox-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bibox] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bibox] without API keys &gt; [bibox] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:334,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;61fdacc2-2213-4752-97f5-1e2f2bb6166e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bibox] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bibox] without API keys &gt; [bibox] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:792,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ab7e4108-7202-4533-8d8e-f73aaaff6a28&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bibox] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bibox] without API keys &gt; [bibox] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:37,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cc42085c-49f5-4898-ab8c-2e2dacead0ff&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bibox] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bibox] without API keys &gt; [bibox] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1626,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4cf12567-2701-49eb-8abf-0f5284a2b8a4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bibox] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bibox] without API keys &gt; [bibox] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:26,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;54f5346a-df9a-41ad-9bf4-2b4bc19d7f60&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bibox] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bibox] without API keys &gt; [bibox] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:17,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;eeee0fe6-9d79-4372-a761-c28194c765fb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;61fdacc2-2213-4752-97f5-1e2f2bb6166e&quot;,&quot;ab7e4108-7202-4533-8d8e-f73aaaff6a28&quot;,&quot;cc42085c-49f5-4898-ab8c-2e2dacead0ff&quot;,&quot;4cf12567-2701-49eb-8abf-0f5284a2b8a4&quot;,&quot;54f5346a-df9a-41ad-9bf4-2b4bc19d7f60&quot;,&quot;eeee0fe6-9d79-4372-a761-c28194c765fb&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2832,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;5c074f2a-7dca-417a-928b-39f240e025d1&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;a1f0b883-ce88-4169-9827-486050945288&quot;,&quot;title&quot;:&quot;&gt; [binanceje] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/binanceje-test.js&quot;,&quot;file&quot;:&quot;/test/generated/binanceje-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [binanceje] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceje] without API keys &gt; [binanceje] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:187,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a2fc4fec-d352-49aa-9ac9-a07163b400ed&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceje] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceje] without API keys &gt; [binanceje] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:619,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1a78b2fb-e369-44c1-b803-79fe7c81a876&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceje] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceje] without API keys &gt; [binanceje] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:725,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0be32d12-f80f-438b-88d5-27fd93a06879&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceje] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceje] without API keys &gt; [binanceje] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:726,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;39055945-6e0e-4b35-a72d-12073e231fbb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceje] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceje] without API keys &gt; [binanceje] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:484,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0515b508-f16c-4a34-a90a-ff64040b5662&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceje] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceje] without API keys &gt; [binanceje] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:715,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;29335a2d-fab9-4060-9a59-efb31debda7e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;a2fc4fec-d352-49aa-9ac9-a07163b400ed&quot;,&quot;1a78b2fb-e369-44c1-b803-79fe7c81a876&quot;,&quot;0be32d12-f80f-438b-88d5-27fd93a06879&quot;,&quot;39055945-6e0e-4b35-a72d-12073e231fbb&quot;,&quot;0515b508-f16c-4a34-a90a-ff64040b5662&quot;,&quot;29335a2d-fab9-4060-9a59-efb31debda7e&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:3456,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;9181e562-a2c2-4c88-9406-943dffa88af1&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;9737f136-518d-4247-9498-69d39fca4d63&quot;,&quot;title&quot;:&quot;&gt; [binance] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/binance-test.js&quot;,&quot;file&quot;:&quot;/test/generated/binance-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [binance] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [binance] without API keys &gt; [binance] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:233,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ba59917e-2353-4874-89d2-c1e5b92501a5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binance] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [binance] without API keys &gt; [binance] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:675,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;979c88e3-361e-4b7e-bac9-cd7119ae0d57&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binance] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [binance] without API keys &gt; [binance] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:856,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4ddcd9f3-6910-4117-be6a-2f393ad11457&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binance] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [binance] without API keys &gt; [binance] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:843,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;519237e7-214b-4446-88b1-39e3ae4c470f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binance] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [binance] without API keys &gt; [binance] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:305,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d6b5c808-0c10-4fc6-b527-26ce6f0531c6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binance] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [binance] without API keys &gt; [binance] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:776,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e6d27aab-7ccb-42df-bcff-7c091e3124c2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;ba59917e-2353-4874-89d2-c1e5b92501a5&quot;,&quot;979c88e3-361e-4b7e-bac9-cd7119ae0d57&quot;,&quot;4ddcd9f3-6910-4117-be6a-2f393ad11457&quot;,&quot;519237e7-214b-4446-88b1-39e3ae4c470f&quot;,&quot;d6b5c808-0c10-4fc6-b527-26ce6f0531c6&quot;,&quot;e6d27aab-7ccb-42df-bcff-7c091e3124c2&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:3688,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;d6b71d47-f4f8-4d17-b72b-f34c4145d96b&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;b47456d7-0584-46d6-9a47-857be0720013&quot;,&quot;title&quot;:&quot;&gt; [acx] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/acx-test.js&quot;,&quot;file&quot;:&quot;/test/generated/acx-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [acx] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [acx] without API keys &gt; [acx] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:520,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b0e7bd3e-4ac3-4024-8fb5-21092b405e63&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [acx] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [acx] without API keys &gt; [acx] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1016,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e241288c-e660-4bf5-beac-414c3d2d726a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [acx] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [acx] without API keys &gt; [acx] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1218,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;40aad70a-5377-477f-808e-daf16acf6712&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [acx] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [acx] without API keys &gt; [acx] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1053,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;73fdcf86-b01b-45ad-88ac-8c9b3e3f83e6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [acx] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [acx] without API keys &gt; [acx] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:947,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b1f4ef5a-fff3-40fc-a079-8088baf2f82e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [acx] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [acx] without API keys &gt; [acx] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1030,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a93d1c34-39e8-47e5-aec8-99a1c152d56b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;b0e7bd3e-4ac3-4024-8fb5-21092b405e63&quot;,&quot;e241288c-e660-4bf5-beac-414c3d2d726a&quot;,&quot;40aad70a-5377-477f-808e-daf16acf6712&quot;,&quot;73fdcf86-b01b-45ad-88ac-8c9b3e3f83e6&quot;,&quot;b1f4ef5a-fff3-40fc-a079-8088baf2f82e&quot;,&quot;a93d1c34-39e8-47e5-aec8-99a1c152d56b&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5784,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;82316f3a-fab1-4284-a1aa-7fd9d26b7e06&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;88e77ebe-7543-47cd-a2ae-683acfd5ef01&quot;,&quot;title&quot;:&quot;&gt; [binanceus] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/binanceus-test.js&quot;,&quot;file&quot;:&quot;/test/generated/binanceus-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [binanceus] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceus] without API keys &gt; [binanceus] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:42,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ce3bd3d8-abe1-41b9-9bdb-df47e5a16101&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceus] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceus] without API keys &gt; [binanceus] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:393,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;abeb360b-39a6-4dff-b18c-1070885ae909&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceus] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceus] without API keys &gt; [binanceus] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:804,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8be5442e-84ed-491b-8cfb-ab20ef7ac9a5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceus] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceus] without API keys &gt; [binanceus] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:529,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;684a2402-2fdf-46bb-8450-b92c77878a77&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceus] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceus] without API keys &gt; [binanceus] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:502,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;feeb76e3-142a-49b6-91ee-278d635a20dd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [binanceus] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [binanceus] without API keys &gt; [binanceus] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:488,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;21b9cd01-09a3-472c-a6bd-7cbc4360d3c7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;ce3bd3d8-abe1-41b9-9bdb-df47e5a16101&quot;,&quot;abeb360b-39a6-4dff-b18c-1070885ae909&quot;,&quot;8be5442e-84ed-491b-8cfb-ab20ef7ac9a5&quot;,&quot;684a2402-2fdf-46bb-8450-b92c77878a77&quot;,&quot;feeb76e3-142a-49b6-91ee-278d635a20dd&quot;,&quot;21b9cd01-09a3-472c-a6bd-7cbc4360d3c7&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2758,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;35496120-5046-4762-b000-abae561c20a3&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;46a89363-4492-45cc-854f-6ab8e9a1f830&quot;,&quot;title&quot;:&quot;&gt; [bigone] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bigone-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bigone-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bigone] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bigone] without API keys &gt; [bigone] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:277,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d95af9dd-a265-4a33-b079-62ece0e37c1b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bigone] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bigone] without API keys &gt; [bigone] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:714,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;647544a1-175c-4014-a836-4b86e868588a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bigone] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bigone] without API keys &gt; [bigone] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1837,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f95ab954-f573-4470-9847-ed875e0840a6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bigone] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bigone] without API keys &gt; [bigone] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1373,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7172ba23-61ae-4375-a2c6-5f624f0b07c0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bigone] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bigone] without API keys &gt; [bigone] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1073,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;62ac2875-5dda-4777-82de-94af39a2d1f0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bigone] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bigone] without API keys &gt; [bigone] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1277,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fd134389-9f50-4cdb-b97a-474ca2dddca1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;d95af9dd-a265-4a33-b079-62ece0e37c1b&quot;,&quot;647544a1-175c-4014-a836-4b86e868588a&quot;,&quot;f95ab954-f573-4470-9847-ed875e0840a6&quot;,&quot;7172ba23-61ae-4375-a2c6-5f624f0b07c0&quot;,&quot;62ac2875-5dda-4777-82de-94af39a2d1f0&quot;,&quot;fd134389-9f50-4cdb-b97a-474ca2dddca1&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6551,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;46cc0291-28cf-46f3-9ebc-ab8077096a25&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;b14ab63d-884f-4fc8-9fd4-e7fcefe90ff4&quot;,&quot;title&quot;:&quot;&gt; [anxpro] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/anxpro-test.js&quot;,&quot;file&quot;:&quot;/test/generated/anxpro-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [anxpro] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [anxpro] without API keys &gt; [anxpro] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:504,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b3d0e5a2-df9a-4bb5-bf3b-01f394ab5399&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [anxpro] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [anxpro] without API keys &gt; [anxpro] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5409,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;20175c85-5772-41c0-a9da-b6dbc985810e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [anxpro] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [anxpro] without API keys &gt; [anxpro] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1390,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3851f799-a3bc-45e5-8cd9-4aa0da25b7b2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [anxpro] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [anxpro] without API keys &gt; [anxpro] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:13,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c80971e2-6b18-4b63-9230-d2243cd77043&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [anxpro] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [anxpro] without API keys &gt; [anxpro] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:54,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;582768ff-fb48-4638-ac80-1cfec9c6a70e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [anxpro] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [anxpro] without API keys &gt; [anxpro] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b192974f-83ac-45ad-a3cd-e0f88f01981f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;b3d0e5a2-df9a-4bb5-bf3b-01f394ab5399&quot;,&quot;20175c85-5772-41c0-a9da-b6dbc985810e&quot;,&quot;3851f799-a3bc-45e5-8cd9-4aa0da25b7b2&quot;,&quot;c80971e2-6b18-4b63-9230-d2243cd77043&quot;,&quot;582768ff-fb48-4638-ac80-1cfec9c6a70e&quot;,&quot;b192974f-83ac-45ad-a3cd-e0f88f01981f&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:7377,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;c9462732-5550-4f82-a5f4-0589f5d77e75&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;32c8f354-5b9f-423e-8d03-e67cc36ec38b&quot;,&quot;title&quot;:&quot;&gt; [aofex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/aofex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/aofex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [aofex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [aofex] without API keys &gt; [aofex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:458,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e9f409e5-74cb-46bb-91de-a7f32f078e05&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [aofex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [aofex] without API keys &gt; [aofex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1940,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ffcac089-4b72-42f6-a1d5-0c43e087c033&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [aofex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [aofex] without API keys &gt; [aofex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3007,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;50576cca-a536-4ac6-a968-54376c3aa075&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [aofex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [aofex] without API keys &gt; [aofex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1017,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e19d8a28-dbe6-47f0-b17a-720a44c61f30&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [aofex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [aofex] without API keys &gt; [aofex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:984,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c3aaa968-0d18-4ade-ab48-9c0d615f5b85&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [aofex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [aofex] without API keys &gt; [aofex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1030,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e91bb799-6f0a-49a2-af9f-196a0ebb2b9b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;e9f409e5-74cb-46bb-91de-a7f32f078e05&quot;,&quot;ffcac089-4b72-42f6-a1d5-0c43e087c033&quot;,&quot;50576cca-a536-4ac6-a968-54376c3aa075&quot;,&quot;e19d8a28-dbe6-47f0-b17a-720a44c61f30&quot;,&quot;c3aaa968-0d18-4ade-ab48-9c0d615f5b85&quot;,&quot;e91bb799-6f0a-49a2-af9f-196a0ebb2b9b&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:8436,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;28553314-8993-4c0a-9db3-cb53d8f5564e&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;c63f8289-986b-4425-a197-54e4cfa55185&quot;,&quot;title&quot;:&quot;&gt; [bcex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bcex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bcex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bcex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bcex] without API keys &gt; [bcex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:363,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8b5d9d95-4d8b-4fe9-bac6-766c564552d1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bcex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bcex] without API keys &gt; [bcex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6281,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;dac8be73-3e52-48d7-bd6f-71be62754772&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bcex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bcex] without API keys &gt; [bcex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2864,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3b9144d6-94bf-4e40-984a-b8fe6e035f41&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bcex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bcex] without API keys &gt; [bcex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;13360532-3177-494c-9422-a58c1980a590&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bcex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bcex] without API keys &gt; [bcex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:16,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2062819a-4ce2-4c84-aae9-da4c9aed941b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bcex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bcex] without API keys &gt; [bcex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:17,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4e444d93-1827-42e7-aab5-298ee51b8ef9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;8b5d9d95-4d8b-4fe9-bac6-766c564552d1&quot;,&quot;dac8be73-3e52-48d7-bd6f-71be62754772&quot;,&quot;3b9144d6-94bf-4e40-984a-b8fe6e035f41&quot;,&quot;13360532-3177-494c-9422-a58c1980a590&quot;,&quot;2062819a-4ce2-4c84-aae9-da4c9aed941b&quot;,&quot;4e444d93-1827-42e7-aab5-298ee51b8ef9&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:9546,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;ebcebb08-d23c-4d62-86eb-f4952ad585cb&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;3e77cf44-de13-4fc0-a4b4-36b563f1da84&quot;,&quot;title&quot;:&quot;&gt; [bequant] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bequant-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bequant-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bequant] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bequant] without API keys &gt; [bequant] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:351,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;25f1c552-a200-4f13-9844-8b7ac21f7645&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bequant] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bequant] without API keys &gt; [bequant] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:787,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6cf80131-9d4e-4327-977f-5f3b57f0c2c7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bequant] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bequant] without API keys &gt; [bequant] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4106,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;55677e0a-0479-4212-bf4f-fc016dbfdc94&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bequant] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bequant] without API keys &gt; [bequant] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1211,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;443d15b8-3ca8-45c2-b817-c3ce1d4e0543&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bequant] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bequant] without API keys &gt; [bequant] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1493,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f85432a2-a195-4c50-97ff-ce54b22efbc9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bequant] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bequant] without API keys &gt; [bequant] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1593,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0476449f-d377-41c7-b786-cd1ad75f2005&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;25f1c552-a200-4f13-9844-8b7ac21f7645&quot;,&quot;6cf80131-9d4e-4327-977f-5f3b57f0c2c7&quot;,&quot;55677e0a-0479-4212-bf4f-fc016dbfdc94&quot;,&quot;443d15b8-3ca8-45c2-b817-c3ce1d4e0543&quot;,&quot;f85432a2-a195-4c50-97ff-ce54b22efbc9&quot;,&quot;0476449f-d377-41c7-b786-cd1ad75f2005&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:9541,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;cc974e44-c389-4d74-8775-a760f797973a&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;d066dcec-27f2-4552-a2f3-bcc7319ec16c&quot;,&quot;title&quot;:&quot;&gt; [bitbank] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitbank-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitbank-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitbank] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbank] without API keys &gt; [bitbank] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:90,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;62f889ec-cc17-4604-a5c1-23b886fb5fe4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbank] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbank] without API keys &gt; [bitbank] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:20,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8fb9e725-b867-4c69-b68a-30ecb542b0ea&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbank] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbank] without API keys &gt; [bitbank] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:911,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fff8b780-2f69-4b9e-bf3c-2b9caf5574a8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbank] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbank] without API keys &gt; [bitbank] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:32,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f247950a-a9f7-48de-9d98-88adacdd078d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbank] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbank] without API keys &gt; [bitbank] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1717,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9fb7c2de-e8e9-482d-a3a9-7bdabaecd8f0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbank] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbank] without API keys &gt; [bitbank] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1996,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;63957c2f-b386-44aa-aa5e-48ce60b1f41d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;62f889ec-cc17-4604-a5c1-23b886fb5fe4&quot;,&quot;8fb9e725-b867-4c69-b68a-30ecb542b0ea&quot;,&quot;fff8b780-2f69-4b9e-bf3c-2b9caf5574a8&quot;,&quot;f247950a-a9f7-48de-9d98-88adacdd078d&quot;,&quot;9fb7c2de-e8e9-482d-a3a9-7bdabaecd8f0&quot;,&quot;63957c2f-b386-44aa-aa5e-48ce60b1f41d&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4766,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;cfb320d7-d00e-4752-94e0-8ead90c75b01&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;e406d593-70c3-4297-96bc-82c527118dfb&quot;,&quot;title&quot;:&quot;&gt; [bitbay] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitbay-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitbay-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitbay] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbay] without API keys &gt; [bitbay] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:48,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c2b8fdf3-a5c9-410f-83d3-f567f6f6c475&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbay] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbay] without API keys &gt; [bitbay] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:423,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;21ae28af-2562-4c05-bd33-c87abef6e674&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbay] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbay] without API keys &gt; [bitbay] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1967,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c9d025ff-c8a6-41ed-9098-f266cdeb473a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbay] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbay] without API keys &gt; [bitbay] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:56,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;26fa7403-5188-4793-a541-6ee75f485086&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbay] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbay] without API keys &gt; [bitbay] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:668,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c62dd262-c03a-4e88-b0ab-cad2025b8c64&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitbay] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitbay] without API keys &gt; [bitbay] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1009,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1cad1726-383d-454c-aaee-255cc48dc004&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;c2b8fdf3-a5c9-410f-83d3-f567f6f6c475&quot;,&quot;21ae28af-2562-4c05-bd33-c87abef6e674&quot;,&quot;c9d025ff-c8a6-41ed-9098-f266cdeb473a&quot;,&quot;26fa7403-5188-4793-a541-6ee75f485086&quot;,&quot;c62dd262-c03a-4e88-b0ab-cad2025b8c64&quot;,&quot;1cad1726-383d-454c-aaee-255cc48dc004&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4171,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;c550adfc-888b-4eaa-9c6f-ba084cc8989f&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;44771c4f-2c22-4339-99f0-e8d903e8193d&quot;,&quot;title&quot;:&quot;&gt; [bit2c] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bit2c-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bit2c-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bit2c] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bit2c] without API keys &gt; [bit2c] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:104,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d2bd6ef3-6505-4289-98d7-196d78f5fd3e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bit2c] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bit2c] without API keys &gt; [bit2c] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:18,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fdc7ec0b-76a5-4a03-9a62-830f771c1bfb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bit2c] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bit2c] without API keys &gt; [bit2c] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:818,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a4357cdc-c359-4d85-82a2-e24ccf045b1a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bit2c] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bit2c] without API keys &gt; [bit2c] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:10,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8c84a7c9-c13a-4354-960f-ec49bf90b9e7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bit2c] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bit2c] without API keys &gt; [bit2c] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2736,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;400e88c7-296a-403f-ac01-fd8431970240&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bit2c] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bit2c] without API keys &gt; [bit2c] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2547,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d63e9ba0-7789-49f1-8918-35e57af39210&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;d2bd6ef3-6505-4289-98d7-196d78f5fd3e&quot;,&quot;fdc7ec0b-76a5-4a03-9a62-830f771c1bfb&quot;,&quot;a4357cdc-c359-4d85-82a2-e24ccf045b1a&quot;,&quot;8c84a7c9-c13a-4354-960f-ec49bf90b9e7&quot;,&quot;400e88c7-296a-403f-ac01-fd8431970240&quot;,&quot;d63e9ba0-7789-49f1-8918-35e57af39210&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6233,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;30f341a7-72a0-4c32-bdd2-ed20674b48f1&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;d9835d79-d2dd-4dc3-b547-d3dda3546cbc&quot;,&quot;title&quot;:&quot;&gt; [bitforex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitforex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitforex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitforex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitforex] without API keys &gt; [bitforex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:36,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1867975d-3fbd-4d12-a00e-5cecdad0a373&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitforex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitforex] without API keys &gt; [bitforex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1699,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;48ca09d0-6edd-418f-944f-b8f0862826b1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitforex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitforex] without API keys &gt; [bitforex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1329,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;02e75a90-ddad-4839-892b-473eace335f9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitforex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitforex] without API keys &gt; [bitforex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:21,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2988e83f-1092-4ef4-abcd-0621d937b60a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitforex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitforex] without API keys &gt; [bitforex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:38,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6caa6909-0625-4bd2-961f-55535f1b4eb4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitforex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitforex] without API keys &gt; [bitforex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:31,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1bd19cfc-ff13-444f-9fd9-7b9e44e683e3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;1867975d-3fbd-4d12-a00e-5cecdad0a373&quot;,&quot;48ca09d0-6edd-418f-944f-b8f0862826b1&quot;,&quot;02e75a90-ddad-4839-892b-473eace335f9&quot;,&quot;2988e83f-1092-4ef4-abcd-0621d937b60a&quot;,&quot;6caa6909-0625-4bd2-961f-55535f1b4eb4&quot;,&quot;1bd19cfc-ff13-444f-9fd9-7b9e44e683e3&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:3154,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;a5f6afb4-6e20-4835-b571-2c1e42ae2294&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;71ef9e44-9c3b-4c8f-b583-bbbcad75c254&quot;,&quot;title&quot;:&quot;&gt; [bithumb] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bithumb-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bithumb-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bithumb] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bithumb] without API keys &gt; [bithumb] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:130,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2569670a-f40a-42fe-9f12-e484b20898a6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bithumb] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bithumb] without API keys &gt; [bithumb] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:449,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6118ac1d-ca0a-4a4d-97b0-5000ffabbb28&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bithumb] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bithumb] without API keys &gt; [bithumb] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:863,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;31e03969-950d-48b7-a0f6-67cfbfafe084&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bithumb] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bithumb] without API keys &gt; [bithumb] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:917,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;97ee1fe2-ac9c-46c1-b0f3-d6c6b49c7a7e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bithumb] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bithumb] without API keys &gt; [bithumb] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:263,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0027ad34-a883-4c7c-b3b5-d058e877958c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bithumb] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bithumb] without API keys &gt; [bithumb] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:482,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;828cb455-c1df-4958-ac04-f66c37cbc1c7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;2569670a-f40a-42fe-9f12-e484b20898a6&quot;,&quot;6118ac1d-ca0a-4a4d-97b0-5000ffabbb28&quot;,&quot;31e03969-950d-48b7-a0f6-67cfbfafe084&quot;,&quot;97ee1fe2-ac9c-46c1-b0f3-d6c6b49c7a7e&quot;,&quot;0027ad34-a883-4c7c-b3b5-d058e877958c&quot;,&quot;828cb455-c1df-4958-ac04-f66c37cbc1c7&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:3104,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;94f22a5a-9d1f-4464-b378-9d1d14a358cd&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;25c31805-e347-4586-a6f3-84d936593ccd&quot;,&quot;title&quot;:&quot;&gt; [bitmax] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitmax-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitmax-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitmax] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmax] without API keys &gt; [bitmax] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:278,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6b3fb0c8-b56c-485d-b7a7-af73c0d6c874&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmax] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmax] without API keys &gt; [bitmax] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:464,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f2034822-146c-4228-8be8-06f36f62b3c6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmax] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmax] without API keys &gt; [bitmax] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1224,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ccf39bc1-6b4b-4003-a2c3-7938117732ae&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmax] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmax] without API keys &gt; [bitmax] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:584,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c0c490fb-e185-4277-bb80-2cb537f80d58&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmax] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmax] without API keys &gt; [bitmax] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:413,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;16200c27-4409-4a05-9afa-2eee1ca79519&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmax] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmax] without API keys &gt; [bitmax] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1051,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;28cdc3a9-e5f6-4484-a4fc-25b98aede8e5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;6b3fb0c8-b56c-485d-b7a7-af73c0d6c874&quot;,&quot;f2034822-146c-4228-8be8-06f36f62b3c6&quot;,&quot;ccf39bc1-6b4b-4003-a2c3-7938117732ae&quot;,&quot;c0c490fb-e185-4277-bb80-2cb537f80d58&quot;,&quot;16200c27-4409-4a05-9afa-2eee1ca79519&quot;,&quot;28cdc3a9-e5f6-4484-a4fc-25b98aede8e5&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4014,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;d29f10a3-ef2c-48be-87ad-89bbdd0ac840&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;16840d57-2276-4eb0-8c48-b6f08024d138&quot;,&quot;title&quot;:&quot;&gt; [bitfinex2] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitfinex2-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitfinex2-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitfinex2] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex2] without API keys &gt; [bitfinex2] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:115,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5e135978-c896-4550-acd7-63276463a8bb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex2] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex2] without API keys &gt; [bitfinex2] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:365,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;83afe666-efe2-4aae-82e6-01458a1646cb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex2] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex2] without API keys &gt; [bitfinex2] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2933,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;be94b844-1290-4920-a6eb-6e9fd6ba073d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex2] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex2] without API keys &gt; [bitfinex2] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1614,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;66169a93-ef1a-437f-be87-33c7abfc29ff&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex2] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex2] without API keys &gt; [bitfinex2] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1172,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c2457fc0-6804-433d-8a82-9f649f5ceadc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex2] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex2] without API keys &gt; [bitfinex2] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1681,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;01a0b61e-2dad-4499-b823-d55a2b044b30&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;5e135978-c896-4550-acd7-63276463a8bb&quot;,&quot;83afe666-efe2-4aae-82e6-01458a1646cb&quot;,&quot;be94b844-1290-4920-a6eb-6e9fd6ba073d&quot;,&quot;66169a93-ef1a-437f-be87-33c7abfc29ff&quot;,&quot;c2457fc0-6804-433d-8a82-9f649f5ceadc&quot;,&quot;01a0b61e-2dad-4499-b823-d55a2b044b30&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:7880,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;b0f1fd8d-ad3f-4309-a15f-5979c5bdfd0d&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;bcb49c4d-8d94-46cd-84ba-30e22e28724f&quot;,&quot;title&quot;:&quot;&gt; [bitkk] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitkk-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitkk-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitkk] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitkk] without API keys &gt; [bitkk] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:187,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c500ea9b-6d9d-4709-aa6d-0de205b92910&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitkk] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitkk] without API keys &gt; [bitkk] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:662,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c916e7e6-6fd8-49e9-83df-2c9f921d2f9d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitkk] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitkk] without API keys &gt; [bitkk] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1589,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6b0119c7-c4a9-4abc-b89a-b95379a5d551&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitkk] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitkk] without API keys &gt; [bitkk] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1044,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;999c0964-4baf-4be8-ac6d-fd769c2b835b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitkk] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitkk] without API keys &gt; [bitkk] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:962,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d2728c77-67f1-4763-a5b0-e56924592f2a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitkk] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitkk] without API keys &gt; [bitkk] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:990,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2d1096b7-ff8d-481a-a641-555086a8d882&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;c500ea9b-6d9d-4709-aa6d-0de205b92910&quot;,&quot;c916e7e6-6fd8-49e9-83df-2c9f921d2f9d&quot;,&quot;6b0119c7-c4a9-4abc-b89a-b95379a5d551&quot;,&quot;999c0964-4baf-4be8-ac6d-fd769c2b835b&quot;,&quot;d2728c77-67f1-4763-a5b0-e56924592f2a&quot;,&quot;2d1096b7-ff8d-481a-a641-555086a8d882&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5434,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;36a90465-4b63-4847-af93-6c78b8d8750f&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;00093bb5-6076-41ae-9ef9-c948cc82424a&quot;,&quot;title&quot;:&quot;&gt; [bitflyer] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitflyer-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitflyer-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitflyer] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitflyer] without API keys &gt; [bitflyer] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:108,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;846fde7e-d3cb-400d-bd39-29d9de4af523&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitflyer] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitflyer] without API keys &gt; [bitflyer] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2429,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;618c824e-0445-439d-a7cf-8d6b91e02314&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitflyer] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitflyer] without API keys &gt; [bitflyer] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4125,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;df4b23de-0139-4d32-b140-dda4914efed9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitflyer] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitflyer] without API keys &gt; [bitflyer] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:14,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;60e44039-b631-418e-9b49-c7bbce39ebab&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitflyer] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitflyer] without API keys &gt; [bitflyer] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:885,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d5c58ba3-e5ab-41f2-bb8f-57790a74f06e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitflyer] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitflyer] without API keys &gt; [bitflyer] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1153,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;76c4c594-9932-4f88-bd67-d2012cee5bb1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;846fde7e-d3cb-400d-bd39-29d9de4af523&quot;,&quot;618c824e-0445-439d-a7cf-8d6b91e02314&quot;,&quot;df4b23de-0139-4d32-b140-dda4914efed9&quot;,&quot;60e44039-b631-418e-9b49-c7bbce39ebab&quot;,&quot;d5c58ba3-e5ab-41f2-bb8f-57790a74f06e&quot;,&quot;76c4c594-9932-4f88-bd67-d2012cee5bb1&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:8714,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;56c9b117-882c-441a-8acf-7a1c7defe8a8&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;0bc310c3-f2fd-4ec9-b08b-6a40a63b71fe&quot;,&quot;title&quot;:&quot;&gt; [bitfinex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitfinex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitfinex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitfinex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex] without API keys &gt; [bitfinex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:76,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ed893a44-61a0-4f9c-81bd-abe6d7fef551&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex] without API keys &gt; [bitfinex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1841,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4ec940da-b5d3-4275-a863-a71a31040bfd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex] without API keys &gt; [bitfinex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4487,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ba4d8a87-c4c9-4113-86c0-5fba4658ac9f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex] without API keys &gt; [bitfinex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1531,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c628d3d9-8130-452b-b99f-b161f410cccc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex] without API keys &gt; [bitfinex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1445,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9f033d54-0ad8-4710-927d-39f09de45e42&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitfinex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitfinex] without API keys &gt; [bitfinex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1874,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;99f4cff3-a06d-4fb6-afdc-bb1ddb831cad&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;ed893a44-61a0-4f9c-81bd-abe6d7fef551&quot;,&quot;4ec940da-b5d3-4275-a863-a71a31040bfd&quot;,&quot;ba4d8a87-c4c9-4113-86c0-5fba4658ac9f&quot;,&quot;c628d3d9-8130-452b-b99f-b161f410cccc&quot;,&quot;9f033d54-0ad8-4710-927d-39f09de45e42&quot;,&quot;99f4cff3-a06d-4fb6-afdc-bb1ddb831cad&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:11254,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;0654c69f-84e5-4bc1-a68c-aebf3b0b4ae7&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;02d942ae-f66a-4edf-b395-48b12d740854&quot;,&quot;title&quot;:&quot;&gt; [bitmart] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitmart-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitmart-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitmart] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmart] without API keys &gt; [bitmart] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:383,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8a0e85b9-c77f-4a7c-a311-ff85dde405c7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmart] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmart] without API keys &gt; [bitmart] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:952,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7a769312-d390-4c4e-a607-7495b499a729&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmart] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmart] without API keys &gt; [bitmart] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2285,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;42b8ef5f-3e40-4e40-933f-82a900ec4176&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmart] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmart] without API keys &gt; [bitmart] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1090,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;74d057ed-7c1a-4162-b570-4a821c1a2e36&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmart] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmart] without API keys &gt; [bitmart] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:845,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bdf1c306-0733-427a-a2d8-f0fdbe5bbc79&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmart] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmart] without API keys &gt; [bitmart] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1085,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1b484183-1b8e-4035-bd7b-41eaa14da399&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;8a0e85b9-c77f-4a7c-a311-ff85dde405c7&quot;,&quot;7a769312-d390-4c4e-a607-7495b499a729&quot;,&quot;42b8ef5f-3e40-4e40-933f-82a900ec4176&quot;,&quot;74d057ed-7c1a-4162-b570-4a821c1a2e36&quot;,&quot;bdf1c306-0733-427a-a2d8-f0fdbe5bbc79&quot;,&quot;1b484183-1b8e-4035-bd7b-41eaa14da399&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6640,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;753c980a-84a5-47aa-86c9-aed23223face&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;3cf85896-e56f-442b-92e7-cd8b463c8d2e&quot;,&quot;title&quot;:&quot;&gt; [bitmex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitmex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitmex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitmex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmex] without API keys &gt; [bitmex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:81,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;78a7a126-00c1-41e1-bd3e-61357fbb00e6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmex] without API keys &gt; [bitmex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:929,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fc8a1397-f71d-46bc-8f5b-90f9a3e25ceb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmex] without API keys &gt; [bitmex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1293,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b8edf36f-513f-4d9d-a537-44a1ab268a4f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmex] without API keys &gt; [bitmex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:33,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4c6892ce-b07f-419c-9dbd-a43823b5c5f4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmex] without API keys &gt; [bitmex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1802,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fb64f6f2-d92e-4db9-b044-d6fd5fd68da3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitmex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitmex] without API keys &gt; [bitmex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2442,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ccdbb8dd-c790-4b38-ac55-e6e782451947&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;78a7a126-00c1-41e1-bd3e-61357fbb00e6&quot;,&quot;fc8a1397-f71d-46bc-8f5b-90f9a3e25ceb&quot;,&quot;b8edf36f-513f-4d9d-a537-44a1ab268a4f&quot;,&quot;4c6892ce-b07f-419c-9dbd-a43823b5c5f4&quot;,&quot;fb64f6f2-d92e-4db9-b044-d6fd5fd68da3&quot;,&quot;ccdbb8dd-c790-4b38-ac55-e6e782451947&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6580,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;2d52c76b-cf7f-4e72-9e83-7a3f28707821&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;23b58d18-ee29-45ba-a677-ea9c940c6d2b&quot;,&quot;title&quot;:&quot;&gt; [bitstamp] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitstamp-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitstamp-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitstamp] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp] without API keys &gt; [bitstamp] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:126,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4e8a7f3a-f488-4404-97f0-42dd8d365ebe&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp] without API keys &gt; [bitstamp] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:140,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;df4ef5d9-5674-4dbe-8cbd-c522ff8f2ee7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp] without API keys &gt; [bitstamp] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1900,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e650f885-6ee9-4c80-a017-91a19d936f3a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp] without API keys &gt; [bitstamp] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:10,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;648d1c19-fb5b-48ce-a370-4af9a0bcbb59&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp] without API keys &gt; [bitstamp] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1842,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2a11788e-d48b-492b-aefe-747bf437c716&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp] without API keys &gt; [bitstamp] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:660,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c8c1a236-969c-46a8-b4f1-a30ec9e22a34&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;4e8a7f3a-f488-4404-97f0-42dd8d365ebe&quot;,&quot;df4ef5d9-5674-4dbe-8cbd-c522ff8f2ee7&quot;,&quot;e650f885-6ee9-4c80-a017-91a19d936f3a&quot;,&quot;648d1c19-fb5b-48ce-a370-4af9a0bcbb59&quot;,&quot;2a11788e-d48b-492b-aefe-747bf437c716&quot;,&quot;c8c1a236-969c-46a8-b4f1-a30ec9e22a34&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4678,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;d3163eeb-7f43-49be-a18b-d09cc376ef66&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;55d66e46-f193-4d54-87dd-6b332e551822&quot;,&quot;title&quot;:&quot;&gt; [bitstamp1] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitstamp1-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitstamp1-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitstamp1] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp1] without API keys &gt; [bitstamp1] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:96,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;def031e0-6d5b-4e00-8c75-10f7a0482e35&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp1] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp1] without API keys &gt; [bitstamp1] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:46,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1a2438ce-03fe-4065-9fde-a43e8f163a1b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp1] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp1] without API keys &gt; [bitstamp1] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1081,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;481bffdd-ee1d-4869-bfcd-fc7b9b392db8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp1] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp1] without API keys &gt; [bitstamp1] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:44,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0766254e-cf26-4887-b90b-9cf785b4cb0f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp1] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp1] without API keys &gt; [bitstamp1] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:659,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b8b9d312-2d08-4189-9e80-9c4dd929a91c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitstamp1] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitstamp1] without API keys &gt; [bitstamp1] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:916,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9aa040f5-3724-4e2b-ba86-411a12afa2d5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;def031e0-6d5b-4e00-8c75-10f7a0482e35&quot;,&quot;1a2438ce-03fe-4065-9fde-a43e8f163a1b&quot;,&quot;481bffdd-ee1d-4869-bfcd-fc7b9b392db8&quot;,&quot;0766254e-cf26-4887-b90b-9cf785b4cb0f&quot;,&quot;b8b9d312-2d08-4189-9e80-9c4dd929a91c&quot;,&quot;9aa040f5-3724-4e2b-ba86-411a12afa2d5&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2842,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;8386a1d6-f2d8-4a8a-abd4-cb222bcca1c8&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;efe69f9e-2165-4898-8d85-0fda8ac5c881&quot;,&quot;title&quot;:&quot;&gt; [bitso] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitso-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitso-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitso] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitso] without API keys &gt; [bitso] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:76,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5a811010-d242-4ef1-90af-28961553de6b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitso] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitso] without API keys &gt; [bitso] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:486,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1466b6c7-5f59-4654-ac71-b8c2acbafe40&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitso] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitso] without API keys &gt; [bitso] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3709,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;dea0aa61-dc2b-44cf-8910-2128447fc8b6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitso] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitso] without API keys &gt; [bitso] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:20,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a5f31cd8-0a1b-4c87-831c-f81a5b0be78e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitso] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitso] without API keys &gt; [bitso] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1984,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7c1c0433-8d98-40a7-ba94-09a2db1d7bec&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitso] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitso] without API keys &gt; [bitso] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1945,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;67e90e59-f99c-41a5-8c52-5bb752815fd8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;5a811010-d242-4ef1-90af-28961553de6b&quot;,&quot;1466b6c7-5f59-4654-ac71-b8c2acbafe40&quot;,&quot;dea0aa61-dc2b-44cf-8910-2128447fc8b6&quot;,&quot;a5f31cd8-0a1b-4c87-831c-f81a5b0be78e&quot;,&quot;7c1c0433-8d98-40a7-ba94-09a2db1d7bec&quot;,&quot;67e90e59-f99c-41a5-8c52-5bb752815fd8&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:8220,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;013053f2-da05-4c99-b081-4f79e1e587ed&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;33c85338-b37c-4e82-99b7-e36c2fd13a81&quot;,&quot;title&quot;:&quot;&gt; [bl3p] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bl3p-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bl3p-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bl3p] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bl3p] without API keys &gt; [bl3p] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:224,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2a776c15-128e-4606-9154-d6b09098772f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bl3p] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bl3p] without API keys &gt; [bl3p] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:120,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;43428d3f-63a5-48bc-9035-586623af031e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bl3p] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bl3p] without API keys &gt; [bl3p] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:784,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;97f91ba2-7857-4897-be8d-271bbc65b9ce&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bl3p] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bl3p] without API keys &gt; [bl3p] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:38,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3087c8a4-9ada-42af-b30d-b37d79f50027&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bl3p] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bl3p] without API keys &gt; [bl3p] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:719,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8500a79f-8d02-409e-aab4-01572eab1b9c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bl3p] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bl3p] without API keys &gt; [bl3p] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:733,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9eec4d65-8875-4d93-974c-b8473bc2a6bd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;2a776c15-128e-4606-9154-d6b09098772f&quot;,&quot;43428d3f-63a5-48bc-9035-586623af031e&quot;,&quot;97f91ba2-7857-4897-be8d-271bbc65b9ce&quot;,&quot;3087c8a4-9ada-42af-b30d-b37d79f50027&quot;,&quot;8500a79f-8d02-409e-aab4-01572eab1b9c&quot;,&quot;9eec4d65-8875-4d93-974c-b8473bc2a6bd&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2618,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;009c96b9-4fb4-4d20-8c3a-3ac2fc35b7f2&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;e3edfda5-02c3-4f69-ae07-db25b2c5096a&quot;,&quot;title&quot;:&quot;&gt; [_1btcxe] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/_1btcxe-test.js&quot;,&quot;file&quot;:&quot;/test/generated/_1btcxe-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [_1btcxe] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [_1btcxe] without API keys &gt; [_1btcxe] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:456,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6a224e5e-570b-426d-8bd2-dc94980f4e60&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [_1btcxe] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [_1btcxe] without API keys &gt; [_1btcxe] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:115,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;80c5920b-d0d1-4ae1-9259-b86f82652829&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [_1btcxe] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [_1btcxe] without API keys &gt; [_1btcxe] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5988,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;998bab5a-0789-4250-ae2c-e48c74bd2bcc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [_1btcxe] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [_1btcxe] without API keys &gt; [_1btcxe] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:27,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7b5e2af2-613f-40cd-8ea1-5d7e5795e4e3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [_1btcxe] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [_1btcxe] without API keys &gt; [_1btcxe] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7958,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;43709067-9b13-4263-af4e-e69fb1b93351&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [_1btcxe] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [_1btcxe] without API keys &gt; [_1btcxe] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:8166,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;43fc067c-dddf-44b8-85bf-22953a91b276&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;6a224e5e-570b-426d-8bd2-dc94980f4e60&quot;,&quot;80c5920b-d0d1-4ae1-9259-b86f82652829&quot;,&quot;998bab5a-0789-4250-ae2c-e48c74bd2bcc&quot;,&quot;7b5e2af2-613f-40cd-8ea1-5d7e5795e4e3&quot;,&quot;43709067-9b13-4263-af4e-e69fb1b93351&quot;,&quot;43fc067c-dddf-44b8-85bf-22953a91b276&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:22710,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;94585395-268c-4c59-84cb-ae6d9cf62c60&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;8cdbe0ee-bc7d-4882-a006-e6e290e9ae43&quot;,&quot;title&quot;:&quot;&gt; [btcbox] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/btcbox-test.js&quot;,&quot;file&quot;:&quot;/test/generated/btcbox-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [btcbox] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcbox] without API keys &gt; [btcbox] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:107,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3c6f4778-4bcb-4004-bb9a-5b1e9ad1cb14&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcbox] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcbox] without API keys &gt; [btcbox] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:126,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;785c52e1-d88f-4836-b5de-c0d430687d6c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcbox] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcbox] without API keys &gt; [btcbox] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1166,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;736e73df-5087-43ce-83af-dcf9d7a900cf&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcbox] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcbox] without API keys &gt; [btcbox] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:13,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2aead3e6-7f2c-448d-931e-ab9617b78d0d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcbox] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcbox] without API keys &gt; [btcbox] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:816,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;11a63bbc-1683-47d1-9e0b-0378826e03cc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcbox] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcbox] without API keys &gt; [btcbox] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:461,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;34502014-871b-4994-8e26-1bfa74c3fddb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;3c6f4778-4bcb-4004-bb9a-5b1e9ad1cb14&quot;,&quot;785c52e1-d88f-4836-b5de-c0d430687d6c&quot;,&quot;736e73df-5087-43ce-83af-dcf9d7a900cf&quot;,&quot;2aead3e6-7f2c-448d-931e-ab9617b78d0d&quot;,&quot;11a63bbc-1683-47d1-9e0b-0378826e03cc&quot;,&quot;34502014-871b-4994-8e26-1bfa74c3fddb&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2689,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;7ea13d65-147d-4cea-aa12-aa2353ee5cfc&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;72b60d68-c27e-44f4-9706-81ab514d2faa&quot;,&quot;title&quot;:&quot;&gt; [bitvavo] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitvavo-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitvavo-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitvavo] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitvavo] without API keys &gt; [bitvavo] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:313,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f3649831-c5e9-47a5-a655-4ecb1f04f5e7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitvavo] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitvavo] without API keys &gt; [bitvavo] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2049,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;91c2d1bb-4483-42f3-91e0-f554bd1b9473&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitvavo] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitvavo] without API keys &gt; [bitvavo] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1732,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;86a3b911-1d8a-4d85-830e-964bc4c2c584&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitvavo] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitvavo] without API keys &gt; [bitvavo] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:906,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ab06d929-cd3f-4683-861d-9052ecadeee6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitvavo] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitvavo] without API keys &gt; [bitvavo] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:520,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1680cea0-b442-4501-935d-38f93245f765&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitvavo] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitvavo] without API keys &gt; [bitvavo] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:961,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1b2c3c46-9122-427e-8f79-867b4ed10c7c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;f3649831-c5e9-47a5-a655-4ecb1f04f5e7&quot;,&quot;91c2d1bb-4483-42f3-91e0-f554bd1b9473&quot;,&quot;86a3b911-1d8a-4d85-830e-964bc4c2c584&quot;,&quot;ab06d929-cd3f-4683-861d-9052ecadeee6&quot;,&quot;1680cea0-b442-4501-935d-38f93245f765&quot;,&quot;1b2c3c46-9122-427e-8f79-867b4ed10c7c&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6481,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;ff44ae0a-0651-4de5-8a84-b8395b3e0855&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;269aa82c-80cc-4b11-b5f4-1af2f7c92933&quot;,&quot;title&quot;:&quot;&gt; [bleutrade] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bleutrade-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bleutrade-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bleutrade] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bleutrade] without API keys &gt; [bleutrade] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:513,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;812cb3f4-ed62-4447-a03e-be0c75e02194&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bleutrade] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bleutrade] without API keys &gt; [bleutrade] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1232,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d0fa3716-8b08-42ca-a40d-97ac5a375dd5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bleutrade] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bleutrade] without API keys &gt; [bleutrade] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1374,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d1368851-ba1b-4d77-8438-46def12484b8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bleutrade] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bleutrade] without API keys &gt; [bleutrade] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:966,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;285899cb-140e-4d67-aaf2-bf2916d347a1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bleutrade] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bleutrade] without API keys &gt; [bleutrade] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:942,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f17a543f-a93e-4b0c-90f3-c1321a2be8f1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bleutrade] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bleutrade] without API keys &gt; [bleutrade] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:9,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4e3cf3e3-c975-417d-aec8-ff2e82853685&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;812cb3f4-ed62-4447-a03e-be0c75e02194&quot;,&quot;d0fa3716-8b08-42ca-a40d-97ac5a375dd5&quot;,&quot;d1368851-ba1b-4d77-8438-46def12484b8&quot;,&quot;285899cb-140e-4d67-aaf2-bf2916d347a1&quot;,&quot;f17a543f-a93e-4b0c-90f3-c1321a2be8f1&quot;,&quot;4e3cf3e3-c975-417d-aec8-ff2e82853685&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5036,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;19535aad-2797-4244-a7f5-fa1b7ebfb14d&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;2e4c69da-00f7-4d6f-9677-825385d758c3&quot;,&quot;title&quot;:&quot;&gt; [bittrex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bittrex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bittrex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bittrex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bittrex] without API keys &gt; [bittrex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:280,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3f440d54-d3cf-455d-8dd2-e91526075715&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bittrex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bittrex] without API keys &gt; [bittrex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:498,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0c2e04a9-9065-41b9-ae75-799c0a687a38&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bittrex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bittrex] without API keys &gt; [bittrex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4390,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5e86bee0-130b-4fc2-999c-afb09d57eac1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bittrex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bittrex] without API keys &gt; [bittrex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1460,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;abc918de-be4b-46e5-84d2-1fcac3d03fad&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bittrex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bittrex] without API keys &gt; [bittrex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1482,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;64531c5c-69bf-4698-b397-7ad38d320c90&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bittrex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bittrex] without API keys &gt; [bittrex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1481,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f04b9b50-6b27-40ad-8d7c-98b491b72c30&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;3f440d54-d3cf-455d-8dd2-e91526075715&quot;,&quot;0c2e04a9-9065-41b9-ae75-799c0a687a38&quot;,&quot;5e86bee0-130b-4fc2-999c-afb09d57eac1&quot;,&quot;abc918de-be4b-46e5-84d2-1fcac3d03fad&quot;,&quot;64531c5c-69bf-4698-b397-7ad38d320c90&quot;,&quot;f04b9b50-6b27-40ad-8d7c-98b491b72c30&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:9591,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;f7673e02-e9a2-4be0-b992-a3e1f1ecef38&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;4a63b263-1612-4cdf-8cc1-3bbc365e2f5a&quot;,&quot;title&quot;:&quot;&gt; [btcalpha] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/btcalpha-test.js&quot;,&quot;file&quot;:&quot;/test/generated/btcalpha-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [btcalpha] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcalpha] without API keys &gt; [btcalpha] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:105,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;89583477-a4a5-4d27-89cd-7519650c0b4b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcalpha] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcalpha] without API keys &gt; [btcalpha] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:463,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;338ce9e7-3be7-4c26-ba42-2954470c2e93&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcalpha] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcalpha] without API keys &gt; [btcalpha] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:93,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a2d8b933-4e85-4bc8-8732-2ecaf613dd03&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcalpha] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcalpha] without API keys &gt; [btcalpha] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:34,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;73d214da-0bd6-409f-b194-e4539540f662&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcalpha] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcalpha] without API keys &gt; [btcalpha] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3613,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;73ef665c-b49f-48aa-9aff-0affb96b09ea&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcalpha] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcalpha] without API keys &gt; [btcalpha] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1892,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fef15e0b-1be1-4504-997a-04466478ba2d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;89583477-a4a5-4d27-89cd-7519650c0b4b&quot;,&quot;338ce9e7-3be7-4c26-ba42-2954470c2e93&quot;,&quot;a2d8b933-4e85-4bc8-8732-2ecaf613dd03&quot;,&quot;73d214da-0bd6-409f-b194-e4539540f662&quot;,&quot;73ef665c-b49f-48aa-9aff-0affb96b09ea&quot;,&quot;fef15e0b-1be1-4504-997a-04466478ba2d&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6200,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;c67755f2-c2b2-4c1e-829c-ab64301e5429&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;f1971532-416f-4a10-a95c-afca4a341fe9&quot;,&quot;title&quot;:&quot;&gt; [btcmarkets] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/btcmarkets-test.js&quot;,&quot;file&quot;:&quot;/test/generated/btcmarkets-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [btcmarkets] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcmarkets] without API keys &gt; [btcmarkets] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:192,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;07f4668f-b78c-4c5f-b686-72406e17cb5a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcmarkets] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcmarkets] without API keys &gt; [btcmarkets] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1127,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a3e80d0d-f8e7-4f98-af40-d9a2d493eb54&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcmarkets] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcmarkets] without API keys &gt; [btcmarkets] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1285,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;88027e34-c237-4b72-a5ba-485c5fa06e6a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcmarkets] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcmarkets] without API keys &gt; [btcmarkets] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:23,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;816068b8-9fcf-4752-84da-61eb54043213&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcmarkets] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcmarkets] without API keys &gt; [btcmarkets] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:932,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;01201aa3-af7b-4829-a95e-9a255d194be0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcmarkets] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcmarkets] without API keys &gt; [btcmarkets] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1362,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a04b70bf-eac8-4fc0-8342-6226882b0111&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;07f4668f-b78c-4c5f-b686-72406e17cb5a&quot;,&quot;a3e80d0d-f8e7-4f98-af40-d9a2d493eb54&quot;,&quot;88027e34-c237-4b72-a5ba-485c5fa06e6a&quot;,&quot;816068b8-9fcf-4752-84da-61eb54043213&quot;,&quot;01201aa3-af7b-4829-a95e-9a255d194be0&quot;,&quot;a04b70bf-eac8-4fc0-8342-6226882b0111&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4921,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;f926d6e6-9728-47e1-b1ac-03ffa7865353&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;810e41bb-6fbe-456d-b97e-b821220d3ddb&quot;,&quot;title&quot;:&quot;&gt; [btcturk] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/btcturk-test.js&quot;,&quot;file&quot;:&quot;/test/generated/btcturk-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [btcturk] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcturk] without API keys &gt; [btcturk] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:155,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;634875d5-07f0-4984-83bf-bcbc6b357dd5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcturk] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcturk] without API keys &gt; [btcturk] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3056,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9a71ba22-dca4-4b81-bf71-fb025a613e27&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcturk] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcturk] without API keys &gt; [btcturk] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1037,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;81f5a028-63c7-495e-ba7e-6d3103a15618&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcturk] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcturk] without API keys &gt; [btcturk] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:17,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8f54641a-f9f6-4d78-88f1-cd87a2ca25f7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcturk] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcturk] without API keys &gt; [btcturk] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:22,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;45756584-4f9f-4520-9d68-42eb9eae7349&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btcturk] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [btcturk] without API keys &gt; [btcturk] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:42,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a02fc862-32f1-4243-8eec-e401ca6c403a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;634875d5-07f0-4984-83bf-bcbc6b357dd5&quot;,&quot;9a71ba22-dca4-4b81-bf71-fb025a613e27&quot;,&quot;81f5a028-63c7-495e-ba7e-6d3103a15618&quot;,&quot;8f54641a-f9f6-4d78-88f1-cd87a2ca25f7&quot;,&quot;45756584-4f9f-4520-9d68-42eb9eae7349&quot;,&quot;a02fc862-32f1-4243-8eec-e401ca6c403a&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4329,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;f4ed2722-5277-4912-a178-a6292785c2a1&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;df45144c-ab84-4c1a-871a-4ea798e5e182&quot;,&quot;title&quot;:&quot;&gt; [bybit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bybit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bybit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bybit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bybit] without API keys &gt; [bybit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:96,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4b07edf2-dfa2-4a89-a303-e4e76d09702b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bybit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bybit] without API keys &gt; [bybit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:438,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;543c8e12-03e2-44d1-a6a8-6abf486241ac&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bybit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bybit] without API keys &gt; [bybit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:518,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;03b84712-93b8-4a48-9d42-863fe42cad8f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bybit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bybit] without API keys &gt; [bybit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:248,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cc0e1314-cdfe-432e-b8ab-d2f1ce1dce1c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bybit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bybit] without API keys &gt; [bybit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:245,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4c64c6ee-7945-48af-b4af-612975903267&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bybit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bybit] without API keys &gt; [bybit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:562,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3aad4735-cb52-466e-911e-3f91a9795fc3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;4b07edf2-dfa2-4a89-a303-e4e76d09702b&quot;,&quot;543c8e12-03e2-44d1-a6a8-6abf486241ac&quot;,&quot;03b84712-93b8-4a48-9d42-863fe42cad8f&quot;,&quot;cc0e1314-cdfe-432e-b8ab-d2f1ce1dce1c&quot;,&quot;4c64c6ee-7945-48af-b4af-612975903267&quot;,&quot;3aad4735-cb52-466e-911e-3f91a9795fc3&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2107,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;d9a2b3c7-9fcb-4331-bd39-c7a756575db3&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;7935648b-6a4d-438a-85de-d0223d1a29ad&quot;,&quot;title&quot;:&quot;&gt; [bitz] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bitz-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bitz-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bitz] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitz] without API keys &gt; [bitz] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:415,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bfc6877a-eae8-4b65-9e98-8d9cec771185&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitz] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitz] without API keys &gt; [bitz] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:745,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ebbd325f-3721-4862-8fe7-7dd626596bf7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitz] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitz] without API keys &gt; [bitz] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3343,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;74d997e0-a64b-4fdc-bc9b-d065665b664e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitz] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitz] without API keys &gt; [bitz] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2223,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b21c4ecc-cb3f-45fb-a4bd-45e1f4e74759&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitz] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitz] without API keys &gt; [bitz] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1743,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f2ac13c7-12ea-41d5-bf53-a5c2b2273b38&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bitz] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bitz] without API keys &gt; [bitz] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2114,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;969dde21-d99d-43f5-b08d-634a61c8a274&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;bfc6877a-eae8-4b65-9e98-8d9cec771185&quot;,&quot;ebbd325f-3721-4862-8fe7-7dd626596bf7&quot;,&quot;74d997e0-a64b-4fdc-bc9b-d065665b664e&quot;,&quot;b21c4ecc-cb3f-45fb-a4bd-45e1f4e74759&quot;,&quot;f2ac13c7-12ea-41d5-bf53-a5c2b2273b38&quot;,&quot;969dde21-d99d-43f5-b08d-634a61c8a274&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:10583,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;7aefd8af-09d9-4098-a7f8-dad42c1e1156&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;1772cadb-05e1-446a-8d74-b8b1725198ea&quot;,&quot;title&quot;:&quot;&gt; [braziliex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/braziliex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/braziliex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [braziliex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [braziliex] without API keys &gt; [braziliex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:276,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;48d67f8b-77b4-4136-bbac-8dfac3e14c1b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [braziliex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [braziliex] without API keys &gt; [braziliex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1012,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7e2f3e18-f026-4eff-b7e1-f47216cb5ba3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [braziliex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [braziliex] without API keys &gt; [braziliex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3054,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;51760247-c3a2-463d-b4b0-d1dfac2c4f19&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [braziliex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [braziliex] without API keys &gt; [braziliex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1043,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;be4ed52a-8c86-4f4b-ae89-553930a17aec&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [braziliex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [braziliex] without API keys &gt; [braziliex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:952,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;acada521-c15d-4fc3-ae0a-275939b9e881&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [braziliex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [braziliex] without API keys &gt; [braziliex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3092,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4bf8e647-47a3-4c76-963a-a65b0a85c8e0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;48d67f8b-77b4-4136-bbac-8dfac3e14c1b&quot;,&quot;7e2f3e18-f026-4eff-b7e1-f47216cb5ba3&quot;,&quot;51760247-c3a2-463d-b4b0-d1dfac2c4f19&quot;,&quot;be4ed52a-8c86-4f4b-ae89-553930a17aec&quot;,&quot;acada521-c15d-4fc3-ae0a-275939b9e881&quot;,&quot;4bf8e647-47a3-4c76-963a-a65b0a85c8e0&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:9429,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;ce766a55-77f0-438e-b2fa-febe376d1167&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;ffae52a5-7fee-424f-be39-43d4822b6f34&quot;,&quot;title&quot;:&quot;&gt; [buda] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/buda-test.js&quot;,&quot;file&quot;:&quot;/test/generated/buda-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [buda] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [buda] without API keys &gt; [buda] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:175,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;415d9fd8-634b-43f3-8ff8-85100a42f60a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [buda] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [buda] without API keys &gt; [buda] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3069,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2fd1d176-b611-434b-a87d-3a201147640a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [buda] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [buda] without API keys &gt; [buda] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1145,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;aae8cdb0-45cf-400e-b4e5-94813923b927&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [buda] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [buda] without API keys &gt; [buda] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:57,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fac8fb18-9b1e-477f-a66e-1d86518c84ee&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [buda] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [buda] without API keys &gt; [buda] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:358,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ec304cae-7caa-4d0d-ab5d-8f20de550a13&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [buda] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [buda] without API keys &gt; [buda] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:227,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5b31151a-b1e4-4595-b2bc-0050a34bd794&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;415d9fd8-634b-43f3-8ff8-85100a42f60a&quot;,&quot;2fd1d176-b611-434b-a87d-3a201147640a&quot;,&quot;aae8cdb0-45cf-400e-b4e5-94813923b927&quot;,&quot;fac8fb18-9b1e-477f-a66e-1d86518c84ee&quot;,&quot;ec304cae-7caa-4d0d-ab5d-8f20de550a13&quot;,&quot;5b31151a-b1e4-4595-b2bc-0050a34bd794&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5031,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;590ea588-736b-4030-9a73-3ba4865b6c28&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;98868f17-e6fa-47dd-a5bb-9484b30e815f&quot;,&quot;title&quot;:&quot;&gt; [btctradeua] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/btctradeua-test.js&quot;,&quot;file&quot;:&quot;/test/generated/btctradeua-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [btctradeua] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeua] without API keys &gt; [btctradeua] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:172,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5e71c82f-6de9-4e18-98e2-f1e8c45ba46b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeua] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeua] without API keys &gt; [btctradeua] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:97,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f5234473-80bc-458a-a721-b81330f5e377&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeua] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeua] without API keys &gt; [btctradeua] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1139,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;99367e16-f6f1-42da-800c-8018a876e01c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeua] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeua] without API keys &gt; [btctradeua] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:57,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;78c9c75f-0399-477d-9d15-dbd950cb7509&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeua] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeua] without API keys &gt; [btctradeua] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5270,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;417eb5d3-9957-4acb-a1b2-3f5a1b64253a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeua] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeua] without API keys &gt; [btctradeua] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2695,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9b3c02d2-2f1c-48b7-bcd3-58ebee0c190e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;5e71c82f-6de9-4e18-98e2-f1e8c45ba46b&quot;,&quot;f5234473-80bc-458a-a721-b81330f5e377&quot;,&quot;99367e16-f6f1-42da-800c-8018a876e01c&quot;,&quot;78c9c75f-0399-477d-9d15-dbd950cb7509&quot;,&quot;417eb5d3-9957-4acb-a1b2-3f5a1b64253a&quot;,&quot;9b3c02d2-2f1c-48b7-bcd3-58ebee0c190e&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:9430,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;1c9008f0-6ac2-43c9-9fe2-0caef729d589&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;24caa1df-971f-4d61-b825-0b940453b91c&quot;,&quot;title&quot;:&quot;&gt; [bytetrade] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bytetrade-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bytetrade-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bytetrade] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bytetrade] without API keys &gt; [bytetrade] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:112,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;df1c045a-0b32-4884-8a89-12aa75d9fa36&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bytetrade] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bytetrade] without API keys &gt; [bytetrade] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1491,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;37c8e4ff-803a-444a-90e0-5590de41b8d0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bytetrade] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bytetrade] without API keys &gt; [bytetrade] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1650,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5d1b1f89-899c-42ac-bddf-a552ef6f15b3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bytetrade] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bytetrade] without API keys &gt; [bytetrade] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2409,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;68b5286e-04c6-48da-ba0e-4256abf98e2f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bytetrade] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bytetrade] without API keys &gt; [bytetrade] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:523,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;807199fa-0c65-4177-964a-c21ab3b38c05&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bytetrade] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bytetrade] without API keys &gt; [bytetrade] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:484,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0eb7bd0c-bd12-4800-bb5c-1981705a0da7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;df1c045a-0b32-4884-8a89-12aa75d9fa36&quot;,&quot;37c8e4ff-803a-444a-90e0-5590de41b8d0&quot;,&quot;5d1b1f89-899c-42ac-bddf-a552ef6f15b3&quot;,&quot;68b5286e-04c6-48da-ba0e-4256abf98e2f&quot;,&quot;807199fa-0c65-4177-964a-c21ab3b38c05&quot;,&quot;0eb7bd0c-bd12-4800-bb5c-1981705a0da7&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6669,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;7ed19f05-2d52-4e06-a03c-1dda61981bce&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;8e9ce1b0-c280-4f88-ba3f-55c993b3b081&quot;,&quot;title&quot;:&quot;&gt; [coinbase] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinbase-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinbase-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinbase] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbase] without API keys &gt; [coinbase] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:427,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;eb27d1da-52c8-4258-9a26-1450f88373c4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbase] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbase] without API keys &gt; [coinbase] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2490,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2747f015-f511-4e4f-b55d-880b6d9200d2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbase] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbase] without API keys &gt; [coinbase] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1457,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f377ec7e-7cef-41be-9398-57c34a840788&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbase] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbase] without API keys &gt; [coinbase] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:297,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9cff5ab6-4f94-442d-b2c7-6cbb2820acb4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbase] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbase] without API keys &gt; [coinbase] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:208,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e6cf64d9-4e80-4590-bcdb-c25fb0e5dfae&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbase] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbase] without API keys &gt; [coinbase] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:249,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a288b7fb-c39a-4515-98e5-2cbaa6337b27&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;eb27d1da-52c8-4258-9a26-1450f88373c4&quot;,&quot;2747f015-f511-4e4f-b55d-880b6d9200d2&quot;,&quot;f377ec7e-7cef-41be-9398-57c34a840788&quot;,&quot;9cff5ab6-4f94-442d-b2c7-6cbb2820acb4&quot;,&quot;e6cf64d9-4e80-4590-bcdb-c25fb0e5dfae&quot;,&quot;a288b7fb-c39a-4515-98e5-2cbaa6337b27&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5128,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;093bd595-c794-4a6d-a98e-6d8674e2d5df&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;dffb33f5-5a66-4d98-a124-961c38658df2&quot;,&quot;title&quot;:&quot;&gt; [bw] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/bw-test.js&quot;,&quot;file&quot;:&quot;/test/generated/bw-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [bw] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [bw] without API keys &gt; [bw] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:100,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ec0683c6-d4fe-4ead-abe2-318270f5ddec&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bw] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [bw] without API keys &gt; [bw] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:911,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;23b379a3-4b97-4524-92ab-2a1cd2b7075f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bw] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [bw] without API keys &gt; [bw] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3981,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;340ab0df-2b6d-480a-9bf0-38ba9ce4a88a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bw] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [bw] without API keys &gt; [bw] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2653,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c0858ba5-7b7b-4af1-ae1a-15b6be0d5aa1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bw] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [bw] without API keys &gt; [bw] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1166,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b66aba64-0d49-4ad0-9038-4f629e594693&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [bw] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [bw] without API keys &gt; [bw] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1388,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3fb2bd74-7a03-4d5d-b096-4843e2336b55&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;ec0683c6-d4fe-4ead-abe2-318270f5ddec&quot;,&quot;23b379a3-4b97-4524-92ab-2a1cd2b7075f&quot;,&quot;340ab0df-2b6d-480a-9bf0-38ba9ce4a88a&quot;,&quot;c0858ba5-7b7b-4af1-ae1a-15b6be0d5aa1&quot;,&quot;b66aba64-0d49-4ad0-9038-4f629e594693&quot;,&quot;3fb2bd74-7a03-4d5d-b096-4843e2336b55&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:10199,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;1d5bb367-5a72-4677-a3c7-30027e818fd9&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;26d80221-10b7-4f22-bb57-8a05fef0cd40&quot;,&quot;title&quot;:&quot;&gt; [coincheck] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coincheck-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coincheck-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coincheck] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coincheck] without API keys &gt; [coincheck] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1324,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ce4db231-1fa6-4fd1-95d2-61f04b37225a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coincheck] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coincheck] without API keys &gt; [coincheck] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:65,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;aa83d4da-55a5-40b0-a89a-52809eb00bb8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coincheck] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coincheck] without API keys &gt; [coincheck] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:471,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;70bc891d-f312-435a-9849-ec4aab8406a3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coincheck] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coincheck] without API keys &gt; [coincheck] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:8,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;13360efd-e326-415a-9299-37aa942542a1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coincheck] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coincheck] without API keys &gt; [coincheck] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1235,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ab8f5ee4-55d5-4595-ae88-ab79ab43c1db&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coincheck] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coincheck] without API keys &gt; [coincheck] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1116,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;aa1b8d26-a49e-46fb-b9d8-d99723ca3e35&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;ce4db231-1fa6-4fd1-95d2-61f04b37225a&quot;,&quot;aa83d4da-55a5-40b0-a89a-52809eb00bb8&quot;,&quot;70bc891d-f312-435a-9849-ec4aab8406a3&quot;,&quot;13360efd-e326-415a-9299-37aa942542a1&quot;,&quot;ab8f5ee4-55d5-4595-ae88-ab79ab43c1db&quot;,&quot;aa1b8d26-a49e-46fb-b9d8-d99723ca3e35&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4219,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;c7ee3864-4b2b-4e7a-87ee-c47d7d726ae6&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;f10ebd8d-aa90-4195-9a7b-cf93ab66b566&quot;,&quot;title&quot;:&quot;&gt; [coinbaseprime] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinbaseprime-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinbaseprime-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinbaseprime] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbaseprime] without API keys &gt; [coinbaseprime] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:392,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;82edbeac-9829-4b8a-8cc8-194e3df0f912&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbaseprime] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbaseprime] without API keys &gt; [coinbaseprime] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2549,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b640b2c0-d7f2-42b6-9ed5-f2fe49687320&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbaseprime] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbaseprime] without API keys &gt; [coinbaseprime] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1063,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1daa0202-6ea6-4a55-8714-39a5e98f35bd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbaseprime] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbaseprime] without API keys &gt; [coinbaseprime] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:15,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d0d9768b-3e93-4e84-b05d-d336584ccacd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbaseprime] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbaseprime] without API keys &gt; [coinbaseprime] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:966,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3af2c7cc-fee6-4d77-aae4-e79ce6314273&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbaseprime] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbaseprime] without API keys &gt; [coinbaseprime] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1004,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e6171ccd-9cd9-4c32-a806-70afd511ca5e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;82edbeac-9829-4b8a-8cc8-194e3df0f912&quot;,&quot;b640b2c0-d7f2-42b6-9ed5-f2fe49687320&quot;,&quot;1daa0202-6ea6-4a55-8714-39a5e98f35bd&quot;,&quot;d0d9768b-3e93-4e84-b05d-d336584ccacd&quot;,&quot;3af2c7cc-fee6-4d77-aae4-e79ce6314273&quot;,&quot;e6171ccd-9cd9-4c32-a806-70afd511ca5e&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5989,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;e92dc952-8627-4d2c-89b2-d3218dbd4637&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;c9a4d41f-4d65-4f25-88a4-e43d883deb62&quot;,&quot;title&quot;:&quot;&gt; [chilebit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/chilebit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/chilebit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [chilebit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [chilebit] without API keys &gt; [chilebit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:187,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;07ec0dd3-1736-4281-9014-ae31114d5b82&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [chilebit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [chilebit] without API keys &gt; [chilebit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:74,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a60ad7dd-c685-44b2-9ddd-06167f891be0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [chilebit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [chilebit] without API keys &gt; [chilebit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:385,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3019d8f2-1135-4c8e-881b-2b52359d739b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [chilebit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [chilebit] without API keys &gt; [chilebit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:101,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;652129a5-d82c-4245-a587-6b6ecf569733&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [chilebit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [chilebit] without API keys &gt; [chilebit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2302,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;34a2ec38-e953-4b17-bc67-7c5552dd1c71&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [chilebit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [chilebit] without API keys &gt; [chilebit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3872,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;344b393b-f44b-4459-934f-c5f091f336d0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;07ec0dd3-1736-4281-9014-ae31114d5b82&quot;,&quot;a60ad7dd-c685-44b2-9ddd-06167f891be0&quot;,&quot;3019d8f2-1135-4c8e-881b-2b52359d739b&quot;,&quot;652129a5-d82c-4245-a587-6b6ecf569733&quot;,&quot;34a2ec38-e953-4b17-bc67-7c5552dd1c71&quot;,&quot;344b393b-f44b-4459-934f-c5f091f336d0&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6921,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;ff0288e3-026f-45f2-87a2-58907c77014e&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;8f2ed16f-c831-4ee6-9a7f-1a1de9247cbe&quot;,&quot;title&quot;:&quot;&gt; [coinbasepro] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinbasepro-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinbasepro-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinbasepro] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbasepro] without API keys &gt; [coinbasepro] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1843,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;18c361fe-0125-4677-849b-0c790674de7f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbasepro] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbasepro] without API keys &gt; [coinbasepro] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:554,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c2be61d3-9e77-468d-a1d2-229ee6a26247&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbasepro] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbasepro] without API keys &gt; [coinbasepro] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1336,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bf4b0356-6ecd-41c7-a026-c470d328c9b3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbasepro] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbasepro] without API keys &gt; [coinbasepro] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:19,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9e28250d-91f3-4a20-a3cb-f829eb715951&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbasepro] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbasepro] without API keys &gt; [coinbasepro] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:967,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ffc398c9-27c1-417c-8aad-7bbf1a327c86&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinbasepro] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinbasepro] without API keys &gt; [coinbasepro] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1027,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ca0a0786-ab8e-4998-a93d-058ca14d34b8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;18c361fe-0125-4677-849b-0c790674de7f&quot;,&quot;c2be61d3-9e77-468d-a1d2-229ee6a26247&quot;,&quot;bf4b0356-6ecd-41c7-a026-c470d328c9b3&quot;,&quot;9e28250d-91f3-4a20-a3cb-f829eb715951&quot;,&quot;ffc398c9-27c1-417c-8aad-7bbf1a327c86&quot;,&quot;ca0a0786-ab8e-4998-a93d-058ca14d34b8&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5746,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;45b21b48-370c-4d6c-ada2-141a75cd2ac0&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;36431176-ceaf-4ab5-8193-71049b5a1ff9&quot;,&quot;title&quot;:&quot;&gt; [coinfloor] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinfloor-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinfloor-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinfloor] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfloor] without API keys &gt; [coinfloor] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:96,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3ae2ef86-15cb-43ea-9502-dfb6bc442c96&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfloor] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfloor] without API keys &gt; [coinfloor] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:15,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;af5544c7-7f0f-4878-8b43-4d3039f44bf7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfloor] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfloor] without API keys &gt; [coinfloor] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:504,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8d87fcfe-d892-4a5f-87a2-7083e644b8e2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfloor] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfloor] without API keys &gt; [coinfloor] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;edc02d1c-45ad-4910-82cd-86728dde5241&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfloor] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfloor] without API keys &gt; [coinfloor] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:553,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cbaff196-cb52-4ef1-95ef-2dff144107ba&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfloor] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfloor] without API keys &gt; [coinfloor] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:992,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;dc67569a-e70c-4ed7-ad9e-f1eb9ffe5288&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;3ae2ef86-15cb-43ea-9502-dfb6bc442c96&quot;,&quot;af5544c7-7f0f-4878-8b43-4d3039f44bf7&quot;,&quot;8d87fcfe-d892-4a5f-87a2-7083e644b8e2&quot;,&quot;edc02d1c-45ad-4910-82cd-86728dde5241&quot;,&quot;cbaff196-cb52-4ef1-95ef-2dff144107ba&quot;,&quot;dc67569a-e70c-4ed7-ad9e-f1eb9ffe5288&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2165,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;b9f909d1-996c-49da-bbf3-8cf125891854&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;69c64f13-3990-4dea-8a28-b548b4a77e7d&quot;,&quot;title&quot;:&quot;&gt; [coinex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinex] without API keys &gt; [coinex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:48,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;265da4ac-8cb2-4bcc-a15e-1a6981176c24&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinex] without API keys &gt; [coinex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:574,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b543234f-098f-4a74-b62a-0dcb53d36a59&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinex] without API keys &gt; [coinex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1604,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cbd01bd6-aea5-4c34-b056-7809684ae8c5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinex] without API keys &gt; [coinex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1045,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2a153d7b-8b21-478d-92f9-72236c2e1f97&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinex] without API keys &gt; [coinex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:942,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4801a2db-d3f6-47c5-8ad8-1b88749f3113&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinex] without API keys &gt; [coinex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1016,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a98d44c5-a396-4d68-84fd-e51805b2f6ec&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;265da4ac-8cb2-4bcc-a15e-1a6981176c24&quot;,&quot;b543234f-098f-4a74-b62a-0dcb53d36a59&quot;,&quot;cbd01bd6-aea5-4c34-b056-7809684ae8c5&quot;,&quot;2a153d7b-8b21-478d-92f9-72236c2e1f97&quot;,&quot;4801a2db-d3f6-47c5-8ad8-1b88749f3113&quot;,&quot;a98d44c5-a396-4d68-84fd-e51805b2f6ec&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5229,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;421e7cfa-06c4-45f3-a7a3-d104026849fb&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;64e0ee82-88a8-483f-bd4b-072697ceaedc&quot;,&quot;title&quot;:&quot;&gt; [coinspot] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinspot-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinspot-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinspot] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinspot] without API keys &gt; [coinspot] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:134,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;145f596b-3f34-44c9-8bae-97219bf0718b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinspot] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinspot] without API keys &gt; [coinspot] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:11,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b59ae6d8-ae2a-4ea5-81f4-eeda8ac55f1c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinspot] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinspot] without API keys &gt; [coinspot] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:10,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cea0cd68-8bd3-4dc6-8166-7656f9e1363d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinspot] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinspot] without API keys &gt; [coinspot] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;198fe31d-bc4a-4c56-9113-493314b426fd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinspot] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinspot] without API keys &gt; [coinspot] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:916,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;857b09be-3b7e-44f3-9610-47c0b75cca6a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinspot] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinspot] without API keys &gt; [coinspot] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1008,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b91926a6-3d55-4685-ba0b-da37b0c4e8dd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;145f596b-3f34-44c9-8bae-97219bf0718b&quot;,&quot;b59ae6d8-ae2a-4ea5-81f4-eeda8ac55f1c&quot;,&quot;cea0cd68-8bd3-4dc6-8166-7656f9e1363d&quot;,&quot;198fe31d-bc4a-4c56-9113-493314b426fd&quot;,&quot;857b09be-3b7e-44f3-9610-47c0b75cca6a&quot;,&quot;b91926a6-3d55-4685-ba0b-da37b0c4e8dd&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2084,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;17d20ecc-c700-4a1a-bf68-1354ff6fc706&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;abf8dfcb-29f7-4b02-9808-dee6d611b75c&quot;,&quot;title&quot;:&quot;&gt; [coinfalcon] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinfalcon-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinfalcon-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinfalcon] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfalcon] without API keys &gt; [coinfalcon] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:39,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a0c76a38-2ad7-4729-bbaf-0165f49b4748&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfalcon] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfalcon] without API keys &gt; [coinfalcon] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:324,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;001c9325-64d0-4e03-aa5e-b49b3c96229a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfalcon] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfalcon] without API keys &gt; [coinfalcon] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1835,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5fb1a42f-2010-4885-9811-6df722f9c773&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfalcon] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfalcon] without API keys &gt; [coinfalcon] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1033,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c992e45a-cd35-4ef4-829a-a458e8c3be00&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfalcon] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfalcon] without API keys &gt; [coinfalcon] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:980,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;42ef3f83-7ea8-4356-b60f-cf3e478053ff&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinfalcon] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinfalcon] without API keys &gt; [coinfalcon] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1109,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;242cd9ca-4404-48f9-b96d-803cf0c1f9c2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;a0c76a38-2ad7-4729-bbaf-0165f49b4748&quot;,&quot;001c9325-64d0-4e03-aa5e-b49b3c96229a&quot;,&quot;5fb1a42f-2010-4885-9811-6df722f9c773&quot;,&quot;c992e45a-cd35-4ef4-829a-a458e8c3be00&quot;,&quot;42ef3f83-7ea8-4356-b60f-cf3e478053ff&quot;,&quot;242cd9ca-4404-48f9-b96d-803cf0c1f9c2&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5320,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;a18c5818-5e8e-41f0-83de-86e1d23ff41f&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;1984b830-19cb-4f43-a0d1-7a59f5de73d7&quot;,&quot;title&quot;:&quot;&gt; [coingi] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coingi-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coingi-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coingi] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coingi] without API keys &gt; [coingi] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:56,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b07ed8eb-3616-487b-87d6-52c1649758f6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coingi] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coingi] without API keys &gt; [coingi] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3102,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2ba64905-aa6f-44ab-9cba-fdad4a227c59&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coingi] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coingi] without API keys &gt; [coingi] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1118,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ebde56c4-c1ee-4658-99b8-9bf36a251f48&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coingi] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coingi] without API keys &gt; [coingi] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:216,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c74b7ff1-09c5-4e74-b80a-84419fc5ae9f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coingi] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coingi] without API keys &gt; [coingi] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:70,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;27c54874-fca3-4ec0-bfce-abbc9c786427&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coingi] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coingi] without API keys &gt; [coingi] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:34,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;20173061-1460-4dca-93f0-ac2ae12958df&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;b07ed8eb-3616-487b-87d6-52c1649758f6&quot;,&quot;2ba64905-aa6f-44ab-9cba-fdad4a227c59&quot;,&quot;ebde56c4-c1ee-4658-99b8-9bf36a251f48&quot;,&quot;c74b7ff1-09c5-4e74-b80a-84419fc5ae9f&quot;,&quot;27c54874-fca3-4ec0-bfce-abbc9c786427&quot;,&quot;20173061-1460-4dca-93f0-ac2ae12958df&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4596,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;6fa349a7-e2be-4e57-98c3-77eb5ed1a990&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;7e30b6fc-f255-46d2-b3dc-010bb993faf7&quot;,&quot;title&quot;:&quot;&gt; [coinone] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinone-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinone-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinone] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinone] without API keys &gt; [coinone] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:101,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bb2456d9-e803-49b7-948b-2257395cef3b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinone] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinone] without API keys &gt; [coinone] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:406,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a6802eb0-8219-4d6e-bb4f-ca78e8373cf9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinone] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinone] without API keys &gt; [coinone] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1135,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7abaf8e4-9776-4558-93ff-bd34165bd5b7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinone] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinone] without API keys &gt; [coinone] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:915,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;83972c88-c4ed-4991-92f4-af4eb1cc5da6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinone] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinone] without API keys &gt; [coinone] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:441,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f0c1b7f9-d60d-4e3e-b8ea-2eacc2757787&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinone] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinone] without API keys &gt; [coinone] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:835,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6d152cb5-8657-4eca-8b1e-3439eee27330&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;bb2456d9-e803-49b7-948b-2257395cef3b&quot;,&quot;a6802eb0-8219-4d6e-bb4f-ca78e8373cf9&quot;,&quot;7abaf8e4-9776-4558-93ff-bd34165bd5b7&quot;,&quot;83972c88-c4ed-4991-92f4-af4eb1cc5da6&quot;,&quot;f0c1b7f9-d60d-4e3e-b8ea-2eacc2757787&quot;,&quot;6d152cb5-8657-4eca-8b1e-3439eee27330&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:3833,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;85f1ebe5-07e6-4e57-b893-30258fe7e4df&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;42a91209-446d-45b2-893c-a59e72a5c6b1&quot;,&quot;title&quot;:&quot;&gt; [coinmate] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinmate-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinmate-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinmate] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmate] without API keys &gt; [coinmate] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:75,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9427a106-2687-44b1-8b3e-f9334ce7ae6b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmate] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmate] without API keys &gt; [coinmate] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:568,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7ff69a3f-c8d1-4a5d-ae25-7a45c607d119&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmate] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmate] without API keys &gt; [coinmate] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1541,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;15e6c4c9-4d5b-44b9-ae4b-896934bfbcff&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmate] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmate] without API keys &gt; [coinmate] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:12,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2a8ef1aa-eb58-4a16-8969-76029f04ea49&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmate] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmate] without API keys &gt; [coinmate] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:965,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2204b41a-a95e-42a0-9b5e-df202e22aadc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmate] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmate] without API keys &gt; [coinmate] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1007,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9054ab95-46a0-43db-ad9a-0687ee6629dd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;9427a106-2687-44b1-8b3e-f9334ce7ae6b&quot;,&quot;7ff69a3f-c8d1-4a5d-ae25-7a45c607d119&quot;,&quot;15e6c4c9-4d5b-44b9-ae4b-896934bfbcff&quot;,&quot;2a8ef1aa-eb58-4a16-8969-76029f04ea49&quot;,&quot;2204b41a-a95e-42a0-9b5e-df202e22aadc&quot;,&quot;9054ab95-46a0-43db-ad9a-0687ee6629dd&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4168,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;dc0491a7-410a-4288-80a5-3df8bc69d23f&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;b40f873d-e61d-4f99-9143-ba1e2efeba00&quot;,&quot;title&quot;:&quot;&gt; [cex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/cex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/cex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [cex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [cex] without API keys &gt; [cex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:79,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1691595d-eccf-4732-bf71-eae760b6f72d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [cex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [cex] without API keys &gt; [cex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1668,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bd2ad6ca-4efe-4c84-9d82-d002d40fc12a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [cex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [cex] without API keys &gt; [cex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7724,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6b4ad566-a7dc-4844-bd13-db11859fca3b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [cex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [cex] without API keys &gt; [cex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1553,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;812f6c48-b726-45ee-a440-0d1df17eb41f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [cex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [cex] without API keys &gt; [cex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1447,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0965c9c2-0efd-4060-93ed-8cd1273d2722&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [cex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [cex] without API keys &gt; [cex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1907,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6572c47d-5e0b-4000-ba9e-2994885fc786&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;1691595d-eccf-4732-bf71-eae760b6f72d&quot;,&quot;bd2ad6ca-4efe-4c84-9d82-d002d40fc12a&quot;,&quot;6b4ad566-a7dc-4844-bd13-db11859fca3b&quot;,&quot;812f6c48-b726-45ee-a440-0d1df17eb41f&quot;,&quot;0965c9c2-0efd-4060-93ed-8cd1273d2722&quot;,&quot;6572c47d-5e0b-4000-ba9e-2994885fc786&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:14378,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;1632b346-9517-4703-8adf-3ee8fd5c2c70&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;ed894726-41b7-4003-8916-137107dea8da&quot;,&quot;title&quot;:&quot;&gt; [coinegg] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinegg-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinegg-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinegg] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinegg] without API keys &gt; [coinegg] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:136,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e427cd1b-1725-49e6-92dd-d0213545b815&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinegg] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinegg] without API keys &gt; [coinegg] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6129,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;29cf4c18-e28d-4306-a18e-01b2fce8958d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinegg] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinegg] without API keys &gt; [coinegg] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2371,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;681c2560-ac0a-4045-a40c-b3777dea7e9d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinegg] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinegg] without API keys &gt; [coinegg] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:50,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b4c1795a-ec39-46f5-b6e9-2bc48c5cc163&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinegg] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinegg] without API keys &gt; [coinegg] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:151,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8ad1dfde-9643-4c7f-bf7f-c448a0d74bd7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinegg] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinegg] without API keys &gt; [coinegg] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:138,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9ae8d867-bdda-4073-9486-f4c23d306dd8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;e427cd1b-1725-49e6-92dd-d0213545b815&quot;,&quot;29cf4c18-e28d-4306-a18e-01b2fce8958d&quot;,&quot;681c2560-ac0a-4045-a40c-b3777dea7e9d&quot;,&quot;b4c1795a-ec39-46f5-b6e9-2bc48c5cc163&quot;,&quot;8ad1dfde-9643-4c7f-bf7f-c448a0d74bd7&quot;,&quot;9ae8d867-bdda-4073-9486-f4c23d306dd8&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:8975,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;6d62d26e-56c3-44a8-a8d0-3b5b2eb5bb45&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;a64f6b10-6f13-4338-9829-ba7c6d86c9d5&quot;,&quot;title&quot;:&quot;&gt; [coss] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coss-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coss-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coss] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coss] without API keys &gt; [coss] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:358,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6b2825c0-a3f0-445a-9cda-3058719439f8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coss] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coss] without API keys &gt; [coss] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3882,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b9deca16-2d09-4bc8-a30b-26d3247cc152&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coss] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coss] without API keys &gt; [coss] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1073,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;521dc8ff-6e2d-4807-a5d1-24e533e4df19&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coss] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coss] without API keys &gt; [coss] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:58,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8e02ce7a-4fa1-48bd-b1e3-f7a13ac343f2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coss] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coss] without API keys &gt; [coss] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:49,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f03a2473-1041-4f8e-9cb6-7c8c004e4f37&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coss] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coss] without API keys &gt; [coss] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:55,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e6f261c2-168f-4aa2-b8ee-1917c83931f9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;6b2825c0-a3f0-445a-9cda-3058719439f8&quot;,&quot;b9deca16-2d09-4bc8-a30b-26d3247cc152&quot;,&quot;521dc8ff-6e2d-4807-a5d1-24e533e4df19&quot;,&quot;8e02ce7a-4fa1-48bd-b1e3-f7a13ac343f2&quot;,&quot;f03a2473-1041-4f8e-9cb6-7c8c004e4f37&quot;,&quot;e6f261c2-168f-4aa2-b8ee-1917c83931f9&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5475,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;4efdc555-0f58-4e3c-9e46-db9ad938c6b3&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;34408d1a-8c29-4d03-81de-a00cdd5a611c&quot;,&quot;title&quot;:&quot;&gt; [eterbase] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/eterbase-test.js&quot;,&quot;file&quot;:&quot;/test/generated/eterbase-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [eterbase] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [eterbase] without API keys &gt; [eterbase] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:291,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;60752f09-178d-4124-a2fb-f56c25581bde&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [eterbase] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [eterbase] without API keys &gt; [eterbase] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:438,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;137d4f20-31d1-4f90-89e4-4d52cff57582&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [eterbase] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [eterbase] without API keys &gt; [eterbase] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1877,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5b6701c6-d325-455b-af69-bd0d7be99116&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [eterbase] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [eterbase] without API keys &gt; [eterbase] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:406,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;51ddc48d-b8a8-45a3-8d40-089e1a5be3ca&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [eterbase] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [eterbase] without API keys &gt; [eterbase] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:561,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;98d6a0ac-53f4-4526-aa0b-f18932ec37c8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [eterbase] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [eterbase] without API keys &gt; [eterbase] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:776,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0652d8d9-bc84-4896-8f3e-75efb1a31701&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;60752f09-178d-4124-a2fb-f56c25581bde&quot;,&quot;137d4f20-31d1-4f90-89e4-4d52cff57582&quot;,&quot;5b6701c6-d325-455b-af69-bd0d7be99116&quot;,&quot;51ddc48d-b8a8-45a3-8d40-089e1a5be3ca&quot;,&quot;98d6a0ac-53f4-4526-aa0b-f18932ec37c8&quot;,&quot;0652d8d9-bc84-4896-8f3e-75efb1a31701&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4349,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;ccb579ef-453a-481e-829b-6fc19136581c&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;6bdf210c-2a76-44e2-b44b-d041857d675a&quot;,&quot;title&quot;:&quot;&gt; [deribit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/deribit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/deribit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [deribit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [deribit] without API keys &gt; [deribit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:203,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8e8663a1-fa5f-4439-902c-f6babef74981&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [deribit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [deribit] without API keys &gt; [deribit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2889,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7aa39d8c-5155-46e5-bbd2-25b56f3c08de&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [deribit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [deribit] without API keys &gt; [deribit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1663,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4565c984-9e94-4240-84e5-ca04a368408f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [deribit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [deribit] without API keys &gt; [deribit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:863,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;64fe9569-9c36-4825-94ab-230166c21899&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [deribit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [deribit] without API keys &gt; [deribit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:307,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;040ef67b-7d57-43bb-8af6-17052512540d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [deribit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [deribit] without API keys &gt; [deribit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:496,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9b7e6117-167e-4a26-8a4d-ad0b3737979d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;8e8663a1-fa5f-4439-902c-f6babef74981&quot;,&quot;7aa39d8c-5155-46e5-bbd2-25b56f3c08de&quot;,&quot;4565c984-9e94-4240-84e5-ca04a368408f&quot;,&quot;64fe9569-9c36-4825-94ab-230166c21899&quot;,&quot;040ef67b-7d57-43bb-8af6-17052512540d&quot;,&quot;9b7e6117-167e-4a26-8a4d-ad0b3737979d&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6421,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;8548da6c-68aa-49cd-9e78-c7db8e348ffe&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;95ec017f-7974-4482-ba06-c682b8875c03&quot;,&quot;title&quot;:&quot;&gt; [digifinex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/digifinex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/digifinex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [digifinex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [digifinex] without API keys &gt; [digifinex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:796,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7bcc03ca-0d19-498c-a258-3f23b49bdc0d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [digifinex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [digifinex] without API keys &gt; [digifinex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1545,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0c18e3c0-3278-4734-baa6-3c80f9db2e37&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [digifinex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [digifinex] without API keys &gt; [digifinex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:312,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c5ae3f39-fa35-4c69-a458-b62670aa1210&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [digifinex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [digifinex] without API keys &gt; [digifinex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:45,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;968c4abe-8e0e-4bb1-9ee0-83fc6ea1a4b5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [digifinex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [digifinex] without API keys &gt; [digifinex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2476,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;92284b0f-9cf8-4482-9746-2e6660ecdd88&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [digifinex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [digifinex] without API keys &gt; [digifinex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1006,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;97e5e182-a0ea-4584-a49e-1e14c30d7ce8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;7bcc03ca-0d19-498c-a258-3f23b49bdc0d&quot;,&quot;0c18e3c0-3278-4734-baa6-3c80f9db2e37&quot;,&quot;c5ae3f39-fa35-4c69-a458-b62670aa1210&quot;,&quot;968c4abe-8e0e-4bb1-9ee0-83fc6ea1a4b5&quot;,&quot;92284b0f-9cf8-4482-9746-2e6660ecdd88&quot;,&quot;97e5e182-a0ea-4584-a49e-1e14c30d7ce8&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6180,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;0a3a691a-94a8-4fac-bb91-d187fce99914&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;e20945b7-8fac-4e78-8237-aa16baec8cdc&quot;,&quot;title&quot;:&quot;&gt; [dsx] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/dsx-test.js&quot;,&quot;file&quot;:&quot;/test/generated/dsx-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [dsx] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [dsx] without API keys &gt; [dsx] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:578,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4746368d-4a6f-4632-8f07-0bedd8b686cc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [dsx] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [dsx] without API keys &gt; [dsx] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:899,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;81e1919a-5670-4797-b642-d572518a1f73&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [dsx] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [dsx] without API keys &gt; [dsx] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2250,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bfef7495-904c-4c65-86af-cdb0d0c945e7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [dsx] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [dsx] without API keys &gt; [dsx] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:53,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ff4051ba-f33c-44aa-9d34-595328c0d2a4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [dsx] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [dsx] without API keys &gt; [dsx] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1747,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f25349c9-a2d7-4079-ad5e-f5aa7f056856&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [dsx] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [dsx] without API keys &gt; [dsx] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1339,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1687cc4e-d11a-4d63-9fa2-fe608cdcaf45&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;4746368d-4a6f-4632-8f07-0bedd8b686cc&quot;,&quot;81e1919a-5670-4797-b642-d572518a1f73&quot;,&quot;bfef7495-904c-4c65-86af-cdb0d0c945e7&quot;,&quot;ff4051ba-f33c-44aa-9d34-595328c0d2a4&quot;,&quot;f25349c9-a2d7-4079-ad5e-f5aa7f056856&quot;,&quot;1687cc4e-d11a-4d63-9fa2-fe608cdcaf45&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6866,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;b09ee256-b5f5-4324-a188-9a7513f43700&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;78572da6-f672-4f0e-8776-d0190693c9ab&quot;,&quot;title&quot;:&quot;&gt; [exmo] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/exmo-test.js&quot;,&quot;file&quot;:&quot;/test/generated/exmo-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [exmo] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [exmo] without API keys &gt; [exmo] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:97,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7deed976-fb05-492a-bdde-ffd6cf54b3f8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exmo] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [exmo] without API keys &gt; [exmo] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:657,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b29ed00a-8302-44ff-9984-38041f766df6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exmo] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [exmo] without API keys &gt; [exmo] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1030,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cef978cd-fc9c-4e36-846a-88816946461a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exmo] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [exmo] without API keys &gt; [exmo] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:282,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0e07fae0-a912-4b87-a790-d053d00d1199&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exmo] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [exmo] without API keys &gt; [exmo] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:226,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;af0d52b2-b232-4c13-972e-c854b2aa62e6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exmo] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [exmo] without API keys &gt; [exmo] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:365,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fe7d63d8-6871-415c-abb9-1c743a3ffa57&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;7deed976-fb05-492a-bdde-ffd6cf54b3f8&quot;,&quot;b29ed00a-8302-44ff-9984-38041f766df6&quot;,&quot;cef978cd-fc9c-4e36-846a-88816946461a&quot;,&quot;0e07fae0-a912-4b87-a790-d053d00d1199&quot;,&quot;af0d52b2-b232-4c13-972e-c854b2aa62e6&quot;,&quot;fe7d63d8-6871-415c-abb9-1c743a3ffa57&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2657,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;2230333a-1f03-45e1-ae60-fc8bb3ba1ca7&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;269abacc-e645-488b-85ad-fa9bad7cfcf5&quot;,&quot;title&quot;:&quot;&gt; [exx] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/exx-test.js&quot;,&quot;file&quot;:&quot;/test/generated/exx-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [exx] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [exx] without API keys &gt; [exx] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:163,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bf18d00a-8b0c-49ec-b276-be6d63ed2629&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exx] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [exx] without API keys &gt; [exx] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1263,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b1b6b4ad-0858-46d6-a645-959dad3e5d5c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exx] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [exx] without API keys &gt; [exx] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:545,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7bd1d561-0b2b-4b35-943d-291540925b6c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exx] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [exx] without API keys &gt; [exx] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:313,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;dd7c8f93-70f0-4582-b097-4c9ebd1edae5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exx] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [exx] without API keys &gt; [exx] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:279,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5b29a69b-2a04-4c9a-a63b-d4d97618b00f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [exx] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [exx] without API keys &gt; [exx] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:339,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2a3feb1d-dcf3-45a1-a3ac-eb6e20b53f5a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;bf18d00a-8b0c-49ec-b276-be6d63ed2629&quot;,&quot;b1b6b4ad-0858-46d6-a645-959dad3e5d5c&quot;,&quot;7bd1d561-0b2b-4b35-943d-291540925b6c&quot;,&quot;dd7c8f93-70f0-4582-b097-4c9ebd1edae5&quot;,&quot;5b29a69b-2a04-4c9a-a63b-d4d97618b00f&quot;,&quot;2a3feb1d-dcf3-45a1-a3ac-eb6e20b53f5a&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2902,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;75310ad6-509d-4a93-8e23-19af4c645bd5&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;ba1c29bc-0998-43ec-adee-b7e32e76c6d9&quot;,&quot;title&quot;:&quot;&gt; [currencycom] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/currencycom-test.js&quot;,&quot;file&quot;:&quot;/test/generated/currencycom-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [currencycom] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [currencycom] without API keys &gt; [currencycom] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:212,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4c4a8517-b440-4ee5-aec4-ef057df68aa7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [currencycom] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [currencycom] without API keys &gt; [currencycom] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2699,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8566d759-14f6-4ce3-a1d6-c27a89bff3df&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [currencycom] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [currencycom] without API keys &gt; [currencycom] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2680,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ca9a0e01-a06a-4001-8cfb-e43dc9eb7411&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [currencycom] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [currencycom] without API keys &gt; [currencycom] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1719,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5b8b77ef-1def-43c0-abee-f324ba168ba8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [currencycom] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [currencycom] without API keys &gt; [currencycom] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1119,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bc3d942b-4614-457a-8131-fbd32c9a44e8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [currencycom] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [currencycom] without API keys &gt; [currencycom] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1048,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bc1685a2-27bc-4cf8-b300-cde6ff30ae23&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;4c4a8517-b440-4ee5-aec4-ef057df68aa7&quot;,&quot;8566d759-14f6-4ce3-a1d6-c27a89bff3df&quot;,&quot;ca9a0e01-a06a-4001-8cfb-e43dc9eb7411&quot;,&quot;5b8b77ef-1def-43c0-abee-f324ba168ba8&quot;,&quot;bc3d942b-4614-457a-8131-fbd32c9a44e8&quot;,&quot;bc1685a2-27bc-4cf8-b300-cde6ff30ae23&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:9477,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;eb72b61a-0623-415c-b291-f71db5aac266&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;1c29a45e-29d1-4bb8-8b71-98ececf83d3f&quot;,&quot;title&quot;:&quot;&gt; [crex24] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/crex24-test.js&quot;,&quot;file&quot;:&quot;/test/generated/crex24-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [crex24] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [crex24] without API keys &gt; [crex24] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:266,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;650bd11c-76a6-4735-9698-5ce9eddc7d4c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [crex24] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [crex24] without API keys &gt; [crex24] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1427,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;855a81e4-0b6c-420b-96be-04dc63f8d3e4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [crex24] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [crex24] without API keys &gt; [crex24] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3317,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6cd68e18-b7da-4473-aa24-95ed683bb89a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [crex24] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [crex24] without API keys &gt; [crex24] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:954,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;607e1438-0dd1-486a-b3d7-22e11a8b41ac&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [crex24] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [crex24] without API keys &gt; [crex24] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2486,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;21ab235a-060e-48a7-9aa9-6e8355a92fb5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [crex24] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [crex24] without API keys &gt; [crex24] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2022,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5ac46686-3461-4665-aaf6-050adb6e3108&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;650bd11c-76a6-4735-9698-5ce9eddc7d4c&quot;,&quot;855a81e4-0b6c-420b-96be-04dc63f8d3e4&quot;,&quot;6cd68e18-b7da-4473-aa24-95ed683bb89a&quot;,&quot;607e1438-0dd1-486a-b3d7-22e11a8b41ac&quot;,&quot;21ab235a-060e-48a7-9aa9-6e8355a92fb5&quot;,&quot;5ac46686-3461-4665-aaf6-050adb6e3108&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:10472,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;74c8da75-2564-4d23-a203-6da74ac4af40&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;717b5999-e9f1-4442-b864-4c6300237a37&quot;,&quot;title&quot;:&quot;&gt; [fcoin] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/fcoin-test.js&quot;,&quot;file&quot;:&quot;/test/generated/fcoin-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [fcoin] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoin] without API keys &gt; [fcoin] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:349,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;26a5b232-1bd7-4e92-9f23-4889db2db74d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoin] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoin] without API keys &gt; [fcoin] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1040,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6743b9d9-1494-42a9-aae9-23c382efa0a8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoin] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoin] without API keys &gt; [fcoin] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1753,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0be07362-5f91-4fc0-b49c-6196b2b77da8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoin] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoin] without API keys &gt; [fcoin] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:34,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;29478cf1-d1a6-47e0-869e-bfe99d7f5492&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoin] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoin] without API keys &gt; [fcoin] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:40,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;35e1e392-3e27-4bc8-8c24-3bd6b1a5b3eb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoin] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoin] without API keys &gt; [fcoin] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:55,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d9360afd-a7b2-45eb-9dd1-282610a8181a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;26a5b232-1bd7-4e92-9f23-4889db2db74d&quot;,&quot;6743b9d9-1494-42a9-aae9-23c382efa0a8&quot;,&quot;0be07362-5f91-4fc0-b49c-6196b2b77da8&quot;,&quot;29478cf1-d1a6-47e0-869e-bfe99d7f5492&quot;,&quot;35e1e392-3e27-4bc8-8c24-3bd6b1a5b3eb&quot;,&quot;d9360afd-a7b2-45eb-9dd1-282610a8181a&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:3271,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;94698180-180c-40bf-a41d-9bfae23ee988&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;bf80b19b-8f48-4595-8e01-ed6dd65bed88&quot;,&quot;title&quot;:&quot;&gt; [fcoinjp] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/fcoinjp-test.js&quot;,&quot;file&quot;:&quot;/test/generated/fcoinjp-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [fcoinjp] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoinjp] without API keys &gt; [fcoinjp] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:125,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a3bae64e-1c50-46ba-92b5-ed2f4b2a927b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoinjp] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoinjp] without API keys &gt; [fcoinjp] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:981,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2e0a7ebc-6964-4581-b40b-f6b474480b36&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoinjp] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoinjp] without API keys &gt; [fcoinjp] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1581,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d3fd650c-7d8f-4fa7-8f51-7e0d8e4992eb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoinjp] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoinjp] without API keys &gt; [fcoinjp] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:33,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fbce258f-0f7c-4041-a9f0-97000a0850ee&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoinjp] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoinjp] without API keys &gt; [fcoinjp] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:132,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;34de0976-906b-4a08-805b-5eae64942199&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fcoinjp] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [fcoinjp] without API keys &gt; [fcoinjp] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:123,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;69ee88dd-a0f4-4ce1-8017-133953858555&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;a3bae64e-1c50-46ba-92b5-ed2f4b2a927b&quot;,&quot;2e0a7ebc-6964-4581-b40b-f6b474480b36&quot;,&quot;d3fd650c-7d8f-4fa7-8f51-7e0d8e4992eb&quot;,&quot;fbce258f-0f7c-4041-a9f0-97000a0850ee&quot;,&quot;34de0976-906b-4a08-805b-5eae64942199&quot;,&quot;69ee88dd-a0f4-4ce1-8017-133953858555&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2975,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;3cec43e9-37e1-43c2-b232-df25e4c6927e&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;7a4c981a-c7ed-43e3-9d04-0b75d7b8e5e8&quot;,&quot;title&quot;:&quot;&gt; [ftx] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/ftx-test.js&quot;,&quot;file&quot;:&quot;/test/generated/ftx-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [ftx] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [ftx] without API keys &gt; [ftx] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:347,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;453a282c-bdb9-4ba9-86bf-1fdf0f679937&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ftx] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [ftx] without API keys &gt; [ftx] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:807,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a96ed922-8293-4ce5-81ba-a977d2e4b317&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ftx] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [ftx] without API keys &gt; [ftx] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:401,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c3dbbd02-4c86-4750-b74b-15c8bcd18c0f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ftx] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [ftx] without API keys &gt; [ftx] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:305,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8cd3bcb7-fa86-47a2-9130-ccde330a2d16&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ftx] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [ftx] without API keys &gt; [ftx] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:294,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;99a52aba-7246-4eca-9f84-22c60be29363&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ftx] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [ftx] without API keys &gt; [ftx] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:357,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;58717037-8a77-4395-b735-5081972c6933&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;453a282c-bdb9-4ba9-86bf-1fdf0f679937&quot;,&quot;a96ed922-8293-4ce5-81ba-a977d2e4b317&quot;,&quot;c3dbbd02-4c86-4750-b74b-15c8bcd18c0f&quot;,&quot;8cd3bcb7-fa86-47a2-9130-ccde330a2d16&quot;,&quot;99a52aba-7246-4eca-9f84-22c60be29363&quot;,&quot;58717037-8a77-4395-b735-5081972c6933&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2511,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;afa2604b-f037-45eb-accd-48a852e57285&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;f743c2e7-c00e-4d9f-96ff-cd5385f4f17e&quot;,&quot;title&quot;:&quot;&gt; [flowbtc] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/flowbtc-test.js&quot;,&quot;file&quot;:&quot;/test/generated/flowbtc-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [flowbtc] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [flowbtc] without API keys &gt; [flowbtc] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:124,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0d813e8c-9d9a-47c7-8201-d77703431cf1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [flowbtc] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [flowbtc] without API keys &gt; [flowbtc] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3076,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;34dfbd54-d7d1-45c3-9d3c-1a89dd7dc457&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [flowbtc] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [flowbtc] without API keys &gt; [flowbtc] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1367,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;63a027e8-9e24-4820-a0fd-dcc54c174591&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [flowbtc] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [flowbtc] without API keys &gt; [flowbtc] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:42,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f78016ab-a3dd-471c-a4a3-8d6f61fee512&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [flowbtc] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [flowbtc] without API keys &gt; [flowbtc] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:77,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;745c04b1-ad95-47c0-8b97-d33ba96c1621&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [flowbtc] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [flowbtc] without API keys &gt; [flowbtc] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:75,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;800c8dba-9d7b-43d5-a3da-579b9fec0c01&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;0d813e8c-9d9a-47c7-8201-d77703431cf1&quot;,&quot;34dfbd54-d7d1-45c3-9d3c-1a89dd7dc457&quot;,&quot;63a027e8-9e24-4820-a0fd-dcc54c174591&quot;,&quot;f78016ab-a3dd-471c-a4a3-8d6f61fee512&quot;,&quot;745c04b1-ad95-47c0-8b97-d33ba96c1621&quot;,&quot;800c8dba-9d7b-43d5-a3da-579b9fec0c01&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4761,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;3ab18d08-5104-497c-9c1c-113f26fcb1c3&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;9429c386-3a24-4cd2-a5a3-2d5f147db51b&quot;,&quot;title&quot;:&quot;&gt; [foxbit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/foxbit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/foxbit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [foxbit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [foxbit] without API keys &gt; [foxbit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:93,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;61552902-e659-49e4-b58e-6e4363c7b129&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [foxbit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [foxbit] without API keys &gt; [foxbit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:12,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e16f9205-d8b9-498b-a1a4-1cc5561d9da5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [foxbit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [foxbit] without API keys &gt; [foxbit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:143,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;490a4dda-d7f8-457b-8350-35fa72fdd8ff&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [foxbit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [foxbit] without API keys &gt; [foxbit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a960a0ce-dfa1-4841-9564-a18eb675644c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [foxbit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [foxbit] without API keys &gt; [foxbit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:998,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0b139e04-0c67-47a1-93f4-f2c0f834b92e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [foxbit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [foxbit] without API keys &gt; [foxbit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3916,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;539c9794-6384-4c05-a794-31f8dde7ba1c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;61552902-e659-49e4-b58e-6e4363c7b129&quot;,&quot;e16f9205-d8b9-498b-a1a4-1cc5561d9da5&quot;,&quot;490a4dda-d7f8-457b-8350-35fa72fdd8ff&quot;,&quot;a960a0ce-dfa1-4841-9564-a18eb675644c&quot;,&quot;0b139e04-0c67-47a1-93f4-f2c0f834b92e&quot;,&quot;539c9794-6384-4c05-a794-31f8dde7ba1c&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5168,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;96e0b802-0360-4762-b50a-f0887262e538&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;bff347d4-5702-4e9c-9308-74754a6fc0a9&quot;,&quot;title&quot;:&quot;&gt; [hollaex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/hollaex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/hollaex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [hollaex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [hollaex] without API keys &gt; [hollaex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:98,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ddb96a0a-a1e4-4318-adb7-8c2273b7b1da&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hollaex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [hollaex] without API keys &gt; [hollaex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:831,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2343aca1-8d84-40d8-baa2-1c23f3c124e8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hollaex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [hollaex] without API keys &gt; [hollaex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1213,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2077c21e-16fa-4d91-8d98-19e3b7240ddb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hollaex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [hollaex] without API keys &gt; [hollaex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:278,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f7eeb972-9f9d-49d7-b471-4680bcceea2f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hollaex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [hollaex] without API keys &gt; [hollaex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:218,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;018f6782-1c73-40e6-b167-4fc6c6466e89&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hollaex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [hollaex] without API keys &gt; [hollaex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:326,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;089a7bc4-b309-4058-960f-8bfb06be2121&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;ddb96a0a-a1e4-4318-adb7-8c2273b7b1da&quot;,&quot;2343aca1-8d84-40d8-baa2-1c23f3c124e8&quot;,&quot;2077c21e-16fa-4d91-8d98-19e3b7240ddb&quot;,&quot;f7eeb972-9f9d-49d7-b471-4680bcceea2f&quot;,&quot;018f6782-1c73-40e6-b167-4fc6c6466e89&quot;,&quot;089a7bc4-b309-4058-960f-8bfb06be2121&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2964,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;2d875d90-b9e2-42fb-93b5-7004ea992e87&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;08bdcb2d-6d6c-43cd-8442-475aedc4160c&quot;,&quot;title&quot;:&quot;&gt; [gateio] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/gateio-test.js&quot;,&quot;file&quot;:&quot;/test/generated/gateio-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [gateio] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [gateio] without API keys &gt; [gateio] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:134,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3aa29bac-f536-4a5c-b4d8-dc48103185e5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gateio] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [gateio] without API keys &gt; [gateio] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1716,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8dc9c4d5-1b03-465c-9455-177196c75242&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gateio] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [gateio] without API keys &gt; [gateio] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2557,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1f87b3dc-eaac-40f9-b97e-8ff72a7da7fa&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gateio] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [gateio] without API keys &gt; [gateio] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1470,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cd6c52d2-ddda-4a07-99d9-4381d6677eb6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gateio] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [gateio] without API keys &gt; [gateio] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:527,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;08911916-2603-4da7-9f5a-ba4f57ed2dd2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gateio] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [gateio] without API keys &gt; [gateio] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:992,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4fd4c3bb-04df-4174-b0b7-68e7cae9e834&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;3aa29bac-f536-4a5c-b4d8-dc48103185e5&quot;,&quot;8dc9c4d5-1b03-465c-9455-177196c75242&quot;,&quot;1f87b3dc-eaac-40f9-b97e-8ff72a7da7fa&quot;,&quot;cd6c52d2-ddda-4a07-99d9-4381d6677eb6&quot;,&quot;08911916-2603-4da7-9f5a-ba4f57ed2dd2&quot;,&quot;4fd4c3bb-04df-4174-b0b7-68e7cae9e834&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:7396,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;fd944e0f-ea89-47f2-b311-1128203cac67&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;d7ba89e4-fca9-48ad-ad90-0a0db5c50eef&quot;,&quot;title&quot;:&quot;&gt; [fybse] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/fybse-test.js&quot;,&quot;file&quot;:&quot;/test/generated/fybse-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [fybse] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [fybse] without API keys &gt; [fybse] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:393,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e63fad60-7e34-4abd-9b39-0d79a2e11aa2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fybse] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [fybse] without API keys &gt; [fybse] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:34,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e6f3e20a-5466-48a4-a722-cc37e96c6257&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fybse] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [fybse] without API keys &gt; [fybse] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1588,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e707ff46-e629-4cf3-92ad-ccb438faae4f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fybse] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [fybse] without API keys &gt; [fybse] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:11,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c1690311-89e7-4e19-a64d-63723692d0a6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fybse] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [fybse] without API keys &gt; [fybse] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:406,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;458b38df-5e6f-470b-af76-73d3e796362b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [fybse] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [fybse] without API keys &gt; [fybse] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5878,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1472771d-d157-4c40-acfb-cf007b4c5600&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;e63fad60-7e34-4abd-9b39-0d79a2e11aa2&quot;,&quot;e6f3e20a-5466-48a4-a722-cc37e96c6257&quot;,&quot;e707ff46-e629-4cf3-92ad-ccb438faae4f&quot;,&quot;c1690311-89e7-4e19-a64d-63723692d0a6&quot;,&quot;458b38df-5e6f-470b-af76-73d3e796362b&quot;,&quot;1472771d-d157-4c40-acfb-cf007b4c5600&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:8310,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;cc081376-c772-4a48-af0c-677939a0e8fc&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;33af70b3-d1d2-445f-9fd9-59cd9b0f0c3d&quot;,&quot;title&quot;:&quot;&gt; [gemini] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/gemini-test.js&quot;,&quot;file&quot;:&quot;/test/generated/gemini-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [gemini] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [gemini] without API keys &gt; [gemini] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:263,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e5f056e7-c12d-4f00-b4bb-9c360b3510f6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gemini] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [gemini] without API keys &gt; [gemini] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1556,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;12d4f2a4-745e-475e-b539-743a55019c1f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gemini] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [gemini] without API keys &gt; [gemini] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4825,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8624a1c7-edcd-4cc0-9a86-c851d607a862&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gemini] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [gemini] without API keys &gt; [gemini] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:9,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7404e026-de4c-44f0-abfb-8a88b16941cb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gemini] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [gemini] without API keys &gt; [gemini] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1488,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1386e9b6-f535-46cd-b368-1c5fc45924b3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [gemini] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [gemini] without API keys &gt; [gemini] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1502,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2398a653-0676-465e-9787-350e63ec906d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;e5f056e7-c12d-4f00-b4bb-9c360b3510f6&quot;,&quot;12d4f2a4-745e-475e-b539-743a55019c1f&quot;,&quot;8624a1c7-edcd-4cc0-9a86-c851d607a862&quot;,&quot;7404e026-de4c-44f0-abfb-8a88b16941cb&quot;,&quot;1386e9b6-f535-46cd-b368-1c5fc45924b3&quot;,&quot;2398a653-0676-465e-9787-350e63ec906d&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:9643,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;625941ea-c6f2-497b-b5b2-5bebed3bb6c4&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;db9a560e-a56e-4bc6-ab5b-8ba2244e415d&quot;,&quot;title&quot;:&quot;&gt; [hbtc] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/hbtc-test.js&quot;,&quot;file&quot;:&quot;/test/generated/hbtc-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [hbtc] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [hbtc] without API keys &gt; [hbtc] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:511,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;601e994f-f984-443a-bd3b-16b5ae8ece65&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hbtc] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [hbtc] without API keys &gt; [hbtc] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1289,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a9d17c32-0fc4-445d-8731-4d823dd9ae4e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hbtc] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [hbtc] without API keys &gt; [hbtc] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3125,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8298423c-6ddf-4a90-bebf-56554f099002&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hbtc] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [hbtc] without API keys &gt; [hbtc] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1998,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;df31890d-f195-425a-9591-4a673f6c9be1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hbtc] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [hbtc] without API keys &gt; [hbtc] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1992,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6a0438ce-d979-4fa2-8f97-b90db9591db6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hbtc] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [hbtc] without API keys &gt; [hbtc] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1971,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a4b94d4a-6ff3-4d58-98aa-accc7c62e225&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;601e994f-f984-443a-bd3b-16b5ae8ece65&quot;,&quot;a9d17c32-0fc4-445d-8731-4d823dd9ae4e&quot;,&quot;8298423c-6ddf-4a90-bebf-56554f099002&quot;,&quot;df31890d-f195-425a-9591-4a673f6c9be1&quot;,&quot;6a0438ce-d979-4fa2-8f97-b90db9591db6&quot;,&quot;a4b94d4a-6ff3-4d58-98aa-accc7c62e225&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:10886,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;4fdb013b-f8fb-459c-a1eb-648372789017&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;d7dbcdb1-cbbd-4eba-b1d0-7bd59f530b20&quot;,&quot;title&quot;:&quot;&gt; [hitbtc] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/hitbtc-test.js&quot;,&quot;file&quot;:&quot;/test/generated/hitbtc-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [hitbtc] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [hitbtc] without API keys &gt; [hitbtc] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:125,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6480f429-318a-4f13-afd3-d4f35bc4cc09&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hitbtc] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [hitbtc] without API keys &gt; [hitbtc] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1091,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0b19bd8d-b99f-4d40-98c9-2420001d03c2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hitbtc] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [hitbtc] without API keys &gt; [hitbtc] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3541,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4502c441-d5b7-4194-9149-3e4c26d49dc8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hitbtc] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [hitbtc] without API keys &gt; [hitbtc] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1690,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3b58239e-b8e0-46d8-9656-50b47af9cc80&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hitbtc] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [hitbtc] without API keys &gt; [hitbtc] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1362,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cf7282ba-6539-4c55-9ada-a706679fbc04&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [hitbtc] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [hitbtc] without API keys &gt; [hitbtc] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1656,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c490fc5a-b112-4187-992d-b9308173af79&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;6480f429-318a-4f13-afd3-d4f35bc4cc09&quot;,&quot;0b19bd8d-b99f-4d40-98c9-2420001d03c2&quot;,&quot;4502c441-d5b7-4194-9149-3e4c26d49dc8&quot;,&quot;3b58239e-b8e0-46d8-9656-50b47af9cc80&quot;,&quot;cf7282ba-6539-4c55-9ada-a706679fbc04&quot;,&quot;c490fc5a-b112-4187-992d-b9308173af79&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:9465,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;21c5c4cd-ec86-4cd9-9fda-05c0d53d7e40&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;4ba8eb91-20a6-4d7b-ae3d-9bb45aa0d759&quot;,&quot;title&quot;:&quot;&gt; [ice3x] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/ice3x-test.js&quot;,&quot;file&quot;:&quot;/test/generated/ice3x-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [ice3x] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [ice3x] without API keys &gt; [ice3x] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:34,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3519fc31-26bf-440d-ac37-60995df3c6c8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ice3x] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [ice3x] without API keys &gt; [ice3x] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1702,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f526753a-6088-4b2c-b6e6-04c6bea8f169&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ice3x] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [ice3x] without API keys &gt; [ice3x] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2698,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a98cec91-0c2b-4c80-8887-8b71fb4d4138&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ice3x] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [ice3x] without API keys &gt; [ice3x] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1046,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;020ec034-12e4-4a1c-ac57-e2eb40e085b1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ice3x] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [ice3x] without API keys &gt; [ice3x] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1051,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ac7be5cb-04e7-49f5-944a-c554d2c15509&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [ice3x] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [ice3x] without API keys &gt; [ice3x] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:928,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;96880c19-a981-452a-a472-48f3defc7e08&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;3519fc31-26bf-440d-ac37-60995df3c6c8&quot;,&quot;f526753a-6088-4b2c-b6e6-04c6bea8f169&quot;,&quot;a98cec91-0c2b-4c80-8887-8b71fb4d4138&quot;,&quot;020ec034-12e4-4a1c-ac57-e2eb40e085b1&quot;,&quot;ac7be5cb-04e7-49f5-944a-c554d2c15509&quot;,&quot;96880c19-a981-452a-a472-48f3defc7e08&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:7459,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;22390e2c-0bc6-4e09-b3a8-46e1f3a1ae61&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;1942c68c-f46f-4136-8068-9f0c272df3a0&quot;,&quot;title&quot;:&quot;&gt; [independentreserve] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/independentreserve-test.js&quot;,&quot;file&quot;:&quot;/test/generated/independentreserve-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [independentreserve] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [independentreserve] without API keys &gt; [independentreserve] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:34,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5841d3c8-8916-4eb2-8a01-f0bfb87fcd6d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [independentreserve] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [independentreserve] without API keys &gt; [independentreserve] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1198,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0b996ff2-8622-4611-87e5-63433f1c88bf&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [independentreserve] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [independentreserve] without API keys &gt; [independentreserve] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2993,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;128dd008-73c7-4983-9c69-fe13b2b0d376&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [independentreserve] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [independentreserve] without API keys &gt; [independentreserve] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:11,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f6d037d3-5aae-46b2-a48e-25b7f717b991&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [independentreserve] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [independentreserve] without API keys &gt; [independentreserve] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1404,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ec022bf5-65ef-430c-8565-1144d341cd0e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [independentreserve] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [independentreserve] without API keys &gt; [independentreserve] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:584,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;64c3288a-5e2e-478c-97ea-11793d6c0ddc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;5841d3c8-8916-4eb2-8a01-f0bfb87fcd6d&quot;,&quot;0b996ff2-8622-4611-87e5-63433f1c88bf&quot;,&quot;128dd008-73c7-4983-9c69-fe13b2b0d376&quot;,&quot;f6d037d3-5aae-46b2-a48e-25b7f717b991&quot;,&quot;ec022bf5-65ef-430c-8565-1144d341cd0e&quot;,&quot;64c3288a-5e2e-478c-97ea-11793d6c0ddc&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6224,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;d531170a-eec3-471f-b8a1-4e7f8fa10913&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;b83ddd02-49f0-46b3-a2a6-21f8dc6fc6db&quot;,&quot;title&quot;:&quot;&gt; [huobipro] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/huobipro-test.js&quot;,&quot;file&quot;:&quot;/test/generated/huobipro-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [huobipro] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobipro] without API keys &gt; [huobipro] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:100,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;47c88e88-ff71-4f72-9ff0-726b6e7e7375&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobipro] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobipro] without API keys &gt; [huobipro] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:539,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d8c3ea79-0db8-4e39-946f-0cb13e91756f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobipro] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobipro] without API keys &gt; [huobipro] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5588,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;30bd29e1-2196-4ccb-9a89-c031ed030d4d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobipro] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobipro] without API keys &gt; [huobipro] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2172,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2362e6d3-2f43-4751-80a3-b65fcc2a5e2a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobipro] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobipro] without API keys &gt; [huobipro] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1827,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;06fc15b5-ada2-4640-ab67-7b26724d2269&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobipro] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobipro] without API keys &gt; [huobipro] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2133,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;dd277a09-d7f9-45d7-911b-458db044a73a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;47c88e88-ff71-4f72-9ff0-726b6e7e7375&quot;,&quot;d8c3ea79-0db8-4e39-946f-0cb13e91756f&quot;,&quot;30bd29e1-2196-4ccb-9a89-c031ed030d4d&quot;,&quot;2362e6d3-2f43-4751-80a3-b65fcc2a5e2a&quot;,&quot;06fc15b5-ada2-4640-ab67-7b26724d2269&quot;,&quot;dd277a09-d7f9-45d7-911b-458db044a73a&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:12359,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;0754be0d-3b8f-4aae-9eb7-61e544d09ec5&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;ee661025-ab38-4a21-8e2b-b97de657e76c&quot;,&quot;title&quot;:&quot;&gt; [itbit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/itbit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/itbit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [itbit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [itbit] without API keys &gt; [itbit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:32,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;da0fa623-14af-4106-8a53-17a6c3633840&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [itbit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [itbit] without API keys &gt; [itbit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ce1c8f56-4851-4981-9e19-9d819feb63cd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [itbit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [itbit] without API keys &gt; [itbit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:407,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;21ef94e7-5bf6-40c7-a9c5-1d775cd63d60&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [itbit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [itbit] without API keys &gt; [itbit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:10,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5b583e10-e9f6-4fef-8440-059999b16392&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [itbit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [itbit] without API keys &gt; [itbit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1732,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;dafaf720-c41c-4ea4-b413-827cee3d8faa&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [itbit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [itbit] without API keys &gt; [itbit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2225,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;31bdd3fd-f39c-4bec-9a87-ed4de3de20f9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;da0fa623-14af-4106-8a53-17a6c3633840&quot;,&quot;ce1c8f56-4851-4981-9e19-9d819feb63cd&quot;,&quot;21ef94e7-5bf6-40c7-a9c5-1d775cd63d60&quot;,&quot;5b583e10-e9f6-4fef-8440-059999b16392&quot;,&quot;dafaf720-c41c-4ea4-b413-827cee3d8faa&quot;,&quot;31bdd3fd-f39c-4bec-9a87-ed4de3de20f9&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4413,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;81ec59ea-212e-4c70-841d-2fd4152580f6&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;e5124726-47fc-4f16-bdba-7abf65a6b2f5&quot;,&quot;title&quot;:&quot;&gt; [indodax] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/indodax-test.js&quot;,&quot;file&quot;:&quot;/test/generated/indodax-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [indodax] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [indodax] without API keys &gt; [indodax] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:145,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;27f7a2a5-3127-450d-9adc-abecd7957008&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [indodax] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [indodax] without API keys &gt; [indodax] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:31,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f807747f-8e93-403f-8dec-fd0d7e7ef32f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [indodax] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [indodax] without API keys &gt; [indodax] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:809,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;92ab56c8-2fa5-4df7-a4bd-18785ed8e533&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [indodax] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [indodax] without API keys &gt; [indodax] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8b35b1c7-db4c-44cd-aa1d-46c62e0db4da&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [indodax] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [indodax] without API keys &gt; [indodax] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1762,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;dca35735-cae8-4f7f-9a65-c741126512ef&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [indodax] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [indodax] without API keys &gt; [indodax] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2307,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9199e204-472a-4c66-a606-aa71a4d5ee04&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;27f7a2a5-3127-450d-9adc-abecd7957008&quot;,&quot;f807747f-8e93-403f-8dec-fd0d7e7ef32f&quot;,&quot;92ab56c8-2fa5-4df7-a4bd-18785ed8e533&quot;,&quot;8b35b1c7-db4c-44cd-aa1d-46c62e0db4da&quot;,&quot;dca35735-cae8-4f7f-9a65-c741126512ef&quot;,&quot;9199e204-472a-4c66-a606-aa71a4d5ee04&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5059,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;6b7c217b-cc36-4f38-8b29-d368057ce08c&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;fa6d01dd-237b-4dc4-a294-e81bdc4fcb93&quot;,&quot;title&quot;:&quot;&gt; [btctradeim] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/btctradeim-test.js&quot;,&quot;file&quot;:&quot;/test/generated/btctradeim-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [btctradeim] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeim] without API keys &gt; [btctradeim] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:118,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0ebc66e7-7e67-4ed9-b610-2894377bda96&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeim] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeim] without API keys &gt; [btctradeim] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:40038,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bfd18325-a10b-422b-b35a-c17b8f10e9c1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeim] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeim] without API keys &gt; [btctradeim] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:10027,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f587b11c-2ffd-4a05-9c65-d4410ed3aea5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeim] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeim] without API keys &gt; [btctradeim] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8e0fd086-a2f9-47b9-bd17-12974dabdba6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeim] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeim] without API keys &gt; [btctradeim] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:20,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0b360aff-f470-480e-81c7-5b2be08232d8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [btctradeim] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [btctradeim] without API keys &gt; [btctradeim] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:28,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1dda7c61-9da0-4881-9531-187c32efdb0c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;0ebc66e7-7e67-4ed9-b610-2894377bda96&quot;,&quot;bfd18325-a10b-422b-b35a-c17b8f10e9c1&quot;,&quot;f587b11c-2ffd-4a05-9c65-d4410ed3aea5&quot;,&quot;8e0fd086-a2f9-47b9-bd17-12974dabdba6&quot;,&quot;0b360aff-f470-480e-81c7-5b2be08232d8&quot;,&quot;1dda7c61-9da0-4881-9531-187c32efdb0c&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:50238,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;263d8062-f845-4d58-b448-d1d42eefcadc&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;91617fa5-59df-4a7d-9ee6-1b1c8958af81&quot;,&quot;title&quot;:&quot;&gt; [huobiru] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/huobiru-test.js&quot;,&quot;file&quot;:&quot;/test/generated/huobiru-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [huobiru] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobiru] without API keys &gt; [huobiru] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:41,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;42c8d4d4-9b7d-42b4-b01d-f4c7d47a74c3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobiru] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobiru] without API keys &gt; [huobiru] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:504,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7cf22285-886c-4968-a74e-3e33ebc614fe&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobiru] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobiru] without API keys &gt; [huobiru] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5730,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f9bf5302-e991-422d-adf2-c310370084ee&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobiru] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobiru] without API keys &gt; [huobiru] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1967,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6bea601c-3d2f-4da5-bd40-bd2bdcbcf6de&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobiru] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobiru] without API keys &gt; [huobiru] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2019,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1cece7d0-5a97-410e-bba0-a33245518ae4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [huobiru] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [huobiru] without API keys &gt; [huobiru] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2120,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bbac17b0-7bdc-4738-ac55-92064b9fc2b1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;42c8d4d4-9b7d-42b4-b01d-f4c7d47a74c3&quot;,&quot;7cf22285-886c-4968-a74e-3e33ebc614fe&quot;,&quot;f9bf5302-e991-422d-adf2-c310370084ee&quot;,&quot;6bea601c-3d2f-4da5-bd40-bd2bdcbcf6de&quot;,&quot;1cece7d0-5a97-410e-bba0-a33245518ae4&quot;,&quot;bbac17b0-7bdc-4738-ac55-92064b9fc2b1&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:12381,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;06f8877d-1abb-4779-bf71-baa992c4d91c&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;42aff18f-0d03-4180-b971-3a1b40ba54c2&quot;,&quot;title&quot;:&quot;&gt; [kucoin] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/kucoin-test.js&quot;,&quot;file&quot;:&quot;/test/generated/kucoin-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [kucoin] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [kucoin] without API keys &gt; [kucoin] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:185,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;04f4fba8-ff42-43d9-8213-305395a4bf35&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kucoin] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [kucoin] without API keys &gt; [kucoin] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:498,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4d0ce6f6-4e0a-4a92-be3d-3a351219897a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kucoin] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [kucoin] without API keys &gt; [kucoin] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:950,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e81b5612-ac03-4e82-90a9-434c76c5695e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kucoin] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [kucoin] without API keys &gt; [kucoin] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:867,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9a67a53f-343c-4099-bdf7-539edd9b2883&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kucoin] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [kucoin] without API keys &gt; [kucoin] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:329,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ca25beba-98ca-40ee-9d59-536b2ab429be&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kucoin] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [kucoin] without API keys &gt; [kucoin] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:592,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ecb0d371-c90b-4a6d-a020-dc9ca15d128e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;04f4fba8-ff42-43d9-8213-305395a4bf35&quot;,&quot;4d0ce6f6-4e0a-4a92-be3d-3a351219897a&quot;,&quot;e81b5612-ac03-4e82-90a9-434c76c5695e&quot;,&quot;9a67a53f-343c-4099-bdf7-539edd9b2883&quot;,&quot;ca25beba-98ca-40ee-9d59-536b2ab429be&quot;,&quot;ecb0d371-c90b-4a6d-a020-dc9ca15d128e&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:3421,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;d569fc59-8f65-4fe2-bf4c-ef692500a8c7&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;cc412da8-3701-4189-bf44-f70d7bbd1c72&quot;,&quot;title&quot;:&quot;&gt; [idex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/idex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/idex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [idex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [idex] without API keys &gt; [idex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:44,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a649ded3-13d1-4dfc-905c-4484708ff4bf&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [idex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [idex] without API keys &gt; [idex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:253,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0c93e354-3ea1-4be1-9b8b-90ad4e06b2ed&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [idex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [idex] without API keys &gt; [idex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2817,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bb7dfb83-0bfb-491f-b341-31a6085bf684&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [idex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [idex] without API keys &gt; [idex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1623,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b15d893c-fb62-4a06-bd2c-70111dcdd21b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [idex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [idex] without API keys &gt; [idex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1394,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f34381ac-faa6-4354-b027-931b0d5a7649&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [idex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [idex] without API keys &gt; [idex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7405,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1a4a46a8-8332-405a-bc79-74178428cff0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;a649ded3-13d1-4dfc-905c-4484708ff4bf&quot;,&quot;0c93e354-3ea1-4be1-9b8b-90ad4e06b2ed&quot;,&quot;bb7dfb83-0bfb-491f-b341-31a6085bf684&quot;,&quot;b15d893c-fb62-4a06-bd2c-70111dcdd21b&quot;,&quot;f34381ac-faa6-4354-b027-931b0d5a7649&quot;,&quot;1a4a46a8-8332-405a-bc79-74178428cff0&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:13536,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;4b34dcb6-ee56-42e4-a86f-e9d6d8ba2e4c&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;a679a0ab-a576-4b46-9894-91e17d630c74&quot;,&quot;title&quot;:&quot;&gt; [coinmarketcap] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coinmarketcap-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coinmarketcap-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coinmarketcap] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmarketcap] without API keys &gt; [coinmarketcap] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:83,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0a41dd19-eabd-4c80-9d55-8845e040f329&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmarketcap] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmarketcap] without API keys &gt; [coinmarketcap] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:30032,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6d7965c9-430a-415a-b913-6c222b1184de&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmarketcap] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmarketcap] without API keys &gt; [coinmarketcap] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:10023,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4d4302c3-cb17-4a4a-9488-a5e02bfa2aee&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmarketcap] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmarketcap] without API keys &gt; [coinmarketcap] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:23,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cfdf80f2-d4cb-47f0-86f9-0679cad20b06&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmarketcap] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmarketcap] without API keys &gt; [coinmarketcap] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3e020e3a-6426-41c9-bffd-6e0f7ade4a62&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coinmarketcap] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coinmarketcap] without API keys &gt; [coinmarketcap] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2a648e49-fbee-450a-bd3c-fca0babe4fb9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;0a41dd19-eabd-4c80-9d55-8845e040f329&quot;,&quot;6d7965c9-430a-415a-b913-6c222b1184de&quot;,&quot;4d4302c3-cb17-4a4a-9488-a5e02bfa2aee&quot;,&quot;cfdf80f2-d4cb-47f0-86f9-0679cad20b06&quot;,&quot;3e020e3a-6426-41c9-bffd-6e0f7ade4a62&quot;,&quot;2a648e49-fbee-450a-bd3c-fca0babe4fb9&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:40171,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;8b95bb7f-ebf9-4496-bb3f-a62167610765&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;81046881-be69-4402-999a-1c308f9e9ede&quot;,&quot;title&quot;:&quot;&gt; [kuna] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/kuna-test.js&quot;,&quot;file&quot;:&quot;/test/generated/kuna-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [kuna] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [kuna] without API keys &gt; [kuna] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:36,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;affe349d-0d3e-4673-ae7e-e60974f8f825&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kuna] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [kuna] without API keys &gt; [kuna] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:492,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5753f86f-cb12-43b3-b4d3-808f554d7873&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kuna] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [kuna] without API keys &gt; [kuna] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1662,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2191bbcd-0755-401f-be98-3870c4f55daa&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kuna] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [kuna] without API keys &gt; [kuna] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1174,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d61c336d-2f04-4696-991d-f277d87b81e9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kuna] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [kuna] without API keys &gt; [kuna] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:845,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1e800db9-8bb2-49ef-b707-5a3ad53b8c0d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kuna] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [kuna] without API keys &gt; [kuna] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:981,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;549a6f41-ca07-49ab-afb1-082789db17d3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;affe349d-0d3e-4673-ae7e-e60974f8f825&quot;,&quot;5753f86f-cb12-43b3-b4d3-808f554d7873&quot;,&quot;2191bbcd-0755-401f-be98-3870c4f55daa&quot;,&quot;d61c336d-2f04-4696-991d-f277d87b81e9&quot;,&quot;1e800db9-8bb2-49ef-b707-5a3ad53b8c0d&quot;,&quot;549a6f41-ca07-49ab-afb1-082789db17d3&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5190,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;2694d2c4-8f94-44c9-9e98-e01c6733506a&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;fd77da61-625b-4678-b001-380425e88438&quot;,&quot;title&quot;:&quot;&gt; [lakebtc] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/lakebtc-test.js&quot;,&quot;file&quot;:&quot;/test/generated/lakebtc-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [lakebtc] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [lakebtc] without API keys &gt; [lakebtc] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:36,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0f9e2910-894c-4653-ba73-507fb4deb6ca&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lakebtc] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [lakebtc] without API keys &gt; [lakebtc] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:362,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ede91d3f-e6ab-44ba-abaf-99c2c46cf2f2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lakebtc] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [lakebtc] without API keys &gt; [lakebtc] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1775,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;729700b9-1980-449e-a0e8-502da2e1c3e7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lakebtc] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [lakebtc] without API keys &gt; [lakebtc] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1002,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4993939f-0a1e-4c9b-b268-49572f62237f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lakebtc] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [lakebtc] without API keys &gt; [lakebtc] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:995,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5fc541dc-2365-4101-acb6-3565eb1ea118&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lakebtc] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [lakebtc] without API keys &gt; [lakebtc] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1127,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1894a868-a02c-4b71-a51c-66f7186acb8d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;0f9e2910-894c-4653-ba73-507fb4deb6ca&quot;,&quot;ede91d3f-e6ab-44ba-abaf-99c2c46cf2f2&quot;,&quot;729700b9-1980-449e-a0e8-502da2e1c3e7&quot;,&quot;4993939f-0a1e-4c9b-b268-49572f62237f&quot;,&quot;5fc541dc-2365-4101-acb6-3565eb1ea118&quot;,&quot;1894a868-a02c-4b71-a51c-66f7186acb8d&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5297,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;ca2f32b3-dfd3-4905-aaf8-c0516a8cd678&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;699a492e-1380-4e98-975b-7e0405bddb65&quot;,&quot;title&quot;:&quot;&gt; [kkex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/kkex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/kkex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [kkex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [kkex] without API keys &gt; [kkex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:35,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;34253394-94c1-4732-a259-3ccf7b4496a1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kkex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [kkex] without API keys &gt; [kkex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2420,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;48201d7a-674b-4dd4-838c-37c9a22f50c1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kkex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [kkex] without API keys &gt; [kkex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4038,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1ab3e0fe-fe52-411e-9917-021e86e8ea37&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kkex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [kkex] without API keys &gt; [kkex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1951,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8ca0ff8d-7c39-4854-86cc-815a9d86caad&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kkex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [kkex] without API keys &gt; [kkex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:31,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a6c0b779-10bc-4e08-be2d-4159cd22a863&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kkex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [kkex] without API keys &gt; [kkex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:34,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;31a1ef43-c385-40e0-92a8-9f4fe9716f51&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;34253394-94c1-4732-a259-3ccf7b4496a1&quot;,&quot;48201d7a-674b-4dd4-838c-37c9a22f50c1&quot;,&quot;1ab3e0fe-fe52-411e-9917-021e86e8ea37&quot;,&quot;8ca0ff8d-7c39-4854-86cc-815a9d86caad&quot;,&quot;a6c0b779-10bc-4e08-be2d-4159cd22a863&quot;,&quot;31a1ef43-c385-40e0-92a8-9f4fe9716f51&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:8509,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;737d97d7-7659-46a1-8ff1-094e991371b9&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;61c19e7a-9fc2-4784-81d9-b9cdfb5014d2&quot;,&quot;title&quot;:&quot;&gt; [mercado] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/mercado-test.js&quot;,&quot;file&quot;:&quot;/test/generated/mercado-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [mercado] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [mercado] without API keys &gt; [mercado] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:35,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6762e6a7-53cc-468e-acfd-c3d8ca132d9e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mercado] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [mercado] without API keys &gt; [mercado] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e009489a-9d4b-4b70-8a30-d84ffdfdea45&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mercado] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [mercado] without API keys &gt; [mercado] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:162,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e568862a-91a0-430e-be23-4719a72b0283&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mercado] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [mercado] without API keys &gt; [mercado] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:23,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ba349ac7-d693-4ecd-aef6-33758aebc0d7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mercado] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [mercado] without API keys &gt; [mercado] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:824,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9010d986-5909-432a-8df6-8d37eb015284&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mercado] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [mercado] without API keys &gt; [mercado] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1051,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1155ef88-c349-4f1c-8f8a-11d8cdef0ff5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;6762e6a7-53cc-468e-acfd-c3d8ca132d9e&quot;,&quot;e009489a-9d4b-4b70-8a30-d84ffdfdea45&quot;,&quot;e568862a-91a0-430e-be23-4719a72b0283&quot;,&quot;ba349ac7-d693-4ecd-aef6-33758aebc0d7&quot;,&quot;9010d986-5909-432a-8df6-8d37eb015284&quot;,&quot;1155ef88-c349-4f1c-8f8a-11d8cdef0ff5&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2101,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;81b5ca91-a39d-47f0-a5fc-1271f14409ac&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;88196109-d850-4cd1-a24e-2322ad16f57c&quot;,&quot;title&quot;:&quot;&gt; [lykke] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/lykke-test.js&quot;,&quot;file&quot;:&quot;/test/generated/lykke-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [lykke] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [lykke] without API keys &gt; [lykke] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:125,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a630bba2-c275-4f88-8e33-f7f63c5f129c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lykke] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [lykke] without API keys &gt; [lykke] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:686,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;38168e23-db2f-4c44-b732-b0dc63269768&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lykke] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [lykke] without API keys &gt; [lykke] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:660,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7bd520f5-09c2-414f-bda9-dbbb9c77597a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lykke] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [lykke] without API keys &gt; [lykke] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:10,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;34464aed-c0b4-41bc-a8bd-e640cc6136d8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lykke] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [lykke] without API keys &gt; [lykke] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:107,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2448bca9-d2ac-4865-82dc-3ff0db19b67a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lykke] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [lykke] without API keys &gt; [lykke] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1019,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;248f3752-294e-4cc9-b81e-ca56484137f4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;a630bba2-c275-4f88-8e33-f7f63c5f129c&quot;,&quot;38168e23-db2f-4c44-b732-b0dc63269768&quot;,&quot;7bd520f5-09c2-414f-bda9-dbbb9c77597a&quot;,&quot;34464aed-c0b4-41bc-a8bd-e640cc6136d8&quot;,&quot;2448bca9-d2ac-4865-82dc-3ff0db19b67a&quot;,&quot;248f3752-294e-4cc9-b81e-ca56484137f4&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2607,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;30e271a6-3045-4ce1-a18b-7ad2b83a800b&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;3f7b192f-582d-4cb7-910b-75883bac7b1f&quot;,&quot;title&quot;:&quot;&gt; [mixcoins] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/mixcoins-test.js&quot;,&quot;file&quot;:&quot;/test/generated/mixcoins-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [mixcoins] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [mixcoins] without API keys &gt; [mixcoins] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:33,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3b65ac56-873f-4ff0-a06b-58906825370c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mixcoins] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [mixcoins] without API keys &gt; [mixcoins] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c2430813-565e-4512-bf9f-04250770b1c7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mixcoins] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [mixcoins] without API keys &gt; [mixcoins] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:306,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;776812c4-c1f9-4fea-9345-62ed509f641c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mixcoins] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [mixcoins] without API keys &gt; [mixcoins] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:15,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5cb5eb49-199d-41be-8789-751d3260e25d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mixcoins] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [mixcoins] without API keys &gt; [mixcoins] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1379,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;17d61c30-ec70-4b42-8b34-eeafbd1335a9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [mixcoins] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [mixcoins] without API keys &gt; [mixcoins] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1511,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ec28e1aa-6b55-4a2a-85be-ef0510718284&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;3b65ac56-873f-4ff0-a06b-58906825370c&quot;,&quot;c2430813-565e-4512-bf9f-04250770b1c7&quot;,&quot;776812c4-c1f9-4fea-9345-62ed509f641c&quot;,&quot;5cb5eb49-199d-41be-8789-751d3260e25d&quot;,&quot;17d61c30-ec70-4b42-8b34-eeafbd1335a9&quot;,&quot;ec28e1aa-6b55-4a2a-85be-ef0510718284&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:3248,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;ee1dbb2a-d03e-4bcf-bc47-abaa412dfe6d&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;f790cd7e-f28d-4ce5-9f74-e355a515f75b&quot;,&quot;title&quot;:&quot;&gt; [luno] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/luno-test.js&quot;,&quot;file&quot;:&quot;/test/generated/luno-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [luno] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [luno] without API keys &gt; [luno] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:37,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7799a18c-f6f5-46ef-96c7-e23566695b59&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [luno] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [luno] without API keys &gt; [luno] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:763,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;525c4d69-4d54-4fa8-9df7-6d2aff85461c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [luno] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [luno] without API keys &gt; [luno] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1327,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6a9baf86-e88f-49c0-a230-11a6c8ee0dfd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [luno] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [luno] without API keys &gt; [luno] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1019,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;14128366-8d74-4a7a-aec1-f85306dd6a42&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [luno] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [luno] without API keys &gt; [luno] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:992,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;edc2ff9b-70ce-4d65-a04f-47f65aa8a82f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [luno] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [luno] without API keys &gt; [luno] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1052,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2b01bed4-d43c-4874-b34a-8d9e87f23089&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;7799a18c-f6f5-46ef-96c7-e23566695b59&quot;,&quot;525c4d69-4d54-4fa8-9df7-6d2aff85461c&quot;,&quot;6a9baf86-e88f-49c0-a230-11a6c8ee0dfd&quot;,&quot;14128366-8d74-4a7a-aec1-f85306dd6a42&quot;,&quot;edc2ff9b-70ce-4d65-a04f-47f65aa8a82f&quot;,&quot;2b01bed4-d43c-4874-b34a-8d9e87f23089&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5190,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;63730e88-8697-4d57-9772-f89a6f05067f&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;cc01cc1c-cac2-4779-aa92-2142af5bf742&quot;,&quot;title&quot;:&quot;&gt; [lbank] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/lbank-test.js&quot;,&quot;file&quot;:&quot;/test/generated/lbank-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [lbank] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [lbank] without API keys &gt; [lbank] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:32,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c5de44d0-f774-49e5-a56f-b4abd9f15d3a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lbank] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [lbank] without API keys &gt; [lbank] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1440,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b8d2bdec-4fd9-4ae2-a3b5-c3f8fb98df78&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lbank] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [lbank] without API keys &gt; [lbank] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2770,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6684b656-8124-4812-87e0-0957c880a565&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lbank] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [lbank] without API keys &gt; [lbank] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2245,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3d8986b6-0b5c-49ae-8b87-9c9168d36bf0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lbank] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [lbank] without API keys &gt; [lbank] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1758,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;19c9c76a-4c18-4150-9dca-20dcbb9408c2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [lbank] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [lbank] without API keys &gt; [lbank] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2012,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;78a0f01e-2800-4760-b828-089c90d3d0f1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;c5de44d0-f774-49e5-a56f-b4abd9f15d3a&quot;,&quot;b8d2bdec-4fd9-4ae2-a3b5-c3f8fb98df78&quot;,&quot;6684b656-8124-4812-87e0-0957c880a565&quot;,&quot;3d8986b6-0b5c-49ae-8b87-9c9168d36bf0&quot;,&quot;19c9c76a-4c18-4150-9dca-20dcbb9408c2&quot;,&quot;78a0f01e-2800-4760-b828-089c90d3d0f1&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:10257,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;6b1f1bbd-615e-4d77-ac6b-25320dbee5d2&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;73ba438a-b9f9-48ca-81ef-e95eca95c510&quot;,&quot;title&quot;:&quot;&gt; [livecoin] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/livecoin-test.js&quot;,&quot;file&quot;:&quot;/test/generated/livecoin-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [livecoin] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [livecoin] without API keys &gt; [livecoin] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:37,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ee0d7e18-3802-46a3-8f34-4e4e683e7010&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [livecoin] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [livecoin] without API keys &gt; [livecoin] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1309,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e1471de6-62a9-4e03-9cfe-62b29212f5dc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [livecoin] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [livecoin] without API keys &gt; [livecoin] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4051,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d10c0ee8-525c-43a1-ba6b-1e0481e097fe&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [livecoin] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [livecoin] without API keys &gt; [livecoin] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1047,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;688c84b5-3f1f-499a-993e-55eb6abd3c86&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [livecoin] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [livecoin] without API keys &gt; [livecoin] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:960,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1836f917-4da6-439b-bb29-312c30d6465d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [livecoin] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [livecoin] without API keys &gt; [livecoin] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1125,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b71fb6c0-5d05-4489-99e1-6bf9a39f76dd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;ee0d7e18-3802-46a3-8f34-4e4e683e7010&quot;,&quot;e1471de6-62a9-4e03-9cfe-62b29212f5dc&quot;,&quot;d10c0ee8-525c-43a1-ba6b-1e0481e097fe&quot;,&quot;688c84b5-3f1f-499a-993e-55eb6abd3c86&quot;,&quot;1836f917-4da6-439b-bb29-312c30d6465d&quot;,&quot;b71fb6c0-5d05-4489-99e1-6bf9a39f76dd&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:8529,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;cf71f1b4-77a9-4a38-8cf1-1a467b8fcbbb&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;fd0a7a83-f7eb-49da-b5fd-5257e688d1b6&quot;,&quot;title&quot;:&quot;&gt; [liquid] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/liquid-test.js&quot;,&quot;file&quot;:&quot;/test/generated/liquid-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [liquid] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [liquid] without API keys &gt; [liquid] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:38,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;16dc900d-2893-4782-b757-5d34de5482e8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [liquid] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [liquid] without API keys &gt; [liquid] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2287,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5fd7cc42-1442-43cb-b57f-206f0212338a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [liquid] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [liquid] without API keys &gt; [liquid] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5040,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7f7e79b5-c996-4b11-ae7e-23a1aa5aea18&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [liquid] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [liquid] without API keys &gt; [liquid] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1353,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6de99ffe-dde4-40d9-878e-6a965dff8f98&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [liquid] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [liquid] without API keys &gt; [liquid] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:334,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;14441539-14d7-439d-b5e2-2b3ee3c47f18&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [liquid] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [liquid] without API keys &gt; [liquid] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1171,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;49e4071b-d8bb-433e-bf78-550ce710a111&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;16dc900d-2893-4782-b757-5d34de5482e8&quot;,&quot;5fd7cc42-1442-43cb-b57f-206f0212338a&quot;,&quot;7f7e79b5-c996-4b11-ae7e-23a1aa5aea18&quot;,&quot;6de99ffe-dde4-40d9-878e-6a965dff8f98&quot;,&quot;14441539-14d7-439d-b5e2-2b3ee3c47f18&quot;,&quot;49e4071b-d8bb-433e-bf78-550ce710a111&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:10223,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;7511e5a7-a892-4f19-bfed-063675a5a9d3&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;c3e04a03-bc58-4c78-822b-0207d3982766&quot;,&quot;title&quot;:&quot;&gt; [latoken] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/latoken-test.js&quot;,&quot;file&quot;:&quot;/test/generated/latoken-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [latoken] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [latoken] without API keys &gt; [latoken] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:45,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b0ada7cd-dc0e-4f47-8e03-366d01848777&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [latoken] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [latoken] without API keys &gt; [latoken] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:899,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;987b3f4f-1898-45aa-860f-73213da093a8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [latoken] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [latoken] without API keys &gt; [latoken] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5274,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f0e3436c-ac31-4541-9d71-4ac1b2d7c1db&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [latoken] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [latoken] without API keys &gt; [latoken] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2466,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2b2fc15b-fbfd-4081-82ff-386734a2d8e1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [latoken] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [latoken] without API keys &gt; [latoken] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1636,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;84395492-8c6e-43c5-8a58-5fcc2a576bbe&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [latoken] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [latoken] without API keys &gt; [latoken] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2017,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;083ebc02-a8f9-4edb-8962-acf51b638b3d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;b0ada7cd-dc0e-4f47-8e03-366d01848777&quot;,&quot;987b3f4f-1898-45aa-860f-73213da093a8&quot;,&quot;f0e3436c-ac31-4541-9d71-4ac1b2d7c1db&quot;,&quot;2b2fc15b-fbfd-4081-82ff-386734a2d8e1&quot;,&quot;84395492-8c6e-43c5-8a58-5fcc2a576bbe&quot;,&quot;083ebc02-a8f9-4edb-8962-acf51b638b3d&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:12337,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;ebe0e3ac-75c3-4238-ad30-78d64e35ad24&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;0e4e599a-d7e2-4e5d-8c0b-1e362ad135ca&quot;,&quot;title&quot;:&quot;&gt; [okcoin] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/okcoin-test.js&quot;,&quot;file&quot;:&quot;/test/generated/okcoin-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [okcoin] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [okcoin] without API keys &gt; [okcoin] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:94,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;88bfa765-792e-41ee-ba96-33dd406811ea&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okcoin] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [okcoin] without API keys &gt; [okcoin] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:344,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;47f2b677-f76c-41a1-b6ee-a97bd4f269b4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okcoin] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [okcoin] without API keys &gt; [okcoin] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1866,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8383d64d-2c66-46aa-bf4c-a9805951efee&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okcoin] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [okcoin] without API keys &gt; [okcoin] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1014,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;17be5495-2e3a-419b-b231-7a0574c25b18&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okcoin] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [okcoin] without API keys &gt; [okcoin] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:977,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3a25562f-bea7-45f1-b69d-90173f643cad&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okcoin] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [okcoin] without API keys &gt; [okcoin] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1027,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;96f08ee4-0da2-451a-a32e-7b1adebd204a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;88bfa765-792e-41ee-ba96-33dd406811ea&quot;,&quot;47f2b677-f76c-41a1-b6ee-a97bd4f269b4&quot;,&quot;8383d64d-2c66-46aa-bf4c-a9805951efee&quot;,&quot;17be5495-2e3a-419b-b231-7a0574c25b18&quot;,&quot;3a25562f-bea7-45f1-b69d-90173f643cad&quot;,&quot;96f08ee4-0da2-451a-a32e-7b1adebd204a&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5322,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;2c137a14-a07c-4ef5-8087-d6cbf9e396c7&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;b47e1d01-0c43-4962-aa64-fb23d82f98ab&quot;,&quot;title&quot;:&quot;&gt; [paymium] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/paymium-test.js&quot;,&quot;file&quot;:&quot;/test/generated/paymium-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [paymium] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [paymium] without API keys &gt; [paymium] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:40,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a46d176a-f405-4fc8-bb9a-c96a5247124c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [paymium] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [paymium] without API keys &gt; [paymium] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:82,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;432a115e-52d0-4298-921c-f21613ee1740&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [paymium] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [paymium] without API keys &gt; [paymium] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:629,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ecbd43da-9697-4efc-866c-0c44bb62e5fc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [paymium] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [paymium] without API keys &gt; [paymium] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:13,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c7993e13-8da8-426f-ad62-8973a7fddc06&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [paymium] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [paymium] without API keys &gt; [paymium] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2836,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bc8cf023-f930-4161-aea0-fdbefe14b09b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [paymium] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [paymium] without API keys &gt; [paymium] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:784,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;edd5953e-77e7-4172-8be8-1f1a63ce0caa&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;a46d176a-f405-4fc8-bb9a-c96a5247124c&quot;,&quot;432a115e-52d0-4298-921c-f21613ee1740&quot;,&quot;ecbd43da-9697-4efc-866c-0c44bb62e5fc&quot;,&quot;c7993e13-8da8-426f-ad62-8973a7fddc06&quot;,&quot;bc8cf023-f930-4161-aea0-fdbefe14b09b&quot;,&quot;edd5953e-77e7-4172-8be8-1f1a63ce0caa&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4384,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;322b3423-f3f4-424d-b162-abe1f9e12b74&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;cee0bd4f-7101-4fe9-8836-224897f3070d&quot;,&quot;title&quot;:&quot;&gt; [probit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/probit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/probit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [probit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [probit] without API keys &gt; [probit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:43,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0617718b-9aff-4e0f-88c1-b8fb0d663b04&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [probit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [probit] without API keys &gt; [probit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1225,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;19d099af-6e36-4896-a2ef-b0cbe1344a34&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [probit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [probit] without API keys &gt; [probit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2536,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;42226fa1-58bf-43cb-8d7a-4d4aa6f7b7a0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [probit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [probit] without API keys &gt; [probit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:294,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a2c3d991-7d4a-42d9-ab6c-7305322fc8a9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [probit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [probit] without API keys &gt; [probit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:285,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c8906d12-8691-41ae-ba92-aad5cbad1617&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [probit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [probit] without API keys &gt; [probit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:282,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c7466ec2-6c9e-45c6-9c1b-be0367068d81&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;0617718b-9aff-4e0f-88c1-b8fb0d663b04&quot;,&quot;19d099af-6e36-4896-a2ef-b0cbe1344a34&quot;,&quot;42226fa1-58bf-43cb-8d7a-4d4aa6f7b7a0&quot;,&quot;a2c3d991-7d4a-42d9-ab6c-7305322fc8a9&quot;,&quot;c8906d12-8691-41ae-ba92-aad5cbad1617&quot;,&quot;c7466ec2-6c9e-45c6-9c1b-be0367068d81&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4665,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;35d29322-ff2c-4727-ae13-8967e0833c9d&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;9f440937-af6b-4ed8-bc9f-af1d6ef773ae&quot;,&quot;title&quot;:&quot;&gt; [poloniex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/poloniex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/poloniex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [poloniex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [poloniex] without API keys &gt; [poloniex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:42,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;843e7932-4621-498f-8a45-78335f446cb6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [poloniex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [poloniex] without API keys &gt; [poloniex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:356,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;37c7792b-b13c-49a8-b3d4-81b2c1996045&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [poloniex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [poloniex] without API keys &gt; [poloniex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3182,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a2382950-14d2-429f-ab45-a78386fc7ff4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [poloniex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [poloniex] without API keys &gt; [poloniex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1079,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9b09117b-0f75-400e-8408-06e43cb11b32&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [poloniex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [poloniex] without API keys &gt; [poloniex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:991,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;43d17459-88b7-42fb-abb8-d95fd4a79b09&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [poloniex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [poloniex] without API keys &gt; [poloniex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:645,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fb2d9b05-a0b7-4ff6-a030-3284ec85e907&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;843e7932-4621-498f-8a45-78335f446cb6&quot;,&quot;37c7792b-b13c-49a8-b3d4-81b2c1996045&quot;,&quot;a2382950-14d2-429f-ab45-a78386fc7ff4&quot;,&quot;9b09117b-0f75-400e-8408-06e43cb11b32&quot;,&quot;43d17459-88b7-42fb-abb8-d95fd4a79b09&quot;,&quot;fb2d9b05-a0b7-4ff6-a030-3284ec85e907&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6295,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;c6e3fc37-04a5-4bb6-90b8-19de19de07dc&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;b7976a2b-c760-4855-a444-f577fc039073&quot;,&quot;title&quot;:&quot;&gt; [stex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/stex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/stex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [stex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [stex] without API keys &gt; [stex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:45,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;be31933e-60dd-4497-9da6-d2aec0bf606a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [stex] without API keys &gt; [stex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:458,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;712e0212-f3dc-42e7-b8c0-88daead20492&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [stex] without API keys &gt; [stex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1648,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c928cc98-ca55-4555-bd08-019e7d3548d6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [stex] without API keys &gt; [stex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:513,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b3edeb54-8111-47b9-962e-4c90cf76c9b8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [stex] without API keys &gt; [stex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:242,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;53e48ce2-81f6-4af8-b8f5-09dcdecf2fcf&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [stex] without API keys &gt; [stex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:459,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cfc0b732-9398-42c2-b32a-76e18aacb780&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;be31933e-60dd-4497-9da6-d2aec0bf606a&quot;,&quot;712e0212-f3dc-42e7-b8c0-88daead20492&quot;,&quot;c928cc98-ca55-4555-bd08-019e7d3548d6&quot;,&quot;b3edeb54-8111-47b9-962e-4c90cf76c9b8&quot;,&quot;53e48ce2-81f6-4af8-b8f5-09dcdecf2fcf&quot;,&quot;cfc0b732-9398-42c2-b32a-76e18aacb780&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:3365,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;76be08c4-ac0e-4046-b49e-c3cb2f6538c4&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;c49b8d1f-1bb6-469b-8752-c64a0ad3b5b5&quot;,&quot;title&quot;:&quot;&gt; [coolcoin] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/coolcoin-test.js&quot;,&quot;file&quot;:&quot;/test/generated/coolcoin-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [coolcoin] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [coolcoin] without API keys &gt; [coolcoin] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:196,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5e9c0c96-88e9-4df9-ab65-7191fb2c167c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coolcoin] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [coolcoin] without API keys &gt; [coolcoin] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:40014,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a79492a6-7b84-4eec-b39b-3a96d2dd228a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coolcoin] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [coolcoin] without API keys &gt; [coolcoin] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:10088,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fd108cc6-bc56-4be5-83f0-d2a342d3e51f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coolcoin] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [coolcoin] without API keys &gt; [coolcoin] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:17,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b4ade2ac-95e9-4910-98b4-621859c1a187&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coolcoin] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [coolcoin] without API keys &gt; [coolcoin] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:55,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3403bdba-162d-446e-a1f5-f5bebf4171f6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [coolcoin] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [coolcoin] without API keys &gt; [coolcoin] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:37,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f7d1ba12-6452-4df4-a780-33e89817bb2a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;5e9c0c96-88e9-4df9-ab65-7191fb2c167c&quot;,&quot;a79492a6-7b84-4eec-b39b-3a96d2dd228a&quot;,&quot;fd108cc6-bc56-4be5-83f0-d2a342d3e51f&quot;,&quot;b4ade2ac-95e9-4910-98b4-621859c1a187&quot;,&quot;3403bdba-162d-446e-a1f5-f5bebf4171f6&quot;,&quot;f7d1ba12-6452-4df4-a780-33e89817bb2a&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:50407,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;8cb848c2-04f0-4864-98dd-3132c2d20df7&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;a32ccaf8-4a21-4942-9c89-a1c0bd88a5ee&quot;,&quot;title&quot;:&quot;&gt; [southxchange] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/southxchange-test.js&quot;,&quot;file&quot;:&quot;/test/generated/southxchange-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [southxchange] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [southxchange] without API keys &gt; [southxchange] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:35,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;44a827d6-9ef4-4930-b29a-81aa602b21b9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [southxchange] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [southxchange] without API keys &gt; [southxchange] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:239,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9fabe968-1045-4dbd-9bd5-f78dbf918d67&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [southxchange] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [southxchange] without API keys &gt; [southxchange] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1799,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;26a8e09a-29ce-4077-b4d5-c7bda7c10a50&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [southxchange] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [southxchange] without API keys &gt; [southxchange] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1039,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ac035c54-732c-4e8e-9e6c-681b64b19410&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [southxchange] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [southxchange] without API keys &gt; [southxchange] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:932,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3bb2fa46-4be2-4f20-bea3-7851020c5099&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [southxchange] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [southxchange] without API keys &gt; [southxchange] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1015,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;33c2c5e2-c93a-462f-b263-c527e32f1493&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;44a827d6-9ef4-4930-b29a-81aa602b21b9&quot;,&quot;9fabe968-1045-4dbd-9bd5-f78dbf918d67&quot;,&quot;26a8e09a-29ce-4077-b4d5-c7bda7c10a50&quot;,&quot;ac035c54-732c-4e8e-9e6c-681b64b19410&quot;,&quot;3bb2fa46-4be2-4f20-bea3-7851020c5099&quot;,&quot;33c2c5e2-c93a-462f-b263-c527e32f1493&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5059,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;86fd67b6-44c3-482f-926f-4af245445935&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;9c354ac0-2baf-4db2-99e4-88496620cedf&quot;,&quot;title&quot;:&quot;&gt; [qtrade] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/qtrade-test.js&quot;,&quot;file&quot;:&quot;/test/generated/qtrade-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [qtrade] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [qtrade] without API keys &gt; [qtrade] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:41,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6c74819e-3d47-4846-9520-5ee361cef8f2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [qtrade] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [qtrade] without API keys &gt; [qtrade] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:265,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;042e7c2d-9e50-4737-980b-a5e78cc5655c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [qtrade] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [qtrade] without API keys &gt; [qtrade] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2766,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f793d67f-a8c1-4864-8f04-47f81ca4978b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [qtrade] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [qtrade] without API keys &gt; [qtrade] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1120,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f99c2c26-1499-49ba-a8ea-e8e7ea879b53&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [qtrade] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [qtrade] without API keys &gt; [qtrade] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:883,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;934ce979-a893-4b13-a03a-9634e1616d62&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [qtrade] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [qtrade] without API keys &gt; [qtrade] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1187,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;55ef37c0-db78-47be-865e-09ba66505871&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;6c74819e-3d47-4846-9520-5ee361cef8f2&quot;,&quot;042e7c2d-9e50-4737-980b-a5e78cc5655c&quot;,&quot;f793d67f-a8c1-4864-8f04-47f81ca4978b&quot;,&quot;f99c2c26-1499-49ba-a8ea-e8e7ea879b53&quot;,&quot;934ce979-a893-4b13-a03a-9634e1616d62&quot;,&quot;55ef37c0-db78-47be-865e-09ba66505871&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6262,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;d6d133de-3348-45fa-ae18-f1679f0dcb0c&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;3f4f8ec7-3bf3-4f85-8cb4-a6de9474fb09&quot;,&quot;title&quot;:&quot;&gt; [stronghold] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/stronghold-test.js&quot;,&quot;file&quot;:&quot;/test/generated/stronghold-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [stronghold] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [stronghold] without API keys &gt; [stronghold] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:46,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;40302149-839d-4f9e-a8a2-8d2298d618ef&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stronghold] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [stronghold] without API keys &gt; [stronghold] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3057,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5cefea60-6aca-446b-b475-5a06b4dfc264&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stronghold] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [stronghold] without API keys &gt; [stronghold] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:8,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2b58f87b-dfdb-48cf-bec5-5d99f77079fb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stronghold] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [stronghold] without API keys &gt; [stronghold] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:8,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;203d75a7-1bb3-4110-9a14-e9229de6834f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stronghold] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [stronghold] without API keys &gt; [stronghold] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2006,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e08f4301-b0c9-49d3-9b0a-e85e7b649140&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [stronghold] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [stronghold] without API keys &gt; [stronghold] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:30,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;25322adc-08a8-4a4f-84e2-b23a1da9cd9e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;40302149-839d-4f9e-a8a2-8d2298d618ef&quot;,&quot;5cefea60-6aca-446b-b475-5a06b4dfc264&quot;,&quot;2b58f87b-dfdb-48cf-bec5-5d99f77079fb&quot;,&quot;203d75a7-1bb3-4110-9a14-e9229de6834f&quot;,&quot;e08f4301-b0c9-49d3-9b0a-e85e7b649140&quot;,&quot;25322adc-08a8-4a4f-84e2-b23a1da9cd9e&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5155,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;dcc2a425-a153-4057-8d30-6327fdbe2523&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;667075d6-fa67-41e5-a631-5d9fa6487d56&quot;,&quot;title&quot;:&quot;&gt; [oceanex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/oceanex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/oceanex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [oceanex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [oceanex] without API keys &gt; [oceanex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:292,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;94feba6a-6574-4b5e-8e59-dfdf03ce1788&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [oceanex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [oceanex] without API keys &gt; [oceanex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:420,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;593e6d88-8f64-44d5-9c04-2e83e2037de1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [oceanex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [oceanex] without API keys &gt; [oceanex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6237,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;120262bf-6c5c-4951-81bb-5d85f5b9b142&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [oceanex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [oceanex] without API keys &gt; [oceanex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3296,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1859dcf1-ca7a-4bf6-9940-862219bb420f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [oceanex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [oceanex] without API keys &gt; [oceanex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2261,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;212e5779-07ee-490b-ad89-eac040df1fc6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [oceanex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [oceanex] without API keys &gt; [oceanex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3002,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;900166f3-62a8-4bd5-a57f-6cbee4049538&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;94feba6a-6574-4b5e-8e59-dfdf03ce1788&quot;,&quot;593e6d88-8f64-44d5-9c04-2e83e2037de1&quot;,&quot;120262bf-6c5c-4951-81bb-5d85f5b9b142&quot;,&quot;1859dcf1-ca7a-4bf6-9940-862219bb420f&quot;,&quot;212e5779-07ee-490b-ad89-eac040df1fc6&quot;,&quot;900166f3-62a8-4bd5-a57f-6cbee4049538&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:15508,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;ae35bb57-556f-49d9-9000-a2bc890807ed&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;b8d68afe-1513-40b5-8853-884b34c7a62c&quot;,&quot;title&quot;:&quot;&gt; [surbitcoin] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/surbitcoin-test.js&quot;,&quot;file&quot;:&quot;/test/generated/surbitcoin-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [surbitcoin] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [surbitcoin] without API keys &gt; [surbitcoin] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:60,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a313a540-9315-4d97-a7c5-0fa6241cf62e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [surbitcoin] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [surbitcoin] without API keys &gt; [surbitcoin] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:17,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c85b8d6f-b7a2-4c60-9ca3-a7b645e14c82&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [surbitcoin] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [surbitcoin] without API keys &gt; [surbitcoin] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:188,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6847f03f-352a-4014-bef0-8ab63df4e4db&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [surbitcoin] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [surbitcoin] without API keys &gt; [surbitcoin] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:48,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1d5980bf-41c2-43db-ae53-97ae4b091531&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [surbitcoin] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [surbitcoin] without API keys &gt; [surbitcoin] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:753,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a749aed3-a79d-4511-8886-7237db6a552a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [surbitcoin] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [surbitcoin] without API keys &gt; [surbitcoin] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4026,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b003ee74-c227-4095-b22d-cc40c330d98c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;a313a540-9315-4d97-a7c5-0fa6241cf62e&quot;,&quot;c85b8d6f-b7a2-4c60-9ca3-a7b645e14c82&quot;,&quot;6847f03f-352a-4014-bef0-8ab63df4e4db&quot;,&quot;1d5980bf-41c2-43db-ae53-97ae4b091531&quot;,&quot;a749aed3-a79d-4511-8886-7237db6a552a&quot;,&quot;b003ee74-c227-4095-b22d-cc40c330d98c&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5092,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;2eebe041-e4a9-4d24-8ae8-ff232a666e24&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;546f46a0-34b2-4b75-9fe9-f697ea9cbf26&quot;,&quot;title&quot;:&quot;&gt; [therock] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/therock-test.js&quot;,&quot;file&quot;:&quot;/test/generated/therock-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [therock] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [therock] without API keys &gt; [therock] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:46,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e10bfe1d-c79b-4280-b3f0-6d750a44e9e2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [therock] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [therock] without API keys &gt; [therock] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:488,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f639528f-73e1-4bd6-b162-730b505e7ba3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [therock] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [therock] without API keys &gt; [therock] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1598,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2c47755d-c241-4152-ac52-db019ae74f49&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [therock] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [therock] without API keys &gt; [therock] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1056,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d2892b9c-6ccc-4fd4-94a9-99e2cef89e8f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [therock] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [therock] without API keys &gt; [therock] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1196,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2446c3df-46ba-479c-a879-0e9148d229cb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [therock] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [therock] without API keys &gt; [therock] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:822,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;aa7a1bec-a8db-4e42-9b14-42479cab7524&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;e10bfe1d-c79b-4280-b3f0-6d750a44e9e2&quot;,&quot;f639528f-73e1-4bd6-b162-730b505e7ba3&quot;,&quot;2c47755d-c241-4152-ac52-db019ae74f49&quot;,&quot;d2892b9c-6ccc-4fd4-94a9-99e2cef89e8f&quot;,&quot;2446c3df-46ba-479c-a879-0e9148d229cb&quot;,&quot;aa7a1bec-a8db-4e42-9b14-42479cab7524&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5206,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;cebfb8e7-bbac-42d2-8dae-c7d7368b190c&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;fe3995af-40b1-422a-a62c-02fe1b264255&quot;,&quot;title&quot;:&quot;&gt; [tidebit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/tidebit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/tidebit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [tidebit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidebit] without API keys &gt; [tidebit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:37,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;72ab00c8-ea8a-41dd-8d71-dd52bad11b29&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidebit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidebit] without API keys &gt; [tidebit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:894,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6e77943a-9ece-4339-b4e3-d0444d1185c1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidebit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidebit] without API keys &gt; [tidebit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2166,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;37626d1b-f3d8-4689-880d-82b6f6429507&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidebit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidebit] without API keys &gt; [tidebit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:908,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ca273ee7-b3df-4d2c-82b7-d8ba97876163&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidebit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidebit] without API keys &gt; [tidebit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:928,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;85c27553-1148-4b7f-9fff-bbe5e3ff5b82&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidebit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidebit] without API keys &gt; [tidebit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1195,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;440b923a-7530-4431-aae0-d2c48e69b6cf&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;72ab00c8-ea8a-41dd-8d71-dd52bad11b29&quot;,&quot;6e77943a-9ece-4339-b4e3-d0444d1185c1&quot;,&quot;37626d1b-f3d8-4689-880d-82b6f6429507&quot;,&quot;ca273ee7-b3df-4d2c-82b7-d8ba97876163&quot;,&quot;85c27553-1148-4b7f-9fff-bbe5e3ff5b82&quot;,&quot;440b923a-7530-4431-aae0-d2c48e69b6cf&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:6128,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;051f72df-b519-4f79-88bc-5b21e5b03bd1&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;00dd906b-9a9b-4a14-a32a-1e3598179463&quot;,&quot;title&quot;:&quot;&gt; [okex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/okex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/okex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [okex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [okex] without API keys &gt; [okex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:39,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8f6c9310-93dc-4238-81c3-28c05ad5af9b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [okex] without API keys &gt; [okex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6307,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2afad9ed-0d34-42d1-848a-2d8a3904dc26&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [okex] without API keys &gt; [okex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7984,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;abd9e088-253f-4f2e-acdc-b246e653275d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [okex] without API keys &gt; [okex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:973,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;58c07f48-69d2-4064-b9ad-b719da1faaa6&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [okex] without API keys &gt; [okex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:941,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;90a4dfb0-2113-4419-b02c-118f3841a320&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [okex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [okex] without API keys &gt; [okex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1011,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e18f55cb-78ae-4103-86d0-93343abb1097&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;8f6c9310-93dc-4238-81c3-28c05ad5af9b&quot;,&quot;2afad9ed-0d34-42d1-848a-2d8a3904dc26&quot;,&quot;abd9e088-253f-4f2e-acdc-b246e653275d&quot;,&quot;58c07f48-69d2-4064-b9ad-b719da1faaa6&quot;,&quot;90a4dfb0-2113-4419-b02c-118f3841a320&quot;,&quot;e18f55cb-78ae-4103-86d0-93343abb1097&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:17255,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;259ec145-0801-436a-af3a-1b129b5b7f47&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;0f906118-a630-43a9-93ef-de7111d6cc2b&quot;,&quot;title&quot;:&quot;&gt; [vaultoro] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/vaultoro-test.js&quot;,&quot;file&quot;:&quot;/test/generated/vaultoro-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [vaultoro] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [vaultoro] without API keys &gt; [vaultoro] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:36,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2dad91bf-7b2b-4ce7-8a82-21d835f59f3f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vaultoro] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [vaultoro] without API keys &gt; [vaultoro] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3031,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1235a909-f160-48e0-9cab-156bfedc597d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vaultoro] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [vaultoro] without API keys &gt; [vaultoro] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e7ae4578-0341-4281-9341-3af6f52fd90e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vaultoro] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [vaultoro] without API keys &gt; [vaultoro] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;eb70a612-385e-4d99-888c-b9e628a10198&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vaultoro] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [vaultoro] without API keys &gt; [vaultoro] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1000,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f9289314-a14b-4b9e-8730-16bc6b2fd4d8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vaultoro] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [vaultoro] without API keys &gt; [vaultoro] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:34,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;8565ec9c-aa4e-4b98-93b4-5c88ba830594&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;2dad91bf-7b2b-4ce7-8a82-21d835f59f3f&quot;,&quot;1235a909-f160-48e0-9cab-156bfedc597d&quot;,&quot;e7ae4578-0341-4281-9341-3af6f52fd90e&quot;,&quot;eb70a612-385e-4d99-888c-b9e628a10198&quot;,&quot;f9289314-a14b-4b9e-8730-16bc6b2fd4d8&quot;,&quot;8565ec9c-aa4e-4b98-93b4-5c88ba830594&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:4111,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;bcf3bbe2-e16c-4336-8d37-73eb6818f048&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;dca4cc2a-1d71-4774-b14f-2ae47c594c27&quot;,&quot;title&quot;:&quot;&gt; [upbit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/upbit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/upbit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [upbit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [upbit] without API keys &gt; [upbit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:55,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2f9acc14-5e28-45b8-9dc6-e776f34317e0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [upbit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [upbit] without API keys &gt; [upbit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1200,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fff063b7-7782-455e-a936-7e966d22d309&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [upbit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [upbit] without API keys &gt; [upbit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1205,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e8858ff4-4954-49de-8396-10d1ee0dea55&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [upbit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [upbit] without API keys &gt; [upbit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1425,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cd07fd7f-13e9-4645-b322-529366f695e9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [upbit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [upbit] without API keys &gt; [upbit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:586,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6e1d4fa8-f3c6-4e32-92eb-65d9de8a547f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [upbit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [upbit] without API keys &gt; [upbit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:991,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ab2ba1b8-a371-4905-8874-06420b203e6c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;2f9acc14-5e28-45b8-9dc6-e776f34317e0&quot;,&quot;fff063b7-7782-455e-a936-7e966d22d309&quot;,&quot;e8858ff4-4954-49de-8396-10d1ee0dea55&quot;,&quot;cd07fd7f-13e9-4645-b322-529366f695e9&quot;,&quot;6e1d4fa8-f3c6-4e32-92eb-65d9de8a547f&quot;,&quot;ab2ba1b8-a371-4905-8874-06420b203e6c&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5462,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;535634d0-dbaf-4447-be8c-3a0f9b05f5a2&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;b8a2b5b0-10e9-4814-aa64-4ff898b2b762&quot;,&quot;title&quot;:&quot;&gt; [kraken] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/kraken-test.js&quot;,&quot;file&quot;:&quot;/test/generated/kraken-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [kraken] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [kraken] without API keys &gt; [kraken] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:350,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;65480cb2-d781-4ddc-af56-210fa3d459a4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kraken] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [kraken] without API keys &gt; [kraken] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:21109,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0d825bff-d2e2-4088-b894-b5c77d5387b9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kraken] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [kraken] without API keys &gt; [kraken] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:9078,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;00d88cec-964f-4e12-a4a9-717128d28681&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kraken] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [kraken] without API keys &gt; [kraken] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:18,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a30b9e96-60f6-451d-a960-15d7a3c297e1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kraken] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [kraken] without API keys &gt; [kraken] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:12,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;63bc7405-0049-448c-9314-6ad025a883c0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [kraken] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [kraken] without API keys &gt; [kraken] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:10,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bee9aa55-82af-4b72-9b37-e4d6b2ed9634&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;65480cb2-d781-4ddc-af56-210fa3d459a4&quot;,&quot;0d825bff-d2e2-4088-b894-b5c77d5387b9&quot;,&quot;00d88cec-964f-4e12-a4a9-717128d28681&quot;,&quot;a30b9e96-60f6-451d-a960-15d7a3c297e1&quot;,&quot;63bc7405-0049-448c-9314-6ad025a883c0&quot;,&quot;bee9aa55-82af-4b72-9b37-e4d6b2ed9634&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:30577,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;b5259bbc-f9df-4f5c-ab57-d63bcc61fe70&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;9e14aa95-92cd-4c2d-8b51-476b52192077&quot;,&quot;title&quot;:&quot;&gt; [tidex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/tidex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/tidex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [tidex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidex] without API keys &gt; [tidex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:38,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;26eef12d-fdaa-40df-981d-82f6f9a78c00&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidex] without API keys &gt; [tidex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:269,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5422c86b-15c3-48cc-96f4-f30aaa03cff9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidex] without API keys &gt; [tidex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5841,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7bf7327a-c8f4-4aa9-9e07-92fabc438f0d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidex] without API keys &gt; [tidex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:25,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5b538f95-aac9-4187-b722-fdbfd04c7295&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidex] without API keys &gt; [tidex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1956,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a556e5f7-5c08-43da-8768-8b50988f4a10&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [tidex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [tidex] without API keys &gt; [tidex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2006,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f655d8f3-57e9-40f5-946f-3b4b8090ef6b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;26eef12d-fdaa-40df-981d-82f6f9a78c00&quot;,&quot;5422c86b-15c3-48cc-96f4-f30aaa03cff9&quot;,&quot;7bf7327a-c8f4-4aa9-9e07-92fabc438f0d&quot;,&quot;5b538f95-aac9-4187-b722-fdbfd04c7295&quot;,&quot;a556e5f7-5c08-43da-8768-8b50988f4a10&quot;,&quot;f655d8f3-57e9-40f5-946f-3b4b8090ef6b&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:10135,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;a5498668-df64-45b5-97cb-a555ed4b578f&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;4ce3ca5b-bbd0-4d5b-a679-b8073c1f3b4c&quot;,&quot;title&quot;:&quot;&gt; [xbtce] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/xbtce-test.js&quot;,&quot;file&quot;:&quot;/test/generated/xbtce-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [xbtce] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [xbtce] without API keys &gt; [xbtce] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:35,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6de64d64-5d9c-4530-ae4b-08da4244b764&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [xbtce] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [xbtce] without API keys &gt; [xbtce] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:17,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;dddc35c0-f443-4301-ac8f-b9a510897168&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [xbtce] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [xbtce] without API keys &gt; [xbtce] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2385,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;804f7a8a-5f96-427e-bb23-67a93faa3282&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [xbtce] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [xbtce] without API keys &gt; [xbtce] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:32,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3ee1c8ea-3075-4807-a7ba-83295221732d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [xbtce] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [xbtce] without API keys &gt; [xbtce] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:8,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0c9df472-c6db-49c7-9517-d70f63b4ff9e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [xbtce] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [xbtce] without API keys &gt; [xbtce] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1a573b16-d01c-4caf-88cc-a8365876689e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;6de64d64-5d9c-4530-ae4b-08da4244b764&quot;,&quot;dddc35c0-f443-4301-ac8f-b9a510897168&quot;,&quot;804f7a8a-5f96-427e-bb23-67a93faa3282&quot;,&quot;3ee1c8ea-3075-4807-a7ba-83295221732d&quot;,&quot;0c9df472-c6db-49c7-9517-d70f63b4ff9e&quot;,&quot;1a573b16-d01c-4caf-88cc-a8365876689e&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2484,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;44493d99-3cd6-4f95-a904-05a9d8e3971b&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;941440ea-88ad-496c-99e4-4e1ff4878ac9&quot;,&quot;title&quot;:&quot;&gt; [vbtc] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/vbtc-test.js&quot;,&quot;file&quot;:&quot;/test/generated/vbtc-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [vbtc] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [vbtc] without API keys &gt; [vbtc] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:39,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;54feda21-f957-48cb-afe4-b4bcac52c0d9&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vbtc] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [vbtc] without API keys &gt; [vbtc] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b3b7aae8-6958-4f8b-8264-f7a86273da2e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vbtc] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [vbtc] without API keys &gt; [vbtc] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:151,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cb402f49-3aa0-40a3-822e-6574a932e0e2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vbtc] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [vbtc] without API keys &gt; [vbtc] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:14,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6a3a7c9c-c5bb-4388-ace1-95d836a6ccf4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vbtc] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [vbtc] without API keys &gt; [vbtc] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:847,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;90ef16ba-d4a2-4cdb-9083-a50788a3d80b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [vbtc] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [vbtc] without API keys &gt; [vbtc] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4694,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;375b204b-5fee-421d-a26f-58c4b78a5649&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;54feda21-f957-48cb-afe4-b4bcac52c0d9&quot;,&quot;b3b7aae8-6958-4f8b-8264-f7a86273da2e&quot;,&quot;cb402f49-3aa0-40a3-822e-6574a932e0e2&quot;,&quot;6a3a7c9c-c5bb-4388-ace1-95d836a6ccf4&quot;,&quot;90ef16ba-d4a2-4cdb-9083-a50788a3d80b&quot;,&quot;375b204b-5fee-421d-a26f-58c4b78a5649&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:5749,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;dbd5fa53-493f-4874-9fd0-8ab1f64b2399&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;dd6642d1-cfc1-4bbf-801f-ad4d9b228cee&quot;,&quot;title&quot;:&quot;&gt; [theocean] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/theocean-test.js&quot;,&quot;file&quot;:&quot;/test/generated/theocean-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [theocean] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [theocean] without API keys &gt; [theocean] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:100,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;939850a2-d1a3-4ecf-b821-76231e864957&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [theocean] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [theocean] without API keys &gt; [theocean] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:9007,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;01a58dfe-6d85-41aa-a332-22061844635a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [theocean] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [theocean] without API keys &gt; [theocean] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3858,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f8274538-de5d-46bf-9047-ab3982bc3a9c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [theocean] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [theocean] without API keys &gt; [theocean] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:44,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e7c442d5-b025-4888-810d-602f0f2d6445&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [theocean] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [theocean] without API keys &gt; [theocean] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:36,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6f89dc1b-8f3b-45b7-a240-2fe142b4e87a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [theocean] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [theocean] without API keys &gt; [theocean] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:176,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;21ca1350-d175-42e3-a330-bd81cdfa4086&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;939850a2-d1a3-4ecf-b821-76231e864957&quot;,&quot;01a58dfe-6d85-41aa-a332-22061844635a&quot;,&quot;f8274538-de5d-46bf-9047-ab3982bc3a9c&quot;,&quot;e7c442d5-b025-4888-810d-602f0f2d6445&quot;,&quot;6f89dc1b-8f3b-45b7-a240-2fe142b4e87a&quot;,&quot;21ca1350-d175-42e3-a330-bd81cdfa4086&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:13221,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;13977e49-8000-4747-8bfb-8e2a8a0dc934&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;e132cbb4-b11c-4507-8195-ed88143ef25c&quot;,&quot;title&quot;:&quot;&gt; [timex] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/timex-test.js&quot;,&quot;file&quot;:&quot;/test/generated/timex-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [timex] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [timex] without API keys &gt; [timex] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:35,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0f594675-1ee8-4698-8668-a6f2591c8330&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [timex] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [timex] without API keys &gt; [timex] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:188,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;90595341-cfa0-422b-a96c-3c139354ba48&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [timex] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [timex] without API keys &gt; [timex] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4359,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b005f31c-65d1-466e-a074-34fdc0ffaf52&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [timex] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [timex] without API keys &gt; [timex] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1520,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;597c756d-a4c9-489a-9be0-629d723b75d7&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [timex] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [timex] without API keys &gt; [timex] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2251,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;67d2a025-a85b-422a-a27c-74e019a2127d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [timex] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [timex] without API keys &gt; [timex] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6942,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cace9d65-002e-4bc2-9f20-b9ee217dd80e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;0f594675-1ee8-4698-8668-a6f2591c8330&quot;,&quot;90595341-cfa0-422b-a96c-3c139354ba48&quot;,&quot;b005f31c-65d1-466e-a074-34fdc0ffaf52&quot;,&quot;597c756d-a4c9-489a-9be0-629d723b75d7&quot;,&quot;67d2a025-a85b-422a-a27c-74e019a2127d&quot;,&quot;cace9d65-002e-4bc2-9f20-b9ee217dd80e&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:15295,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;a9584155-d0cd-43f5-92c7-2a5397b98f51&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;0f49dc13-3b53-4356-9790-43db3fde62b5&quot;,&quot;title&quot;:&quot;&gt; [rightbtc] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/rightbtc-test.js&quot;,&quot;file&quot;:&quot;/test/generated/rightbtc-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [rightbtc] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [rightbtc] without API keys &gt; [rightbtc] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:65,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bc20d1cf-460a-4f63-b2e4-18322ff4164d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [rightbtc] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [rightbtc] without API keys &gt; [rightbtc] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:167,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;03cac1d0-8fe7-46ba-9172-2b04c818cda0&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [rightbtc] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [rightbtc] without API keys &gt; [rightbtc] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3862,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;10619a46-75aa-4d04-9756-d5e89ca56867&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [rightbtc] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [rightbtc] without API keys &gt; [rightbtc] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2019,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f9000b88-2d42-47c5-9ac0-0c4996362051&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [rightbtc] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [rightbtc] without API keys &gt; [rightbtc] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7990,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7f6882e8-fb43-4eff-a80e-e270ce0a6565&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [rightbtc] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [rightbtc] without API keys &gt; [rightbtc] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:12536,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cda26f84-36b6-41d6-9d57-c79950d21245&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;bc20d1cf-460a-4f63-b2e4-18322ff4164d&quot;,&quot;03cac1d0-8fe7-46ba-9172-2b04c818cda0&quot;,&quot;10619a46-75aa-4d04-9756-d5e89ca56867&quot;,&quot;f9000b88-2d42-47c5-9ac0-0c4996362051&quot;,&quot;7f6882e8-fb43-4eff-a80e-e270ce0a6565&quot;,&quot;cda26f84-36b6-41d6-9d57-c79950d21245&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:26639,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;684e9aff-683f-44d5-92c9-08d341d03419&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;1868dd0f-3400-41e4-8500-ce20ab5e358a&quot;,&quot;title&quot;:&quot;&gt; [whitebit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/whitebit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/whitebit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [whitebit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [whitebit] without API keys &gt; [whitebit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:34,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;603e6497-159c-42c5-9b2d-8eb47db4215f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [whitebit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [whitebit] without API keys &gt; [whitebit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:343,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f232cf7e-fbd9-4748-abdd-871c20d84615&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [whitebit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [whitebit] without API keys &gt; [whitebit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3963,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0e3ef7a7-b7c3-43dc-b083-b275e6bc1691&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [whitebit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [whitebit] without API keys &gt; [whitebit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:314,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5aec25f8-df58-40a6-b745-0b8a51c92196&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [whitebit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [whitebit] without API keys &gt; [whitebit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6727,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;83acb924-fafe-41a7-b60f-9d8e15ea945f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [whitebit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [whitebit] without API keys &gt; [whitebit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2350,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0b6a97f1-8209-424d-9182-18e2a1800f01&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;603e6497-159c-42c5-9b2d-8eb47db4215f&quot;,&quot;f232cf7e-fbd9-4748-abdd-871c20d84615&quot;,&quot;0e3ef7a7-b7c3-43dc-b083-b275e6bc1691&quot;,&quot;5aec25f8-df58-40a6-b745-0b8a51c92196&quot;,&quot;83acb924-fafe-41a7-b60f-9d8e15ea945f&quot;,&quot;0b6a97f1-8209-424d-9182-18e2a1800f01&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:13731,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;098ce60a-f140-4d7c-8eda-4c66500db975&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;c27b5c31-e282-473f-9467-8e3ec7a1ed73&quot;,&quot;title&quot;:&quot;&gt; [zaif] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/zaif-test.js&quot;,&quot;file&quot;:&quot;/test/generated/zaif-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [zaif] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [zaif] without API keys &gt; [zaif] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:38,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;11c735ff-9f3b-42a4-b4b1-cf13c139680c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zaif] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [zaif] without API keys &gt; [zaif] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1716,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;417bc2bc-9991-4e39-ae2f-aba86261ffd5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zaif] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [zaif] without API keys &gt; [zaif] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6857,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b3ef7216-66cf-437b-9507-475b8e5250d3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zaif] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [zaif] without API keys &gt; [zaif] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:12,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0dd85a7e-ee01-44eb-b0ad-686c7513c0bd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zaif] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [zaif] without API keys &gt; [zaif] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1982,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c179af40-77d6-489c-87c9-c349426259c1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zaif] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [zaif] without API keys &gt; [zaif] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1998,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;61a2afa0-1f80-4a27-b670-70b3aa58e058&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;11c735ff-9f3b-42a4-b4b1-cf13c139680c&quot;,&quot;417bc2bc-9991-4e39-ae2f-aba86261ffd5&quot;,&quot;b3ef7216-66cf-437b-9507-475b8e5250d3&quot;,&quot;0dd85a7e-ee01-44eb-b0ad-686c7513c0bd&quot;,&quot;c179af40-77d6-489c-87c9-c349426259c1&quot;,&quot;61a2afa0-1f80-4a27-b670-70b3aa58e058&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:12603,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;8cbb8095-7725-4b01-82d0-e96e341e39f8&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;9d4e9d65-7195-46f0-b5af-adb8f5643891&quot;,&quot;title&quot;:&quot;&gt; [topq] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/topq-test.js&quot;,&quot;file&quot;:&quot;/test/generated/topq-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [topq] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [topq] without API keys &gt; [topq] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:72,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;596ab065-bfbe-4585-9401-cbb21d16af1d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [topq] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [topq] without API keys &gt; [topq] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:17656,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;19b8108a-731b-4ab3-8a73-63e0bb88b677&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [topq] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [topq] without API keys &gt; [topq] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6057,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e7e01ab9-3930-49f6-baee-d5654a7c88e8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [topq] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [topq] without API keys &gt; [topq] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:115,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ea991fa9-d228-4f8d-a688-fd4814541e62&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [topq] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [topq] without API keys &gt; [topq] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:181,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e6b31024-c44f-4a02-9cc8-edfe094152a3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [topq] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [topq] without API keys &gt; [topq] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:93,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;3165c1ff-5682-4004-bfd8-17e031dad013&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;596ab065-bfbe-4585-9401-cbb21d16af1d&quot;,&quot;19b8108a-731b-4ab3-8a73-63e0bb88b677&quot;,&quot;e7e01ab9-3930-49f6-baee-d5654a7c88e8&quot;,&quot;ea991fa9-d228-4f8d-a688-fd4814541e62&quot;,&quot;e6b31024-c44f-4a02-9cc8-edfe094152a3&quot;,&quot;3165c1ff-5682-4004-bfd8-17e031dad013&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:24174,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;940f48ea-2e00-42da-8120-0e1f5b452e51&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;97d6a7cc-55d5-42c0-9565-d1ced761fe91&quot;,&quot;title&quot;:&quot;&gt; [yobit] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/yobit-test.js&quot;,&quot;file&quot;:&quot;/test/generated/yobit-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [yobit] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [yobit] without API keys &gt; [yobit] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:55,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;medium&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;da41aff8-7404-4856-bd6b-6c4ea2db0204&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [yobit] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [yobit] without API keys &gt; [yobit] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1704,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ccf9fb16-da31-4327-875b-d075cd1ec082&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [yobit] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [yobit] without API keys &gt; [yobit] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:7120,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2ebd5546-0187-4892-a49d-b8a9c993a402&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [yobit] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [yobit] without API keys &gt; [yobit] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:184,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;0fe879bc-dea1-425d-8010-0f684583c3ca&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [yobit] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [yobit] without API keys &gt; [yobit] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:2624,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;5bd8dc84-35a9-42d5-8d9e-a26a0b448fb4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [yobit] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [yobit] without API keys &gt; [yobit] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6600,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a304bb98-aa33-4582-9f5a-69566121e6ea&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;da41aff8-7404-4856-bd6b-6c4ea2db0204&quot;,&quot;ccf9fb16-da31-4327-875b-d075cd1ec082&quot;,&quot;2ebd5546-0187-4892-a49d-b8a9c993a402&quot;,&quot;0fe879bc-dea1-425d-8010-0f684583c3ca&quot;,&quot;5bd8dc84-35a9-42d5-8d9e-a26a0b448fb4&quot;,&quot;a304bb98-aa33-4582-9f5a-69566121e6ea&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:18287,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;dccdde40-a3fc-42ec-8701-fbb312fc5af8&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;08002089-6eff-4039-aa92-093803dbd23d&quot;,&quot;title&quot;:&quot;&gt; [zb] without API keys&quot;,&quot;fullFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/test/generated/zb-test.js&quot;,&quot;file&quot;:&quot;/test/generated/zb-test.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;&gt; [zb] connect&quot;,&quot;fullTitle&quot;:&quot; &gt; [zb] without API keys &gt; [zb] connect&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:32,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1da008c4-0c41-4530-aa7e-3425e23f075d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zb] markets&quot;,&quot;fullTitle&quot;:&quot; &gt; [zb] without API keys &gt; [zb] markets&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:8477,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;939c844c-9c82-4a84-a60b-8eb9a35ec5b5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zb] ticker&quot;,&quot;fullTitle&quot;:&quot; &gt; [zb] without API keys &gt; [zb] ticker&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:3044,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;00e2e2ba-a318-4174-9694-fdcf9df73b8a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zb] tickers&quot;,&quot;fullTitle&quot;:&quot; &gt; [zb] without API keys &gt; [zb] tickers&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:6564,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;65665075-f961-4ce7-ba97-926f16e3b80f&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zb] orderBook&quot;,&quot;fullTitle&quot;:&quot; &gt; [zb] without API keys &gt; [zb] orderBook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:5349,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1cdb16f7-230b-4e47-866c-282a8da728b2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;&gt; [zb] trades&quot;,&quot;fullTitle&quot;:&quot; &gt; [zb] without API keys &gt; [zb] trades&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:4058,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;slow&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;if (config.canExecute(_ctx)) {\n    this.timeout(0)\n    const query = config.queryBuilder ? config.queryBuilder(_ctx) : undefined\n    const url = `${_ctx.baseUrl}/exchange/${_ctx.exchangeName}/${subPath}`\n    superagent\n        .get(url)\n        .query(query)\n        .retry(3)\n        .timeout(TIMEOUT_MS)\n        .end((err, res) =&gt; {\n            logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n                exchangeDetail[property] = exchangeDetail[property] || {}\n                exchangeDetail[property].statusCode = (res &amp;&amp; res.status) || 408\n                exchangeDetail[property].response = res &amp;&amp; res.body\n            })\n            if (config.successCallback) {\n                config.successCallback(_ctx, res)\n            }\n            assertResponse(res)\n            done();\n        });\n} else {\n    logExchangeDetail(_ctx.exchangeName, exchangeDetail =&gt; {\n        exchangeDetail[property] = exchangeDetail[property] || {}\n        exchangeDetail[property].statusCode = &#x27;n/a&#x27;\n    })\n    if (!REPORT_ONLY) {\n        this.skip()\n    }\n    done()\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;12672873-acf7-42b6-8496-92e1e45a9735&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;1da008c4-0c41-4530-aa7e-3425e23f075d&quot;,&quot;939c844c-9c82-4a84-a60b-8eb9a35ec5b5&quot;,&quot;00e2e2ba-a318-4174-9694-fdcf9df73b8a&quot;,&quot;65665075-f961-4ce7-ba97-926f16e3b80f&quot;,&quot;1cdb16f7-230b-4e47-866c-282a8da728b2&quot;,&quot;12672873-acf7-42b6-8496-92e1e45a9735&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:27524,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:true,&quot;rootEmpty&quot;:true,&quot;_timeout&quot;:2000},&quot;copyrightYear&quot;:2020}" data-config="{&quot;reportFilename&quot;:&quot;mochawesome&quot;,&quot;reportDir&quot;:&quot;./out/exchange-summary-dashboard&quot;,&quot;reportTitle&quot;:&quot;CCXT-REST Exchange Summary Dashboard&quot;,&quot;reportPageTitle&quot;:&quot;CCXT-REST Exchange Summary Dashboard&quot;,&quot;inline&quot;:false,&quot;inlineAssets&quot;:false,&quot;cdn&quot;:false,&quot;charts&quot;:true,&quot;enableCharts&quot;:true,&quot;code&quot;:true,&quot;enableCode&quot;:true,&quot;autoOpen&quot;:false,&quot;overwrite&quot;:true,&quot;timestamp&quot;:false,&quot;ts&quot;:false,&quot;showPassed&quot;:true,&quot;showFailed&quot;:true,&quot;showPending&quot;:true,&quot;showSkipped&quot;:false,&quot;showHooks&quot;:&quot;failed&quot;,&quot;saveJson&quot;:true,&quot;saveHtml&quot;:true,&quot;dev&quot;:false,&quot;assetsDir&quot;:&quot;out/exchange-summary-dashboard/assets&quot;,&quot;jsonFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/out/exchange-summary-dashboard/mochawesome.json&quot;,&quot;htmlFile&quot;:&quot;/home/travis/build/ccxt-rest/ccxt-rest/out/exchange-summary-dashboard/mochawesome.html&quot;}"><div id="report"></div><script src="assets/app.js"></script></body></html>