From 8a99adccd82ea90f7ad71d4382e8cb25176dc913 Mon Sep 17 00:00:00 2001 From: Siddharth VP Date: Mon, 18 Sep 2023 15:45:58 +0530 Subject: [PATCH] core: add test for network errors --- tests/base/local_wiki.js | 2 ++ tests/core.test.js | 11 +++++++++++ tests/errors.test.js | 4 ++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/base/local_wiki.js b/tests/base/local_wiki.js index 1a73161..84c9cb7 100644 --- a/tests/base/local_wiki.js +++ b/tests/base/local_wiki.js @@ -8,6 +8,8 @@ const baseConfig = { defaultParams: { assert: 'user', }, + maxRetries: 1, + retryPause: 100, }; let bot = new Mwn({ diff --git a/tests/core.test.js b/tests/core.test.js index bb6bf8f..25eef55 100644 --- a/tests/core.test.js +++ b/tests/core.test.js @@ -1,6 +1,7 @@ const { Request, Response } = require('../build/core'); const logger = require('../build/log'); const { MwnError } = require('../build/error'); +const nock = require('nock'); const { expect, Mwn } = require('./base/test_base'); const { bot, setup, teardown, sinon } = require('./base/local_wiki'); @@ -51,6 +52,16 @@ describe('core', function () { before('logs in and gets token & namespaceInfo', setup); after('teardown', teardown); + it('logs on network errors and retries them', async function () { + nock('http://localhost:8080/api.php', { allowUnmocked: true }).get(/.*?/).times(1).reply(500, 'body', {}); + sinon.spy(console, 'log'); + await expect(bot.query({ action: 'query' })).to.be.eventually.deep.eq({ batchcomplete: true }); + expect(console.log).to.have.been.calledTwice; + expect(console.log.firstCall.firstArg).to.include('Retrying in '); + expect(console.log.secondCall.firstArg).to.be.instanceOf(Object).that.has.keys('request', 'response'); + sinon.restore(); + }); + // Errors it('default legacy error format (bc)', async () => { diff --git a/tests/errors.test.js b/tests/errors.test.js index 042827a..c0f8136 100644 --- a/tests/errors.test.js +++ b/tests/errors.test.js @@ -128,7 +128,7 @@ describe('testing for error recoveries', function () { mockApi(1, maxlagErrorBody); // without Retry-After header await bot.query({}); expect(retrySpy).to.have.been.called; - expect(sleepStub).to.have.been.calledOnceWith(5000); + expect(sleepStub).to.have.been.calledOnceWith(bot.options.retryPause); sleepStub.restore(); retrySpy.restore(); }); @@ -144,7 +144,7 @@ describe('testing for error recoveries', function () { sleepStub.resolves(); await bot.query({}); expect(retrySpy).to.have.been.called; - expect(sleepStub).to.have.been.calledWith(5000); + expect(sleepStub).to.have.been.calledWith(bot.options.retryPause); sleepStub.restore(); retrySpy.restore(); });