Skip to content

Commit ed14c4a

Browse files
move UA formatting to util
1 parent db0f6d3 commit ed14c4a

File tree

8 files changed

+71
-22
lines changed

8 files changed

+71
-22
lines changed

packages/common/src/grpc-service.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ var through = require('through2');
3636
*/
3737
var Service = require('./service.js');
3838

39+
/**
40+
* @type {module:common/util}
41+
* @private
42+
*/
43+
var util = require('./util.js');
44+
3945
/**
4046
* @const {object} - A map of protobuf codes to HTTP status codes.
4147
* @private
@@ -170,11 +176,7 @@ function GrpcService(config, options) {
170176
}
171177

172178
this.maxRetries = options.maxRetries;
173-
174-
var hyphenatedPackageName = config.packageJson.name
175-
.replace('@google-cloud', 'gcloud-node') // For legacy purposes.
176-
.replace('/', '-'); // For UA spec-compliance purposes.
177-
this.userAgent = hyphenatedPackageName + '/' + config.packageJson.version;
179+
this.userAgent = util.getUserAgentFromPackageJson(config.packageJson);
178180

179181
var apiVersion = config.apiVersion;
180182
var service = this.service = config.service;

packages/common/src/service.js

+1-4
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,7 @@ Service.prototype.request = function(reqOpts, callback) {
116116
delete reqOpts.interceptors_;
117117

118118
reqOpts.headers = extend({}, reqOpts.headers, {
119-
'User-Agent': [
120-
this.packageJson.name.replace('@google-cloud', 'gcloud-node'),
121-
this.packageJson.version
122-
].join('/')
119+
'User-Agent': util.getUserAgentFromPackageJson(this.packageJson)
123120
});
124121

125122
return this.makeAuthenticatedRequest(reqOpts, callback);

packages/common/src/util.js

+16
Original file line numberDiff line numberDiff line change
@@ -614,3 +614,19 @@ function isCustomType(unknown, module) {
614614
}
615615

616616
util.isCustomType = isCustomType;
617+
618+
/**
619+
* Create a properly-formatted User-Agent string from a package.json file.
620+
*
621+
* @param {object} packageJson - A module's package.json file.
622+
* @return {string} userAgent - The formatted User-Agent string.
623+
*/
624+
function getUserAgentFromPackageJson(packageJson) {
625+
var hyphenatedPackageName = packageJson.name
626+
.replace('@google-cloud', 'gcloud-node') // For legacy purposes.
627+
.replace('/', '-'); // For UA spec-compliance purposes.
628+
629+
return hyphenatedPackageName + '/' + packageJson.version;
630+
}
631+
632+
util.getUserAgentFromPackageJson = getUserAgentFromPackageJson;

packages/common/test/grpc-service.js

+15-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ var sinon = require('sinon').sandbox.create();
2828
var through = require('through2');
2929

3030
var util = require('../src/util.js');
31+
var fakeUtil = extend({}, util);
3132

3233
function FakeService() {
3334
this.calledWith_ = arguments;
@@ -43,6 +44,7 @@ function fakeRetryRequest() {
4344
return (retryRequestOverride || retryRequest).apply(null, arguments);
4445
}
4546

47+
4648
var GrpcMetadataOverride;
4749
var grpcLoadOverride;
4850
var fakeGrpc = {
@@ -119,7 +121,8 @@ describe('GrpcService', function() {
119121
'google-proto-files': fakeGoogleProtoFiles,
120122
'retry-request': fakeRetryRequest,
121123
grpc: fakeGrpc,
122-
'./service.js': FakeService
124+
'./service.js': FakeService,
125+
'./util.js': fakeUtil
123126
});
124127
GrpcServiceCached = extend(true, {}, GrpcService);
125128
});
@@ -288,7 +291,17 @@ describe('GrpcService', function() {
288291
});
289292

290293
it('should set the correct user-agent', function() {
291-
assert.strictEqual(grpcService.userAgent, 'gcloud-node-service/0.2.0');
294+
var userAgent = 'user-agent/0.0.0';
295+
296+
var getUserAgentFn = fakeUtil.getUserAgentFromPackageJson;
297+
fakeUtil.getUserAgentFromPackageJson = function(packageJson) {
298+
fakeUtil.getUserAgentFromPackageJson = getUserAgentFn;
299+
assert.strictEqual(packageJson, CONFIG.packageJson);
300+
return userAgent;
301+
};
302+
303+
var grpcService = new GrpcService(CONFIG, OPTIONS);
304+
assert.strictEqual(grpcService.userAgent, userAgent);
292305
});
293306

294307
it('should get the root directory for the proto files', function(done) {

packages/common/test/service.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,17 @@ describe('Service', function() {
221221
});
222222

223223
it('should add the User Agent', function(done) {
224+
var userAgent = 'user-agent/0.0.0';
225+
226+
var getUserAgentFn = util.getUserAgentFromPackageJson;
227+
util.getUserAgentFromPackageJson = function(packageJson) {
228+
util.getUserAgentFromPackageJson = getUserAgentFn;
229+
assert.strictEqual(packageJson, service.packageJson);
230+
return userAgent;
231+
};
232+
224233
service.makeAuthenticatedRequest = function(reqOpts) {
225-
assert.strictEqual(reqOpts.headers['User-Agent'], [
226-
CONFIG.packageJson.name.replace('@google-cloud', 'gcloud-node'),
227-
CONFIG.packageJson.version
228-
].join('/'));
234+
assert.strictEqual(reqOpts.headers['User-Agent'], userAgent);
229235
done();
230236
};
231237

packages/common/test/util.js

+11
Original file line numberDiff line numberDiff line change
@@ -1363,4 +1363,15 @@ describe('common/util', function() {
13631363
});
13641364
});
13651365
});
1366+
1367+
describe('getUserAgentFromPackageJson', function() {
1368+
it('should format a User Agent string from a package.json', function() {
1369+
var userAgent = util.getUserAgentFromPackageJson({
1370+
name: '@google-cloud/storage',
1371+
version: '0.1.0'
1372+
});
1373+
1374+
assert.strictEqual(userAgent, 'gcloud-node-storage/0.1.0');
1375+
});
1376+
});
13661377
});

packages/translate/src/index.js

+1-4
Original file line numberDiff line numberDiff line change
@@ -384,10 +384,7 @@ Translate.prototype.request = function(reqOpts, callback) {
384384
key: this.key
385385
},
386386
headers: {
387-
'User-Agent': [
388-
PKG.name.replace('@google-cloud', 'gcloud-node'),
389-
PKG.version
390-
].join('/')
387+
'User-Agent': common.util.getUserAgentFromPackageJson(PKG)
391388
}
392389
});
393390

packages/translate/test/index.js

+10-3
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ var extend = require('extend');
2121
var proxyquire = require('proxyquire');
2222
var util = require('@google-cloud/common').util;
2323

24-
var PKG = require('../package.json');
25-
2624
var makeRequestOverride;
2725
var fakeUtil = extend({}, util, {
2826
makeRequest: function() {
@@ -386,6 +384,15 @@ describe('Translate', function() {
386384

387385
describe('request', function() {
388386
it('should make the correct request', function(done) {
387+
var userAgent = 'user-agent/0.0.0';
388+
389+
var getUserAgentFn = fakeUtil.getUserAgentFromPackageJson;
390+
fakeUtil.getUserAgentFromPackageJson = function(packageJson) {
391+
fakeUtil.getUserAgentFromPackageJson = getUserAgentFn;
392+
assert.deepEqual(packageJson, require('../package.json'));
393+
return userAgent;
394+
};
395+
389396
var reqOpts = {
390397
uri: '/test',
391398
a: 'b',
@@ -401,7 +408,7 @@ describe('Translate', function() {
401408
key: translate.key
402409
},
403410
headers: {
404-
'User-Agent': 'gcloud-node/translate/' + PKG.version
411+
'User-Agent': userAgent
405412
}
406413
});
407414
var BASE_URL = 'https://www.googleapis.com/language/translate/v2';

0 commit comments

Comments
 (0)