Skip to content

Commit

Permalink
Migrate AdminConsoleLandingPageTest to the new framework
Browse files Browse the repository at this point in the history
Part of keycloak#34494

Signed-off-by: Miquel Simon <[email protected]>
  • Loading branch information
miquelsi committed Nov 21, 2024
1 parent 0ea77e6 commit e397b27
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -1,33 +1,36 @@
package org.keycloak.testsuite.admin;
package org.keycloak.test.admin;

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.keycloak.broker.provider.util.SimpleHttp;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.testsuite.AbstractKeycloakTest;
import org.keycloak.testsuite.broker.util.SimpleHttpDefault;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.keycloak.test.framework.annotations.InjectKeycloakUrls;
import org.keycloak.test.framework.annotations.KeycloakIntegrationTest;
import org.keycloak.test.framework.server.KeycloakUrls;
import org.keycloak.test.utils.SimpleHttpDefault;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AdminConsoleLandingPageTest extends AbstractKeycloakTest {
@KeycloakIntegrationTest
public class AdminConsoleLandingPageTest {

@InjectKeycloakUrls
KeycloakUrls keycloakUrls;

private CloseableHttpClient client;

@Before
@BeforeEach
public void before() {
client = HttpClientBuilder.create().build();
}

@After
@AfterEach
public void after() {
try {
client.close();
Expand All @@ -36,30 +39,26 @@ public void after() {
}
}

@Override
public void addTestRealms(List<RealmRepresentation> testRealms) {
}

@Test
public void landingPage() throws IOException {
String body = SimpleHttpDefault.doGet(suiteContext.getAuthServerInfo().getContextRoot() + "/auth/admin/master/console", client).asString();
String body = SimpleHttpDefault.doGet(keycloakUrls.getBaseUrl().toString() + "/admin/master/console", client).asString();

Map<String, String> config = getConfig(body);
String authUrl = config.get("authUrl");
Assert.assertEquals(suiteContext.getAuthServerInfo().getContextRoot() + "/auth", authUrl);
Assertions.assertEquals(keycloakUrls.getBaseUrl().toString()+ "", authUrl);

String resourceUrl = config.get("resourceUrl");
Assert.assertTrue(resourceUrl.matches("/auth/resources/[^/]*/admin/keycloak.v2"));
Assertions.assertTrue(resourceUrl.matches("/resources/[^/]*/admin/keycloak.v2"));

String consoleBaseUrl = config.get("consoleBaseUrl");
Assert.assertEquals(consoleBaseUrl, "/auth/admin/master/console/");
Assertions.assertEquals(consoleBaseUrl, "/admin/master/console/");

Pattern p = Pattern.compile("link href=\"([^\"]*)\"");
Matcher m = p.matcher(body);

while(m.find()) {
String url = m.group(1);
Assert.assertTrue(url.startsWith("/auth/resources/"));
String url = m.group(1);
Assertions.assertTrue(url.startsWith("/resources/"));
}

p = Pattern.compile("script src=\"([^\"]*)\"");
Expand All @@ -68,9 +67,9 @@ public void landingPage() throws IOException {
while(m.find()) {
String url = m.group(1);
if (url.contains("keycloak.js")) {
Assert.assertTrue(url, url.startsWith("/auth/js/"));
Assertions.assertTrue(url.startsWith("/js/"), url);
} else {
Assert.assertTrue(url, url.startsWith("/auth/resources/"));
Assertions.assertTrue(url.startsWith("/resources/"), url);
}
}
}
Expand All @@ -90,5 +89,4 @@ private static Map<String, String> getConfig(String body) {

return variables;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* Copyright 2024 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.test.utils;

import org.apache.http.client.HttpClient;
import org.keycloak.broker.provider.util.SimpleHttp;
import org.keycloak.connections.httpclient.HttpClientProvider;

/**
* This class provides additional builders used in tests to create instances of SimpleHttpTest with a default length response size set.
*
* @author Alexander Schwartz
*/
public abstract class SimpleHttpDefault extends SimpleHttp {

protected SimpleHttpDefault(String url, String method, HttpClient client, long maxConsumedResponseSize) {
// dummy constructor, only needed to make the compiler happy
super(url, method, client, maxConsumedResponseSize);
}

public static SimpleHttp doDelete(String url, HttpClient client) {
return SimpleHttp.doDelete(url, client, HttpClientProvider.DEFAULT_MAX_CONSUMED_RESPONSE_SIZE);
}

public static SimpleHttp doPost(String url, HttpClient client) {
return SimpleHttp.doPost(url, client, HttpClientProvider.DEFAULT_MAX_CONSUMED_RESPONSE_SIZE);
}

public static SimpleHttp doPut(String url, HttpClient client) {
return SimpleHttp.doPut(url, client, HttpClientProvider.DEFAULT_MAX_CONSUMED_RESPONSE_SIZE);
}

public static SimpleHttp doGet(String url, HttpClient client) {
return SimpleHttp.doGet(url, client, HttpClientProvider.DEFAULT_MAX_CONSUMED_RESPONSE_SIZE);
}

}

0 comments on commit e397b27

Please sign in to comment.