Gatling Simulation with Kerberos authentication and using multiple users to establish realm

1,134 views
Skip to first unread message

Girish Khadke

unread,
Mar 25, 2015, 7:18:31 PM3/25/15
to gat...@googlegroups.com



import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
import io.gatling.http.request.builder.HttpRequestBuilder
import io.gatling.http.util.HttpHelper

import com.ning.http.client._
import com.ning.http.client.Realm.AuthScheme
import com.ning.http.client.Response
import java.util.Random
import java.util.HashMap

class IwaKerberosSimulation extends Simulation {

//Since we are replaying same saml request, change the replay window configuration parameter in IWA.config on IIS machine to a value of number of seconds in a day
val saml_request = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c2FtbDJwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1sMnA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIgQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlVVJMPSJodHRwczovL3RydW5rLnN5bWFudGVjLmNvbS9zc2ctc2FtbC9zYW1sL3VzZXJEYXRhP2lkPTQ4NmY4ZTAyLTJjYzgtNGQ1ZC1iYmE3LWRjZTUzNjUxZjE2MCIgRGVzdGluYXRpb249Imh0dHBzOi8vZ2toYWRrZS1paXM2LmluZm9zZWMuc2FtaXdhdGVzdC5zeW1jbGFiLm5ldCIgSUQ9Il82ZGI5ZTQwMzI2MzI0N2M0YmQ5ZTllMTAzMmE1ZGY1OCIgSXNzdWVJbnN0YW50PSIyMDE1LTAzLTIzVDA1OjI3OjU3Ljg0N1oiIFZlcnNpb249IjIuMCI+PHNhbWwyOklzc3VlciB4bWxuczpzYW1sMj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbnRpdHkiPnNhbS1zcDwvc2FtbDI6SXNzdWVyPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIvPjxkczpSZWZlcmVuY2UgVVJJPSIjXzZkYjllNDAzMjYzMjQ3YzRiZDllOWUxMDMyYTVkZjU4Ij48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT5kQ3JSc3JiQ2NkeEx6UWR1bS9YQ1NhV3JxS3c9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48L2RzOlNpZ25lZEluZm8+PGRzOlNpZ25hdHVyZVZhbHVlPlczZVVsQ0pieTl2UWNQMGpmdFdENjY4eDVFTjJvZ1pncDUzMjNFNkpGR1Z6MWlpY0dFQS9nK3MvWnZteU5OYWtkYXpnOHpobmt0cEpQbHMyK0t3bC9mSTdjeVhHRENvNUJVZm9xcmhQQkR4M0t2TkwxaGFNOXhYc1JGek1kUVF5b0lnbHlQMDBrZmFCRnV5LzFTSS93b0NPbTVFNk1LOW03V0FVbk1wZjhCWlZ3emtMUlNnd0k2SGNVaFBDRmlGd241bEV2RGlYcS91MXJjU2IrTUl0TjlIRzhJTSs1SFNtS3RBMHR3QXFuU2c1cGVXeUxsQkl3Zm1WZVh0NnpYRkdnSWVlR09nN1dDcWxkbExiWEQ1Vm5FWFJnc0dsQ3Y4cGpmbis2STlWYUw5eWZPaVo4Ym43OTkvSjYrK3RIR3MwbVlBc09taXpoNTVtQzljUDJsNUliUT09PC9kczpTaWduYXR1cmVWYWx1ZT48L2RzOlNpZ25hdHVyZT48L3NhbWwycDpBdXRoblJlcXVlc3Q+"

//This is IWA Server URL or Load balancer URL
    val samURL = "https://trunk.symantec.com" //This is the SAM URL or IP address based on how you have setup SAM Gateway.  If hostname is being used, it should be resolvable on performance test client using /etc/hosts file.
val connector_id = "486f8e02-2cc8-4d5d-bba7-dce53651f160" //This is the identity service connector uuid in SAM for IWA-IdP
val samlResponseRegex = regex("""<input type="hidden" name="SAMLResponse" id="SAMLResponse" value="([^"]*)" />""").saveAs("SAMLResponse")
val viewStateRegex = regex("""<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="([^"]*)" />""").saveAs("__VIEWSTATE")
val viewStateGeneratorRegex = regex("""<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="([^"]*)" />""").saveAs("__VIEWSTATEGENERATOR")
val eventValidationRegex = regex("""<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="([^"]*)" />""").saveAs("__EVENTVALIDATION")
val nameIdRegex = regex("""<input type="hidden" name="nameId" value="([^"]*)"/>""").saveAs("nameId")
val mailRegex = regex("""<input type="hidden" name="mail" value="([^"]*)"/>""").saveAs("mail")
val samaccountnameRegex = regex("""<input type="hidden" name="samaccountname" value="([^"]*)"/>""").saveAs("samaccountname")
val relayStateURLRegex = regex("""<input type="hidden" name="relayStateURL" value="([^"]*)"/>""").saveAs("relayStateURL")
val signedKeyRegex = regex("""<input type="hidden" name="signedkey" value="([^"]*)"/>""").saveAs("signedKey")
val ssgTrustKeyRegex = regex("""<input type="hidden" name="ssg_trust_key" value="([^"]*)"/>""").saveAs("ssgTrustKey")
val ssgIdpIdRegex = regex("""<input type="hidden" name="ssg_idp_id" value="([^"]*)"/>""").saveAs("ssgIdpId")
val transactionIDRegex = regex("""<input type="hidden" name="transactionID" value="([^"]*)"/>""").saveAs("transactionID")
val formPostURLRegex = regex("""<form name="acsForm" action="([^"]*)" method="post" target="_blank">""").saveAs("formPostURL")
val fedIDRegex = regex("""<a href="#" onclick="return false;"><img src="static/images/icons/icon_user.png">([^"]*)</a>""").saveAs("federatedId")
    
val scn = scenario("IWA Kerberos Simulation")
 .during(100 seconds) {
   exec(
http("Kerberos Test")
.post(iwaURL)
.formParam("SAMLRequest", saml_request)
.check(status.is(200))
.check(samlResponseRegex)
.check(viewStateRegex)
.check(viewStateGeneratorRegex)
.check(eventValidationRegex)
)
.pause(3)
.exec(
http("POST UserData to SAML Service on SAM")
.post(samURL + "/ssg-saml/saml/userData?id=" + connector_id)  
.formParam("SAMLResponse", """${SAMLResponse}""")
.formParam("__VIEWSTATE", """${__VIEWSTATE}""")
.formParam("__VIEWSTATEGENERATOR", """${__VIEWSTATEGENERATOR}""")
.formParam("__EVENTVALIDATION", """${__EVENTVALIDATION}""")
.check(status.is(200))
.check(formPostURLRegex)
.check(relayStateURLRegex)
.check(signedKeyRegex)
.check(ssgTrustKeyRegex)
.check(ssgIdpIdRegex)
.check(transactionIDRegex)
.check(nameIdRegex)
.check(mailRegex)
.check(samaccountnameRegex)
.check(nameIdRegex)
)
.pause(3)
.exec(
http("POST SAML Response to SAM")
 .post("""${formPostURL}""")
 .formParam("relayStateURL", """${relayStateURL}""")
 .formParam("signedkey", """${signedKey}""")
 .formParam("ssg_trust_key", """${ssgTrustKey}""")
 .formParam("ssg_idp_id", """${ssgIdpId}""")
 .formParam("transactionID", """${transactionID}""")
 .formParam("samaccountname", """${samaccountname}""")
 .formParam("mail", """${mail}""")
 .formParam("nameId", """${nameId}""")
 .check(status.is(200))
)
.pause(1)
.exec(
http("GET on SAM SSO Portal URL")
 .get(samURL)
 .check(status.is(200))
 .check(fedIDRegex)
)
.exec(
session => {
println("====Federated Id for logged in user ====> " + session("federatedId").as[String])
session
})
 }

 
val httpConf = http
.baseURL(iwaURL)
.authRealm(HttpHelper.buildRealm(getRandomUser(), "password@2", AuthScheme.KERBEROS, false, None, None))
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("en-US,en;q=0.5")
.connectionHeader("keep-alive")
.contentTypeHeader("application/x-www-form-urlencoded")
.userAgentHeader("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0")
setUp(scn.inject(atOnceUsers(1)).protocols(httpConf))
def getRandomUser(): String = {
val myHashMap = new HashMap[Integer, String]()
myHashMap.put(0, "girish_khadke")
myHashMap.put(1, "prasad_bokare")
myHashMap.put(2, "gary_krall")
val generator = new Random()
val values = myHashMap.values.toArray()
val randomValue = values(generator.nextInt(values.length)).asInstanceOf[String]
randomValue
    }
}


This is my gatling simulation script.

I am trying to run the scenario for ~24 hours using random usernames.

Problem here is the protocolConfiguration DSL element can not use CSV feeder and it also can not take a list of httpConfigurations with same URL but different realm (using a new username) needs to be build everytime for each request.

Any idea on how this can be done?

Stéphane LANDELLE

unread,
Mar 26, 2015, 5:24:22 AM3/26/15
to gat...@googlegroups.com
http://gatling.io/docs/2.1.4/http/http_protocol.html?highlight=authrealm#authentication

authRealm takes an Expression[Realm], so it doesn't have to be a hardcoded value like you do. Pass a function: http://gatling.io/docs/2.1.4/session/expression_el.html#expression

Stéphane Landelle
Lead developer


--
You received this message because you are subscribed to the Google Groups "Gatling User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gatling+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Girish Khadke

unread,
Mar 26, 2015, 4:19:07 PM3/26/15
to gat...@googlegroups.com
I have following code now:

/**
 *
 */
package com.symantec.sam.iwa.simulations

import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
import io.gatling.http.request.builder.HttpRequestBuilder
import io.gatling.http.util.HttpHelper
import io.gatling.core.session.Expression


import com.ning.http.client._
import com.ning.http.client.Realm.AuthScheme
import com.ning.http.client.Response
import java.util.HashMap
import java.util.Random

/**
 * @author Girish_Khadke
 *
 */

class IwaKerberosSimulation extends Simulation {

  /*
   * Notes:
   *    IWA has to be set with extra additional source attributes as : mail and samaccountname
   *    These attributes can change according to your IWA installation setup, so please change the scala code below accordingly
   *    Scala code below searches for nameId, mail and samaccountname in the response and passes it to SAM SSO
   */
  
  //Since we are replaying same saml request, change the replay window configuration parameter in IWA.config on IIS machine to a value of number of seconds in a day
  //Change the saml_request content according to your setup
  val saml_request = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c2FtbDJwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1sMnA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIgQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlVVJMPSJodHRwczovL3RydW5rLnN5bWFudGVjLmNvbS9zc2ctc2FtbC9zYW1sL3VzZXJEYXRhP2lkPTQ4NmY4ZTAyLTJjYzgtNGQ1ZC1iYmE3LWRjZTUzNjUxZjE2MCIgRGVzdGluYXRpb249Imh0dHBzOi8vZ2toYWRrZS1paXM2LmluZm9zZWMuc2FtaXdhdGVzdC5zeW1jbGFiLm5ldCIgSUQ9Il85YjIyNTBiMDNlNjM0MGNiYWE2ZTQzZjVlMjAxZDc3YiIgSXNzdWVJbnN0YW50PSIyMDE1LTAzLTI2VDA5OjIxOjE0LjgzOVoiIFZlcnNpb249IjIuMCI+PHNhbWwyOklzc3VlciB4bWxuczpzYW1sMj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbnRpdHkiPnNhbS1zcDwvc2FtbDI6SXNzdWVyPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIvPjxkczpSZWZlcmVuY2UgVVJJPSIjXzliMjI1MGIwM2U2MzQwY2JhYTZlNDNmNWUyMDFkNzdiIj48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT5GRUZic2VNM2NKMGFwUVZrWEpRN0s5MVV3bDA9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48L2RzOlNpZ25lZEluZm8+PGRzOlNpZ25hdHVyZVZhbHVlPmZyMDNzVVlUeHdnRlZMTVB0TWc4cllkT2Nta1F1ZmUrYXZtYUVsWEF1d2VYZThXMmNiaERONEY2bTFmZWh5QVdJdW9LaUI5M2ROcXFGdWNPbDdEOEtZS0NBbjBLZHNXWVJjUmUvM0o0Nm5sbnFsZ0Y2V3NUMmRQMVh0UjU0ZjRTQThOQjMyMTRYWjlxdFRoR3lkRHVtbm1hcVhkNi82ZDBZeGVGVzJLNXdIQnE3djlGM2pFYVBlMGpEODRpVHE0aFN1N0E3aXB4ZnAwc0tJWGNzNmhaN0UzNEF4Z1dkL0RlWGRmVElnMUJzTnBqRi9PcWYxYUZsaWgxWVNESldEQlhXdFpkUUQzK0hWQWs1RlExSjJERDB3MThJcW5QajA0ZUE5a3ZSdk43QmF0UWttMkV3cktMazRwcUF2bjVqRGFnUzZ4TGJ3QWxSK2FqY0wzbXdJWG1DUT09PC9kczpTaWduYXR1cmVWYWx1ZT48L2RzOlNpZ25hdHVyZT48L3NhbWwycDpBdXRoblJlcXVlc3Q+"

  //This is IWA Server URL or Load balancer URL
  val samURL = "https://trunk.symantec.com" //This is the SAM URL or IP address based on how you have setup SAM Gateway.  If hostname is being used, it should be resolvable on performance test client using /etc/hosts file.
  val connector_id = "486f8e02-2cc8-4d5d-bba7-dce53651f160" //This is the identity service connector uuid in SAM for IWA-IdP

  /*
   *  These are regex expressions that can be used to parse out response and get required parameters for next http requests
  */
          .check(nameIdRegex)          //This is looking for nameId hidden value in response and saving in gatling virtual user session
          .check(mailRegex)            //This is looking for additional source attribute (mail) hidden value in response and saving in gatling virtual user session
          .check(samaccountnameRegex)
          .check(nameIdRegex))
      .pause(3)
      .exec(
        http("POST SAML Response to SAM")
          .post("""${formPostURL}""")
          .formParam("relayStateURL", """${relayStateURL}""")
          .formParam("signedkey", """${signedKey}""")
          .formParam("ssg_trust_key", """${ssgTrustKey}""")
          .formParam("ssg_idp_id", """${ssgIdpId}""")
          .formParam("transactionID", """${transactionID}""")
          .formParam("samaccountname", """${samaccountname}""")
          .formParam("mail", """${mail}""")            //POST additional attribute mail to SAM to POST Url 
          .formParam("nameId", """${nameId}""")        //POST nameId to SAM from session to POST Url
          .check(status.is(200)))
      .pause(1)
      .exec(
        http("GET on SAM SSO Portal URL")
          .get(samURL)
          .check(status.is(200))
          .check(fedIDRegex))
      .exec(
        session => {
          println("====Federated Id for logged in user ====> " + session("federatedId").as[String])
          session
        })
    }

  /*
   * Change the username and password according to your test setup 
  */
  val httpConf = http
    .baseURL(iwaURL)
    .authRealm(getRandomRealm())
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    .acceptEncodingHeader("gzip, deflate")
    .acceptLanguageHeader("en-US,en;q=0.5")
    .header("Connection", "keep-alive")
    .contentTypeHeader("application/x-www-form-urlencoded")
    .userAgentHeader("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0")

  setUp(scn.inject(atOnceUsers(1)).protocols(httpConf))

  def getRandomRealm() : Expression[Realm] = {
    return HttpHelper.buildRealm(getRandomUser(), "password@2", AuthScheme.KERBEROS, false, None, None)
  }
  
  def getRandomUser(): Expression[String] = {
    val myHashMap = new HashMap[Integer, String]()
    myHashMap.put(0, "girish_khadke")
    myHashMap.put(1, "prasad_bokare")
    myHashMap.put(2, "gary_krall")
    val generator = new Random()
    val values = myHashMap.values.toArray()
    val randomValue = values(generator.nextInt(values.length)).asInstanceOf[String]
    randomValue
    }
}

But this still is not able to select random user at run time when simulation scenario runs over and over again for 100seconds

The requirement here for specified amount of time scenario should run and choose a random user for authRealm.

The problem here is : authRealm is created only once when simulation is run.

Girish Khadke

unread,
Mar 26, 2015, 7:32:07 PM3/26/15
to gat...@googlegroups.com
/**
 *
 */
package com.symantec.sam.iwa.simulations

import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
import io.gatling.http.request.builder.HttpRequestBuilder
import io.gatling.http.config.HttpProtocolBuilder
import io.gatling.http.config.HttpProtocol
import io.gatling.http.util.HttpHelper
import io.gatling.core.session.Expression
import io.gatling.core.config.Protocol

import com.ning.http.client._
import com.ning.http.client.Realm.AuthScheme
import com.ning.http.client.Response
import java.util.HashMap
import java.util.Random
import java.util.List
import java.util.ArrayList

/**
 * @author Girish_Khadke
 *
 */

class IwaKerberosSimulation extends Simulation {

  /*
   * Notes:
   *    IWA has to be set with extra additional source attributes as : mail and samaccountname
   *    These attributes can change according to your IWA installation setup, so please change the scala code below accordingly
   *    Scala code below searches for nameId, mail and samaccountname in the response and passes it to SAM SSO
   */
  
  //Since we are replaying same saml request, change the replay window configuration parameter in IWA.config on IIS machine to a value of number of seconds in a day
  //Change the saml_request content according to your setup
  val saml_request = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c2FtbDJwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1sMnA9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpwcm90b2NvbCIgQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlVVJMPSJodHRwczovL3RydW5rLnN5bWFudGVjLmNvbS9zc2ctc2FtbC9zYW1sL3VzZXJEYXRhP2lkPTQ4NmY4ZTAyLTJjYzgtNGQ1ZC1iYmE3LWRjZTUzNjUxZjE2MCIgRGVzdGluYXRpb249Imh0dHBzOi8vZ2toYWRrZS1paXM2LmluZm9zZWMuc2FtaXdhdGVzdC5zeW1jbGFiLm5ldCIgSUQ9Il85YjIyNTBiMDNlNjM0MGNiYWE2ZTQzZjVlMjAxZDc3YiIgSXNzdWVJbnN0YW50PSIyMDE1LTAzLTI2VDA5OjIxOjE0LjgzOVoiIFZlcnNpb249IjIuMCI+PHNhbWwyOklzc3VlciB4bWxuczpzYW1sMj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbnRpdHkiPnNhbS1zcDwvc2FtbDI6SXNzdWVyPjxkczpTaWduYXR1cmUgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxkczpTaWduZWRJbmZvPjxkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIvPjxkczpSZWZlcmVuY2UgVVJJPSIjXzliMjI1MGIwM2U2MzQwY2JhYTZlNDNmNWUyMDFkNzdiIj48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8+PC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSIvPjxkczpEaWdlc3RWYWx1ZT5GRUZic2VNM2NKMGFwUVZrWEpRN0s5MVV3bDA9PC9kczpEaWdlc3RWYWx1ZT48L2RzOlJlZmVyZW5jZT48L2RzOlNpZ25lZEluZm8+PGRzOlNpZ25hdHVyZVZhbHVlPmZyMDNzVVlUeHdnRlZMTVB0TWc4cllkT2Nta1F1ZmUrYXZtYUVsWEF1d2VYZThXMmNiaERONEY2bTFmZWh5QVdJdW9LaUI5M2ROcXFGdWNPbDdEOEtZS0NBbjBLZHNXWVJjUmUvM0o0Nm5sbnFsZ0Y2V3NUMmRQMVh0UjU0ZjRTQThOQjMyMTRYWjlxdFRoR3lkRHVtbm1hcVhkNi82ZDBZeGVGVzJLNXdIQnE3djlGM2pFYVBlMGpEODRpVHE0aFN1N0E3aXB4ZnAwc0tJWGNzNmhaN0UzNEF4Z1dkL0RlWGRmVElnMUJzTnBqRi9PcWYxYUZsaWgxWVNESldEQlhXdFpkUUQzK0hWQWs1RlExSjJERDB3MThJcW5QajA0ZUE5a3ZSdk43QmF0UWttMkV3cktMazRwcUF2bjVqRGFnUzZ4TGJ3QWxSK2FqY0wzbXdJWG1DUT09PC9kczpTaWduYXR1cmVWYWx1ZT48L2RzOlNpZ25hdHVyZT48L3NhbWwycDpBdXRoblJlcXVlc3Q+"

  //This is IWA Server URL or Load balancer URL
  val samURL = "https://trunk.symantec.com" //This is the SAM URL or IP address based on how you have setup SAM Gateway.  If hostname is being used, it should be resolvable on performance test client using /etc/hosts file.
  val connector_id = "486f8e02-2cc8-4d5d-bba7-dce53651f160" //This is the identity service connector uuid in SAM for IWA-IdP

  /*
   *  These are regex expressions that can be used to parse out response and get required parameters for next http requests
  */
          .check(nameIdRegex)          //This is looking for nameId hidden value in response and saving in gatling virtual user session
          .check(mailRegex)            //This is looking for additional source attribute (mail) hidden value in response and saving in gatling virtual user session
          .check(samaccountnameRegex)
          .check(nameIdRegex))
      .pause(3)
      .exec(
        http("POST SAML Response to SAM")
          .post("""${formPostURL}""")
          .formParam("relayStateURL", """${relayStateURL}""")
          .formParam("signedkey", """${signedKey}""")
          .formParam("ssg_trust_key", """${ssgTrustKey}""")
          .formParam("ssg_idp_id", """${ssgIdpId}""")
          .formParam("transactionID", """${transactionID}""")
          .formParam("samaccountname", """${samaccountname}""")
          .formParam("mail", """${mail}""")            //POST additional attribute mail to SAM to POST Url 
          .formParam("nameId", """${nameId}""")        //POST nameId to SAM from session to POST Url
          .check(status.is(200)))
      .pause(1)
      .exec(
        http("GET on SAM SSO Portal URL")
          .get(samURL)
          .check(status.is(200))
          .check(fedIDRegex))
      .exec(
        session => {
          println("====Federated Id for logged in user ====> " + session("federatedId").as[String])
          session
        })
    }
   
  setUp(scn.inject(atOnceUsers(5)).protocols(createHTTP(), createHTTP(), createHTTP(),
                                             createHTTP(), createHTTP()
                                            )
       )
 
  def createHTTP() : HttpProtocolBuilder = {
    http
    .baseURL(iwaURL)
    .authRealm(getRandomRealm())
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    .acceptEncodingHeader("gzip, deflate")
    .acceptLanguageHeader("en-US,en;q=0.5")
    .header("Connection", "keep-alive")
    .contentTypeHeader("application/x-www-form-urlencoded")
    .userAgentHeader("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0")
  }
  
  def getRandomRealm() : Expression[Realm] = {
    return HttpHelper.buildRealm(getRandomUser(), "password@2", AuthScheme.KERBEROS, false, None, None)
  }
  
  def getRandomUser(): Expression[String] = {
    val myHashMap = new HashMap[Integer, String]()
    myHashMap.put(0, "girish_khadke")
    myHashMap.put(1, "prasad_bokare")
    myHashMap.put(2, "gary_krall")
    myHashMap.put(3, "nico_popp")
    myHashMap.put(4, "john_smith")
    val generator = new Random()
    val values = myHashMap.values.toArray()
    val randomValue = values(generator.nextInt(values.length)).asInstanceOf[String]
    println("Selected User : " + randomValue)
    randomValue
    }
}

This is the new code.  I see that a new random user gets selected.  But when simulation actually starts to run, it always uses only one httppConf

Stéphane LANDELLE

unread,
Mar 27, 2015, 5:12:13 AM3/27/15
to gat...@googlegroups.com
def getRandomRealm() : Expression[Realm] = session => HttpHelper.buildRealm(getRandomUser(), "password@2", AuthScheme.KERBEROS, false, None, None)

Stéphane Landelle
Lead developer


--
Reply all
Reply to author
Forward
0 new messages