2 changed files with 63 additions and 0 deletions
@ -0,0 +1,62 @@ |
|||||
|
import http from 'k6/http'; |
||||
|
import { check, group, sleep } from 'k6'; |
||||
|
import { pickRealm, pickClient, pickUser, wrapWithErrorCounting, keycloakEndpoints, keycloakLogin, keycloakRefreshTokens } from "./lib/keycloak.js"; |
||||
|
import { randomSeed } from 'k6'; |
||||
|
import encoding from 'k6/encoding'; |
||||
|
|
||||
|
export let options = { |
||||
|
stages: [ |
||||
|
{ duration: "20s", target: 5 }, |
||||
|
{ duration: "2m", target: 300 } |
||||
|
], |
||||
|
}; |
||||
|
|
||||
|
randomSeed(__VU); |
||||
|
|
||||
|
const realmCount = 10; |
||||
|
const realm = pickRealm(realmCount); |
||||
|
const realmId = realm.id; |
||||
|
|
||||
|
let user = pickUser(realm); |
||||
|
let client = pickClient(realm); |
||||
|
let endpoints = keycloakEndpoints("http://hp-microserver.itix.fr/auth", realmId); |
||||
|
|
||||
|
let tokens; |
||||
|
|
||||
|
function testKCTokenInfo() { |
||||
|
if (tokens == null) { |
||||
|
tokens = keycloakLogin(endpoints, client, user, ()=>{}); |
||||
|
} |
||||
|
|
||||
|
for (;;) { |
||||
|
let body = { |
||||
|
"token": tokens.access_token |
||||
|
}; |
||||
|
let credentials = encoding.b64encode(`${client.clientId}:${client.secret}`); |
||||
|
let tokeninfo = http.post(endpoints.tokeninfo, body, { "headers": { "Authorization": `Basic ${credentials}`}, "tags": { name: "tokeninfo" } }); |
||||
|
if (tokeninfo.status === 401) { |
||||
|
try { |
||||
|
console.log("Renewing access_token...") |
||||
|
tokens = keycloakRefreshTokens(endpoints, tokens, client, ()=>{}); |
||||
|
break; |
||||
|
} catch (e) { |
||||
|
try { |
||||
|
console.log("Logging-in...") |
||||
|
tokens = keycloakLogin(endpoints, client, user, ()=>{}); |
||||
|
break; |
||||
|
} catch (e) { |
||||
|
throw e; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
check(tokeninfo, { |
||||
|
'tokeninfo.status == 200': (http) => http.status === 200, |
||||
|
}); |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
sleep(.05); |
||||
|
} |
||||
|
|
||||
|
export default wrapWithErrorCounting(testKCTokenInfo); |
||||
Loading…
Reference in new issue