-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Capture ACL Token from self API call for Reverse Proxy use-case (#10563)
* Proposed fix for #10561 Signed-off-by: Georges-Etienne Legendre <legege@legege.com> * Add acceptance tests for reverse proxy use-case Signed-off-by: Georges-Etienne Legendre <legege@legege.com> * Use reads instead of computed/get Signed-off-by: Georges-Etienne Legendre <legege@legege.com> * Move back the line closer to the task Signed-off-by: Georges-Etienne Legendre <legege@legege.com> * skip a11y-audit-called lint rule on reverse proxy tests Co-authored-by: Luiz Aoqui <luiz@hashicorp.com>
- Loading branch information
Showing
2 changed files
with
54 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
/* eslint-disable ember-a11y-testing/a11y-audit-called */ // Tests for non-UI behaviour. | ||
import { module, test } from 'qunit'; | ||
import { setupApplicationTest } from 'ember-qunit'; | ||
import { setupMirage } from 'ember-cli-mirage/test-support'; | ||
import Jobs from 'nomad-ui/tests/pages/jobs/list'; | ||
|
||
let managementToken; | ||
|
||
module('Acceptance | reverse proxy', function(hooks) { | ||
setupApplicationTest(hooks); | ||
setupMirage(hooks); | ||
|
||
hooks.beforeEach(function() { | ||
window.localStorage.clear(); | ||
window.sessionStorage.clear(); | ||
|
||
server.create('agent'); | ||
managementToken = server.create('token'); | ||
|
||
// Simulate a reverse proxy injecting X-Nomad-Token header for all requests | ||
this._originalXMLHttpRequestSend = XMLHttpRequest.prototype.send; | ||
(function(send) { | ||
XMLHttpRequest.prototype.send = function(data) { | ||
this.setRequestHeader('X-Nomad-Token', managementToken.secretId); | ||
send.call(this, data); | ||
}; | ||
})(this._originalXMLHttpRequestSend); | ||
}); | ||
|
||
hooks.afterEach(function() { | ||
XMLHttpRequest.prototype.send = this._originalXMLHttpRequestSend; | ||
}); | ||
|
||
test('when token is inserted by a reverse proxy, the UI is adjusted', async function(assert) { | ||
// when token is inserted by reserve proxy, the token is reverse proxy | ||
const { secretId } = managementToken; | ||
|
||
await Jobs.visit(); | ||
assert.ok(window.localStorage.nomadTokenSecret == null, 'No token secret set'); | ||
|
||
// Make sure that server received the header | ||
assert.ok( | ||
server.pretender.handledRequests | ||
.mapBy('requestHeaders') | ||
.every(headers => headers['X-Nomad-Token'] === secretId), | ||
'The token header is always present' | ||
); | ||
|
||
assert.notOk(Jobs.runJobButton.isDisabled, 'Run job button is enabled'); | ||
}); | ||
}); |