mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-07 22:18:33 +00:00
feat(auth): akamai auth integration (#8199)
This commit is contained in:
154
tests/auth/akamai-edgegrid/akamai-edgegrid-levels.spec.ts
Normal file
154
tests/auth/akamai-edgegrid/akamai-edgegrid-levels.spec.ts
Normal file
@@ -0,0 +1,154 @@
|
||||
import { expect, test } from '../../../playwright';
|
||||
import {
|
||||
closeAllCollections,
|
||||
createCollection,
|
||||
createFolder,
|
||||
createRequest,
|
||||
getResponseBody,
|
||||
openFolderRequest,
|
||||
openRequest,
|
||||
selectAuthMode,
|
||||
selectRequestPaneTab,
|
||||
sendRequestAndWaitForResponse
|
||||
} from '../../utils/page';
|
||||
|
||||
/**
|
||||
* EdgeGrid is configurable at collection settings, folder settings, and request level. These
|
||||
* tests verify each renders without crashing (collection-level was a `null` crash regression),
|
||||
* persists all 8 fields across a save, and that a request which inherits the auth actually
|
||||
* signs and is accepted by the local simulator — asserting the echoed effective values.
|
||||
*/
|
||||
|
||||
const { TEST_EDGEGRID } = require('../../../packages/bruno-tests/src/auth/edgegrid');
|
||||
const SIMULATOR_URL = 'http://localhost:8081/api/auth/edgegrid/resource';
|
||||
|
||||
const label = (page, text: string) => page.locator('label').filter({ hasText: text });
|
||||
const fieldRow = (page, text: string) => label(page, text).locator('..');
|
||||
const editorIn = (row) => row.locator('.single-line-editor-wrapper .CodeMirror');
|
||||
const advancedHeader = (page) => page.locator('.advanced-settings-header').filter({ hasText: 'Advanced Settings' });
|
||||
|
||||
const fieldValue = (page, fieldName: string): Promise<string> =>
|
||||
editorIn(fieldRow(page, fieldName)).evaluate((el: any) => el.CodeMirror.getValue());
|
||||
const expectFieldValue = async (page, fieldName: string, expected: string) => {
|
||||
await expect.poll(() => fieldValue(page, fieldName)).toBe(expected);
|
||||
};
|
||||
const setField = async (page, fieldName: string, value: string) => {
|
||||
await editorIn(fieldRow(page, fieldName)).click();
|
||||
await page.keyboard.press('ControlOrMeta+a');
|
||||
await page.keyboard.type(value);
|
||||
};
|
||||
const saveSettings = async (page) => {
|
||||
await page.getByRole('button', { name: 'Save' }).click();
|
||||
};
|
||||
|
||||
const BASIC_FIELDS = ['Access Token', 'Client Token', 'Client Secret'];
|
||||
const ADVANCED_FIELDS = ['Base URL', 'Nonce', 'Timestamp', 'Headers to Sign', 'Max Body Size'];
|
||||
|
||||
// Valid creds + simulator host so an inheriting request validates; a distinct nonce per level
|
||||
// so the echoed response proves which level's auth was used.
|
||||
const valuesFor = (nonce: string): Record<string, string> => ({
|
||||
'Access Token': TEST_EDGEGRID.accessToken,
|
||||
'Client Token': TEST_EDGEGRID.clientToken,
|
||||
'Client Secret': TEST_EDGEGRID.clientSecret,
|
||||
'Base URL': 'http://localhost:8081',
|
||||
'Nonce': nonce,
|
||||
'Timestamp': '20240101T00:00:00+0000',
|
||||
'Headers to Sign': 'X-Sign',
|
||||
'Max Body Size': '4096'
|
||||
});
|
||||
|
||||
// Advanced Settings is always open, so all fields are visible without expanding.
|
||||
const fillAllFields = async (page, values: Record<string, string>) => {
|
||||
for (const name of [...BASIC_FIELDS, ...ADVANCED_FIELDS]) await setField(page, name, values[name]);
|
||||
};
|
||||
|
||||
const verifyAllFields = async (page, values: Record<string, string>) => {
|
||||
for (const name of [...BASIC_FIELDS, ...ADVANCED_FIELDS]) await expectFieldValue(page, name, values[name]);
|
||||
};
|
||||
|
||||
const expectInheritedEdgeGridSignature = async (page, expectedNonce: string) => {
|
||||
await sendRequestAndWaitForResponse(page, 200);
|
||||
const body = await getResponseBody(page);
|
||||
expect(body).toContain(expectedNonce); // the inherited level's configured nonce was used
|
||||
expect(body).toContain('20240101T00:00:00+0000');
|
||||
expect(body).toContain('localhost:8081');
|
||||
};
|
||||
|
||||
test.describe('Akamai EdgeGrid Authentication — collection, folder & inherit', () => {
|
||||
test.afterEach(async ({ page }) => {
|
||||
await closeAllCollections(page);
|
||||
});
|
||||
|
||||
test('Collection level: renders, persists, and an inheriting request signs', async ({ page, createTmpDir }) => {
|
||||
test.setTimeout(120_000);
|
||||
const values = valuesFor('collection-nonce');
|
||||
await createCollection(page, 'edgegrid-collection', await createTmpDir());
|
||||
|
||||
// Collection settings open automatically on creation.
|
||||
await page.locator('.tab.auth').click();
|
||||
await selectAuthMode(page, 'Akamai EdgeGrid');
|
||||
|
||||
await test.step('EdgeGrid renders without crashing (regression: null edgegrid)', async () => {
|
||||
for (const name of BASIC_FIELDS) await expect(label(page, name)).toBeVisible();
|
||||
await expect(advancedHeader(page)).toBeVisible();
|
||||
});
|
||||
|
||||
await test.step('Fill all fields and save', async () => {
|
||||
await fillAllFields(page, values);
|
||||
await saveSettings(page);
|
||||
});
|
||||
|
||||
await test.step('Switching away and back restores the saved EdgeGrid credentials', async () => {
|
||||
await selectAuthMode(page, 'Basic Auth');
|
||||
await selectAuthMode(page, 'Akamai EdgeGrid');
|
||||
await verifyAllFields(page, values);
|
||||
});
|
||||
|
||||
await test.step('A request set to Inherit shows + signs with the collection EdgeGrid auth', async () => {
|
||||
await createRequest(page, 'inherit-request', 'edgegrid-collection', { url: SIMULATOR_URL });
|
||||
await openRequest(page, 'edgegrid-collection', 'inherit-request');
|
||||
await selectRequestPaneTab(page, 'Auth');
|
||||
await selectAuthMode(page, 'Inherit');
|
||||
|
||||
await expect(page.locator('.inherit-mode-text')).toHaveText('Akamai EdgeGrid');
|
||||
await expectInheritedEdgeGridSignature(page, 'collection-nonce');
|
||||
});
|
||||
});
|
||||
|
||||
test('Folder level: renders, persists, and an inheriting request signs', async ({ page, createTmpDir }) => {
|
||||
test.setTimeout(120_000);
|
||||
const values = valuesFor('folder-nonce');
|
||||
await createCollection(page, 'edgegrid-folder', await createTmpDir());
|
||||
await createFolder(page, 'folder-1', 'edgegrid-folder', true);
|
||||
|
||||
await page.locator('.collection-item-name').filter({ hasText: 'folder-1' }).dblclick();
|
||||
await page.locator('.tab.auth').click();
|
||||
await selectAuthMode(page, 'Akamai EdgeGrid');
|
||||
|
||||
await test.step('EdgeGrid renders at folder level', async () => {
|
||||
for (const name of BASIC_FIELDS) await expect(label(page, name)).toBeVisible();
|
||||
await expect(advancedHeader(page)).toBeVisible();
|
||||
});
|
||||
|
||||
await test.step('Fill all fields and save', async () => {
|
||||
await fillAllFields(page, values);
|
||||
await saveSettings(page);
|
||||
});
|
||||
|
||||
await test.step('Switching away and back restores the saved folder EdgeGrid credentials', async () => {
|
||||
await selectAuthMode(page, 'Basic Auth');
|
||||
await selectAuthMode(page, 'Akamai EdgeGrid');
|
||||
await verifyAllFields(page, values);
|
||||
});
|
||||
|
||||
await test.step('A request inside the folder set to Inherit signs with the folder EdgeGrid auth', async () => {
|
||||
await createRequest(page, 'folder-inherit-request', 'folder-1', { url: SIMULATOR_URL, inFolder: true });
|
||||
await openFolderRequest(page, 'folder-1', 'folder-inherit-request');
|
||||
await selectRequestPaneTab(page, 'Auth');
|
||||
await selectAuthMode(page, 'Inherit');
|
||||
|
||||
await expect(page.locator('.inherit-mode-text')).toHaveText('Akamai EdgeGrid');
|
||||
await expectInheritedEdgeGridSignature(page, 'folder-nonce');
|
||||
});
|
||||
});
|
||||
});
|
||||
60
tests/auth/akamai-edgegrid/akamai-edgegrid-runner.spec.ts
Normal file
60
tests/auth/akamai-edgegrid/akamai-edgegrid-runner.spec.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { test } from '../../../playwright';
|
||||
import {
|
||||
closeAllCollections,
|
||||
openCollection,
|
||||
openRequest,
|
||||
selectEnvironment,
|
||||
sendRequestAndWaitForResponse
|
||||
} from '../../utils/page';
|
||||
|
||||
/**
|
||||
* End-to-end EdgeGrid (EG1-HMAC-SHA256) auth against the local simulator
|
||||
* (packages/bruno-tests/src/auth/edgegrid.js, mounted at /api/auth/edgegrid). The simulator
|
||||
* independently re-derives the signature and returns 200/401 — so a green run proves the full
|
||||
* UI → prepare-request → interceptor → wire → server-validation path, with no real Akamai API.
|
||||
*/
|
||||
|
||||
const BRU_COLLECTION = 'edgegrid-testbench-bru';
|
||||
const YML_COLLECTION = 'edgegrid-testbench-yml';
|
||||
|
||||
const requests = [
|
||||
{ name: 'EdgeGrid GET 200', status: 200 },
|
||||
{ name: 'EdgeGrid GET 401', status: 401 },
|
||||
{ name: 'EdgeGrid POST JSON 200', status: 200 },
|
||||
{ name: 'EdgeGrid POST Pretty JSON 200', status: 200 }, // regression: body hashed as-sent
|
||||
{ name: 'EdgeGrid Signed Headers 200', status: 200 }, // regression: headers_to_sign canonicalization
|
||||
{ name: 'EdgeGrid Base URL Override 200', status: 200 },
|
||||
{ name: 'EdgeGrid Inherit 200', status: 200 } // request inherits collection-level EdgeGrid auth
|
||||
];
|
||||
|
||||
const sendAllRequests = async (page, collectionName: string) => {
|
||||
await openCollection(page, collectionName);
|
||||
await selectEnvironment(page, 'Local', 'collection');
|
||||
|
||||
for (const { name, status } of requests) {
|
||||
await test.step(name, async () => {
|
||||
await openRequest(page, collectionName, name);
|
||||
await sendRequestAndWaitForResponse(page, status);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
test.describe('Akamai EdgeGrid Runner', () => {
|
||||
test.afterAll(async ({ pageWithUserData: page }) => {
|
||||
await closeAllCollections(page);
|
||||
});
|
||||
|
||||
test.describe('[bru]', () => {
|
||||
test('Send individual requests', async ({ pageWithUserData: page }) => {
|
||||
test.setTimeout(3 * 60 * 1000);
|
||||
await sendAllRequests(page, BRU_COLLECTION);
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('[yml]', () => {
|
||||
test('Send individual requests', async ({ pageWithUserData: page }) => {
|
||||
test.setTimeout(3 * 60 * 1000);
|
||||
await sendAllRequests(page, YML_COLLECTION);
|
||||
});
|
||||
});
|
||||
});
|
||||
136
tests/auth/akamai-edgegrid/akamai-edgegrid.spec.ts
Normal file
136
tests/auth/akamai-edgegrid/akamai-edgegrid.spec.ts
Normal file
@@ -0,0 +1,136 @@
|
||||
import { expect, test } from '../../../playwright';
|
||||
import {
|
||||
closeAllCollections,
|
||||
closeAllTabs,
|
||||
createCollection,
|
||||
createRequest,
|
||||
getResponseBody,
|
||||
openRequest,
|
||||
saveRequest,
|
||||
selectRequestPaneTab,
|
||||
sendRequestAndWaitForResponse
|
||||
} from '../../utils/page';
|
||||
|
||||
// Shared test creds — the local simulator (packages/bruno-tests/src/auth/edgegrid.js) knows
|
||||
// this secret, so signed requests validate (200) and the response echoes the effective values.
|
||||
const { TEST_EDGEGRID } = require('../../../packages/bruno-tests/src/auth/edgegrid');
|
||||
const SIMULATOR_URL = 'http://localhost:8081/api/auth/edgegrid/resource';
|
||||
|
||||
const label = (page, text: string) => page.locator('label').filter({ hasText: text });
|
||||
const fieldRow = (page, text: string) => label(page, text).locator('..');
|
||||
const editorIn = (row) => row.locator('.single-line-editor-wrapper .CodeMirror');
|
||||
const advancedHeader = (page) => page.locator('.advanced-settings-header').filter({ hasText: 'Advanced Settings' });
|
||||
|
||||
const fieldValue = (page, fieldName: string): Promise<string> =>
|
||||
editorIn(fieldRow(page, fieldName)).evaluate((el: any) => el.CodeMirror.getValue());
|
||||
|
||||
const expectFieldValue = async (page, fieldName: string, expected: string) => {
|
||||
await expect.poll(() => fieldValue(page, fieldName)).toBe(expected);
|
||||
};
|
||||
|
||||
// Select-all then type so it works for empty fields and the prefilled Base URL alike.
|
||||
const setField = async (page, fieldName: string, value: string) => {
|
||||
await editorIn(fieldRow(page, fieldName)).click();
|
||||
await page.keyboard.press('ControlOrMeta+a');
|
||||
await page.keyboard.type(value);
|
||||
};
|
||||
|
||||
const selectEdgeGridMode = async (page) => {
|
||||
await page.locator('.auth-mode-label').click();
|
||||
await page.locator('.dropdown-item').filter({ hasText: 'Akamai EdgeGrid' }).click();
|
||||
};
|
||||
|
||||
const BASIC_FIELDS = ['Access Token', 'Client Token', 'Client Secret'];
|
||||
const ADVANCED_FIELDS = ['Base URL', 'Nonce', 'Timestamp', 'Headers to Sign', 'Max Body Size'];
|
||||
|
||||
// Exact values for the configure → save → send → persist round-trip. Base URL is the simulator
|
||||
// host (so the signature validates), and a fixed nonce/timestamp so we can assert the echo.
|
||||
const VALUES: Record<string, string> = {
|
||||
'Access Token': TEST_EDGEGRID.accessToken,
|
||||
'Client Token': TEST_EDGEGRID.clientToken,
|
||||
'Client Secret': TEST_EDGEGRID.clientSecret,
|
||||
'Base URL': 'http://localhost:8081',
|
||||
'Nonce': 'ui-nonce-123',
|
||||
'Timestamp': '20240101T00:00:00+0000',
|
||||
'Headers to Sign': 'X-Sign-A',
|
||||
'Max Body Size': '4096'
|
||||
};
|
||||
|
||||
test.describe('Akamai EdgeGrid Authentication (request level)', () => {
|
||||
test.afterAll(async ({ page }) => {
|
||||
await closeAllCollections(page);
|
||||
});
|
||||
|
||||
test('Configure, sign against the simulator, and persist all fields', async ({ page, createTmpDir }) => {
|
||||
test.setTimeout(90_000);
|
||||
|
||||
await createCollection(page, 'edgegrid-ui-test', await createTmpDir());
|
||||
await createRequest(page, 'edgegrid-request', 'edgegrid-ui-test', { url: SIMULATOR_URL });
|
||||
await openRequest(page, 'edgegrid-ui-test', 'edgegrid-request');
|
||||
await selectRequestPaneTab(page, 'Auth');
|
||||
await selectEdgeGridMode(page);
|
||||
|
||||
await test.step('Basic fields render after selecting EdgeGrid (regression: request-level render)', async () => {
|
||||
for (const name of BASIC_FIELDS) {
|
||||
await expect(label(page, name)).toBeVisible();
|
||||
}
|
||||
await expect(advancedHeader(page)).toBeVisible();
|
||||
});
|
||||
|
||||
await test.step('Base URL editor prefills with the request URL when empty', async () => {
|
||||
await expectFieldValue(page, 'Base URL', SIMULATOR_URL);
|
||||
});
|
||||
|
||||
await test.step('Fill all basic + advanced fields and save', async () => {
|
||||
for (const name of BASIC_FIELDS) await setField(page, name, VALUES[name]);
|
||||
for (const name of ADVANCED_FIELDS) await setField(page, name, VALUES[name]);
|
||||
await saveRequest(page);
|
||||
});
|
||||
|
||||
await test.step('Send the request — simulator validates and echoes the configured values', async () => {
|
||||
await sendRequestAndWaitForResponse(page, 200);
|
||||
const body = await getResponseBody(page);
|
||||
expect(body).toContain('ui-nonce-123'); // configured nonce was signed & sent
|
||||
expect(body).toContain('20240101T00:00:00+0000'); // configured timestamp
|
||||
expect(body).toContain('localhost:8081'); // base_url host the signature validated against
|
||||
});
|
||||
|
||||
await test.step('All fields persist across reopen (regression: draft-path save)', async () => {
|
||||
await closeAllTabs(page);
|
||||
await openRequest(page, 'edgegrid-ui-test', 'edgegrid-request');
|
||||
await selectRequestPaneTab(page, 'Auth');
|
||||
for (const name of BASIC_FIELDS) await expectFieldValue(page, name, VALUES[name]);
|
||||
for (const name of ADVANCED_FIELDS) await expectFieldValue(page, name, VALUES[name]);
|
||||
});
|
||||
});
|
||||
|
||||
test('Empty Advanced Settings fall back to auto-generated defaults', async ({ page, createTmpDir }) => {
|
||||
test.setTimeout(90_000);
|
||||
|
||||
await createCollection(page, 'edgegrid-defaults-test', await createTmpDir());
|
||||
await createRequest(page, 'edgegrid-defaults', 'edgegrid-defaults-test', { url: SIMULATOR_URL });
|
||||
await openRequest(page, 'edgegrid-defaults-test', 'edgegrid-defaults');
|
||||
await selectRequestPaneTab(page, 'Auth');
|
||||
await selectEdgeGridMode(page);
|
||||
|
||||
await test.step('Fill only the required credentials, leave Advanced Settings empty', async () => {
|
||||
await setField(page, 'Access Token', TEST_EDGEGRID.accessToken);
|
||||
await setField(page, 'Client Token', TEST_EDGEGRID.clientToken);
|
||||
await setField(page, 'Client Secret', TEST_EDGEGRID.clientSecret);
|
||||
await saveRequest(page);
|
||||
});
|
||||
|
||||
await test.step('Send request — simulator echoes the auto-generated defaults', async () => {
|
||||
await sendRequestAndWaitForResponse(page, 200);
|
||||
const body = await getResponseBody(page);
|
||||
// nonce auto-generated as a UUID v4
|
||||
expect(body).toMatch(/[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i);
|
||||
// timestamp auto-generated in EdgeGrid format YYYYMMDDTHH:MM:SS+0000
|
||||
expect(body).toMatch(/\d{8}T\d{2}:\d{2}:\d{2}\+0000/);
|
||||
// base_url defaulted to the request host
|
||||
expect(body).toContain('localhost:8081');
|
||||
// max_body_size defaulted to 131072
|
||||
expect(body).toContain('131072');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,27 @@
|
||||
meta {
|
||||
name: EdgeGrid Base URL Override 200
|
||||
type: http
|
||||
seq: 6
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{localhost}}/api/auth/edgegrid/resource
|
||||
body: none
|
||||
auth: akamai-edgegrid
|
||||
}
|
||||
|
||||
auth:akamai-edgegrid {
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
nonce:
|
||||
timestamp:
|
||||
baseURL: http://localhost:8081
|
||||
headersToSign:
|
||||
maxBodySize:
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.authenticated: eq true
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
meta {
|
||||
name: EdgeGrid GET 200
|
||||
type: http
|
||||
seq: 1
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{localhost}}/api/auth/edgegrid/resource
|
||||
body: none
|
||||
auth: akamai-edgegrid
|
||||
}
|
||||
|
||||
auth:akamai-edgegrid {
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
nonce:
|
||||
timestamp:
|
||||
baseURL:
|
||||
headersToSign:
|
||||
maxBodySize:
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.authenticated: eq true
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
meta {
|
||||
name: EdgeGrid GET 401
|
||||
type: http
|
||||
seq: 2
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{localhost}}/api/auth/edgegrid/resource
|
||||
body: none
|
||||
auth: akamai-edgegrid
|
||||
}
|
||||
|
||||
auth:akamai-edgegrid {
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: this-is-the-wrong-secret=
|
||||
nonce:
|
||||
timestamp:
|
||||
baseURL:
|
||||
headersToSign:
|
||||
maxBodySize:
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 401
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
meta {
|
||||
name: EdgeGrid Inherit 200
|
||||
type: http
|
||||
seq: 7
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{localhost}}/api/auth/edgegrid/resource
|
||||
body: none
|
||||
auth: inherit
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.authenticated: eq true
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
meta {
|
||||
name: EdgeGrid POST JSON 200
|
||||
type: http
|
||||
seq: 3
|
||||
}
|
||||
|
||||
post {
|
||||
url: {{localhost}}/api/auth/edgegrid/resource
|
||||
body: json
|
||||
auth: akamai-edgegrid
|
||||
}
|
||||
|
||||
auth:akamai-edgegrid {
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
nonce:
|
||||
timestamp:
|
||||
baseURL:
|
||||
headersToSign:
|
||||
maxBodySize:
|
||||
}
|
||||
|
||||
body:json {
|
||||
{"name":"bruno","kind":"compact"}
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.authenticated: eq true
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
meta {
|
||||
name: EdgeGrid POST Pretty JSON 200
|
||||
type: http
|
||||
seq: 4
|
||||
}
|
||||
|
||||
post {
|
||||
url: {{localhost}}/api/auth/edgegrid/resource
|
||||
body: json
|
||||
auth: akamai-edgegrid
|
||||
}
|
||||
|
||||
auth:akamai-edgegrid {
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
nonce:
|
||||
timestamp:
|
||||
baseURL:
|
||||
headersToSign:
|
||||
maxBodySize:
|
||||
}
|
||||
|
||||
body:json {
|
||||
{
|
||||
"name": "bruno",
|
||||
"kind": "pretty"
|
||||
}
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.authenticated: eq true
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
meta {
|
||||
name: EdgeGrid Signed Headers 200
|
||||
type: http
|
||||
seq: 5
|
||||
}
|
||||
|
||||
get {
|
||||
url: {{localhost}}/api/auth/edgegrid/resource
|
||||
body: none
|
||||
auth: akamai-edgegrid
|
||||
}
|
||||
|
||||
headers {
|
||||
X-Test1: my-signed-value
|
||||
x-eg-headers-to-sign: X-Test1
|
||||
}
|
||||
|
||||
auth:akamai-edgegrid {
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
nonce:
|
||||
timestamp:
|
||||
baseURL:
|
||||
headersToSign: X-Test1
|
||||
maxBodySize:
|
||||
}
|
||||
|
||||
assert {
|
||||
res.status: eq 200
|
||||
res.body.authenticated: eq true
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": "1",
|
||||
"name": "edgegrid-testbench-bru",
|
||||
"type": "collection"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
auth {
|
||||
mode: akamai-edgegrid
|
||||
}
|
||||
|
||||
auth:akamai-edgegrid {
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
nonce:
|
||||
timestamp:
|
||||
baseURL:
|
||||
headersToSign:
|
||||
maxBodySize:
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
vars {
|
||||
localhost: http://localhost:8081
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
info:
|
||||
name: EdgeGrid Base URL Override 200
|
||||
type: http
|
||||
seq: 6
|
||||
|
||||
http:
|
||||
method: GET
|
||||
url: "{{localhost}}/api/auth/edgegrid/resource"
|
||||
auth:
|
||||
type: akamai-edgegrid
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
baseURL: http://localhost:8081
|
||||
|
||||
runtime:
|
||||
assertions:
|
||||
- expression: res.status
|
||||
operator: eq
|
||||
value: "200"
|
||||
- expression: res.body.authenticated
|
||||
operator: eq
|
||||
value: "true"
|
||||
|
||||
settings:
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
followRedirects: true
|
||||
maxRedirects: 5
|
||||
@@ -0,0 +1,28 @@
|
||||
info:
|
||||
name: EdgeGrid GET 200
|
||||
type: http
|
||||
seq: 1
|
||||
|
||||
http:
|
||||
method: GET
|
||||
url: "{{localhost}}/api/auth/edgegrid/resource"
|
||||
auth:
|
||||
type: akamai-edgegrid
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
|
||||
runtime:
|
||||
assertions:
|
||||
- expression: res.status
|
||||
operator: eq
|
||||
value: "200"
|
||||
- expression: res.body.authenticated
|
||||
operator: eq
|
||||
value: "true"
|
||||
|
||||
settings:
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
followRedirects: true
|
||||
maxRedirects: 5
|
||||
@@ -0,0 +1,25 @@
|
||||
info:
|
||||
name: EdgeGrid GET 401
|
||||
type: http
|
||||
seq: 2
|
||||
|
||||
http:
|
||||
method: GET
|
||||
url: "{{localhost}}/api/auth/edgegrid/resource"
|
||||
auth:
|
||||
type: akamai-edgegrid
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: this-is-the-wrong-secret=
|
||||
|
||||
runtime:
|
||||
assertions:
|
||||
- expression: res.status
|
||||
operator: eq
|
||||
value: "401"
|
||||
|
||||
settings:
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
followRedirects: true
|
||||
maxRedirects: 5
|
||||
@@ -0,0 +1,24 @@
|
||||
info:
|
||||
name: EdgeGrid Inherit 200
|
||||
type: http
|
||||
seq: 7
|
||||
|
||||
http:
|
||||
method: GET
|
||||
url: "{{localhost}}/api/auth/edgegrid/resource"
|
||||
auth: inherit
|
||||
|
||||
runtime:
|
||||
assertions:
|
||||
- expression: res.status
|
||||
operator: eq
|
||||
value: "200"
|
||||
- expression: res.body.authenticated
|
||||
operator: eq
|
||||
value: "true"
|
||||
|
||||
settings:
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
followRedirects: true
|
||||
maxRedirects: 5
|
||||
@@ -0,0 +1,32 @@
|
||||
info:
|
||||
name: EdgeGrid POST JSON 200
|
||||
type: http
|
||||
seq: 3
|
||||
|
||||
http:
|
||||
method: POST
|
||||
url: "{{localhost}}/api/auth/edgegrid/resource"
|
||||
auth:
|
||||
type: akamai-edgegrid
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
body:
|
||||
type: json
|
||||
data: |-
|
||||
{"name":"bruno","kind":"compact"}
|
||||
|
||||
runtime:
|
||||
assertions:
|
||||
- expression: res.status
|
||||
operator: eq
|
||||
value: "200"
|
||||
- expression: res.body.authenticated
|
||||
operator: eq
|
||||
value: "true"
|
||||
|
||||
settings:
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
followRedirects: true
|
||||
maxRedirects: 5
|
||||
@@ -0,0 +1,35 @@
|
||||
info:
|
||||
name: EdgeGrid POST Pretty JSON 200
|
||||
type: http
|
||||
seq: 4
|
||||
|
||||
http:
|
||||
method: POST
|
||||
url: "{{localhost}}/api/auth/edgegrid/resource"
|
||||
auth:
|
||||
type: akamai-edgegrid
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
body:
|
||||
type: json
|
||||
data: |-
|
||||
{
|
||||
"name": "bruno",
|
||||
"kind": "pretty"
|
||||
}
|
||||
|
||||
runtime:
|
||||
assertions:
|
||||
- expression: res.status
|
||||
operator: eq
|
||||
value: "200"
|
||||
- expression: res.body.authenticated
|
||||
operator: eq
|
||||
value: "true"
|
||||
|
||||
settings:
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
followRedirects: true
|
||||
maxRedirects: 5
|
||||
@@ -0,0 +1,34 @@
|
||||
info:
|
||||
name: EdgeGrid Signed Headers 200
|
||||
type: http
|
||||
seq: 5
|
||||
|
||||
http:
|
||||
method: GET
|
||||
url: "{{localhost}}/api/auth/edgegrid/resource"
|
||||
headers:
|
||||
- name: X-Test1
|
||||
value: my-signed-value
|
||||
- name: x-eg-headers-to-sign
|
||||
value: X-Test1
|
||||
auth:
|
||||
type: akamai-edgegrid
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
headersToSign: X-Test1
|
||||
|
||||
runtime:
|
||||
assertions:
|
||||
- expression: res.status
|
||||
operator: eq
|
||||
value: "200"
|
||||
- expression: res.body.authenticated
|
||||
operator: eq
|
||||
value: "true"
|
||||
|
||||
settings:
|
||||
encodeUrl: true
|
||||
timeout: 0
|
||||
followRedirects: true
|
||||
maxRedirects: 5
|
||||
@@ -0,0 +1,5 @@
|
||||
name: Local
|
||||
|
||||
variables:
|
||||
- name: localhost
|
||||
value: http://localhost:8081
|
||||
@@ -0,0 +1,13 @@
|
||||
opencollection: '1.0.0'
|
||||
|
||||
info:
|
||||
name: edgegrid-testbench-yml
|
||||
|
||||
request:
|
||||
auth:
|
||||
type: akamai-edgegrid
|
||||
accessToken: akab-access-token-bruno-test
|
||||
clientToken: akab-client-token-bruno-test
|
||||
clientSecret: dGVzdC1jbGllbnQtc2VjcmV0LWZvci1icnVuby1lZGdlZ3JpZA==
|
||||
|
||||
bundled: false
|
||||
10
tests/auth/akamai-edgegrid/init-user-data/preferences.json
Normal file
10
tests/auth/akamai-edgegrid/init-user-data/preferences.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"maximized": false,
|
||||
"lastOpenedCollections": ["{{collectionPath}}/bru", "{{collectionPath}}/yml"],
|
||||
"preferences": {
|
||||
"onboarding": {
|
||||
"hasLaunchedBefore": true,
|
||||
"hasSeenWelcomeModal": true
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user