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 22, 2024
1 parent 0ea77e6 commit bed6cea
Show file tree
Hide file tree
Showing 3 changed files with 138 additions and 94 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package org.keycloak.test.admin;

import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.BasicHttpClientResponseHandler;
import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.util.EntityUtils;
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.InjectHttpClient;
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.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@KeycloakIntegrationTest
public class AdminConsoleLandingPageTest {

@InjectKeycloakUrls
KeycloakUrls keycloakUrls;

@InjectHttpClient
HttpClient httpClient;

@Test
public void landingPage() throws IOException {
String body = EntityUtils.toString(httpClient.execute(new HttpGet(keycloakUrls.getBaseUrl().toString() + "/admin/master/console")).getEntity());

Map<String, String> config = getConfig(body);
String authUrl = config.get("authUrl");
Assertions.assertEquals(keycloakUrls.getBaseUrl().toString()+ "", authUrl);

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

String consoleBaseUrl = config.get("consoleBaseUrl");
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);
Assertions.assertTrue(url.startsWith("/resources/"));
}

p = Pattern.compile("script src=\"([^\"]*)\"");
m = p.matcher(body);

while(m.find()) {
String url = m.group(1);
if (url.contains("keycloak.js")) {
Assertions.assertTrue(url.startsWith("/js/"), url);
} else {
Assertions.assertTrue(url.startsWith("/resources/"), url);
}
}
}

private static Map<String, String> getConfig(String body) {
Map<String, String> variables = new HashMap<>();
String start = "<script id=\"environment\" type=\"application/json\">";
String end = "</script>";

String config = body.substring(body.indexOf(start) + start.length());
config = config.substring(0, config.indexOf(end)).trim();

Matcher matcher = Pattern.compile(".*\"(.*)\": \"(.*)\"").matcher(config);
while (matcher.find()) {
variables.put(matcher.group(1), matcher.group(2));
}

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);
}

}

This file was deleted.

0 comments on commit bed6cea

Please sign in to comment.