From 5c10bf13a5a48c8ed97b7951eb9bbed179d99d72 Mon Sep 17 00:00:00 2001 From: ace-n Date: Fri, 3 Apr 2020 16:30:37 -0700 Subject: [PATCH] Add tests --- functions/security/index.js | 2 +- functions/security/package.json | 27 ++++++++++++ functions/security/test/index.test.js | 59 +++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 functions/security/package.json create mode 100644 functions/security/test/index.test.js diff --git a/functions/security/index.js b/functions/security/index.js index 4c0179f5aa..abf9e82a3f 100644 --- a/functions/security/index.js +++ b/functions/security/index.js @@ -29,7 +29,7 @@ const metadataServerURL = 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience='; const tokenUrl = metadataServerURL + functionURL; -exports.bearerToken = async (req, res) => { +exports.callingFunction = async (req, res) => { // Fetch the token const tokenResponse = await get(tokenUrl, { headers: { diff --git a/functions/security/package.json b/functions/security/package.json new file mode 100644 index 0000000000..cead34debc --- /dev/null +++ b/functions/security/package.json @@ -0,0 +1,27 @@ +{ + "name": "nodejs-docs-samples-functions-security", + "version": "0.0.1", + "private": true, + "license": "Apache-2.0", + "author": "Google Inc.", + "repository": { + "type": "git", + "url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git" + }, + "engines": { + "node": ">=8.0.0" + }, + "scripts": { + "test": "mocha test/*.test.js" + }, + "dependencies": { + "axios": "^0.19.2", + "eslint-plugin-node": "^11.1.0", + "mocha": "^7.1.1" + }, + "devDependencies": { + "assert": "^2.0.0", + "proxyquire": "^2.1.3", + "sinon": "^9.0.1" + } +} diff --git a/functions/security/test/index.test.js b/functions/security/test/index.test.js new file mode 100644 index 0000000000..0b70787aa3 --- /dev/null +++ b/functions/security/test/index.test.js @@ -0,0 +1,59 @@ +// Copyright 2017 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict'; + +const proxyquire = require('proxyquire').noCallThru(); +const sinon = require('sinon'); +const assert = require('assert'); + +const getSample = () => { + const getMock = sinon + .stub() + .onFirstCall() + .resolves({data: 'some-token'}) + .onSecondCall() + .resolves({data: 'function-response'}); + + const axiosMock = {get: getMock}; + + const resMock = {}; + resMock.status = sinon.stub().returns(resMock); + resMock.send = sinon.stub().returns(resMock); + + return { + sample: proxyquire('../', { + axios: axiosMock, + }), + mocks: { + res: resMock, + axios: axiosMock, + }, + }; +}; + +describe('functions_bearer_token', () => { + it('should run', async () => { + const {sample, mocks} = getSample(); + + await sample.callingFunction(null, mocks.res); + + assert(mocks.axios.get.calledTwice); + assert.deepEqual(mocks.axios.get.firstCall.args[1], { + headers: {'Metadata-Flavor': 'Google'}, + }); + + assert(mocks.res.send.calledWith('function-response')); + }); +});