From 54d3a62284e78bf772da7ab1afa6d5e4cc4f8bc5 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 14 Jan 2018 15:17:57 +0100
Subject: [PATCH] fix: throw error when receiving 5xx responses from npmjs

This is a partial fix for #929. After this we should catch and retry.
---
 lib/manager/npm/registry.js       |  4 ++++
 test/manager/npm/registry.spec.js | 12 ++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/lib/manager/npm/registry.js b/lib/manager/npm/registry.js
index d9e0d08f98..fb8ae67fdd 100644
--- a/lib/manager/npm/registry.js
+++ b/lib/manager/npm/registry.js
@@ -94,6 +94,10 @@ async function getDependency(name) {
       logger.info({ err, name }, `Dependency not found`);
       return null;
     }
+    if (err.statusCode >= 500 && err.statusCode < 600) {
+      logger.info({ err }, 'npm registry failure');
+      throw new Error('registry-failure');
+    }
     logger.warn({ err, name }, 'Unknown npm lookup error');
     return null;
   }
diff --git a/test/manager/npm/registry.spec.js b/test/manager/npm/registry.spec.js
index 0d1df746ad..a775a16af4 100644
--- a/test/manager/npm/registry.spec.js
+++ b/test/manager/npm/registry.spec.js
@@ -59,6 +59,18 @@ describe('api/npm', () => {
     const res = await npm.getDependency('foobar');
     expect(res).toBeNull();
   });
+  it('should throw error for 5xx', async () => {
+    nock('https://registry.npmjs.org')
+      .get('/foobar')
+      .reply(503);
+    let e;
+    try {
+      await npm.getDependency('foobar');
+    } catch (err) {
+      e = err;
+    }
+    expect(e).toBeDefined();
+  });
   it('should send an authorization header if provided', async () => {
     registryAuthToken.mockImplementation(() => ({
       type: 'Basic',
-- 
GitLab