Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ import {
listAuthScenarios,
listMetadataScenarios,
listCoreScenarios,
listExtensionScenarios
listExtensionScenarios,
listBackcompatScenarios
} from './scenarios';
import { ConformanceCheck } from './types';
import { ClientOptionsSchema, ServerOptionsSchema } from './schemas';
Expand Down Expand Up @@ -69,6 +70,7 @@ program
all: listScenarios,
core: listCoreScenarios,
extensions: listExtensionScenarios,
backcompat: listBackcompatScenarios,
auth: listAuthScenarios,
metadata: listMetadataScenarios,
'sep-835': () =>
Expand Down Expand Up @@ -182,7 +184,7 @@ program
console.error('\nAvailable client scenarios:');
listScenarios().forEach((s) => console.error(` - ${s}`));
console.error(
'\nAvailable suites: all, core, extensions, auth, metadata, sep-835'
'\nAvailable suites: all, core, extensions, backcompat, auth, metadata, sep-835'
);
process.exit(1);
}
Expand Down
15 changes: 14 additions & 1 deletion src/scenarios/client/auth/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { authScenariosList } from './index';
import { authScenariosList, backcompatScenariosList } from './index';
import {
runClientAgainstScenario,
InlineClientRunner
Expand Down Expand Up @@ -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', () => {
test('bad client requests root PRM location', async () => {
const runner = new InlineClientRunner(badPrmClient);
Expand Down
8 changes: 6 additions & 2 deletions src/scenarios/client/auth/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ import { PreRegistrationScenario } from './pre-registration';
export const authScenariosList: Scenario[] = [
...metadataScenarios,
new AuthBasicCIMDScenario(),
new Auth20250326OAuthMetadataBackcompatScenario(),
new Auth20250326OEndpointFallbackScenario(),
new ScopeFromWwwAuthenticateScenario(),
new ScopeFromScopesSupportedScenario(),
new ScopeOmittedWhenUndefinedScenario(),
Expand All @@ -42,6 +40,12 @@ export const authScenariosList: Scenario[] = [
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)
export const extensionScenariosList: Scenario[] = [
new ClientCredentialsJwtScenario(),
Expand Down
13 changes: 11 additions & 2 deletions src/scenarios/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,11 @@ import {

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';

// Pending client scenarios (not yet fully tested/implemented)
Expand Down Expand Up @@ -137,13 +141,14 @@ export const clientScenarios = new Map<string, ClientScenario>(
allClientScenariosList.map((scenario) => [scenario.name, scenario])
);

// All client test scenarios (core + extensions)
// All client test scenarios (core + backcompat + extensions)
const scenariosList: Scenario[] = [
new InitializeScenario(),
new ToolsCallScenario(),
new ElicitationClientDefaultsScenario(),
new SSERetryScenario(),
...authScenariosList,
...backcompatScenariosList,
...extensionScenariosList
];

Expand Down Expand Up @@ -201,4 +206,8 @@ export function listExtensionScenarios(): string[] {
return extensionScenariosList.map((scenario) => scenario.name);
}

export function listBackcompatScenarios(): string[] {
return backcompatScenariosList.map((scenario) => scenario.name);
}

export { listMetadataScenarios };
Loading