mirror of
https://github.com/keycloak/keycloak.git
synced 2026-05-28 04:13:22 -04:00
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:
parent
ff1274c07a
commit
47c1afde5a
10 changed files with 271 additions and 339 deletions
|
|
@ -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 {
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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) {
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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) {
|
||||
}
|
||||
}
|
||||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Reference in a new issue