Merge pull request #2184 from mhajas/KEYCLOAK-2391
KEYCLOAK-2391 history of resource access test
This commit is contained in:
commit
8128d23059
3 changed files with 179 additions and 0 deletions
|
@ -17,6 +17,7 @@
|
|||
|
||||
package org.keycloak.testsuite.adapter.example;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.jboss.arquillian.container.test.api.Deployment;
|
||||
import org.jboss.arquillian.graphene.page.Page;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
|
@ -26,6 +27,7 @@ import org.junit.Test;
|
|||
import org.keycloak.admin.client.resource.ClientResource;
|
||||
import org.keycloak.representations.idm.ClientRepresentation;
|
||||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
import org.keycloak.representations.idm.UserRepresentation;
|
||||
import org.keycloak.testsuite.adapter.AbstractExampleAdapterTest;
|
||||
import org.keycloak.testsuite.adapter.page.CustomerPortalExample;
|
||||
import org.keycloak.testsuite.adapter.page.DatabaseServiceExample;
|
||||
|
@ -43,6 +45,8 @@ import java.io.File;
|
|||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
@ -269,4 +273,103 @@ public abstract class AbstractDemoExampleAdapterTest extends AbstractExampleAdap
|
|||
resultList.get(0).findElement(By.xpath(".//td[text()='username']/../td[text()='bburke@redhat.com']"));
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='consent']/../td[text()='consent_granted']"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void historyOfAccessResourceTest() throws IOException {
|
||||
RealmRepresentation realm = testRealmResource().toRepresentation();
|
||||
realm.setEventsEnabled(true);
|
||||
realm.setEnabledEventTypes(Arrays.asList("LOGIN", "LOGIN_ERROR", "LOGOUT", "CODE_TO_TOKEN"));
|
||||
testRealmResource().update(realm);
|
||||
|
||||
customerPortalExamplePage.navigateTo();
|
||||
customerPortalExamplePage.customerListing();
|
||||
|
||||
testRealmLoginPage.form().login("bburke@redhat.com", "password");
|
||||
|
||||
Assert.assertTrue(driver.getPageSource().contains("Username: bburke@redhat.com")
|
||||
&& driver.getPageSource().contains("Bill Burke")
|
||||
&& driver.getPageSource().contains("Stian Thorgersen")
|
||||
);
|
||||
|
||||
if (isRelative()) { //KEYCLOAK-1546
|
||||
productPortalExamplePage.logOut();
|
||||
} else {
|
||||
driver.navigate().to(testRealmPage.getOIDCLogoutUrl() + "?redirect_uri=" + productPortalExamplePage);
|
||||
}
|
||||
|
||||
loginEventsPage.navigateTo();
|
||||
|
||||
if (!testContext.isAdminLoggedIn()) {
|
||||
loginPage.form().login(adminUser);
|
||||
testContext.setAdminLoggedIn(true);
|
||||
}
|
||||
|
||||
loginEventsPage.table().filter();
|
||||
loginEventsPage.table().filterForm().addEventType("LOGOUT");
|
||||
loginEventsPage.table().update();
|
||||
|
||||
List<WebElement> resultList = loginEventsPage.table().rows();
|
||||
|
||||
assertEquals(1, resultList.size());
|
||||
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='LOGOUT']"));
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='Client']/../td[text()='']"));
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='IP Address']/../td[text()='127.0.0.1']"));
|
||||
|
||||
loginEventsPage.table().reset();
|
||||
loginEventsPage.table().filterForm().addEventType("LOGIN");
|
||||
loginEventsPage.table().update();
|
||||
resultList = loginEventsPage.table().rows();
|
||||
|
||||
assertEquals(1, resultList.size());
|
||||
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='LOGIN']"));
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='Client']/../td[text()='customer-portal']"));
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='IP Address']/../td[text()='127.0.0.1']"));
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='username']/../td[text()='bburke@redhat.com']"));
|
||||
|
||||
loginEventsPage.table().reset();
|
||||
loginEventsPage.table().filterForm().addEventType("CODE_TO_TOKEN");
|
||||
loginEventsPage.table().update();
|
||||
resultList = loginEventsPage.table().rows();
|
||||
|
||||
assertEquals(1, resultList.size());
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='CODE_TO_TOKEN']"));
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='Client']/../td[text()='customer-portal']"));
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='IP Address']/../td[text()='127.0.0.1']"));
|
||||
resultList.get(0).findElement(By.xpath(".//td[text()='refresh_token_type']/../td[text()='Refresh']"));
|
||||
|
||||
String serverLogPath = null;
|
||||
|
||||
if (System.getProperty("app.server.wildfly", "false").equals("true")) {
|
||||
serverLogPath = System.getProperty("app.server.wildfly.home") + "/standalone/log/server.log";
|
||||
}
|
||||
|
||||
if (System.getProperty("app.server.eap6", "false").equals("true")) {
|
||||
serverLogPath = System.getProperty("app.server.eap6.home") + "/standalone/log/server.log";
|
||||
}
|
||||
|
||||
if (System.getProperty("app.server.eap7", "false").equals("true")) {
|
||||
serverLogPath = System.getProperty("app.server.eap7.home") + "/standalone/log/server.log";
|
||||
}
|
||||
|
||||
String appServerUrl;
|
||||
if (Boolean.parseBoolean(System.getProperty("app.server.ssl.required"))) {
|
||||
appServerUrl = "https://localhost:" + System.getProperty("app.server.https.port", "8543") + "/";
|
||||
} else {
|
||||
appServerUrl = "http://localhost:" + System.getProperty("app.server.http.port", "8280") + "/";
|
||||
}
|
||||
|
||||
if (serverLogPath != null) {
|
||||
File serverLog = new File(serverLogPath);
|
||||
String serverLogContent = FileUtils.readFileToString(serverLog);
|
||||
UserRepresentation bburke = ApiUtil.findUserByUsername(testRealmResource(), "bburke@redhat.com");
|
||||
|
||||
Pattern pattern = Pattern.compile("User '" + bburke.getId() + "' invoking '" + appServerUrl + "customer-portal\\/customers\\/view\\.jsp[^\\s]+' on client 'customer-portal'");
|
||||
Matcher matcher = pattern.matcher(serverLogContent);
|
||||
|
||||
assertTrue(matcher.find());
|
||||
assertTrue(serverLogContent.contains("User '" + bburke.getId() + "' invoking '" + appServerUrl + "database/customers' on client 'database-service'"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -117,6 +117,32 @@
|
|||
</systemPropertyVariables>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>xml-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>configure-adapter-debug-log</id>
|
||||
<phase>process-resources</phase>
|
||||
<goals>
|
||||
<goal>transform</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<transformationSets>
|
||||
<transformationSet>
|
||||
<dir>${app.server.wildfly.home}/standalone/configuration</dir>
|
||||
<includes>
|
||||
<include>standalone.xml</include>
|
||||
</includes>
|
||||
<stylesheet>src/main/xslt/add-adapter-log-level.xsl</stylesheet>
|
||||
<outputDir>${app.server.wildfly.home}/standalone/configuration</outputDir>
|
||||
</transformationSet>
|
||||
</transformationSets>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
<!--
|
||||
~ Copyright 2016 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.
|
||||
-->
|
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:xalan="http://xml.apache.org/xalan"
|
||||
xmlns:j="urn:jboss:domain:4.0"
|
||||
xmlns:ds="urn:jboss:domain:datasources:4.0"
|
||||
xmlns:k="urn:jboss:domain:keycloak:1.1"
|
||||
xmlns:sec="urn:jboss:domain:security:1.2"
|
||||
version="2.0"
|
||||
exclude-result-prefixes="xalan j ds k sec">
|
||||
|
||||
<xsl:param name="config"/>
|
||||
|
||||
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" xalan:indent-amount="4" standalone="no"/>
|
||||
<xsl:strip-space elements="*"/>
|
||||
|
||||
<xsl:variable name="nsDS" select="'urn:jboss:domain:logging:'"/>
|
||||
|
||||
<xsl:template match="//*[local-name()='subsystem' and starts-with(namespace-uri(), $nsDS)]
|
||||
/*[local-name()='root-logger' and starts-with(namespace-uri(), $nsDS)]">
|
||||
<logger category="org.keycloak.adapters">
|
||||
<level name="DEBUG"/>
|
||||
</logger>
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@* | node()" />
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="@*|node()">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@*|node()" />
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
Loading…
Reference in a new issue