diff --git a/testsuite/integration-arquillian/test-apps/servlet-authz/keycloak.-permissive-authz-service.json b/testsuite/integration-arquillian/test-apps/servlet-authz/keycloak.-permissive-authz-service.json
new file mode 100644
index 0000000000..89c92f29ab
--- /dev/null
+++ b/testsuite/integration-arquillian/test-apps/servlet-authz/keycloak.-permissive-authz-service.json
@@ -0,0 +1,15 @@
+{
+ "realm": "servlet-authz",
+ "realm-public-key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB",
+ "auth-server-url" : "http://localhost:8180/auth",
+ "ssl-required" : "external",
+ "resource" : "servlet-authz-app",
+ "public-client" : false,
+ "credentials": {
+ "secret": "secret"
+ },
+ "policy-enforcer": {
+ "enforcement-mode" : "PERMISSIVE",
+ "on-deny-redirect-to" : "/servlet-authz-app/accessDenied.jsp"
+ }
+}
\ No newline at end of file
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractPermissiveModeAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractPermissiveModeAdapterTest.java
new file mode 100644
index 0000000000..71596351e6
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractPermissiveModeAdapterTest.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2016 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.keycloak.testsuite.adapter.example.authorization;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+
+/**
+ * @author Pedro Igor
+ */
+public abstract class AbstractPermissiveModeAdapterTest extends AbstractServletAuthzAdapterTest {
+
+ @Deployment(name = RESOURCE_SERVER_ID, managed = false)
+ public static WebArchive deployment() throws IOException {
+ return exampleDeployment(RESOURCE_SERVER_ID)
+ .addAsWebInfResource(new File(TEST_APPS_HOME_DIR + "/servlet-authz-app/servlet-authz-realm.json"), "keycloak.-permissive-authz-service.json");
+ }
+
+ @Test
+ public void testCanAccessWhenPermissive() throws Exception {
+ performTests(() -> {
+ login("jdoe", "jdoe");
+ driver.navigate().to(getResourceServerUrl() + "/enforcing/resource");
+ assertTrue(driver.getTitle().equals("Error"));
+ assertTrue(driver.getPageSource().contains("Not Found"));
+
+ driver.navigate().to(getResourceServerUrl() + "/protected/admin");
+ assertTrue(wasDenied());
+ });
+ }
+
+}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractServletAuthzAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractServletAuthzAdapterTest.java
index de1a2de858..d61b077b21 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractServletAuthzAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractServletAuthzAdapterTest.java
@@ -17,7 +17,6 @@
package org.keycloak.testsuite.adapter.example.authorization;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
import static org.keycloak.testsuite.util.IOUtil.loadJson;
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
import static org.keycloak.testsuite.util.WaitUtils.pause;
@@ -25,35 +24,24 @@ import static org.keycloak.testsuite.util.WaitUtils.pause;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
-import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
import org.jboss.arquillian.container.test.api.Deployer;
-import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.test.api.ArquillianResource;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.BeforeClass;
-import org.junit.Test;
import org.keycloak.admin.client.resource.AuthorizationResource;
import org.keycloak.admin.client.resource.ClientResource;
import org.keycloak.admin.client.resource.ClientsResource;
-import org.keycloak.admin.client.resource.RealmResource;
-import org.keycloak.admin.client.resource.UserResource;
-import org.keycloak.admin.client.resource.UsersResource;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.RealmRepresentation;
-import org.keycloak.representations.idm.RoleRepresentation;
-import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.representations.idm.authorization.PolicyRepresentation;
import org.keycloak.representations.idm.authorization.ResourceServerRepresentation;
+import org.keycloak.representations.idm.authorization.UserPolicyRepresentation;
import org.keycloak.testsuite.ProfileAssume;
import org.keycloak.testsuite.adapter.AbstractExampleAdapterTest;
import org.keycloak.testsuite.util.WaitUtils;
-import org.keycloak.util.JsonSerialization;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
@@ -62,8 +50,8 @@ import org.openqa.selenium.WebElement;
*/
public abstract class AbstractServletAuthzAdapterTest extends AbstractExampleAdapterTest {
- private static final String REALM_NAME = "servlet-authz";
- private static final String RESOURCE_SERVER_ID = "servlet-authz-app";
+ protected static final String REALM_NAME = "servlet-authz";
+ protected static final String RESOURCE_SERVER_ID = "servlet-authz-app";
@BeforeClass
public static void enabled() { ProfileAssume.assumePreview(); }
@@ -77,184 +65,13 @@ public abstract class AbstractServletAuthzAdapterTest extends AbstractExampleAda
loadRealm(new File(TEST_APPS_HOME_DIR + "/servlet-authz-app/servlet-authz-realm.json")));
}
- @Deployment(name = RESOURCE_SERVER_ID, managed = false)
- public static WebArchive deployment() throws IOException {
- return exampleDeployment(RESOURCE_SERVER_ID);
+ protected void performTests(ExceptionRunnable assertion) {
+ performTests(() -> importResourceServerSettings(), assertion);
}
- @Test
- public void testRegularUserPermissions() throws Exception {
- performTests(() -> {
- login("alice", "alice");
- assertFalse(wasDenied());
- assertTrue(hasLink("User Premium"));
- assertTrue(hasLink("Administration"));
- assertTrue(hasText("urn:servlet-authz:page:main:actionForUser"));
- assertFalse(hasText("urn:servlet-authz:page:main:actionForAdmin"));
- assertFalse(hasText("urn:servlet-authz:page:main:actionForPremiumUser"));
-
- navigateToDynamicMenuPage();
- assertTrue(hasText("Do user thing"));
- assertFalse(hasText("Do user premium thing"));
- assertFalse(hasText("Do administration thing"));
-
- navigateToUserPremiumPage();
- assertTrue(wasDenied());
-
- navigateToAdminPage();
- assertTrue(wasDenied());
- });
- }
-
- @Test
- public void testUserPremiumPermissions() throws Exception {
- performTests(() -> {
- login("jdoe", "jdoe");
- assertFalse(wasDenied());
- assertTrue(hasLink("User Premium"));
- assertTrue(hasLink("Administration"));
- assertTrue(hasText("urn:servlet-authz:page:main:actionForUser"));
- assertTrue(hasText("urn:servlet-authz:page:main:actionForPremiumUser"));
- assertFalse(hasText("urn:servlet-authz:page:main:actionForAdmin"));
-
- navigateToDynamicMenuPage();
- assertTrue(hasText("Do user thing"));
- assertTrue(hasText("Do user premium thing"));
- assertFalse(hasText("Do administration thing"));
-
- navigateToUserPremiumPage();
- assertFalse(wasDenied());
-
- navigateToAdminPage();
- assertTrue(wasDenied());
- });
- }
-
- @Test
- public void testAdminPermissions() throws Exception {
- performTests(() -> {
- login("admin", "admin");
- assertFalse(wasDenied());
- assertTrue(hasLink("User Premium"));
- assertTrue(hasLink("Administration"));
- assertTrue(hasText("urn:servlet-authz:page:main:actionForUser"));
- assertTrue(hasText("urn:servlet-authz:page:main:actionForAdmin"));
- assertFalse(hasText("urn:servlet-authz:page:main:actionForPremiumUser"));
-
- navigateToDynamicMenuPage();
- assertTrue(hasText("Do user thing"));
- assertTrue(hasText("Do administration thing"));
- assertFalse(hasText("Do user premium thing"));
-
- navigateToUserPremiumPage();
- assertTrue(wasDenied());
-
- navigateToAdminPage();
- assertFalse(wasDenied());
- });
- }
-
- @Test
- public void testGrantPremiumAccessToUser() throws Exception {
- performTests(() -> {
- login("alice", "alice");
- assertFalse(wasDenied());
-
- navigateToUserPremiumPage();
- assertTrue(wasDenied());
-
- for (PolicyRepresentation policy : getAuthorizationResource().policies().policies()) {
- if ("Premium Resource Permission".equals(policy.getName())) {
- policy.getConfig().put("applyPolicies", "[\"Any User Policy\"]");
- getAuthorizationResource().policies().policy(policy.getId()).update(policy);
- }
- }
-
- login("alice", "alice");
-
- navigateToUserPremiumPage();
- assertFalse(wasDenied());
-
- for (PolicyRepresentation policy : getAuthorizationResource().policies().policies()) {
- if ("Premium Resource Permission".equals(policy.getName())) {
- policy.getConfig().put("applyPolicies", "[\"Only Premium User Policy\"]");
- getAuthorizationResource().policies().policy(policy.getId()).update(policy);
- }
- }
-
- login("alice", "alice");
-
- navigateToUserPremiumPage();
- assertTrue(wasDenied());
-
- PolicyRepresentation onlyAlicePolicy = new PolicyRepresentation();
-
- onlyAlicePolicy.setName("Temporary Premium Access Policy");
- onlyAlicePolicy.setType("user");
- HashMap config = new HashMap<>();
- UsersResource usersResource = realmsResouce().realm(REALM_NAME).users();
- List users = usersResource.search("alice", null, null, null, null, null);
-
- assertFalse(users.isEmpty());
-
- config.put("users", JsonSerialization.writeValueAsString(Arrays.asList(users.get(0).getId())));
-
- onlyAlicePolicy.setConfig(config);
- getAuthorizationResource().policies().create(onlyAlicePolicy);
-
- for (PolicyRepresentation policy : getAuthorizationResource().policies().policies()) {
- if ("Premium Resource Permission".equals(policy.getName())) {
- policy.getConfig().put("applyPolicies", "[\"Temporary Premium Access Policy\"]");
- getAuthorizationResource().policies().policy(policy.getId()).update(policy);
- }
- }
-
- login("alice", "alice");
-
- navigateToUserPremiumPage();
- assertFalse(wasDenied());
- });
- }
-
- @Test
- public void testGrantAdministrativePermissions() throws Exception {
- performTests(() -> {
- login("jdoe", "jdoe");
-
- navigateToAdminPage();
- assertTrue(wasDenied());
-
- RealmResource realmResource = realmsResouce().realm(REALM_NAME);
- UsersResource usersResource = realmResource.users();
- List users = usersResource.search("jdoe", null, null, null, null, null);
-
- assertFalse(users.isEmpty());
-
- UserResource userResource = usersResource.get(users.get(0).getId());
-
- RoleRepresentation adminRole = realmResource.roles().get("admin").toRepresentation();
- userResource.roles().realmLevel().add(Arrays.asList(adminRole));
-
- login("jdoe", "jdoe");
-
- navigateToAdminPage();
- assertFalse(wasDenied());
- });
- }
-
- //KEYCLOAK-3830
- @Test
- public void testAccessPublicResource() throws Exception {
- performTests(() -> {
- driver.navigate().to(getResourceServerUrl() + "/public-html.html");
- WaitUtils.waitForPageToLoad(driver);
- assertTrue(hasText("This is public resource that should be accessible without login."));
- });
- }
-
- private void performTests(TestRunnable assertion) {
+ protected void performTests(ExceptionRunnable beforeDeploy, ExceptionRunnable assertion) {
try {
- importResourceServerSettings();
+ beforeDeploy.run();
deployer.deploy(RESOURCE_SERVER_ID);
assertion.run();
} catch (FileNotFoundException cause) {
@@ -266,11 +83,11 @@ public abstract class AbstractServletAuthzAdapterTest extends AbstractExampleAda
}
}
- private boolean hasLink(String text) {
+ protected boolean hasLink(String text) {
return getLink(text) != null;
}
- private boolean hasText(String text) {
+ protected boolean hasText(String text) {
return this.driver.getPageSource().contains(text);
}
@@ -278,11 +95,11 @@ public abstract class AbstractServletAuthzAdapterTest extends AbstractExampleAda
return this.driver.findElement(By.xpath("//a[text() = '" + text + "']"));
}
- private void importResourceServerSettings() throws FileNotFoundException {
+ protected void importResourceServerSettings() throws FileNotFoundException {
getAuthorizationResource().importSettings(loadJson(new FileInputStream(new File(TEST_APPS_HOME_DIR + "/servlet-authz-app/servlet-authz-app-authz-service.json")), ResourceServerRepresentation.class));
}
- private AuthorizationResource getAuthorizationResource() {
+ protected AuthorizationResource getAuthorizationResource() {
return getClientResource(RESOURCE_SERVER_ID).authorization();
}
@@ -300,7 +117,7 @@ public abstract class AbstractServletAuthzAdapterTest extends AbstractExampleAda
pause(500);
}
- private void login(String username, String password) {
+ protected void login(String username, String password) {
try {
navigateTo();
Thread.sleep(2000);
@@ -323,11 +140,11 @@ public abstract class AbstractServletAuthzAdapterTest extends AbstractExampleAda
WaitUtils.waitUntilElement(By.xpath("//a[text() = 'Dynamic Menu']"));
}
- private boolean wasDenied() {
+ protected boolean wasDenied() {
return this.driver.getPageSource().contains("You can not access this resource.");
}
- private URL getResourceServerUrl() {
+ protected URL getResourceServerUrl() {
try {
return new URL(this.appServerContextRootPage + "/" + RESOURCE_SERVER_ID);
} catch (MalformedURLException e) {
@@ -335,22 +152,57 @@ public abstract class AbstractServletAuthzAdapterTest extends AbstractExampleAda
}
}
- private void navigateToDynamicMenuPage() {
+ protected void navigateToDynamicMenuPage() {
navigateTo();
getLink("Dynamic Menu").click();
}
- private void navigateToUserPremiumPage() {
+ protected void navigateToUserPremiumPage() {
navigateTo();
getLink("User Premium").click();
}
- private void navigateToAdminPage() {
+ protected void navigateToAdminPage() {
navigateTo();
getLink("Administration").click();
}
- private interface TestRunnable {
+ protected void updatePermissionPolicies(String permissionName, String... policyNames) {
+ for (PolicyRepresentation policy : getAuthorizationResource().policies().policies()) {
+ if (permissionName.equalsIgnoreCase(policy.getName())) {
+ StringBuilder policies = new StringBuilder("[");
+
+ for (String policyName : policyNames) {
+ if (policies.length() > 1) {
+ policies.append(",");
+ }
+ policies.append("\"").append(policyName).append("\"");
+
+ }
+
+ policies.append("]");
+
+ policy.getConfig().put("applyPolicies", policies.toString());
+ getAuthorizationResource().policies().policy(policy.getId()).update(policy);
+ }
+ }
+ }
+
+ protected void createUserPolicy(String name, String... userNames) {
+ UserPolicyRepresentation policy = new UserPolicyRepresentation();
+
+ policy.setName(name);
+
+ for (String userName : userNames) {
+ policy.addUser(userName);
+ }
+
+ assertFalse(policy.getUsers().isEmpty());
+
+ getAuthorizationResource().policies().users().create(policy);
+ }
+
+ protected interface ExceptionRunnable {
void run() throws Exception;
}
}
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractServletAuthzFunctionalAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractServletAuthzFunctionalAdapterTest.java
new file mode 100644
index 0000000000..3aef53778e
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/authorization/AbstractServletAuthzFunctionalAdapterTest.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2016 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.keycloak.testsuite.adapter.example.authorization;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.keycloak.admin.client.resource.ClientsResource;
+import org.keycloak.admin.client.resource.RealmResource;
+import org.keycloak.admin.client.resource.ResourcesResource;
+import org.keycloak.admin.client.resource.UserResource;
+import org.keycloak.admin.client.resource.UsersResource;
+import org.keycloak.representations.idm.ClientRepresentation;
+import org.keycloak.representations.idm.RoleRepresentation;
+import org.keycloak.representations.idm.UserRepresentation;
+import org.keycloak.representations.idm.authorization.ResourceRepresentation;
+import org.keycloak.testsuite.util.WaitUtils;
+
+/**
+ * @author Pedro Igor
+ */
+public abstract class AbstractServletAuthzFunctionalAdapterTest extends AbstractServletAuthzAdapterTest {
+
+ @Deployment(name = RESOURCE_SERVER_ID, managed = false)
+ public static WebArchive deployment() throws IOException {
+ return exampleDeployment(RESOURCE_SERVER_ID);
+ }
+
+ @Test
+ public void testCanNotAccessWhenEnforcing() throws Exception {
+ performTests(() -> {
+ importResourceServerSettings();
+ ResourcesResource resources = getAuthorizationResource().resources();
+ ResourceRepresentation resource = resources.findByName("Protected Resource").get(0);
+
+ resource.setUri("/index.jsp");
+
+ resources.resource(resource.getId()).update(resource);
+ }, () -> {
+ login("jdoe", "jdoe");
+ driver.navigate().to(getResourceServerUrl().toString() + "/enforcing/resource");
+ assertTrue(wasDenied());
+ });
+ }
+
+ @Test
+ public void testRegularUserPermissions() throws Exception {
+ performTests(() -> {
+ login("alice", "alice");
+ assertFalse(wasDenied());
+ assertTrue(hasLink("User Premium"));
+ assertTrue(hasLink("Administration"));
+ assertTrue(hasText("urn:servlet-authz:page:main:actionForUser"));
+ assertFalse(hasText("urn:servlet-authz:page:main:actionForAdmin"));
+ assertFalse(hasText("urn:servlet-authz:page:main:actionForPremiumUser"));
+
+ navigateToDynamicMenuPage();
+ assertTrue(hasText("Do user thing"));
+ assertFalse(hasText("Do user premium thing"));
+ assertFalse(hasText("Do administration thing"));
+
+ navigateToUserPremiumPage();
+ assertTrue(wasDenied());
+
+ navigateToAdminPage();
+ assertTrue(wasDenied());
+ });
+ }
+
+ @Test
+ public void testUserPremiumPermissions() throws Exception {
+ performTests(() -> {
+ login("jdoe", "jdoe");
+ assertFalse(wasDenied());
+ assertTrue(hasLink("User Premium"));
+ assertTrue(hasLink("Administration"));
+ assertTrue(hasText("urn:servlet-authz:page:main:actionForUser"));
+ assertTrue(hasText("urn:servlet-authz:page:main:actionForPremiumUser"));
+ assertFalse(hasText("urn:servlet-authz:page:main:actionForAdmin"));
+
+ navigateToDynamicMenuPage();
+ assertTrue(hasText("Do user thing"));
+ assertTrue(hasText("Do user premium thing"));
+ assertFalse(hasText("Do administration thing"));
+
+ navigateToUserPremiumPage();
+ assertFalse(wasDenied());
+
+ navigateToAdminPage();
+ assertTrue(wasDenied());
+ });
+ }
+
+ @Test
+ public void testAdminPermissions() throws Exception {
+ performTests(() -> {
+ login("admin", "admin");
+ assertFalse(wasDenied());
+ assertTrue(hasLink("User Premium"));
+ assertTrue(hasLink("Administration"));
+ assertTrue(hasText("urn:servlet-authz:page:main:actionForUser"));
+ assertTrue(hasText("urn:servlet-authz:page:main:actionForAdmin"));
+ assertFalse(hasText("urn:servlet-authz:page:main:actionForPremiumUser"));
+
+ navigateToDynamicMenuPage();
+ assertTrue(hasText("Do user thing"));
+ assertTrue(hasText("Do administration thing"));
+ assertFalse(hasText("Do user premium thing"));
+
+ navigateToUserPremiumPage();
+ assertTrue(wasDenied());
+
+ navigateToAdminPage();
+ assertFalse(wasDenied());
+ });
+ }
+
+ @Test
+ public void testGrantPremiumAccessToUser() throws Exception {
+ performTests(() -> {
+ login("alice", "alice");
+ assertFalse(wasDenied());
+
+ navigateToUserPremiumPage();
+ assertTrue(wasDenied());
+
+ updatePermissionPolicies("Premium Resource Permission", "Any User Policy");
+
+ login("alice", "alice");
+
+ navigateToUserPremiumPage();
+ assertFalse(wasDenied());
+
+ updatePermissionPolicies("Premium Resource Permission", "Only Premium User Policy");
+
+ login("alice", "alice");
+
+ navigateToUserPremiumPage();
+ assertTrue(wasDenied());
+
+ createUserPolicy("Temporary Premium Access Policy", "alice");
+
+ updatePermissionPolicies("Premium Resource Permission", "Temporary Premium Access Policy");
+
+ login("alice", "alice");
+
+ navigateToUserPremiumPage();
+ assertFalse(wasDenied());
+ });
+ }
+
+ @Test
+ public void testGrantAdministrativePermissions() throws Exception {
+ performTests(() -> {
+ login("jdoe", "jdoe");
+
+ navigateToAdminPage();
+ assertTrue(wasDenied());
+
+ RealmResource realmResource = realmsResouce().realm(REALM_NAME);
+ UsersResource usersResource = realmResource.users();
+ List users = usersResource.search("jdoe", null, null, null, null, null);
+
+ assertFalse(users.isEmpty());
+
+ UserResource userResource = usersResource.get(users.get(0).getId());
+
+ RoleRepresentation adminRole = realmResource.roles().get("admin").toRepresentation();
+ userResource.roles().realmLevel().add(Arrays.asList(adminRole));
+
+ login("jdoe", "jdoe");
+
+ navigateToAdminPage();
+ assertFalse(wasDenied());
+ });
+ }
+
+ //KEYCLOAK-3830
+ @Test
+ public void testAccessPublicResource() throws Exception {
+ performTests(() -> {
+ driver.navigate().to(getResourceServerUrl() + "/public-html.html");
+ WaitUtils.waitForPageToLoad(driver);
+ assertTrue(hasText("This is public resource that should be accessible without login."));
+ });
+ }
+}
diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/eap6/src/test/java/org/keycloak/testsuite/adapter/example/authorization/EAP6PermissiveModeAdapterTest.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/eap6/src/test/java/org/keycloak/testsuite/adapter/example/authorization/EAP6PermissiveModeAdapterTest.java
new file mode 100644
index 0000000000..c300b514ec
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/eap6/src/test/java/org/keycloak/testsuite/adapter/example/authorization/EAP6PermissiveModeAdapterTest.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2016 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.keycloak.testsuite.adapter.example.authorization;
+
+import org.jboss.arquillian.container.test.api.RunAsClient;
+import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
+
+/**
+ *
+ * @author tkyjovsk
+ */
+@RunAsClient
+@AppServerContainer("app-server-eap6")
+public class EAP6PermissiveModeAdapterTest extends AbstractPermissiveModeAdapterTest {
+
+}
diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/eap6/src/test/java/org/keycloak/testsuite/adapter/example/authorization/EAP6ServletAuthzAdapterTest.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/eap6/src/test/java/org/keycloak/testsuite/adapter/example/authorization/EAP6ServletAuthzAdapterTest.java
index 5833b298ab..f7ac21a528 100644
--- a/testsuite/integration-arquillian/tests/other/adapters/jboss/eap6/src/test/java/org/keycloak/testsuite/adapter/example/authorization/EAP6ServletAuthzAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/eap6/src/test/java/org/keycloak/testsuite/adapter/example/authorization/EAP6ServletAuthzAdapterTest.java
@@ -25,6 +25,6 @@ import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
*/
@RunAsClient
@AppServerContainer("app-server-eap6")
-public class EAP6ServletAuthzAdapterTest extends AbstractServletAuthzAdapterTest {
+public class EAP6ServletAuthzAdapterTest extends AbstractServletAuthzFunctionalAdapterTest {
}
diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/wildfly/src/test/java/org/keycloak/testsuite/adapter/example/authorization/WildflyPermissiveModeAdapterTest.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/wildfly/src/test/java/org/keycloak/testsuite/adapter/example/authorization/WildflyPermissiveModeAdapterTest.java
new file mode 100644
index 0000000000..8c6e0d399e
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/wildfly/src/test/java/org/keycloak/testsuite/adapter/example/authorization/WildflyPermissiveModeAdapterTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2016 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.keycloak.testsuite.adapter.example.authorization;
+
+import org.jboss.arquillian.container.test.api.RunAsClient;
+import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
+
+/**
+ *
+ * @author tkyjovsk
+ */
+@RunAsClient
+@AppServerContainer("app-server-wildfly")
+//@AdapterLibsLocationProperty("adapter.libs.wildfly")
+public class WildflyPermissiveModeAdapterTest extends AbstractPermissiveModeAdapterTest {
+
+}
diff --git a/testsuite/integration-arquillian/tests/other/adapters/jboss/wildfly/src/test/java/org/keycloak/testsuite/adapter/example/authorization/WildflyServletAuthzAdapterTest.java b/testsuite/integration-arquillian/tests/other/adapters/jboss/wildfly/src/test/java/org/keycloak/testsuite/adapter/example/authorization/WildflyServletAuthzAdapterTest.java
index 6ff0e1f86c..13a444f96e 100644
--- a/testsuite/integration-arquillian/tests/other/adapters/jboss/wildfly/src/test/java/org/keycloak/testsuite/adapter/example/authorization/WildflyServletAuthzAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/other/adapters/jboss/wildfly/src/test/java/org/keycloak/testsuite/adapter/example/authorization/WildflyServletAuthzAdapterTest.java
@@ -17,7 +17,6 @@
package org.keycloak.testsuite.adapter.example.authorization;
import org.jboss.arquillian.container.test.api.RunAsClient;
-import org.keycloak.testsuite.adapter.example.authorization.AbstractServletAuthzAdapterTest;
import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
/**
@@ -27,6 +26,6 @@ import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
@RunAsClient
@AppServerContainer("app-server-wildfly")
//@AdapterLibsLocationProperty("adapter.libs.wildfly")
-public class WildflyServletAuthzAdapterTest extends AbstractServletAuthzAdapterTest {
+public class WildflyServletAuthzAdapterTest extends AbstractServletAuthzFunctionalAdapterTest {
}