Migrate parts of model package to new test framework (#44988)

Part of #44983

Signed-off-by: stianst <stianst@gmail.com>
This commit is contained in:
Stian Thorgersen 2025-12-18 16:48:58 +01:00 committed by GitHub
parent ff1274c07a
commit 47c1afde5a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 271 additions and 339 deletions

View file

@ -1,28 +1,26 @@
package org.keycloak.testsuite.model;
import java.util.List;
package org.keycloak.tests.model;
import org.keycloak.models.KeycloakSession;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.services.managers.RealmManager;
import org.keycloak.testsuite.AbstractKeycloakTest;
import org.keycloak.testsuite.arquillian.annotation.ModelTest;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.remote.annotations.TestOnServer;
import org.keycloak.utils.ReservedCharValidator;
import org.junit.Test;
import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.Assert.fail;
@KeycloakIntegrationTest
public class BadRealmTest {
@InjectRealm(attachTo = "master")
ManagedRealm realm;
public class BadRealmTest extends AbstractKeycloakTest {
private String name = "MyRealm";
private String id = "MyId";
private String script = "<script>alert(4)</script>";
public void addTestRealms(List<RealmRepresentation> testRealms) {
}
@Test
@ModelTest
@TestOnServer
public void testBadRealmName(KeycloakSession session) {
RealmManager manager = new RealmManager(session);
try {
@ -31,8 +29,7 @@ public class BadRealmTest extends AbstractKeycloakTest {
} catch (ReservedCharValidator.ReservedCharException ex) {}
}
@Test
@ModelTest
@TestOnServer
public void testBadRealmId(KeycloakSession session) {
RealmManager manager = new RealmManager(session);
try {

View file

@ -15,7 +15,7 @@
* limitations under the License.
*/
package org.keycloak.testsuite.model;
package org.keycloak.tests.model;
import java.util.Set;
import java.util.UUID;
@ -28,28 +28,36 @@ import org.keycloak.models.UserModel;
import org.keycloak.models.UserSessionModel;
import org.keycloak.models.cache.infinispan.ClientAdapter;
import org.keycloak.models.cache.infinispan.RealmAdapter;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.testsuite.AbstractTestRealmKeycloakTest;
import org.keycloak.testsuite.Assert;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.realm.RealmConfig;
import org.keycloak.testframework.realm.RealmConfigBuilder;
import org.keycloak.testframework.remote.runonserver.InjectRunOnServer;
import org.keycloak.testframework.remote.runonserver.RunOnServerClient;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class CacheTest extends AbstractTestRealmKeycloakTest {
@KeycloakIntegrationTest
public class CacheTest {
@Override
public void configureTestRealm(RealmRepresentation testRealm) {
}
@InjectRealm(config = CacheRealmConfig.class)
ManagedRealm managedRealm;
@InjectRunOnServer
RunOnServerClient runOnServer;
@Test
public void testStaleCache() throws Exception {
testingClient.server().run(session -> {
runOnServer.run(session -> {
// load up cache
RealmModel realm = session.realms().getRealmByName("test");
assertTrue(realm instanceof RealmAdapter);
@ -75,22 +83,22 @@ public class CacheTest extends AbstractTestRealmKeycloakTest {
// make sure that app cache was flushed and enabled changed
realm = session.realms().getRealmByName("test");
Assert.assertEquals(200, realm.getAccessCodeLifespanLogin());
Assertions.assertEquals(200, realm.getAccessCodeLifespanLogin());
testApp = session.clients().getClientById(realm, appId);
Assert.assertFalse(testApp.isEnabled());
Assertions.assertFalse(testApp.isEnabled());
});
}
@Test
public void testAddUserNotAddedToCache() {
testingClient.server().run(session -> {
runOnServer.run(session -> {
RealmModel realm = session.realms().getRealmByName("test");
UserModel user = session.users().addUser(realm, "testAddUserNotAddedToCache");
user.setFirstName("firstName");
user.addRequiredAction(UserModel.RequiredAction.CONFIGURE_TOTP);
UserSessionModel userSession = session.sessions().createUserSession(UUID.randomUUID().toString(), realm, user, "testAddUserNotAddedToCache",
"127.0.0.1", "auth", false, null, null, UserSessionModel.SessionPersistenceState.PERSISTENT);
user = userSession.getUser();
@ -99,13 +107,13 @@ public class CacheTest extends AbstractTestRealmKeycloakTest {
assertNotNull(user.getLastName());
});
}
// KEYCLOAK-1842
@Test
public void testRoleMappingsInvalidatedWhenClientRemoved() {
testingClient.server().run(session -> {
runOnServer.run(session -> {
RealmModel realm = session.realms().getRealmByName("test");
UserModel user = session.users().addUser(realm, "joel");
@ -114,7 +122,7 @@ public class CacheTest extends AbstractTestRealmKeycloakTest {
user.grantRole(fooRole);
});
testingClient.server().run(session -> {
runOnServer.run(session -> {
RealmModel realm = session.realms().getRealmByName("test");
UserModel user = session.users().getUserByUsername(realm, "joel");
long grantedRolesCount = user.getRoleMappingsStream().count();
@ -127,12 +135,22 @@ public class CacheTest extends AbstractTestRealmKeycloakTest {
Set<RoleModel> roles = user.getRoleMappingsStream().collect(Collectors.toSet());
for (RoleModel role : roles) {
Assert.assertNotNull(role.getContainer());
Assertions.assertNotNull(role.getContainer());
}
Assert.assertEquals(roles.size(), grantedRolesCount - 1);
Assertions.assertEquals(roles.size(), grantedRolesCount - 1);
});
}
public static final class CacheRealmConfig implements RealmConfig {
@Override
public RealmConfigBuilder configure(RealmConfigBuilder realm) {
realm.name("test");
realm.addClient("test-app");
return realm;
}
}
}

View file

@ -15,9 +15,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.testsuite.model;
package org.keycloak.tests.model;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
@ -33,11 +32,13 @@ import org.keycloak.protocol.oidc.OIDCLoginProtocol;
import org.keycloak.protocol.oidc.mappers.AddressMapper;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.ProtocolMapperRepresentation;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.testsuite.AbstractKeycloakTest;
import org.keycloak.testsuite.arquillian.annotation.ModelTest;
import org.junit.Test;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.injection.LifeCycle;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.realm.RealmConfig;
import org.keycloak.testframework.realm.RealmConfigBuilder;
import org.keycloak.testframework.remote.annotations.TestOnServer;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
@ -47,26 +48,18 @@ import static org.hamcrest.core.IsNull.notNullValue;
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
* @author <a href="mailto:mabartos@redhat.com">Martin Bartos</a>
*/
public class ClientModelTest extends AbstractKeycloakTest {
@KeycloakIntegrationTest
public class ClientModelTest {
@InjectRealm(lifecycle = LifeCycle.METHOD, config = ClientModelRealmConfig.class)
ManagedRealm managedRealm;
private ClientModel client;
private String roleId;
private String realmName="original";
private static final String realmName = "original";
private KeycloakSession currentSession;
@Override
protected boolean isImportAfterEachMethod() {
return true;
}
@Override
public void addTestRealms(List<RealmRepresentation> testRealms) {
RealmRepresentation realm = new RealmRepresentation();
realm.setRealm(realmName);
realm.setEnabled(true);
testRealms.add(realm);
}
public static void assertEquals(ClientModel expected, ClientModel actual) {
private static void assertEquals(ClientModel expected, ClientModel actual) {
assertThat(expected.getClientId(), is(actual.getClientId()));
assertThat(expected.getName(), is(actual.getName()));
assertThat(expected.getDescription(), is(actual.getDescription()));
@ -77,7 +70,6 @@ public class ClientModelTest extends AbstractKeycloakTest {
assertThat(expected.getRegisteredNodes(), is(actual.getRegisteredNodes()));
}
private ClientModel setUpClient(RealmModel realm) {
ClientModel client = realm.addClient("app-name");
client.setName("Application");
@ -99,8 +91,7 @@ public class ClientModelTest extends AbstractKeycloakTest {
return client;
}
@Test
@ModelTest
@TestOnServer
public void testClientRoleRemovalAndClientScope(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
@ -148,8 +139,7 @@ public class ClientModelTest extends AbstractKeycloakTest {
}
@Test
@ModelTest
@TestOnServer
public void testClientRoleRemovalAndClientScopeSameTx(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
@ -185,8 +175,7 @@ public class ClientModelTest extends AbstractKeycloakTest {
});
}
@Test
@ModelTest
@TestOnServer
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
@ -218,8 +207,7 @@ public class ClientModelTest extends AbstractKeycloakTest {
});
}
@Test
@ModelTest
@TestOnServer
public void testCircularClientScopes(KeycloakSession session) {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), session.getContext(), (KeycloakSession sessionCircuilarClient1) -> {
@ -243,8 +231,7 @@ public class ClientModelTest extends AbstractKeycloakTest {
});
}
@Test
@ModelTest
@TestOnServer
public void persist(KeycloakSession session) {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), session.getContext(), (KeycloakSession sessionPersist) -> {
currentSession = sessionPersist;
@ -261,8 +248,7 @@ public class ClientModelTest extends AbstractKeycloakTest {
});
}
@Test
@ModelTest
@TestOnServer
public void json(KeycloakSession session) {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), session.getContext(), (KeycloakSession sessionJson) -> {
currentSession = sessionJson;
@ -290,8 +276,7 @@ public class ClientModelTest extends AbstractKeycloakTest {
});
}
@Test
@ModelTest
@TestOnServer
public void testAddApplicationWithId(KeycloakSession session) {
final String id = KeycloakModelUtils.generateId();
String newClientId = KeycloakModelUtils.runJobInTransactionWithResult(session.getKeycloakSessionFactory(), session.getContext(), (KeycloakSession sessionAppWithId1) -> {
@ -313,8 +298,7 @@ public class ClientModelTest extends AbstractKeycloakTest {
});
}
@Test
@ModelTest
@TestOnServer
public void testClientScopesBinding(KeycloakSession session) {
AtomicReference<ClientScopeModel> scope1Atomic = new AtomicReference<>();
AtomicReference<ClientScopeModel> scope2Atomic = new AtomicReference<>();
@ -405,8 +389,7 @@ public class ClientModelTest extends AbstractKeycloakTest {
});
}
@Test
@ModelTest
@TestOnServer
public void testDefaultDefaultClientScopes(KeycloakSession session) {
AtomicReference<ClientScopeModel> scope1Atomic = new AtomicReference<>();
AtomicReference<ClientScopeModel> scope2Atomic = new AtomicReference<>();
@ -510,4 +493,14 @@ public class ClientModelTest extends AbstractKeycloakTest {
realm.removeClientScope(scope3Atomic.get().getId());
});
}
public static class ClientModelRealmConfig implements RealmConfig {
@Override
public RealmConfigBuilder configure(RealmConfigBuilder realm) {
return realm.name(realmName);
}
}
}

View file

@ -15,7 +15,7 @@
* limitations under the License.
*/
package org.keycloak.testsuite.model;
package org.keycloak.tests.model;
import java.util.Arrays;
import java.util.concurrent.CountDownLatch;
@ -29,34 +29,31 @@ import org.keycloak.models.KeycloakSession;
import org.keycloak.models.KeycloakSessionFactory;
import org.keycloak.models.RealmModel;
import org.keycloak.models.RoleModel;
import org.keycloak.models.UserManager;
import org.keycloak.models.UserModel;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.testsuite.AbstractTestRealmKeycloakTest;
import org.keycloak.testsuite.arquillian.annotation.ModelTest;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.remote.annotations.TestOnServer;
import org.jboss.logging.Logger;
import org.junit.Assert;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue;
import org.junit.jupiter.api.Assertions;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class ConcurrentTransactionsTest extends AbstractTestRealmKeycloakTest {
@KeycloakIntegrationTest
public class ConcurrentTransactionsTest {
private static final int LATCH_TIMEOUT_MS = 30000;
private static final Logger logger = Logger.getLogger(ConcurrentTransactionsTest.class);
@Test
@ModelTest(realmName = "test")
public void persistClient(KeycloakSession session) {
@InjectRealm(attachTo = "master")
ManagedRealm realm;
@TestOnServer
public void persistClient(KeycloakSession session) {
final ClientModel[] client = {null};
AtomicReference<String> clientDBIdAtomic = new AtomicReference<>();
AtomicReference<Exception> exceptionHolder = new AtomicReference<>();
@ -64,11 +61,7 @@ public class ConcurrentTransactionsTest extends AbstractTestRealmKeycloakTest {
try {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), session.getContext(), (KeycloakSession sessionSetup) -> {
RealmModel realm = sessionSetup.realms().getRealmByName("test");
sessionSetup.users().addUser(realm, "user1").setEmail("user1@localhost");
sessionSetup.users().addUser(realm, "user2").setEmail("user2@localhost");
realm = sessionSetup.realms().createRealm("original");
RealmModel realm = sessionSetup.realms().createRealm("original");
RoleModel defaultRole = sessionSetup.roles().addRealmRole(realm, Constants.DEFAULT_ROLES_ROLE_PREFIX + "-" + realm.getName());
realm.setDefaultRole(defaultRole);
@ -165,7 +158,7 @@ public class ConcurrentTransactionsTest extends AbstractTestRealmKeycloakTest {
}
if (exceptionHolder.get() != null) {
Assert.fail("Some thread thrown an exception. See the log for the details");
Assertions.fail("Some thread thrown an exception. See the log for the details");
}
logger.info("after thread join");
@ -181,21 +174,19 @@ public class ConcurrentTransactionsTest extends AbstractTestRealmKeycloakTest {
logger.info("SECRET FROM DB : " + clientFromDB.getSecret());
logger.info("SECRET FROM CACHE : " + clientFromCache.getSecret());
Assert.assertEquals("new", clientFromDB.getSecret());
Assert.assertEquals("new", clientFromCache.getSecret());
Assertions.assertEquals("new", clientFromDB.getSecret());
Assertions.assertEquals("new", clientFromCache.getSecret());
session2.sessions().removeUserSessions(realm);
});
} finally {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), kcSession -> tearDownRealm(kcSession, "user1", "user2"));
tearDownRealm(session, "original");
}
}
// KEYCLOAK-3296 , KEYCLOAK-3494
@Test
@ModelTest
@TestOnServer
public void removeUserAttribute(KeycloakSession session) throws Exception {
try {
@ -269,36 +260,19 @@ public class ConcurrentTransactionsTest extends AbstractTestRealmKeycloakTest {
logger.info("removeUserAttribute: after thread join");
if (reference.get() != null) {
Assert.fail("Exception happened in some of threads. Details: " + reference.get().getMessage());
Assertions.fail("Exception happened in some of threads. Details: " + reference.get().getMessage());
}
});
} finally {
tearDownRealm(session, "john", "john2");
tearDownRealm(session, "original");
}
}
private void tearDownRealm(KeycloakSession session, String user1, String user2) {
KeycloakSession currentSession = session;
RealmModel realm = currentSession.realms().getRealmByName("original");
UserModel realmUser1 = currentSession.users().getUserByUsername(realm, user1);
UserModel realmUser2 = currentSession.users().getUserByUsername(realm, user2);
UserManager um = new UserManager(currentSession);
if (realmUser1 != null) {
um.removeUser(realm, realmUser1);
private void tearDownRealm(KeycloakSession session, String realmName) {
RealmModel realm = session.realms().getRealmByName(realmName);
if (realm != null) {
session.realms().removeRealm(realm.getId());
}
if (realmUser2 != null) {
um.removeUser(realm, realmUser2);
}
currentSession.getContext().setRealm(realm);
Assert.assertTrue(currentSession.realms().removeRealm(realm.getId()));
assertThat(currentSession.realms().getRealm(realm.getId()), is(nullValue()));
}
@Override
public void configureTestRealm(RealmRepresentation testRealm) {
}
}

View file

@ -1,4 +1,4 @@
package org.keycloak.testsuite.model;
package org.keycloak.tests.model;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
@ -14,26 +14,25 @@ import org.keycloak.models.UserModel;
import org.keycloak.models.credential.OTPCredentialModel;
import org.keycloak.models.jpa.entities.CredentialEntity;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.testsuite.AbstractTestRealmKeycloakTest;
import org.keycloak.testsuite.Assert;
import org.keycloak.testsuite.arquillian.annotation.ModelTest;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.realm.RealmConfig;
import org.keycloak.testframework.realm.RealmConfigBuilder;
import org.keycloak.testframework.remote.annotations.TestOnServer;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class CredentialModelTest extends AbstractTestRealmKeycloakTest {
@KeycloakIntegrationTest
public class CredentialModelTest {
@Override
public void configureTestRealm(RealmRepresentation testRealm) {
@InjectRealm(config = CredentialModelRealm.class)
ManagedRealm realm;
}
@Test
@ModelTest
@TestOnServer
public void testCredentialCRUD(KeycloakSession session) throws Exception {
AtomicReference<String> passwordId = new AtomicReference<>();
AtomicReference<String> otp1Id = new AtomicReference<>();
@ -46,7 +45,7 @@ public class CredentialModelTest extends AbstractTestRealmKeycloakTest {
UserModel user = currentSession.users().getUserByUsername(realm, "test-user@localhost");
List<CredentialModel> list = user.credentialManager().getStoredCredentialsStream()
.collect(Collectors.toList());
Assert.assertEquals(1, list.size());
Assertions.assertEquals(1, list.size());
passwordId.set(list.get(0).getId());
// Create 2 OTP credentials (password was already created)
@ -71,13 +70,13 @@ public class CredentialModelTest extends AbstractTestRealmKeycloakTest {
assertOrder(list, passwordId.get(), otp1Id.get(), otp2Id.get());
// Assert can't move password when newPreviousCredential not found
Assert.assertFalse(user.credentialManager().moveStoredCredentialTo(passwordId.get(), "not-known"));
Assertions.assertFalse(user.credentialManager().moveStoredCredentialTo(passwordId.get(), "not-known"));
// Assert can't move credential when not found
Assert.assertFalse(user.credentialManager().moveStoredCredentialTo("not-known", otp2Id.get()));
Assertions.assertFalse(user.credentialManager().moveStoredCredentialTo(otp2Id.get(), "not-known"));
// Move otp2 up 1 position
Assert.assertTrue(user.credentialManager().moveStoredCredentialTo(otp2Id.get(), passwordId.get()));
Assertions.assertTrue(user.credentialManager().moveStoredCredentialTo(otp2Id.get(), passwordId.get()));
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession currentSession) -> {
@ -91,7 +90,7 @@ public class CredentialModelTest extends AbstractTestRealmKeycloakTest {
assertOrder(list, passwordId.get(), otp2Id.get(), otp1Id.get());
// Move otp2 to the top
Assert.assertTrue(user.credentialManager().moveStoredCredentialTo(otp2Id.get(), null));
Assertions.assertTrue(user.credentialManager().moveStoredCredentialTo(otp2Id.get(), null));
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession currentSession) -> {
@ -105,7 +104,7 @@ public class CredentialModelTest extends AbstractTestRealmKeycloakTest {
assertOrder(list, otp2Id.get(), passwordId.get(), otp1Id.get());
// Move password down
Assert.assertTrue(user.credentialManager().moveStoredCredentialTo(passwordId.get(), otp1Id.get()));
Assertions.assertTrue(user.credentialManager().moveStoredCredentialTo(passwordId.get(), otp1Id.get()));
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession currentSession) -> {
@ -119,7 +118,7 @@ public class CredentialModelTest extends AbstractTestRealmKeycloakTest {
assertOrder(list, otp2Id.get(), otp1Id.get(), passwordId.get());
// Remove otp2 down two positions
Assert.assertTrue(user.credentialManager().moveStoredCredentialTo(otp2Id.get(), passwordId.get()));
Assertions.assertTrue(user.credentialManager().moveStoredCredentialTo(otp2Id.get(), passwordId.get()));
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession currentSession) -> {
@ -133,7 +132,7 @@ public class CredentialModelTest extends AbstractTestRealmKeycloakTest {
assertOrder(list, otp1Id.get(), passwordId.get(), otp2Id.get());
// Remove password
Assert.assertTrue(user.credentialManager().removeStoredCredentialById(passwordId.get()));
Assertions.assertTrue(user.credentialManager().removeStoredCredentialById(passwordId.get()));
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession currentSession) -> {
@ -158,8 +157,7 @@ public class CredentialModelTest extends AbstractTestRealmKeycloakTest {
}
}
@Test
@ModelTest
@TestOnServer
public void testCredentialUpdateWithDuplicateLabel(KeycloakSession session) {
AtomicReference<String> otp1Id = new AtomicReference<>();
AtomicReference<String> otp2Id = new AtomicReference<>();
@ -209,14 +207,23 @@ public class CredentialModelTest extends AbstractTestRealmKeycloakTest {
}
private void assertOrder(List<CredentialModel> creds, String... expectedIds) {
Assert.assertEquals(expectedIds.length, creds.size());
Assertions.assertEquals(expectedIds.length, creds.size());
if (creds.isEmpty()) return;
for (int i=0 ; i<expectedIds.length ; i++) {
Assert.assertEquals(creds.get(i).getId(), expectedIds[i]);
Assertions.assertEquals(creds.get(i).getId(), expectedIds[i]);
}
}
public static class CredentialModelRealm implements RealmConfig {
@Override
public RealmConfigBuilder configure(RealmConfigBuilder realm) {
realm.name("test");
realm.addUser("test-user@localhost").password("password");
return realm;
}
}

View file

@ -15,7 +15,7 @@
* limitations under the License.
*/
package org.keycloak.testsuite.model;
package org.keycloak.tests.model;
import java.util.Collections;
import java.util.List;
@ -33,12 +33,12 @@ import org.keycloak.models.UserCredentialModel;
import org.keycloak.models.UserManager;
import org.keycloak.models.UserModel;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.testsuite.AbstractTestRealmKeycloakTest;
import org.keycloak.testsuite.arquillian.annotation.ModelTest;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.remote.annotations.TestOnServer;
import org.junit.Assert;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
@ -47,7 +47,11 @@ import static org.hamcrest.Matchers.is;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
@KeycloakIntegrationTest
public class MultipleRealmsTest {
@InjectRealm(attachTo = "master")
ManagedRealm realm;
private static final String REALM_ATTRIBUTE = "test-realm";
@ -73,8 +77,7 @@ public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
session.getContext().setRealm(sessionRealm);
}
@Test
@ModelTest
@TestOnServer
public void testUsers(KeycloakSession session) {
AtomicReference<UserModel> r1user1Atomic = new AtomicReference<>();
@ -99,7 +102,7 @@ public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
createObjects(currentSession, realm2);
UserModel r2user1 = currentSession.users().getUserByUsername(realm2, "user1");
Assert.assertEquals(r1user1.getUsername(), r2user1.getUsername());
Assertions.assertEquals(r1user1.getUsername(), r2user1.getUsername());
// The following check is not valid anymore since file store does have the same ID, and is redundant due to the previous line
// Assert.assertNotEquals(r1user1.getId(), r2user1.getId());
@ -107,14 +110,14 @@ public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
r1user1.credentialManager().updateCredential(UserCredentialModel.password("pass1"));
r2user1.credentialManager().updateCredential(UserCredentialModel.password("pass2"));
Assert.assertTrue(r1user1.credentialManager().isValid(UserCredentialModel.password("pass1")));
Assert.assertFalse(r1user1.credentialManager().isValid(UserCredentialModel.password("pass2")));
Assert.assertFalse(r2user1.credentialManager().isValid(UserCredentialModel.password("pass1")));
Assert.assertTrue(r2user1.credentialManager().isValid(UserCredentialModel.password("pass2")));
Assertions.assertTrue(r1user1.credentialManager().isValid(UserCredentialModel.password("pass1")));
Assertions.assertFalse(r1user1.credentialManager().isValid(UserCredentialModel.password("pass2")));
Assertions.assertFalse(r2user1.credentialManager().isValid(UserCredentialModel.password("pass1")));
Assertions.assertTrue(r2user1.credentialManager().isValid(UserCredentialModel.password("pass2")));
currentSession.getContext().setRealm(realm1);
// Test searching
Assert.assertEquals(2, currentSession.users().searchForUserStream(realm1, Map.of(UserModel.SEARCH, "user")).count());
Assertions.assertEquals(2, currentSession.users().searchForUserStream(realm1, Map.of(UserModel.SEARCH, "user")).count());
return new String[]{id1, id2};
});
@ -132,7 +135,7 @@ public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
currentSession.users().removeUser(realm1, r1user1);
UserModel user2 = currentSession.users().getUserByUsername(realm1, "user2");
currentSession.users().removeUser(realm1, user2);
Assert.assertEquals(0, currentSession.users().searchForUserStream(realm1, Map.of(UserModel.SEARCH, "user")).count());
Assertions.assertEquals(0, currentSession.users().searchForUserStream(realm1, Map.of(UserModel.SEARCH, "user")).count());
UserModel user1 = currentSession.users().getUserByUsername(realm1, "user1");
UserManager um = new UserManager(currentSession);
@ -146,7 +149,7 @@ public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
RealmModel realm2 = currentSession.realms().getRealm(id2);
currentSession.getContext().setRealm(realm2);
Assert.assertEquals(2, currentSession.users().searchForUserStream(realm2, Map.of(UserModel.SEARCH, "user")).count());
Assertions.assertEquals(2, currentSession.users().searchForUserStream(realm2, Map.of(UserModel.SEARCH, "user")).count());
UserModel user1a = currentSession.users().getUserByUsername(realm2, "user1");
@ -160,8 +163,7 @@ public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
removeRealm(session, id2);
}
@Test
@ModelTest
@TestOnServer
public void testGetById(KeycloakSession session) {
String[] res = KeycloakModelUtils.runJobInTransactionWithResult(session.getKeycloakSessionFactory(), (KeycloakSession sessionById) -> {
KeycloakSession currentSession = sessionById;
@ -172,13 +174,13 @@ public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
String id1 = realm1.getId();
realm1.setDefaultRole(currentSession.roles().addRealmRole(realm1, Constants.DEFAULT_ROLES_ROLE_PREFIX + "-" + realm1.getName()));
createObjects(currentSession, realm1);
Assert.assertEquals(realm1, currentSession.realms().getRealm(id1));
Assert.assertEquals(realm1, currentSession.realms().getRealmByName("realm1"));
Assertions.assertEquals(realm1, currentSession.realms().getRealm(id1));
Assertions.assertEquals(realm1, currentSession.realms().getRealmByName("realm1"));
ClientModel r1app1 = realm1.getClientByClientId("app1");
Assert.assertNotNull(realm1.getClientByClientId("app2"));
Assertions.assertNotNull(realm1.getClientByClientId("app2"));
Assert.assertEquals(r1app1, realm1.getClientById(r1app1.getId()));
Assertions.assertEquals(r1app1, realm1.getClientById(r1app1.getId()));
assertThat(r1app1.getAttribute(REALM_ATTRIBUTE), is(realm1.getName()));
@ -189,18 +191,18 @@ public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
realm2.setDefaultRole(currentSession.roles().addRealmRole(realm2, Constants.DEFAULT_ROLES_ROLE_PREFIX + "-" + realm2.getName()));
createObjects(currentSession, realm2);
Assert.assertEquals(realm2, currentSession.realms().getRealm(id2));
Assert.assertEquals(realm2, currentSession.realms().getRealmByName("realm2"));
Assertions.assertEquals(realm2, currentSession.realms().getRealm(id2));
Assertions.assertEquals(realm2, currentSession.realms().getRealmByName("realm2"));
Assert.assertNotNull(realm2.getClientByClientId("app1"));
Assert.assertNotNull(realm2.getClientByClientId("app2"));
Assertions.assertNotNull(realm2.getClientByClientId("app1"));
Assertions.assertNotNull(realm2.getClientByClientId("app2"));
ClientModel r2cl1 = realm2.getClientByClientId("cl1");
Assert.assertEquals(r2cl1.getId(), realm2.getClientById(r2cl1.getId()).getId());
Assertions.assertEquals(r2cl1.getId(), realm2.getClientById(r2cl1.getId()).getId());
assertThat(r2cl1.getAttribute(REALM_ATTRIBUTE), is(realm2.getName()));
RoleModel r1App1Role = r1app1.getRole("app1Role1");
Assert.assertEquals(r1App1Role, realm1.getRoleById(r1App1Role.getId()));
Assertions.assertEquals(r1App1Role, realm1.getRoleById(r1App1Role.getId()));
assertAttrRealm(realm1, r1App1Role.getAttributeStream(REALM_ATTRIBUTE));
RoleModel r2Role1 = realm2.getRole("role2");
@ -247,7 +249,4 @@ public class MultipleRealmsTest extends AbstractTestRealmKeycloakTest {
}
@Override
public void configureTestRealm(RealmRepresentation testRealm) {
}
}

View file

@ -15,47 +15,35 @@
* limitations under the License.
*/
package org.keycloak.testsuite.model;
import java.util.List;
package org.keycloak.tests.model;
import org.keycloak.models.Constants;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.RealmModel;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.services.managers.RealmManager;
import org.keycloak.testsuite.AbstractKeycloakTest;
import org.keycloak.testsuite.arquillian.annotation.ModelTest;
import org.keycloak.testsuite.runonserver.RunOnServerException;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.remote.annotations.TestOnServer;
import org.junit.Assert;
import org.junit.Test;
import org.jboss.logging.Logger;
import org.junit.jupiter.api.Assertions;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class SimpleModelTest extends AbstractKeycloakTest {
@KeycloakIntegrationTest
public class SimpleModelTest {
@Override
public void addTestRealms(List<RealmRepresentation> testRealms) {
}
private static final Logger log = Logger.getLogger(SimpleModelTest.class);
@InjectRealm(attachTo = "master")
ManagedRealm realm;
@Test
@ModelTest
public void simpleModelTest(KeycloakSession session) {
log.infof("simpleModelTest");
RealmModel realm = session.realms().getRealmByName("master");
Assert.assertNotNull("Master realm was not found!", realm);
}
@Test
@ModelTest
@TestOnServer
public void simpleModelTestWithNestedTransactions(KeycloakSession session) {
log.infof("simpleModelTestWithNestedTransactions");
log.debug("simpleModelTestWithNestedTransactions");
// Transaction 1
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession session1) -> {
@ -69,7 +57,7 @@ public class SimpleModelTest extends AbstractKeycloakTest {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession session2) -> {
RealmModel realm = session2.realms().getRealmByName("foo");
Assert.assertNotNull(realm);
Assertions.assertNotNull(realm);
session2.getContext().setRealm(realm);
realm.setAttribute("bar", "baz");
@ -80,11 +68,11 @@ public class SimpleModelTest extends AbstractKeycloakTest {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession session3) -> {
RealmModel realm = session3.realms().getRealmByName("foo");
Assert.assertNotNull(realm);
Assertions.assertNotNull(realm);
session3.getContext().setRealm(realm);
String attrValue = realm.getAttribute("bar");
Assert.assertEquals("baz", attrValue);
Assertions.assertEquals("baz", attrValue);
realm.setAttribute("bar", "baz2");
@ -95,34 +83,14 @@ public class SimpleModelTest extends AbstractKeycloakTest {
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession session4) -> {
RealmModel realm = session4.realms().getRealmByName("foo");
Assert.assertNotNull(realm);
Assertions.assertNotNull(realm);
session4.getContext().setRealm(realm);
String attrValue = realm.getAttribute("bar");
Assert.assertEquals("baz", attrValue);
Assertions.assertEquals("baz", attrValue);
new RealmManager(session4).removeRealm(realm);
});
}
// Just for the test that AssertionError is correctly propagated
@Test(expected = AssertionError.class)
@ModelTest
public void simpleModelTestWithAssertionError(KeycloakSession session) {
log.infof("simpleModelTestWithAssertionError");
RealmModel realm = session.realms().getRealmByName("masterr");
// This should fail and throw the AssertionError
Assert.assertNotNull("Master realm was not found!", realm);
}
// Just for the test that other exception is correctly propagated
@Test(expected = RunOnServerException.class)
@ModelTest
public void simpleModelTestWithOtherError(KeycloakSession session) {
log.infof("simpleModelTestWithOtherError");
throw new RuntimeException("Some strange exception");
}
}

View file

@ -17,7 +17,7 @@
*
*/
package org.keycloak.testsuite.model;
package org.keycloak.tests.model;
import java.util.ArrayList;
import java.util.Collections;
@ -29,27 +29,29 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.keycloak.models.KeycloakSession;
import org.keycloak.models.SingleUseObjectProvider;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.testsuite.AbstractTestRealmKeycloakTest;
import org.keycloak.testsuite.arquillian.annotation.ModelTest;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.remote.annotations.TestOnServer;
import org.junit.Assert;
import org.junit.Test;
import org.jboss.logging.Logger;
import org.junit.jupiter.api.Assertions;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class SingleUseProviderTest extends AbstractTestRealmKeycloakTest {
@KeycloakIntegrationTest
public class SingleUseProviderTest {
private static final Logger logger = Logger.getLogger(SingleUseProviderTest.class);
private static final int ITEMS_COUNT = 100;
private static final int THREADS_COUNT = 20;
@Override
public void configureTestRealm(RealmRepresentation testRealm) {
}
@InjectRealm(attachTo = "master")
ManagedRealm realm;
@Test
@ModelTest
@TestOnServer
public void testConcurrentRemoveFromSingleUseCacheShouldFail(KeycloakSession session) throws Exception {
Map<Integer, Tracker> tracker = new ConcurrentHashMap<>();
@ -94,12 +96,12 @@ public class SingleUseProviderTest extends AbstractTestRealmKeycloakTest {
// Check countSuccess and countFailures. For each key, only single successful "remove" is allowed. Other threads should fail to remove the item and nothing should be found
for (Map.Entry<Integer, Tracker> entry : tracker.entrySet()) {
getLogger().info(entry.getKey() + ": " + entry.getValue());
logger.debug(entry.getKey() + ": " + entry.getValue());
}
for (Map.Entry<Integer, Tracker> entry : tracker.entrySet()) {
Assert.assertEquals(1, entry.getValue().countSuccess.get());
Assert.assertEquals(THREADS_COUNT - 1, entry.getValue().countFailures.get());
Assertions.assertEquals(1, entry.getValue().countSuccess.get());
Assertions.assertEquals(THREADS_COUNT - 1, entry.getValue().countFailures.get());
}
}

View file

@ -15,7 +15,7 @@
* limitations under the License.
*/
package org.keycloak.testsuite.model;
package org.keycloak.tests.model;
import java.util.HashMap;
import java.util.HashSet;
@ -35,59 +35,37 @@ import org.keycloak.models.UserModel;
import org.keycloak.models.UserSessionModel;
import org.keycloak.models.utils.KeycloakModelUtils;
import org.keycloak.protocol.oidc.OIDCLoginProtocol;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.services.managers.ClientManager;
import org.keycloak.services.managers.RealmManager;
import org.keycloak.services.managers.UserSessionManager;
import org.keycloak.testsuite.AbstractTestRealmKeycloakTest;
import org.keycloak.testsuite.arquillian.annotation.ModelTest;
import org.keycloak.testframework.annotations.InjectRealm;
import org.keycloak.testframework.annotations.KeycloakIntegrationTest;
import org.keycloak.testframework.injection.LifeCycle;
import org.keycloak.testframework.realm.ManagedRealm;
import org.keycloak.testframework.realm.RealmConfig;
import org.keycloak.testframework.realm.RealmConfigBuilder;
import org.keycloak.testframework.remote.annotations.TestOnServer;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
*/
public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTest {
@KeycloakIntegrationTest
public class UserSessionProviderOfflineTest {
@Before
public void before() {
testingClient.server("test").run(session ->
reloadState(session, true));
@InjectRealm(config = UserSessionProviderOfflineRealm.class, lifecycle = LifeCycle.METHOD)
ManagedRealm managedRealm;
}
@After
public void after() {
testingClient.server("test").run(session -> {
RealmModel realm = session.realms().getRealmByName("test");
session.sessions().removeUserSessions(realm);
UserModel user1 = session.users().getUserByUsername(realm, "user1");
UserModel user2 = session.users().getUserByUsername(realm, "user2");
UserManager um = new UserManager(session);
if (user1 != null) {
um.removeUser(realm, user1);
}
if (user2 != null) {
um.removeUser(realm, user2);
}
});
}
@Test
@ModelTest(realmName = "test")
@TestOnServer
public void testOfflineSessionsCrud(KeycloakSession session) {
Map<String, Set<String>> offlineSessions = new HashMap<>();
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), session.getContext(), currentSession -> {
// Create some online sessions in infinispan
reloadState(currentSession);
createSessions(currentSession);
});
@ -108,30 +86,30 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
// Assert all previously saved offline sessions found
for (Map.Entry<String, Set<String>> entry : offlineSessions.entrySet()) {
UserSessionModel offlineSession = sessionManager.findOfflineUserSession(realm, entry.getKey());
Assert.assertNotNull(offlineSession);
Assert.assertEquals(offlineSession.getAuthenticatedClientSessions().keySet(), entry.getValue());
Assertions.assertNotNull(offlineSession);
Assertions.assertEquals(offlineSession.getAuthenticatedClientSessions().keySet(), entry.getValue());
}
// Find clients with offline token
UserModel user1 = currentSession.users().getUserByUsername(realm, "user1");
Set<ClientModel> clients = sessionManager.findClientsWithOfflineToken(realm, user1);
Assert.assertEquals(2, clients.size());
Assertions.assertEquals(2, clients.size());
for (ClientModel client : clients) {
Assert.assertTrue(client.getClientId().equals("test-app") || client.getClientId().equals("third-party"));
Assertions.assertTrue(client.getClientId().equals("test-app") || client.getClientId().equals("third-party"));
}
UserModel user2 = currentSession.users().getUserByUsername(realm, "user2");
clients = sessionManager.findClientsWithOfflineToken(realm, user2);
Assert.assertEquals(1, clients.size());
Assert.assertEquals("test-app", clients.iterator().next().getClientId());
Assertions.assertEquals(1, clients.size());
Assertions.assertEquals("test-app", clients.iterator().next().getClientId());
// Test count
ClientModel testApp = realm.getClientByClientId("test-app");
ClientModel thirdparty = realm.getClientByClientId("third-party");
Assert.assertEquals(3, currentSession.sessions().getOfflineSessionsCount(realm, testApp));
Assert.assertEquals(1, currentSession.sessions().getOfflineSessionsCount(realm, thirdparty));
Assertions.assertEquals(currentSession.sessions().getOfflineSessionsCount(realm, testApp), 3);
Assertions.assertEquals(currentSession.sessions().getOfflineSessionsCount(realm, thirdparty), 1);
// Revoke "test-app" for user1
sessionManager.revokeOfflineToken(user1, testApp);
});
@ -145,19 +123,19 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
List<UserSessionModel> thirdpartySessions = currentSession.sessions().getOfflineUserSessionsStream(realm, thirdparty, 0, 10)
.toList();
Assert.assertEquals(1, thirdpartySessions.size());
Assert.assertEquals("127.0.0.1", thirdpartySessions.get(0).getIpAddress());
Assert.assertEquals("user1", thirdpartySessions.get(0).getUser().getUsername());
Assertions.assertEquals(1, thirdpartySessions.size());
Assertions.assertEquals("127.0.0.1", thirdpartySessions.get(0).getIpAddress());
Assertions.assertEquals("user1", thirdpartySessions.get(0).getUser().getUsername());
UserModel user1 = currentSession.users().getUserByUsername(realm, "user1");
UserModel user2 = currentSession.users().getUserByUsername(realm, "user2");
Set<ClientModel> clients = sessionManager.findClientsWithOfflineToken(realm, user1);
Assert.assertEquals(1, clients.size());
Assert.assertEquals("third-party", clients.iterator().next().getClientId());
Assertions.assertEquals(1, clients.size());
Assertions.assertEquals("third-party", clients.iterator().next().getClientId());
clients = sessionManager.findClientsWithOfflineToken(realm, user2);
Assert.assertEquals(1, clients.size());
Assert.assertEquals("test-app", clients.iterator().next().getClientId());
Assertions.assertEquals(1, clients.size());
Assertions.assertEquals("test-app", clients.iterator().next().getClientId());
// Revoke the second currentSession for user1 too.
sessionManager.revokeOfflineToken(user1, thirdparty);
@ -172,25 +150,24 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
ClientModel thirdparty = realm.getClientByClientId("third-party");
// Accurate count now. All sessions of user1 cleared
Assert.assertEquals(1, currentSession.sessions().getOfflineSessionsCount(realm, testApp));
Assert.assertEquals(0, currentSession.sessions().getOfflineSessionsCount(realm, thirdparty));
Assertions.assertEquals(currentSession.sessions().getOfflineSessionsCount(realm, testApp), 1);
Assertions.assertEquals(currentSession.sessions().getOfflineSessionsCount(realm, thirdparty), 0);
List<UserSessionModel> testAppSessions = currentSession.sessions().getOfflineUserSessionsStream(realm, testApp, 0, 10)
.toList();
Assert.assertEquals(1, testAppSessions.size());
Assert.assertEquals("127.0.0.3", testAppSessions.get(0).getIpAddress());
Assert.assertEquals("user2", testAppSessions.get(0).getUser().getUsername());
Assertions.assertEquals(1, testAppSessions.size());
Assertions.assertEquals("127.0.0.3", testAppSessions.get(0).getIpAddress());
Assertions.assertEquals("user2", testAppSessions.get(0).getUser().getUsername());
UserModel user1 = currentSession.users().getUserByUsername(realm, "user1");
Set<ClientModel> clients = sessionManager.findClientsWithOfflineToken(realm, user1);
Assert.assertEquals(0, clients.size());
Assertions.assertEquals(0, clients.size());
});
}
@Test
@ModelTest
@TestOnServer
public void testOnRealmRemoved(KeycloakSession session) {
AtomicReference<String> userSessionID = new AtomicReference<>();
@ -223,10 +200,10 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
createOfflineSessionIncludeClientSessions(currentSession, userSession);
UserSessionModel offlineUserSession = sessionManager.findOfflineUserSession(fooRealm, userSession.getId());
Assert.assertEquals(1, offlineUserSession.getAuthenticatedClientSessions().size());
Assertions.assertEquals(1, offlineUserSession.getAuthenticatedClientSessions().size());
AuthenticatedClientSessionModel offlineClientSession = offlineUserSession.getAuthenticatedClientSessions().values().iterator().next();
Assert.assertEquals("foo-app", offlineClientSession.getClient().getClientId());
Assert.assertEquals("user3", offlineClientSession.getUserSession().getUser().getUsername());
Assertions.assertEquals("foo-app", offlineClientSession.getClient().getClientId());
Assertions.assertEquals("user3", offlineClientSession.getUserSession().getUser().getUsername());
});
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), currentSession -> {
@ -248,7 +225,7 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), currentSession -> {
RealmModel fooRealm = currentSession.realms().getRealm(realmId);
currentSession.getContext().setRealm(fooRealm);
Assert.assertEquals(0, currentSession.sessions().getOfflineSessionsCount(fooRealm, fooRealm.getClientByClientId("foo-app")));
Assertions.assertEquals(currentSession.sessions().getOfflineSessionsCount(fooRealm, fooRealm.getClientByClientId("foo-app")), 0);
// Cleanup
RealmManager realmMgr = new RealmManager(currentSession);
@ -256,8 +233,7 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
});
}
@Test
@ModelTest
@TestOnServer
public void testOnClientRemoved(KeycloakSession session) {
AtomicReference<String> userSessionID = new AtomicReference<>();
String realmId = KeycloakModelUtils.runJobInTransactionWithResult(session.getKeycloakSessionFactory(), currentSession -> {
@ -316,8 +292,8 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
// Assert just one bar-app clientSession persisted now
UserSessionModel offlineSession = currentSession.sessions().getOfflineUserSession(fooRealm, userSessionID.get());
Assert.assertEquals(1, offlineSession.getAuthenticatedClientSessions().size());
Assert.assertEquals("bar-app", offlineSession.getAuthenticatedClientSessions().values().iterator().next().getClient().getClientId());
Assertions.assertEquals(1, offlineSession.getAuthenticatedClientSessions().size());
Assertions.assertEquals("bar-app", offlineSession.getAuthenticatedClientSessions().values().iterator().next().getClient().getClientId());
// Remove bar-app client
ClientModel client = fooRealm.getClientByClientId("bar-app");
@ -330,7 +306,7 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
RealmModel fooRealm = realmMgr.getRealm(realmId);
currentSession.getContext().setRealm(fooRealm);
UserSessionModel offlineSession = currentSession.sessions().getOfflineUserSession(fooRealm, userSessionID.get());
Assert.assertEquals(0, offlineSession.getAuthenticatedClientSessions().size());
Assertions.assertEquals(0, offlineSession.getAuthenticatedClientSessions().size());
});
} catch (Exception e) {
@ -352,8 +328,7 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
}
}
@Test
@ModelTest
@TestOnServer
public void testOnUserRemoved(KeycloakSession session) {
AtomicReference<String> userSessionID = new AtomicReference<>();
String realmId = KeycloakModelUtils.runJobInTransactionWithResult(session.getKeycloakSessionFactory(), currentSession -> {
@ -441,7 +416,7 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
for (Map.Entry<String, AuthenticatedClientSessionModel> entry : session.getAuthenticatedClientSessions().entrySet()) {
String clientUUID = entry.getKey();
AuthenticatedClientSessionModel clientSession = entry.getValue();
Assert.assertEquals(clientUUID, clientSession.getClient().getId());
Assertions.assertEquals(clientUUID, clientSession.getClient().getId());
}
}
@ -470,20 +445,18 @@ public class UserSessionProviderOfflineTest extends AbstractTestRealmKeycloakTes
return sessions;
}
public static void reloadState(KeycloakSession session) {
reloadState(session, false);
}
public static class UserSessionProviderOfflineRealm implements RealmConfig {
public static void reloadState(KeycloakSession currentSession, Boolean initialConfig) {
RealmModel realm = currentSession.realms().getRealmByName("test");
if (initialConfig) {
currentSession.users().addUser(realm, "user1").setEmail("user1@localhost");
currentSession.users().addUser(realm, "user2").setEmail("user2@localhost");
@Override
public RealmConfigBuilder configure(RealmConfigBuilder realm) {
realm.name("test");
realm.addClient("test-app");
realm.addClient("third-party");
realm.addUser("user1").email("user1@localhost");
realm.addUser("user2").email("user2@localhost");
return realm;
}
}
@Override
public void configureTestRealm(RealmRepresentation testRealm) {
}
}

View file

@ -13,6 +13,7 @@ import org.junit.platform.suite.api.Suite;
"org.keycloak.tests.i18n",
"org.keycloak.tests.infinispan",
"org.keycloak.tests.keys",
"org.keycloak.tests.model",
"org.keycloak.tests.oauth",
"org.keycloak.tests.tracing",
"org.keycloak.tests.transactions",