/* * JBoss, Home of Professional Open Source * * Copyright 2013 Red Hat, Inc. and/or its affiliates. * * 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.console.clients; import org.jboss.arquillian.graphene.page.Page; import org.junit.Test; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.testsuite.console.page.clients.settings.ClientSettings; import org.keycloak.testsuite.util.Timer; import org.openqa.selenium.By; import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.*; import static org.keycloak.testsuite.auth.page.login.Login.OIDC; import static org.keycloak.testsuite.auth.page.login.Login.SAML; import static org.keycloak.testsuite.console.page.clients.settings.ClientSettingsForm.OidcAccessType.BEARER_ONLY; import static org.keycloak.testsuite.console.page.clients.settings.ClientSettingsForm.OidcAccessType.CONFIDENTIAL; import static org.keycloak.testsuite.util.WaitUtils.pause; /** * * @author Filip Kiss * @author tkyjovsk * @author Vaclav Muzikar <vmuzikar@redhat.com> */ public class ClientSettingsTest extends AbstractClientTest { @Page private ClientSettings clientSettingsPage; private ClientRepresentation newClient; @Test public void crudOIDCPublic() { newClient = createClientRep("oidc-public", OIDC); createClient(newClient); // read & verify ClientRepresentation found = findClientByClientId(newClient.getClientId()); assertNotNull("Client " + newClient.getClientId() + " was not found.", found); assertClientSettingsEqual(newClient, found); // update & verify newClient.setClientId("oidc-public-updated"); newClient.setName("updatedName"); List<String> redirectUris = new ArrayList<>(); redirectUris.add("http://example2.test/app/*"); redirectUris.add("http://example2.test/app2/*"); redirectUris.add("http://example3.test/app/*"); newClient.setRedirectUris(redirectUris); List<String> webOrigins = new ArrayList<>(); webOrigins.clear(); webOrigins.add("http://example2.test"); webOrigins.add("http://example3.test"); newClient.setWebOrigins(webOrigins); clientSettingsPage.form().setClientId("oidc-public-updated"); clientSettingsPage.form().setName("updatedName"); clientSettingsPage.form().setRedirectUris(redirectUris); clientSettingsPage.form().setWebOrigins(webOrigins); clientSettingsPage.form().save(); assertAlertSuccess(); found = findClientByClientId(newClient.getClientId()); assertNotNull("Client " + newClient.getClientId() + " was not found.", found); assertClientSettingsEqual(newClient, found); // delete clientPage.delete(); assertAlertSuccess(); found = findClientByClientId(newClient.getClientId()); assertNull("Deleted client " + newClient.getClientId() + " was found.", found); } @Test public void createOIDCConfidential() { newClient = createClientRep("oidc-confidetial", OIDC); createClient(newClient); newClient.setRedirectUris(TEST_REDIRECT_URIs); newClient.setPublicClient(false); clientSettingsPage.form().setAccessType(CONFIDENTIAL); clientSettingsPage.form().setRedirectUris(TEST_REDIRECT_URIs); clientSettingsPage.form().save(); ClientRepresentation found = findClientByClientId(newClient.getClientId()); assertNotNull("Client " + newClient.getClientId() + " was not found.", found); assertClientSettingsEqual(newClient, found); } //KEYCLOAK-4022 @Test public void testOIDCConfidentialServiceAccountRolesTab() { newClient = createClientRep("oidc-service-account-tab", OIDC); createClient(newClient); newClient.setRedirectUris(TEST_REDIRECT_URIs); newClient.setPublicClient(false); clientSettingsPage.form().setAccessType(CONFIDENTIAL); clientSettingsPage.form().setServiceAccountsEnabled(true); assertTrue(clientSettingsPage.form().isServiceAccountsEnabled()); //check if Service Account Roles tab is not present assertFalse(clientSettingsPage.tabs().isServiceAccountRolesDisplayed()); clientSettingsPage.form().setRedirectUris(TEST_REDIRECT_URIs); clientSettingsPage.form().save(); //should be there now assertTrue(clientSettingsPage.tabs().getTabs().findElement(By.linkText("Service Account Roles")).isDisplayed()); } @Test public void saveOIDCConfidentialWithoutRedirectURIs() { newClient = createClientRep("oidc-confidential", OIDC); createClient(newClient); clientSettingsPage.form().setName("name"); clientSettingsPage.form().save(); assertAlertDanger(); } @Test public void createOIDCBearerOnly() { newClient = createClientRep("oidc-bearer-only", OIDC); createClient(newClient); clientSettingsPage.form().setAccessType(BEARER_ONLY); clientSettingsPage.form().save(); newClient.setBearerOnly(true); newClient.setPublicClient(false); ClientRepresentation found = findClientByClientId(newClient.getClientId()); assertNotNull("Client " + newClient.getClientId() + " was not found.", found); assertClientSettingsEqual(newClient, found); } @Test public void createSAML() { newClient = createClientRep("saml", SAML); createClient(newClient); ClientRepresentation found = findClientByClientId(newClient.getClientId()); assertNotNull("Client " + newClient.getClientId() + " was not found.", found); assertClientSettingsEqual(newClient, found); assertClientSamlAttributes(getSAMLAttributes(), found.getAttributes()); } @Test public void invalidSettings() { clientsPage.table().createClient(); createClientPage.form().save(); assertAlertDanger(); clientsPage.navigateTo(); newClient = createClientRep(TEST_CLIENT_ID, OIDC); createClient(newClient); clientsPage.navigateTo(); clientsPage.table().createClient(); createClientPage.form().setClientId(TEST_CLIENT_ID); createClientPage.form().save(); assertAlertDanger(); } public void createClients(String clientIdPrefix, int count) { for (int i = 0; i < count; i++) { String clientId = String.format("%s%02d", clientIdPrefix, i); ClientRepresentation cr = createClientRep(clientId, OIDC); Timer.DEFAULT.reset(); Response r = testRealmResource().clients().create(cr); r.close(); Timer.DEFAULT.reset("create client"); } } // @Test public void clientsPagination() { createClients("test_client_", 100); clientsPage.navigateTo(); pause(120000); } @Test public void disabledClient() { newClient = createClientRep("disabled-client", OIDC); newClient.setEnabled(false); createClient(newClient); ClientRepresentation clientRepre = findClientByClientId("disabled-client"); assertTrue("Client should be disabled", clientRepre.isEnabled()); } }