use of org.keycloak.testsuite.arquillian.annotation.ModelTest in project keycloak by keycloak.
the class ClientModelTest method testClientScopesBinding.
@Test
@ModelTest
public void testClientScopesBinding(KeycloakSession session) {
AtomicReference<ClientScopeModel> scope1Atomic = new AtomicReference<>();
AtomicReference<ClientScopeModel> scope2Atomic = new AtomicReference<>();
AtomicReference<ClientScopeModel> scope3Atomic = new AtomicReference<>();
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionClientScopeBind1) -> {
currentSession = sessionClientScopeBind1;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
client = realm.addClient("templatized");
client.setProtocol(OIDCLoginProtocol.LOGIN_PROTOCOL);
ClientScopeModel scope1 = realm.addClientScope("scope1");
scope1.setProtocol(OIDCLoginProtocol.LOGIN_PROTOCOL);
scope1Atomic.set(scope1);
ClientScopeModel scope2 = realm.addClientScope("scope2");
scope2.setProtocol(OIDCLoginProtocol.LOGIN_PROTOCOL);
scope2Atomic.set(scope2);
ClientScopeModel scope3 = realm.addClientScope("scope3");
scope3.setProtocol(OIDCLoginProtocol.LOGIN_PROTOCOL);
scope3Atomic.set(scope3);
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionClientScopeBind2) -> {
currentSession = sessionClientScopeBind2;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
client = realm.getClientByClientId("templatized");
ClientScopeModel scope1 = scope1Atomic.get();
ClientScopeModel scope2 = scope2Atomic.get();
ClientScopeModel scope3 = scope3Atomic.get();
scope1 = realm.getClientScopeById(scope1.getId());
scope2 = realm.getClientScopeById(scope2.getId());
scope3 = realm.getClientScopeById(scope3.getId());
client.addClientScope(scope1, true);
client.addClientScope(scope2, false);
client.addClientScope(scope3, false);
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionClientScopeBind3) -> {
currentSession = sessionClientScopeBind3;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
client = realm.getClientByClientId("templatized");
ClientScopeModel scope1 = scope1Atomic.get();
ClientScopeModel scope2 = scope2Atomic.get();
Map<String, ClientScopeModel> clientScopes1 = client.getClientScopes(true);
assertThat("Client Scope contains 'scope1':", clientScopes1.containsKey("scope1"), is(true));
assertThat("Client Scope contains 'scope2':", clientScopes1.containsKey("scope2"), is(false));
assertThat("Client Scope contains 'scope3':", clientScopes1.containsKey("scope3"), is(false));
Map<String, ClientScopeModel> clientScopes2 = client.getClientScopes(false);
assertThat("Client Scope contains 'scope1':", clientScopes2.containsKey("scope1"), is(false));
assertThat("Client Scope contains 'scope2':", clientScopes2.containsKey("scope2"), is(true));
assertThat("Client Scope contains 'scope3':", clientScopes2.containsKey("scope3"), is(true));
// Remove some binding and check it was removed
client.removeClientScope(scope1);
client.removeClientScope(scope2);
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionClientScopeBind3) -> {
currentSession = sessionClientScopeBind3;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
client = realm.getClientByClientId("templatized");
ClientScopeModel scope3 = scope3Atomic.get();
Map<String, ClientScopeModel> clientScopes1 = client.getClientScopes(true);
assertThat("Client Scope contains 'scope1':", clientScopes1.containsKey("scope1"), is(false));
assertThat("Client Scope contains 'scope2':", clientScopes1.containsKey("scope2"), is(false));
assertThat("Client Scope contains 'scope3':", clientScopes1.containsKey("scope3"), is(false));
Map<String, ClientScopeModel> clientScopes2 = client.getClientScopes(false);
assertThat("Client Scope contains 'scope1':", clientScopes2.containsKey("scope1"), is(false));
assertThat("Client Scope contains 'scope2':", clientScopes2.containsKey("scope2"), is(false));
assertThat("Client Scope contains 'scope3':", clientScopes2.containsKey("scope3"), is(true));
currentSession.clients().removeClient(realm, client.getId());
client.removeClientScope(scope3);
realm.removeClientScope(scope1Atomic.get().getId());
realm.removeClientScope(scope2Atomic.get().getId());
realm.removeClientScope(scope3Atomic.get().getId());
});
}
use of org.keycloak.testsuite.arquillian.annotation.ModelTest in project keycloak by keycloak.
the class ClientModelTest method testRealmRoleRemovalAndClientScope.
@Test
@ModelTest
public void testRealmRoleRemovalAndClientScope(KeycloakSession session) {
// Client "from" has a role. Assign this role to a scope to client "scoped". Delete the role and make sure
// cache gets cleared
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionRealmRoleRemove1) -> {
currentSession = sessionRealmRoleRemove1;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
RoleModel role = realm.addRole("clientRole");
roleId = role.getId();
ClientModel scoped = realm.addClient("scoped");
scoped.setFullScopeAllowed(false);
scoped.addScopeMapping(role);
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionRealmRoleRemove2) -> {
currentSession = sessionRealmRoleRemove2;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
RoleModel role = currentSession.roles().getRoleById(realm, roleId);
realm.removeRole(role);
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionRealmRoleRemove3) -> {
currentSession = sessionRealmRoleRemove3;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
ClientModel scoped = realm.getClientByClientId("scoped");
// used to throw an NPE
assertThat("Scope Mappings is not 0", scoped.getScopeMappingsStream().count(), is(0L));
currentSession.clients().removeClient(realm, scoped.getId());
});
}
use of org.keycloak.testsuite.arquillian.annotation.ModelTest in project keycloak by keycloak.
the class ClientModelTest method testCircularClientScopes.
@Test
@ModelTest
public void testCircularClientScopes(KeycloakSession session) {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionCircuilarClient1) -> {
currentSession = sessionCircuilarClient1;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
ClientModel scoped1 = realm.addClient("scoped1");
RoleModel role1 = scoped1.addRole("role1");
ClientModel scoped2 = realm.addClient("scoped2");
RoleModel role2 = scoped2.addRole("role2");
scoped1.addScopeMapping(role2);
scoped2.addScopeMapping(role1);
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionCircuilarClient2) -> {
currentSession = sessionCircuilarClient2;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
// this hit the circular cache and failed with a stack overflow
ClientModel scoped1 = realm.getClientByClientId("scoped1");
currentSession.clients().removeClient(realm, scoped1.getId());
});
}
use of org.keycloak.testsuite.arquillian.annotation.ModelTest in project keycloak by keycloak.
the class ClientModelTest method persist.
@Test
@ModelTest
public void persist(KeycloakSession session) {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sessionPersist) -> {
currentSession = sessionPersist;
RealmModel realm = currentSession.realms().getRealmByName(realmName);
client = setUpClient(realm);
ClientModel actual = realm.getClientByClientId("app-name");
assertEquals(client, actual);
client.unregisterNode("node1");
client.unregisterNode("10.20.30.40");
currentSession.clients().removeClient(realm, client.getId());
});
}
use of org.keycloak.testsuite.arquillian.annotation.ModelTest in project keycloak by keycloak.
the class AuthenticationSessionProviderTest method testOnClientRemoved.
@Test
@ModelTest
public void testOnClientRemoved(KeycloakSession session) {
AtomicReference<String> tab1ID = new AtomicReference<>();
AtomicReference<String> tab2ID = new AtomicReference<>();
AtomicReference<String> authSessionID = new AtomicReference<>();
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sesRealmRemoved1) -> {
KeycloakSession currentSession = sesRealmRemoved1;
RealmModel realm = currentSession.realms().getRealm("test");
authSessionID.set(currentSession.authenticationSessions().createRootAuthenticationSession(realm).getId());
AuthenticationSessionModel authSession1 = currentSession.authenticationSessions().getRootAuthenticationSession(realm, authSessionID.get()).createAuthenticationSession(realm.getClientByClientId("test-app"));
AuthenticationSessionModel authSession2 = currentSession.authenticationSessions().getRootAuthenticationSession(realm, authSessionID.get()).createAuthenticationSession(realm.getClientByClientId("third-party"));
tab1ID.set(authSession1.getTabId());
tab2ID.set(authSession2.getTabId());
authSession1.setAuthNote("foo", "bar");
authSession2.setAuthNote("foo", "baz");
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sesRealmRemoved1) -> {
KeycloakSession currentSession = sesRealmRemoved1;
RealmModel realm = currentSession.realms().getRealm("test");
RootAuthenticationSessionModel rootAuthSession = currentSession.authenticationSessions().getRootAuthenticationSession(realm, authSessionID.get());
assertThat(rootAuthSession.getAuthenticationSessions().size(), is(2));
assertThat(rootAuthSession.getAuthenticationSession(realm.getClientByClientId("test-app"), tab1ID.get()).getAuthNote("foo"), is("bar"));
assertThat(rootAuthSession.getAuthenticationSession(realm.getClientByClientId("third-party"), tab2ID.get()).getAuthNote("foo"), is("baz"));
new ClientManager(new RealmManager(currentSession)).removeClient(realm, realm.getClientByClientId("third-party"));
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession sesRealmRemoved1) -> {
KeycloakSession currentSession = sesRealmRemoved1;
RealmModel realm = currentSession.realms().getRealm("test");
RootAuthenticationSessionModel rootAuthSession = currentSession.authenticationSessions().getRootAuthenticationSession(realm, authSessionID.get());
assertThat(rootAuthSession.getAuthenticationSession(realm.getClientByClientId("test-app"), tab1ID.get()).getAuthNote("foo"), is("bar"));
assertThat(rootAuthSession.getAuthenticationSession(realm.getClientByClientId("third-party"), tab2ID.get()), nullValue());
// Revert client
realm.addClient("third-party");
});
}
Aggregations