diff --git a/lib/common/util.js b/lib/common/util.js index dcf0a1f058f..f3897b92236 100644 --- a/lib/common/util.js +++ b/lib/common/util.js @@ -33,6 +33,7 @@ var request = require('request').defaults({ }); var retryRequest = require('retry-request'); var through = require('through2'); +var uniq = require('array-uniq'); /** @const {object} gcloud-node's package.json file. */ var PKG = require('../../package.json'); @@ -81,13 +82,13 @@ var ApiError = createErrorClass('ApiError', function(errorBody) { if (errorBody.errors && errorBody.errors.length === 1) { messages.push(errorBody.errors[0].message); - } else if (errorBody.response.body) { + } else if (errorBody.response && errorBody.response.body) { messages.push(errorBody.response.body.toString()); } else if (!errorBody.message) { messages.push('Error during request.'); } - this.message = messages.join(' - '); + this.message = uniq(messages).join(' - '); }); /** diff --git a/package.json b/package.json index 0b4c343f9bd..5f6db370aa1 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ ], "dependencies": { "JSONStream": "^1.0.7", + "array-uniq": "^1.0.2", "arrify": "^1.0.0", "async": "^1.4.2", "concat-stream": "^1.5.0", diff --git a/test/common/util.js b/test/common/util.js index 4430805b56a..7fa838ce7fa 100644 --- a/test/common/util.js +++ b/test/common/util.js @@ -203,6 +203,22 @@ describe('common/util', function() { assert.strictEqual(apiError.message, expectedErrorMessage); }); + + it('should filter out duplicate errors', function() { + var expectedErrorMessage = 'Error during request.'; + + var error = { + code: 100, + message: expectedErrorMessage, + response: { + body: expectedErrorMessage + } + }; + + var apiError = new util.ApiError(error); + + assert.strictEqual(apiError.message, expectedErrorMessage); + }); }); describe('extendGlobalConfig', function() {