From f651b8e776e21f47cc8c11d54a56eaa7e37dd016 Mon Sep 17 00:00:00 2001 From: Ali Ijaz Sheikh Date: Tue, 7 Feb 2017 16:49:48 -0800 Subject: [PATCH] provide minorversion label on AppEngine (#237) --- src/agent/debuglet.js | 14 +++++++- test/test-debuglet.js | 75 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) diff --git a/src/agent/debuglet.js b/src/agent/debuglet.js index 1dcc8c20..115c3e24 100644 --- a/src/agent/debuglet.js +++ b/src/agent/debuglet.js @@ -144,7 +144,14 @@ Debuglet.prototype.normalizeConfig_ = function(config) { logLevel: process.env.GCLOUD_DEBUG_LOGLEVEL, serviceContext: { service: process.env.GAE_SERVICE || process.env.GAE_MODULE_NAME, - version: process.env.GAE_VERSION || process.env.GAE_MODULE_VERSION + version: process.env.GAE_VERSION || process.env.GAE_MODULE_VERSION, + // Debug UI expects GAE_MINOR_VERSION to be available for AppEngine, but + // AppEngine Flex doesn't have this environment variable. We provide a + // fake value as a work-around, but only on Flex (GAE_SERVICE will be + // defined on Flex). + minorVersion: + process.env.GAE_MINOR_VERSION || + (process.env.GAE_SERVICE ? 'fake-minor-version' : undefined) } }; @@ -273,6 +280,11 @@ Debuglet.createDebuggee = labels.version = serviceContext.version; desc += ' version:' + serviceContext.version; } + + if (_.isString(serviceContext.minorVersion)) { + // v--- intentional lowercase + labels.minorversion = serviceContext.minorVersion; + } } if (description) { diff --git a/test/test-debuglet.js b/test/test-debuglet.js index 2040fb31..33beb705 100644 --- a/test/test-debuglet.js +++ b/test/test-debuglet.js @@ -15,6 +15,7 @@ */ 'use strict'; +var _ = require('lodash'); var assert = require('assert'); var defaultConfig = require('../src/agent/config.js'); var Debuglet = require('../src/agent/debuglet.js'); @@ -243,6 +244,80 @@ describe('Debuglet', function() { assert.strictEqual(debuglet.config_.serviceContext.version, 'fake-gae-version'); }); + + it('should respect GAE_MINOR_VERSION env. var. when available', + function() { + process.env.GAE_MINOR_VERSION = 'some minor version'; + var debug = require('../src/debug.js')(); + var debuglet = new Debuglet(debug, defaultConfig); + assert.ok(debuglet.config_); + assert.ok(debuglet.config_.serviceContext); + assert.strictEqual(debuglet.config_.serviceContext.minorVersion, + 'some minor version'); + }); + + it('should conjure a fake minor version when running on flex', + function() { + process.env.GAE_SERVICE = 'fake-gae-service'; + var debug = require('../src/debug.js')(); + var debuglet = new Debuglet(debug, defaultConfig); + assert.ok(debuglet.config_); + assert.ok(debuglet.config_.serviceContext); + assert.ok(_.isString(debuglet.config_.serviceContext.minorVersion)); + }); + + it('should not have minorVersion unless enviroment provides it', + function() { + var debug = require('../src/debug.js')(); + var debuglet = new Debuglet(debug, defaultConfig); + assert.ok(debuglet.config_); + assert.ok(debuglet.config_.serviceContext); + assert.ok( + _.isUndefined(debuglet.config_.serviceContext.minorVersion)); + }); + + it('should not provide minorversion upon registration on non flex', + function(done) { + var debug = require('../src/debug.js')( + {projectId: 'fake-project', credentials: fakeCredentials}); + var debuglet = new Debuglet(debug, defaultConfig); + + var scope = + nock(API).post(REGISTER_PATH, function(body) { + assert.ok( + _.isUndefined(body.debuggee.labels.minorversion)); + return true; + }).once().reply(200, {debuggee: {id: DEBUGGEE_ID}}); + + debuglet.once('registered', function(id) { + debuglet.stop(); + scope.done(); + done(); + }); + debuglet.start(); + }); + + it('should provide minorversion upon registration if on flex', function( + done) { + process.env.GAE_SERVICE = 'fake-service'; + var debug = require('../src/debug.js')( + {projectId: 'fake-project', credentials: fakeCredentials}); + var debuglet = new Debuglet(debug, defaultConfig); + + nocks.oauth2(); + var scope = + nock(API).post(REGISTER_PATH, function(body) { + assert.ok(_.isString(body.debuggee.labels.minorversion)); + return true; + }).once().reply(200, {debuggee: {id: DEBUGGEE_ID}}); + + debuglet.once('registered', function(id) { + debuglet.stop(); + scope.done(); + done(); + }); + debuglet.start(); + }); });