github.com/hernad/nomad@v1.6.112/ui/tests/acceptance/proxy-test.js (about) 1 /** 2 * Copyright (c) HashiCorp, Inc. 3 * SPDX-License-Identifier: MPL-2.0 4 */ 5 6 /* eslint-disable ember-a11y-testing/a11y-audit-called */ // Tests for non-UI behaviour. 7 import { module, test } from 'qunit'; 8 import { setupApplicationTest } from 'ember-qunit'; 9 import { setupMirage } from 'ember-cli-mirage/test-support'; 10 import Jobs from 'nomad-ui/tests/pages/jobs/list'; 11 12 let managementToken; 13 14 module('Acceptance | reverse proxy', function (hooks) { 15 setupApplicationTest(hooks); 16 setupMirage(hooks); 17 18 hooks.beforeEach(function () { 19 window.localStorage.clear(); 20 window.sessionStorage.clear(); 21 22 server.create('agent'); 23 managementToken = server.create('token'); 24 25 // Prepare a setRequestHeader that accumulate headers already set. This is to avoid double setting X-Nomad-Token 26 this._originalXMLHttpRequestSetRequestHeader = 27 XMLHttpRequest.prototype.setRequestHeader; 28 (function (setRequestHeader) { 29 XMLHttpRequest.prototype.setRequestHeader = function (header, value) { 30 if (!this.headers) { 31 this.headers = {}; 32 } 33 if (!this.headers[header]) { 34 this.headers[header] = []; 35 } 36 // Add the value to the header 37 this.headers[header].push(value); 38 setRequestHeader.call(this, header, value); 39 }; 40 })(this._originalXMLHttpRequestSetRequestHeader); 41 42 // Simulate a reverse proxy injecting X-Nomad-Token header for all requests 43 this._originalXMLHttpRequestSend = XMLHttpRequest.prototype.send; 44 (function (send) { 45 XMLHttpRequest.prototype.send = function (data) { 46 if (!this.headers || !('X-Nomad-Token' in this.headers)) { 47 this.setRequestHeader('X-Nomad-Token', managementToken.secretId); 48 } 49 send.call(this, data); 50 }; 51 })(this._originalXMLHttpRequestSend); 52 }); 53 54 hooks.afterEach(function () { 55 XMLHttpRequest.prototype.setRequestHeader = 56 this._originalXMLHttpRequestSetRequestHeader; 57 XMLHttpRequest.prototype.send = this._originalXMLHttpRequestSend; 58 }); 59 60 test('when token is inserted by a reverse proxy, the UI is adjusted', async function (assert) { 61 // when token is inserted by reserve proxy, the token is reverse proxy 62 const { secretId } = managementToken; 63 64 await Jobs.visit(); 65 assert.equal( 66 window.localStorage.nomadTokenSecret, 67 secretId, 68 'Token secret was set' 69 ); 70 71 // Make sure that server received the header 72 assert.ok( 73 server.pretender.handledRequests 74 .mapBy('requestHeaders') 75 .every((headers) => headers['X-Nomad-Token'] === secretId), 76 'The token header is always present' 77 ); 78 79 assert.notOk(Jobs.runJobButton.isDisabled, 'Run job button is enabled'); 80 }); 81 });