feat: move march back-compat auth tests to optional backcompat suite (#127)
Move auth/2025-03-26-oauth-metadata-backcompat and auth/2025-03-26-oauth-endpoint-fallback out of the required authScenariosList into a new backcompatScenariosList. These test backward compatibility with the old 2025-03-26 auth spec (no PRM, OAuth metadata at server root) which is not part of the current spec requirements. - Add new 'backcompat' client suite - Back-compat scenarios remain in the 'all' suite - Removed from 'core' and 'auth' suites - Add separate test describe block for back-compat scenarios Closes #126
This commit is contained in:
parent
4f91d7f324
commit
df87099431
4 changed files with 35 additions and 7 deletions
|
|
@ -18,7 +18,8 @@ import {
|
||||||
listAuthScenarios,
|
listAuthScenarios,
|
||||||
listMetadataScenarios,
|
listMetadataScenarios,
|
||||||
listCoreScenarios,
|
listCoreScenarios,
|
||||||
listExtensionScenarios
|
listExtensionScenarios,
|
||||||
|
listBackcompatScenarios
|
||||||
} from './scenarios';
|
} from './scenarios';
|
||||||
import { ConformanceCheck } from './types';
|
import { ConformanceCheck } from './types';
|
||||||
import { ClientOptionsSchema, ServerOptionsSchema } from './schemas';
|
import { ClientOptionsSchema, ServerOptionsSchema } from './schemas';
|
||||||
|
|
@ -69,6 +70,7 @@ program
|
||||||
all: listScenarios,
|
all: listScenarios,
|
||||||
core: listCoreScenarios,
|
core: listCoreScenarios,
|
||||||
extensions: listExtensionScenarios,
|
extensions: listExtensionScenarios,
|
||||||
|
backcompat: listBackcompatScenarios,
|
||||||
auth: listAuthScenarios,
|
auth: listAuthScenarios,
|
||||||
metadata: listMetadataScenarios,
|
metadata: listMetadataScenarios,
|
||||||
'sep-835': () =>
|
'sep-835': () =>
|
||||||
|
|
@ -182,7 +184,7 @@ program
|
||||||
console.error('\nAvailable client scenarios:');
|
console.error('\nAvailable client scenarios:');
|
||||||
listScenarios().forEach((s) => console.error(` - ${s}`));
|
listScenarios().forEach((s) => console.error(` - ${s}`));
|
||||||
console.error(
|
console.error(
|
||||||
'\nAvailable suites: all, core, extensions, auth, metadata, sep-835'
|
'\nAvailable suites: all, core, extensions, backcompat, auth, metadata, sep-835'
|
||||||
);
|
);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { authScenariosList } from './index';
|
import { authScenariosList, backcompatScenariosList } from './index';
|
||||||
import {
|
import {
|
||||||
runClientAgainstScenario,
|
runClientAgainstScenario,
|
||||||
InlineClientRunner
|
InlineClientRunner
|
||||||
|
|
@ -48,6 +48,19 @@ describe('Client Auth Scenarios', () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Client Back-compat Scenarios', () => {
|
||||||
|
for (const scenario of backcompatScenariosList) {
|
||||||
|
test(`${scenario.name} passes`, async () => {
|
||||||
|
const clientFn = getHandler(scenario.name);
|
||||||
|
if (!clientFn) {
|
||||||
|
throw new Error(`No handler registered for scenario: ${scenario.name}`);
|
||||||
|
}
|
||||||
|
const runner = new InlineClientRunner(clientFn);
|
||||||
|
await runClientAgainstScenario(runner, scenario.name);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
describe('Negative tests', () => {
|
describe('Negative tests', () => {
|
||||||
test('bad client requests root PRM location', async () => {
|
test('bad client requests root PRM location', async () => {
|
||||||
const runner = new InlineClientRunner(badPrmClient);
|
const runner = new InlineClientRunner(badPrmClient);
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,6 @@ import { PreRegistrationScenario } from './pre-registration';
|
||||||
export const authScenariosList: Scenario[] = [
|
export const authScenariosList: Scenario[] = [
|
||||||
...metadataScenarios,
|
...metadataScenarios,
|
||||||
new AuthBasicCIMDScenario(),
|
new AuthBasicCIMDScenario(),
|
||||||
new Auth20250326OAuthMetadataBackcompatScenario(),
|
|
||||||
new Auth20250326OEndpointFallbackScenario(),
|
|
||||||
new ScopeFromWwwAuthenticateScenario(),
|
new ScopeFromWwwAuthenticateScenario(),
|
||||||
new ScopeFromScopesSupportedScenario(),
|
new ScopeFromScopesSupportedScenario(),
|
||||||
new ScopeOmittedWhenUndefinedScenario(),
|
new ScopeOmittedWhenUndefinedScenario(),
|
||||||
|
|
@ -42,6 +40,12 @@ export const authScenariosList: Scenario[] = [
|
||||||
new PreRegistrationScenario()
|
new PreRegistrationScenario()
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Back-compat scenarios (optional - backward compatibility with older spec versions)
|
||||||
|
export const backcompatScenariosList: Scenario[] = [
|
||||||
|
new Auth20250326OAuthMetadataBackcompatScenario(),
|
||||||
|
new Auth20250326OEndpointFallbackScenario()
|
||||||
|
];
|
||||||
|
|
||||||
// Extension scenarios (optional for tier 1 - protocol extensions)
|
// Extension scenarios (optional for tier 1 - protocol extensions)
|
||||||
export const extensionScenariosList: Scenario[] = [
|
export const extensionScenariosList: Scenario[] = [
|
||||||
new ClientCredentialsJwtScenario(),
|
new ClientCredentialsJwtScenario(),
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,11 @@ import {
|
||||||
|
|
||||||
import { DNSRebindingProtectionScenario } from './server/dns-rebinding';
|
import { DNSRebindingProtectionScenario } from './server/dns-rebinding';
|
||||||
|
|
||||||
import { authScenariosList, extensionScenariosList } from './client/auth/index';
|
import {
|
||||||
|
authScenariosList,
|
||||||
|
backcompatScenariosList,
|
||||||
|
extensionScenariosList
|
||||||
|
} from './client/auth/index';
|
||||||
import { listMetadataScenarios } from './client/auth/discovery-metadata';
|
import { listMetadataScenarios } from './client/auth/discovery-metadata';
|
||||||
|
|
||||||
// Pending client scenarios (not yet fully tested/implemented)
|
// Pending client scenarios (not yet fully tested/implemented)
|
||||||
|
|
@ -137,13 +141,14 @@ export const clientScenarios = new Map<string, ClientScenario>(
|
||||||
allClientScenariosList.map((scenario) => [scenario.name, scenario])
|
allClientScenariosList.map((scenario) => [scenario.name, scenario])
|
||||||
);
|
);
|
||||||
|
|
||||||
// All client test scenarios (core + extensions)
|
// All client test scenarios (core + backcompat + extensions)
|
||||||
const scenariosList: Scenario[] = [
|
const scenariosList: Scenario[] = [
|
||||||
new InitializeScenario(),
|
new InitializeScenario(),
|
||||||
new ToolsCallScenario(),
|
new ToolsCallScenario(),
|
||||||
new ElicitationClientDefaultsScenario(),
|
new ElicitationClientDefaultsScenario(),
|
||||||
new SSERetryScenario(),
|
new SSERetryScenario(),
|
||||||
...authScenariosList,
|
...authScenariosList,
|
||||||
|
...backcompatScenariosList,
|
||||||
...extensionScenariosList
|
...extensionScenariosList
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -201,4 +206,8 @@ export function listExtensionScenarios(): string[] {
|
||||||
return extensionScenariosList.map((scenario) => scenario.name);
|
return extensionScenariosList.map((scenario) => scenario.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function listBackcompatScenarios(): string[] {
|
||||||
|
return backcompatScenariosList.map((scenario) => scenario.name);
|
||||||
|
}
|
||||||
|
|
||||||
export { listMetadataScenarios };
|
export { listMetadataScenarios };
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue