Thanks to visit codestin.com
Credit goes to github.com

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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

Class<? extends RealmConfig> config() default DefaultRealmConfig.class;

String fromJson() default "";

LifeCycle lifecycle() default LifeCycle.CLASS;

String ref() default "";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ public static RealmConfigBuilder update(RealmRepresentation rep) {
return new RealmConfigBuilder(rep);
}

public RealmConfigBuilder id(String id) {
rep.setId(id);
return this;
}

public RealmConfigBuilder name(String name) {
rep.setRealm(name);
return this;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.keycloak.testframework.realm;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.keycloak.admin.client.Keycloak;
Expand All @@ -16,6 +18,8 @@
import org.keycloak.testframework.injection.SupplierHelpers;
import org.keycloak.testframework.injection.SupplierOrder;
import org.keycloak.testframework.server.KeycloakServer;
import org.keycloak.util.JsonSerialization;
import org.keycloak.util.Strings;

public class RealmSupplier implements Supplier<ManagedRealm, InjectRealm> {

Expand All @@ -36,8 +40,23 @@ public ManagedRealm getValue(InstanceContext<ManagedRealm, InjectRealm> instance
RealmRepresentation realmRepresentation;

if (managed) {
RealmConfigBuilder realmConfigBuilder;
if (!Strings.isEmpty(instanceContext.getAnnotation().fromJson())) {
try {
InputStream jsonStream = instanceContext.getRegistry().getCurrentContext().getRequiredTestClass().getResourceAsStream(instanceContext.getAnnotation().fromJson());
if (jsonStream == null) {
throw new RuntimeException("Realm JSON representation not found in classpath");
}
realmConfigBuilder = RealmConfigBuilder.update(JsonSerialization.readValue(jsonStream, RealmRepresentation.class));
} catch (IOException e) {
throw new RuntimeException(e);
}
} else {
realmConfigBuilder = RealmConfigBuilder.create();
}

RealmConfig config = SupplierHelpers.getInstance(instanceContext.getAnnotation().config());
RealmConfigBuilder realmConfigBuilder = config.configure(RealmConfigBuilder.create());
realmConfigBuilder = config.configure(realmConfigBuilder);

RealmConfigInterceptorHelper interceptor = new RealmConfigInterceptorHelper(instanceContext.getRegistry());
realmConfigBuilder = interceptor.intercept(realmConfigBuilder, instanceContext);
Expand Down Expand Up @@ -68,7 +87,9 @@ public ManagedRealm getValue(InstanceContext<ManagedRealm, InjectRealm> instance

@Override
public boolean compatible(InstanceContext<ManagedRealm, InjectRealm> a, RequestedInstance<ManagedRealm, InjectRealm> b) {
return a.getAnnotation().config().equals(b.getAnnotation().config());
InjectRealm aa = a.getAnnotation();
InjectRealm ba = b.getAnnotation();
return aa.config().equals(ba.config()) && aa.fromJson().equals(ba.fromJson());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void handle(HttpExchange httpExchange) throws IOException {
Headers respHeaders = httpExchange.getResponseHeaders();
respHeaders.set("Content-Type", "application/x-java-applet;charset=utf-8");

if (!isPermittedPackage(resource) || !resource.endsWith(".class")) {
if (!isPermittedPackage(resource) || !(resource.endsWith(".class") || resource.endsWith(".json"))) {
httpExchange.sendResponseHeaders(403, 0);
} else {
try (InputStream resourceStream = TestClassServer.class.getResourceAsStream(resource)) {
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@
* limitations under the License.
*/

package org.keycloak.testsuite.model;
package org.keycloak.tests.model;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
Expand All @@ -29,22 +30,23 @@
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.services.managers.RealmManager;
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.util.JsonSerialization;

import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

import static org.keycloak.testsuite.AbstractAdminTest.loadJson;
import org.junit.jupiter.api.Assertions;

/**
* @author <a href="mailto:[email protected]">Marek Posolda</a>
*/
public class CompositeRolesModelTest extends AbstractTestRealmKeycloakTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
@KeycloakIntegrationTest
public class CompositeRolesModelTest {

@InjectRealm(fromJson = "testcomposites2.json")
ManagedRealm managedRealm;

public static Set<RoleModel> getRequestedRoles(ClientModel application, UserModel user) {

Expand All @@ -62,8 +64,6 @@ public static Set<RoleModel> getRequestedRoles(ClientModel application, UserMode
return requestedRoles;
}



private static void applyScope(RoleModel role, RoleModel scope, Set<RoleModel> visited, Set<RoleModel> requested) {
if (visited.contains(scope)) return;
visited.add(scope);
Expand All @@ -87,37 +87,31 @@ private static RoleModel getRole(RealmModel realm, String appName, String roleNa
private static void assertContains(RealmModel realm, String appName, String roleName, Set<RoleModel> requestedRoles) {
RoleModel expectedRole = getRole(realm, appName, roleName);

Assert.assertTrue(requestedRoles.contains(expectedRole));
Assertions.assertTrue(requestedRoles.contains(expectedRole));

// Check if requestedRole has correct role container
for (RoleModel role : requestedRoles) {
if (role.equals(expectedRole)) {
Assert.assertEquals(role.getContainer(), expectedRole.getContainer());
Assertions.assertEquals(role.getContainer(), expectedRole.getContainer());
}
}
}

@Test
@ModelTest
@TestOnServer
public void testNoClientID(KeycloakSession session) {
expectedException.expect(RuntimeException.class);
expectedException.expectMessage("Unknown client specification in scope mappings: some-client");

KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession session1) -> {
try {
//RealmManager manager = new RealmManager(session1);
RealmRepresentation rep = loadJson(getClass().getResourceAsStream("/model/testrealm-noclient-id.json"), RealmRepresentation.class);
RealmManager manager = new RealmManager(session1);
RealmRepresentation rep = JsonSerialization.readValue(getClass().getResourceAsStream("testrealm-noclient-id.json"), RealmRepresentation.class);
rep.setId("TestNoClientID");
//manager.importRealm(rep);
adminClient.realms().create(rep);
} catch (RuntimeException e) {
Assertions.assertThrows(RuntimeException.class, () -> manager.importRealm(rep), "Unknown client specification in scope mappings: some-client");
} catch (IOException e) {
throw new RuntimeException(e);
}

});
}

@Test
@ModelTest
@TestOnServer
public void testComposites(KeycloakSession session) {

KeycloakModelUtils.runJobInTransaction(session.getKeycloakSessionFactory(), (KeycloakSession session5) -> {
Expand All @@ -127,45 +121,36 @@ public void testComposites(KeycloakSession session) {

Set<RoleModel> requestedRoles = getRequestedRoles(realm.getClientByClientId("APP_COMPOSITE_APPLICATION"), session.users().getUserByUsername(realm, "APP_COMPOSITE_USER"));

Assert.assertEquals(5, requestedRoles.size());
Assertions.assertEquals(5, requestedRoles.size());
assertContains(realm, "APP_COMPOSITE_APPLICATION", "APP_COMPOSITE_ROLE", requestedRoles);
assertContains(realm, "APP_COMPOSITE_APPLICATION", "APP_COMPOSITE_CHILD", requestedRoles);
assertContains(realm, "APP_COMPOSITE_APPLICATION", "APP_ROLE_2", requestedRoles);
assertContains(realm, "APP_ROLE_APPLICATION", "APP_ROLE_1", requestedRoles);
assertContains(realm, "realm", "REALM_ROLE_1", requestedRoles);

Set<RoleModel> requestedRoles2 = getRequestedRoles(realm.getClientByClientId("APP_COMPOSITE_APPLICATION"), session5.users().getUserByUsername(realm, "REALM_APP_COMPOSITE_USER"));
Assert.assertEquals(4, requestedRoles2.size());
Assertions.assertEquals(4, requestedRoles2.size());
assertContains(realm, "APP_ROLE_APPLICATION", "APP_ROLE_1", requestedRoles2);

requestedRoles = getRequestedRoles(realm.getClientByClientId("REALM_COMPOSITE_1_APPLICATION"), session5.users().getUserByUsername(realm, "REALM_COMPOSITE_1_USER"));
Assert.assertEquals(1, requestedRoles.size());
Assertions.assertEquals(1, requestedRoles.size());
assertContains(realm, "realm", "REALM_COMPOSITE_1", requestedRoles);

requestedRoles = getRequestedRoles(realm.getClientByClientId("REALM_COMPOSITE_2_APPLICATION"), session5.users().getUserByUsername(realm, "REALM_COMPOSITE_1_USER"));
Assert.assertEquals(3, requestedRoles.size());
Assertions.assertEquals(3, requestedRoles.size());
assertContains(realm, "realm", "REALM_COMPOSITE_1", requestedRoles);
assertContains(realm, "realm", "REALM_COMPOSITE_CHILD", requestedRoles);
assertContains(realm, "realm", "REALM_ROLE_4", requestedRoles);

requestedRoles = getRequestedRoles(realm.getClientByClientId("REALM_ROLE_1_APPLICATION"), session5.users().getUserByUsername(realm, "REALM_COMPOSITE_1_USER"));
Assert.assertEquals(1, requestedRoles.size());
Assertions.assertEquals(1, requestedRoles.size());
assertContains(realm, "realm", "REALM_ROLE_1", requestedRoles);

requestedRoles = getRequestedRoles(realm.getClientByClientId("REALM_COMPOSITE_1_APPLICATION"), session5.users().getUserByUsername(realm, "REALM_ROLE_1_USER"));
Assert.assertEquals(1, requestedRoles.size());
Assertions.assertEquals(1, requestedRoles.size());
assertContains(realm, "realm", "REALM_ROLE_1", requestedRoles);
});

}


@Override
public void configureTestRealm(RealmRepresentation testRealm) {
log.infof("testcomposites imported");
RealmRepresentation newRealm = loadJson(getClass().getResourceAsStream("/model/testcomposites2.json"), RealmRepresentation.class);
adminClient.realms().create(newRealm);

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.keycloak.tests.model;

import org.keycloak.testframework.server.KeycloakServerConfig;
import org.keycloak.testframework.server.KeycloakServerConfigBuilder;

public class CustomProvidersServerConfig implements KeycloakServerConfig {

@Override
public KeycloakServerConfigBuilder configure(KeycloakServerConfigBuilder config) {
return config.dependency("org.keycloak.tests", "keycloak-tests-custom-providers");
}
}
Loading
Loading