Merge pull request #2815 from abstractj/AuthorizationCodeTest
Migration of AuthorizationCodeTest
This commit is contained in:
commit
a09f38589f
4 changed files with 80 additions and 57 deletions
|
@ -26,6 +26,7 @@ import org.keycloak.models.RealmModel;
|
|||
import org.keycloak.models.UserSessionModel;
|
||||
import org.keycloak.models.utils.ModelToRepresentation;
|
||||
import org.keycloak.representations.idm.EventRepresentation;
|
||||
import org.keycloak.services.managers.ClientSessionCode;
|
||||
import org.keycloak.services.managers.RealmManager;
|
||||
import org.keycloak.services.resource.RealmResourceProvider;
|
||||
import org.keycloak.testsuite.events.EventsListenerProvider;
|
||||
|
@ -165,4 +166,22 @@ public class TestingResourceProvider implements RealmResourceProvider {
|
|||
public void close() {
|
||||
}
|
||||
|
||||
/*
|
||||
* Migration from KeycloakRule#verifyCode
|
||||
*/
|
||||
@GET
|
||||
@Path("/verify-code")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String verifyCode(@QueryParam("realm") String realmName, @QueryParam("code") String code) {
|
||||
RealmModel realm = session.realms().getRealm(realmName);
|
||||
try {
|
||||
ClientSessionCode accessCode = ClientSessionCode.parse(code, session, realm);
|
||||
if (accessCode == null) {
|
||||
throw new AssertionError("Invalid code");
|
||||
}
|
||||
return accessCode.getClientSession().getId();
|
||||
} catch (Throwable t) {
|
||||
throw new AssertionError("Failed to parse code", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -80,4 +80,8 @@ public interface TestingResource {
|
|||
@Produces(MediaType.APPLICATION_JSON)
|
||||
boolean isCached(@PathParam("cache") String cacheName, @PathParam("id") String id);
|
||||
|
||||
@GET
|
||||
@Path("/verify-code")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
String verifyCode(@QueryParam("realm") String realmName, @QueryParam("code") String code);
|
||||
}
|
||||
|
|
|
@ -16,71 +16,67 @@
|
|||
*/
|
||||
package org.keycloak.testsuite.oauth;
|
||||
|
||||
import org.jboss.arquillian.graphene.page.Page;
|
||||
import org.junit.Assert;
|
||||
import org.junit.ClassRule;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.keycloak.OAuth2Constants;
|
||||
import org.keycloak.events.Details;
|
||||
import org.keycloak.events.Errors;
|
||||
import org.keycloak.models.Constants;
|
||||
import org.keycloak.models.RealmModel;
|
||||
import org.keycloak.services.managers.ClientSessionCode;
|
||||
import org.keycloak.services.managers.RealmManager;
|
||||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
import org.keycloak.testsuite.AbstractKeycloakTest;
|
||||
import org.keycloak.testsuite.AssertEvents;
|
||||
import org.keycloak.testsuite.OAuthClient;
|
||||
import org.keycloak.testsuite.OAuthClient.AuthorizationCodeResponse;
|
||||
import org.keycloak.testsuite.pages.ErrorPage;
|
||||
import org.keycloak.testsuite.pages.LoginPage;
|
||||
import org.keycloak.testsuite.rule.KeycloakRule;
|
||||
import org.keycloak.testsuite.rule.WebResource;
|
||||
import org.keycloak.testsuite.rule.WebRule;
|
||||
import org.keycloak.testsuite.util.ClientManager;
|
||||
import org.keycloak.testsuite.util.OAuthClient;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
||||
import javax.ws.rs.core.UriBuilder;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.keycloak.testsuite.admin.AbstractAdminTest.loadJson;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
|
||||
*/
|
||||
public class AuthorizationCodeTest {
|
||||
|
||||
@ClassRule
|
||||
public static KeycloakRule keycloakRule = new KeycloakRule();
|
||||
public class AuthorizationCodeTest extends AbstractKeycloakTest {
|
||||
|
||||
@Rule
|
||||
public WebRule webRule = new WebRule(this);
|
||||
public AssertEvents events = new AssertEvents(this);
|
||||
|
||||
@WebResource
|
||||
protected WebDriver driver;
|
||||
|
||||
@WebResource
|
||||
protected OAuthClient oauth;
|
||||
|
||||
@WebResource
|
||||
protected LoginPage loginPage;
|
||||
|
||||
@WebResource
|
||||
@Page
|
||||
protected ErrorPage errorPage;
|
||||
|
||||
@Rule
|
||||
public AssertEvents events = new AssertEvents(keycloakRule);
|
||||
|
||||
@Override
|
||||
public void beforeAbstractKeycloakTest() throws Exception {
|
||||
super.beforeAbstractKeycloakTest();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addTestRealms(List<RealmRepresentation> testRealms) {
|
||||
|
||||
RealmRepresentation realmRepresentation = loadJson(getClass().getResourceAsStream("/testrealm.json"), RealmRepresentation.class);
|
||||
|
||||
testRealms.add(realmRepresentation);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void authorizationRequest() throws IOException {
|
||||
oauth.state("mystate");
|
||||
|
||||
AuthorizationCodeResponse response = oauth.doLogin("test-user@localhost", "password");
|
||||
OAuthClient.AuthorizationCodeResponse response = oauth.doLogin("test-user@localhost", "password");
|
||||
|
||||
Assert.assertTrue(response.isRedirected());
|
||||
Assert.assertNotNull(response.getCode());
|
||||
assertEquals("mystate", response.getState());
|
||||
Assert.assertNull(response.getError());
|
||||
|
||||
keycloakRule.verifyCode(response.getCode());
|
||||
testingClient.testing().verifyCode("test", response.getCode());
|
||||
|
||||
String codeId = events.expectLogin().assertEvent().getDetails().get(Details.CODE_ID);
|
||||
assertCode(codeId, response.getCode());
|
||||
|
@ -88,12 +84,7 @@ public class AuthorizationCodeTest {
|
|||
|
||||
@Test
|
||||
public void authorizationRequestInstalledApp() throws IOException {
|
||||
keycloakRule.update(new KeycloakRule.KeycloakSetup() {
|
||||
@Override
|
||||
public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
|
||||
appRealm.getClientByClientId("test-app").addRedirectUri(Constants.INSTALLED_APP_URN);
|
||||
}
|
||||
});
|
||||
ClientManager.realm(adminClient.realm("test")).clientId("test-app").addRedirectUris(Constants.INSTALLED_APP_URN);
|
||||
oauth.redirectUri(Constants.INSTALLED_APP_URN);
|
||||
|
||||
oauth.doLogin("test-user@localhost", "password");
|
||||
|
@ -102,36 +93,26 @@ public class AuthorizationCodeTest {
|
|||
Assert.assertEquals("Success code", title);
|
||||
|
||||
String code = driver.findElement(By.id(OAuth2Constants.CODE)).getAttribute("value");
|
||||
keycloakRule.verifyCode(code);
|
||||
testingClient.testing().verifyCode("test", code);
|
||||
|
||||
String codeId = events.expectLogin().detail(Details.REDIRECT_URI, "http://localhost:8081/auth/realms/test/protocol/openid-connect/oauth/oob").assertEvent().getDetails().get(Details.CODE_ID);
|
||||
String codeId = events.expectLogin().detail(Details.REDIRECT_URI, "http://localhost:8180/auth/realms/test/protocol/openid-connect/oauth/oob").assertEvent().getDetails().get(Details.CODE_ID);
|
||||
assertCode(codeId, code);
|
||||
|
||||
keycloakRule.update(new KeycloakRule.KeycloakSetup() {
|
||||
@Override
|
||||
public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
|
||||
appRealm.getClientByClientId("test-app").removeRedirectUri(Constants.INSTALLED_APP_URN);
|
||||
}
|
||||
});
|
||||
ClientManager.realm(adminClient.realm("test")).clientId("test-app").removeRedirectUris(Constants.INSTALLED_APP_URN);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void authorizationValidRedirectUri() throws IOException {
|
||||
keycloakRule.update(new KeycloakRule.KeycloakSetup() {
|
||||
@Override
|
||||
public void config(RealmManager manager, RealmModel adminstrationRealm, RealmModel appRealm) {
|
||||
appRealm.getClientByClientId("test-app").addRedirectUri(oauth.getRedirectUri());
|
||||
}
|
||||
});
|
||||
ClientManager.realm(adminClient.realm("test")).clientId("test-app").addRedirectUris(oauth.getRedirectUri());
|
||||
|
||||
oauth.state("mystate");
|
||||
|
||||
AuthorizationCodeResponse response = oauth.doLogin("test-user@localhost", "password");
|
||||
OAuthClient.AuthorizationCodeResponse response = oauth.doLogin("test-user@localhost", "password");
|
||||
|
||||
Assert.assertTrue(response.isRedirected());
|
||||
Assert.assertNotNull(response.getCode());
|
||||
|
||||
keycloakRule.verifyCode(response.getCode());
|
||||
testingClient.testing().verifyCode("test", response.getCode());
|
||||
|
||||
String codeId = events.expectLogin().assertEvent().getDetails().get(Details.CODE_ID);
|
||||
assertCode(codeId, response.getCode());
|
||||
|
@ -141,14 +122,14 @@ public class AuthorizationCodeTest {
|
|||
public void authorizationRequestNoState() throws IOException {
|
||||
oauth.state(null);
|
||||
|
||||
AuthorizationCodeResponse response = oauth.doLogin("test-user@localhost", "password");
|
||||
OAuthClient.AuthorizationCodeResponse response = oauth.doLogin("test-user@localhost", "password");
|
||||
|
||||
Assert.assertTrue(response.isRedirected());
|
||||
Assert.assertNotNull(response.getCode());
|
||||
Assert.assertNull(response.getState());
|
||||
Assert.assertNull(response.getError());
|
||||
|
||||
keycloakRule.verifyCode(response.getCode());
|
||||
testingClient.testing().verifyCode("test", response.getCode());
|
||||
|
||||
String codeId = events.expectLogin().assertEvent().getDetails().get(Details.CODE_ID);
|
||||
assertCode(codeId, response.getCode());
|
||||
|
@ -173,8 +154,8 @@ public class AuthorizationCodeTest {
|
|||
}
|
||||
|
||||
private void assertCode(String expectedCodeId, String actualCode) {
|
||||
ClientSessionCode code = keycloakRule.verifyCode(actualCode);
|
||||
assertEquals(expectedCodeId, code.getClientSession().getId());
|
||||
String code = testingClient.testing().verifyCode("test", actualCode);
|
||||
assertEquals(expectedCodeId, code);
|
||||
}
|
||||
|
||||
}
|
|
@ -6,8 +6,10 @@ import org.keycloak.representations.idm.ClientRepresentation;
|
|||
import org.keycloak.representations.idm.ProtocolMapperRepresentation;
|
||||
import org.keycloak.representations.idm.RoleRepresentation;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import static org.keycloak.testsuite.admin.ApiUtil.findClientByClientId;
|
||||
import static org.keycloak.testsuite.admin.ApiUtil.findProtocolMapperByName;
|
||||
|
@ -96,5 +98,22 @@ public class ClientManager {
|
|||
public void removeScopeMapping(RoleRepresentation newRole) {
|
||||
clientResource.getScopeMappings().realmLevel().remove(Collections.singletonList(newRole));
|
||||
}
|
||||
|
||||
public void addRedirectUris(String... redirectUris) {
|
||||
ClientRepresentation app = clientResource.toRepresentation();
|
||||
if (app.getRedirectUris() == null) {
|
||||
app.setRedirectUris(new LinkedList<String>());
|
||||
}
|
||||
app.setRedirectUris(Arrays.asList(redirectUris));
|
||||
clientResource.update(app);
|
||||
}
|
||||
|
||||
public void removeRedirectUris(String... redirectUris) {
|
||||
ClientRepresentation app = clientResource.toRepresentation();
|
||||
for (String redirectUri : redirectUris) {
|
||||
app.getRedirectUris().remove(redirectUri);
|
||||
}
|
||||
clientResource.update(app);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue