Migrate AdminPreflightTest (#35042)
Part of #34494 Signed-off-by: stianst <stianst@gmail.com>
This commit is contained in:
parent
e4509a7199
commit
de14e1c310
8 changed files with 192 additions and 56 deletions
|
|
@ -7,6 +7,7 @@ import org.keycloak.test.framework.database.TestDatabase;
|
|||
import org.keycloak.test.framework.events.AdminEventsSupplier;
|
||||
import org.keycloak.test.framework.events.EventsSupplier;
|
||||
import org.keycloak.test.framework.events.SysLogServerSupplier;
|
||||
import org.keycloak.test.framework.http.HttpClientSupplier;
|
||||
import org.keycloak.test.framework.injection.Supplier;
|
||||
import org.keycloak.test.framework.oauth.OAuthClientSupplier;
|
||||
import org.keycloak.test.framework.realm.ClientSupplier;
|
||||
|
|
@ -16,6 +17,7 @@ import org.keycloak.test.framework.server.DistributionKeycloakTestServerSupplier
|
|||
import org.keycloak.test.framework.server.EmbeddedKeycloakTestServerSupplier;
|
||||
import org.keycloak.test.framework.server.KeycloakTestServer;
|
||||
import org.keycloak.test.framework.server.RemoteKeycloakTestServerSupplier;
|
||||
import org.keycloak.test.framework.server.KeycloakUrlsSupplier;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -32,12 +34,14 @@ public class CoreTestFrameworkExtension implements TestFrameworkExtension {
|
|||
new DistributionKeycloakTestServerSupplier(),
|
||||
new EmbeddedKeycloakTestServerSupplier(),
|
||||
new RemoteKeycloakTestServerSupplier(),
|
||||
new KeycloakUrlsSupplier(),
|
||||
new DevMemDatabaseSupplier(),
|
||||
new DevFileDatabaseSupplier(),
|
||||
new OAuthClientSupplier(),
|
||||
new SysLogServerSupplier(),
|
||||
new EventsSupplier(),
|
||||
new AdminEventsSupplier()
|
||||
new AdminEventsSupplier(),
|
||||
new HttpClientSupplier()
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
package org.keycloak.test.framework.annotations;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.FIELD)
|
||||
public @interface InjectHttpClient {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package org.keycloak.test.framework.annotations;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.FIELD)
|
||||
public @interface InjectKeycloakUrls {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
package org.keycloak.test.framework.http;
|
||||
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.keycloak.test.framework.annotations.InjectHttpClient;
|
||||
import org.keycloak.test.framework.injection.InstanceContext;
|
||||
import org.keycloak.test.framework.injection.RequestedInstance;
|
||||
import org.keycloak.test.framework.injection.Supplier;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class HttpClientSupplier implements Supplier<HttpClient, InjectHttpClient> {
|
||||
|
||||
@Override
|
||||
public Class<InjectHttpClient> getAnnotationClass() {
|
||||
return InjectHttpClient.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<HttpClient> getValueType() {
|
||||
return HttpClient.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpClient getValue(InstanceContext<HttpClient, InjectHttpClient> instanceContext) {
|
||||
return HttpClientBuilder.create().build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close(InstanceContext<HttpClient, InjectHttpClient> instanceContext) {
|
||||
try {
|
||||
((CloseableHttpClient) instanceContext.getValue()).close();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean compatible(InstanceContext<HttpClient, InjectHttpClient> a, RequestedInstance<HttpClient, InjectHttpClient> b) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package org.keycloak.test.framework.server;
|
||||
|
||||
import org.keycloak.common.util.KeycloakUriBuilder;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
public class KeycloakUrls {
|
||||
|
||||
private final String baseUrl;
|
||||
|
||||
public KeycloakUrls(String baseUrl) {
|
||||
this.baseUrl = baseUrl;
|
||||
}
|
||||
|
||||
public String getBase() {
|
||||
return baseUrl;
|
||||
}
|
||||
|
||||
public URL getBaseUrl() {
|
||||
return toUrl(getBase());
|
||||
}
|
||||
|
||||
public String getAdmin() {
|
||||
return baseUrl + "/admin";
|
||||
}
|
||||
|
||||
public URL getAdminUrl() {
|
||||
return toUrl(getAdmin());
|
||||
}
|
||||
|
||||
public KeycloakUriBuilder getAdminBuilder() {
|
||||
return toBuilder(getAdmin());
|
||||
}
|
||||
|
||||
private URL toUrl(String url) {
|
||||
try {
|
||||
return new URL(url);
|
||||
} catch (MalformedURLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private KeycloakUriBuilder toBuilder(String url) {
|
||||
return KeycloakUriBuilder.fromUri(url);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package org.keycloak.test.framework.server;
|
||||
|
||||
import org.keycloak.test.framework.annotations.InjectKeycloakUrls;
|
||||
import org.keycloak.test.framework.injection.InstanceContext;
|
||||
import org.keycloak.test.framework.injection.RequestedInstance;
|
||||
import org.keycloak.test.framework.injection.Supplier;
|
||||
|
||||
public class KeycloakUrlsSupplier implements Supplier<KeycloakUrls, InjectKeycloakUrls> {
|
||||
|
||||
@Override
|
||||
public Class<InjectKeycloakUrls> getAnnotationClass() {
|
||||
return InjectKeycloakUrls.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<KeycloakUrls> getValueType() {
|
||||
return KeycloakUrls.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public KeycloakUrls getValue(InstanceContext<KeycloakUrls, InjectKeycloakUrls> instanceContext) {
|
||||
KeycloakTestServer testServer = instanceContext.getDependency(KeycloakTestServer.class);
|
||||
return new KeycloakUrls(testServer.getBaseUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean compatible(InstanceContext<KeycloakUrls, InjectKeycloakUrls> a, RequestedInstance<KeycloakUrls, InjectKeycloakUrls> b) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package org.keycloak.test.admin;
|
||||
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.methods.HttpOptions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.keycloak.services.cors.Cors;
|
||||
import org.keycloak.test.framework.annotations.InjectHttpClient;
|
||||
import org.keycloak.test.framework.annotations.InjectKeycloakUrls;
|
||||
import org.keycloak.test.framework.annotations.KeycloakIntegrationTest;
|
||||
import org.keycloak.test.framework.server.KeycloakUrls;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
@KeycloakIntegrationTest
|
||||
public class AdminPreflightTest {
|
||||
|
||||
@InjectHttpClient
|
||||
HttpClient client;
|
||||
|
||||
@InjectKeycloakUrls
|
||||
KeycloakUrls keycloakUrls;
|
||||
|
||||
@Test
|
||||
public void testPreflight() throws IOException {
|
||||
HttpOptions options = new HttpOptions(keycloakUrls.getAdminBuilder().path("/realms/master/users").build());
|
||||
options.setHeader("Origin", "http://test");
|
||||
|
||||
HttpResponse response = client.execute(options);
|
||||
assertEquals(200, response.getStatusLine().getStatusCode());
|
||||
assertEquals("true", response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_CREDENTIALS).getValue());
|
||||
assertEquals("DELETE, POST, GET, PUT", response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_METHODS).getValue());
|
||||
assertEquals("http://test", response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_ORIGIN).getValue());
|
||||
assertEquals("3600", response.getFirstHeader(Cors.ACCESS_CONTROL_MAX_AGE).getValue());
|
||||
assertTrue(response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_HEADERS).getValue().contains("Authorization"));
|
||||
assertTrue(response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_HEADERS).getValue().contains("Content-Type"));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
package org.keycloak.testsuite.admin;
|
||||
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpOptions;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.keycloak.services.cors.Cors;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class AdminPreflightTest extends AbstractAdminTest {
|
||||
|
||||
|
||||
private CloseableHttpClient client;
|
||||
|
||||
@Before
|
||||
public void before() {
|
||||
client = HttpClientBuilder.create().build();
|
||||
}
|
||||
|
||||
@After
|
||||
public void after() {
|
||||
try {
|
||||
client.close();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPreflight() throws IOException {
|
||||
HttpOptions options = new HttpOptions(getAdminUrl("realms/master/users"));
|
||||
options.setHeader("Origin", "http://test");
|
||||
|
||||
CloseableHttpResponse response = client.execute(options);
|
||||
assertEquals(200, response.getStatusLine().getStatusCode());
|
||||
assertEquals("true", response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_CREDENTIALS).getValue());
|
||||
assertEquals("DELETE, POST, GET, PUT", response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_METHODS).getValue());
|
||||
assertEquals("http://test", response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_ORIGIN).getValue());
|
||||
assertEquals("3600", response.getFirstHeader(Cors.ACCESS_CONTROL_MAX_AGE).getValue());
|
||||
assertTrue(response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_HEADERS).getValue().contains("Authorization"));
|
||||
assertTrue(response.getFirstHeader(Cors.ACCESS_CONTROL_ALLOW_HEADERS).getValue().contains("Content-Type"));
|
||||
}
|
||||
|
||||
private String getAdminUrl(String resource) {
|
||||
return suiteContext.getAuthServerInfo().getContextRoot().toString() + "/auth/admin/" + resource;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue