keycloak-memoizeit
Changes
testsuite/performance/README.md 1(+1 -0)
Details
testsuite/performance/README.md 1(+1 -0)
diff --git a/testsuite/performance/README.md b/testsuite/performance/README.md
index 0fcd6ff..0ccc450 100644
--- a/testsuite/performance/README.md
+++ b/testsuite/performance/README.md
@@ -199,6 +199,7 @@ When running the tests it is necessary to define the dataset to be used.
| `filterResults` | Whether to filter out requests which are outside of the `measurementPeriod`. | `false` |
| `userThinkTime` | Pause between individual scenario steps. | `5` |
| `refreshTokenPeriod`| Period after which token should be refreshed. | `10` |
+| `logoutPct`| Percentage of users who should log out at the end of scenario. | `100` |
| Test Assertion | Description | Default Value |
| --- | --- | --- |
diff --git a/testsuite/performance/tests/src/main/java/org/keycloak/performance/TestConfig.java b/testsuite/performance/tests/src/main/java/org/keycloak/performance/TestConfig.java
index cba6b72..5b6a11a 100644
--- a/testsuite/performance/tests/src/main/java/org/keycloak/performance/TestConfig.java
+++ b/testsuite/performance/tests/src/main/java/org/keycloak/performance/TestConfig.java
@@ -70,6 +70,7 @@ public class TestConfig {
public static final boolean filterResults = Boolean.getBoolean("filterResults"); // filter out results outside of measurementPeriod
public static final int userThinkTime = Integer.getInteger("userThinkTime", 0);
public static final int refreshTokenPeriod = Integer.getInteger("refreshTokenPeriod", 0);
+ public static final double logoutPct = Double.valueOf(System.getProperty("logoutPct", "100"));
// Computed timestamps
public static final long simulationStartTime = System.currentTimeMillis();
@@ -139,8 +140,9 @@ public class TestConfig {
" measurementPeriod: %s\n"+
" filterResults: %s\n"+
" userThinkTime: %s\n"+
- " refreshTokenPeriod: %s",
- usersPerSec, rampUpPeriod, warmUpPeriod, measurementPeriod, filterResults, userThinkTime, refreshTokenPeriod);
+ " refreshTokenPeriod: %s\n"+
+ " logoutPct: %s",
+ usersPerSec, rampUpPeriod, warmUpPeriod, measurementPeriod, filterResults, userThinkTime, refreshTokenPeriod, logoutPct);
}
public static SimpleDateFormat SIMPLE_TIME = new SimpleDateFormat("HH:mm:ss");
@@ -307,6 +309,9 @@ public class TestConfig {
if (sequentialUsersFrom < -1 || sequentialUsersFrom >= usersPerRealm) {
throw new RuntimeException("The folowing condition must be met: (-1 <= sequentialUsersFrom < usersPerRealm).");
}
+ if (logoutPct < 0 || logoutPct > 100) {
+ throw new RuntimeException("The `logoutPct` needs to be between 0 and 100.");
+ }
}
}
diff --git a/testsuite/performance/tests/src/test/scala/keycloak/OIDCScenarioBuilder.scala b/testsuite/performance/tests/src/test/scala/keycloak/OIDCScenarioBuilder.scala
index d868a89..951b995 100644
--- a/testsuite/performance/tests/src/test/scala/keycloak/OIDCScenarioBuilder.scala
+++ b/testsuite/performance/tests/src/test/scala/keycloak/OIDCScenarioBuilder.scala
@@ -62,9 +62,7 @@ object OIDCScenarioBuilder {
.refreshTokenSeveralTimes()
.thinkPause()
- .logout()
-
- .thinkPause()
+ .randomLogout()
val registerAndLogoutScenario = new OIDCScenarioBuilder()
.browserOpensLoginPage()
@@ -74,8 +72,7 @@ object OIDCScenarioBuilder {
.browserPostsRegistrationDetails()
.adapterExchangesCodeForTokens()
.thinkPause()
- .logout()
- .thinkPause()
+ .randomLogout()
}
@@ -119,7 +116,7 @@ class OIDCScenarioBuilder {
def newThinkPause() : ChainBuilder = {
pause(TestConfig.userThinkTime, Normal(TestConfig.userThinkTime * 0.2))
}
-
+
def browserOpensLoginPage() : OIDCScenarioBuilder = {
chainBuilder = chainBuilder
.exec(http("Browser to Log In Endpoint")
@@ -225,14 +222,27 @@ class OIDCScenarioBuilder {
this
}
- def logout() : OIDCScenarioBuilder = {
- chainBuilder = chainBuilder
- .exec(http("Browser logout")
+ def logoutChain() : ChainBuilder = {
+ exec(http("Browser logout")
.get(LOGOUT_ENDPOINT)
.headers(UI_HEADERS)
.queryParam("redirect_uri", "${appUrl}")
.check(status.is(302), header("Location").is("${appUrl}")))
+ }
+
+ def logout() : OIDCScenarioBuilder = {
+ chainBuilder = chainBuilder.exec(logoutChain)
this
}
+
+ def randomLogout() : OIDCScenarioBuilder = {
+ chainBuilder = chainBuilder
+ .randomSwitch(
+ // logout randomly based on logoutPct param
+ TestConfig.logoutPct -> exec(logoutChain)
+ )
+ this
+ }
+
}