KeycloakHelper
Class for deploying and managing Keycloak in OpenShift.
Import
import { KeycloakHelper } from "@red-hat-developer-hub/e2e-test-utils/keycloak";Constructor
new KeycloakHelper(options?: KeycloakDeploymentOptions)| Parameter | Type | Description |
|---|---|---|
options | KeycloakDeploymentOptions | Optional deployment configuration |
Properties
keycloakUrl
get keycloakUrl(): stringThe URL of the Keycloak instance.
realm
get realm(): stringConfigured realm name.
clientId
get clientId(): stringConfigured OIDC client ID.
clientSecret
get clientSecret(): stringConfigured OIDC client secret.
deploymentConfig
get deploymentConfig(): KeycloakDeploymentConfigCurrent deployment configuration.
k8sClient
get k8sClient(): KubernetesClientHelperKubernetes client instance.
Methods
deploy()
async deploy(): Promise<void>Deploy Keycloak using Bitnami Helm chart.
configureForRHDH()
async configureForRHDH(options?: object): Promise<void>Configure realm, client, groups, and users for RHDH.
isRunning()
async isRunning(): Promise<boolean>Check if Keycloak is accessible.
connect()
async connect(config: KeycloakConnectionConfig): Promise<void>Connect to an existing Keycloak instance.
createUsersAndGroups()
async createUsersAndGroups(realm: string, options?: { users?: KeycloakUserConfig[]; groups?: KeycloakGroupConfig[]; }): Promise<void>Create new users and groups in a realm.
deleteUsersAndGroups()
async deleteUsersAndGroups(realm: string, options?: { users?: Array<KeycloakUserConfig | string>; groups?: Array<KeycloakGroupConfig | string> }): Promise<void>Delete users and groups from a realm.
createRealm()
async createRealm(config: KeycloakRealmConfig): Promise<void>Create a new realm.
createClient()
async createClient(realm: string, config: KeycloakClientConfig): Promise<void>Create a client in a realm.
createGroup()
async createGroup(realm: string, config: KeycloakGroupConfig): Promise<void>Create a group in a realm.
createUser()
async createUser(realm: string, config: KeycloakUserConfig): Promise<void>Create a user with optional group membership.
getUsers()
async getUsers(realm: string): Promise<UserRepresentation[]>Get all users in a realm.
getGroups()
async getGroups(realm: string): Promise<GroupRepresentation[]>Get all groups in a realm.
getGroupsOfUser()
async getGroupsOfUser(realm: string, username: string): Promise<KeycloakGroupConfig[]>Get the list of groups for a user in a realm. The user is resolved by username; no user id is exposed. Useful for assertions in e2e tests (e.g. verifying Backstage user page shows the same groups as Keycloak).
| Parameter | Type | Description |
|---|---|---|
realm | string | Realm name |
username | string | Username of the user |
Returns: KeycloakGroupConfig[] (at least name).
Requires connect() or deploy() to have been called first.
deleteUser()
async deleteUser(realm: string, username: string): Promise<void>Delete a user.
WARNING
Deleting default Keycloak users (see DEFAULT_USERS in constants, e.g. test1, test2) is not permitted and will throw an error.
deleteGroup()
async deleteGroup(realm: string, groupName: string): Promise<void>Delete a group.
WARNING
Deleting default Keycloak groups (see DEFAULT_GROUPS in constants, e.g. developers, admins, viewers) is not permitted and will throw an error.
deleteRealm()
async deleteRealm(realm: string): Promise<void>Delete a realm.
teardown()
async teardown(): Promise<void>Delete the Keycloak namespace.
waitUntilReady()
async waitUntilReady(timeout?: number): Promise<void>Wait for Keycloak StatefulSet to be ready.
Example
import { KeycloakHelper } from "@red-hat-developer-hub/e2e-test-utils/keycloak";
const keycloak = new KeycloakHelper({
namespace: "rhdh-keycloak",
adminUser: "admin",
adminPassword: "admin123",
});
await keycloak.deploy();
await keycloak.configureForRHDH();
// Create custom user
await keycloak.createUser("rhdh", {
username: "custom-user",
password: "password123",
groups: ["developers"],
});
console.log(`Keycloak URL: ${keycloak.keycloakUrl}`);
console.log(`Realm: ${keycloak.realm}`);
console.log(`Client ID: ${keycloak.clientId}`);