Response checks failing when upgrading to Gatling 3 because of HTTP 100 responses

I’m in the process of updating our existing suite of stress tests to use Gatling 3. During this process I’ve noticed several existing checks that now fail with Gatling 3. e.g.

build 16-Jan-2019 15:20:24 10:20:24.507 [gatling-http-1-2] WARN i.g.h.e.r.DefaultStatsProcessor - Request ‘PUT release jar’ failed for user 1: status.find.is(201), but actually found 100

Is there some configuration I need to change to make the existing check compatible with Gatling 3?

-Brad

What does your request look like? Does it have an Expect: 100-Continue header?
Could you please provide a reproducer we can use on our side?

The request looks something like this

http(“PUT release jar”)
.put("${repositoryPath}/${groupPath}/${artifact}/${version}.${index}/${artifact}-${version}.${index}.jar")
.headers(expect)
.body(ByteArrayBody(bytes))
.basicAuth("${username}", “${password}”)
.check(status.is(201))
.resources(
http(“PUT release jar.sha1”)
.put("${repositoryPath}/${groupPath}/${artifact}/${version}.${index}/${artifact}-${version}.${index}.jar.sha1")
.headers(expect)
.body(StringBody(jarSha1))
.basicAuth("${username}", “${password}”)
.check(status.is(201)),
http(“PUT release jar.md5”)
.put("${repositoryPath}/${groupPath}/${artifact}/${version}.${index}/${artifact}-${version}.${index}.jar.md5")
.headers(expect)
.body(StringBody(jarMd5))
.basicAuth("${username}", “${password}”)
.check(status.is(201)),
http(“PUT release pom”)
.put("${repositoryPath}/${groupPath}/${artifact}/${version}.${index}/${artifact}-${version}.${index}.pom")
.headers(expect)
.body(ElFileBody(“maven/sample-pom-release.xml”))
.basicAuth("${username}", “${password}”)
.check(status.is(201)),
http(“PUT release pom.sha1”)
.put("${repositoryPath}/${groupPath}/${artifact}/${version}.${index}/${artifact}-${version}.${index}.pom.sha1")
.headers(expect)
.body(StringBody(“55a170f9498ed9aa8061fba963fe282aeb14aad7”))
.basicAuth("${username}", “${password}”)
.check(status.is(201)),
http(“PUT release pom.md5”)
.put("${repositoryPath}/${groupPath}/${artifact}/${version}.${index}/${artifact}-${version}.${index}.pom.md5")
.headers(expect)
.body(StringBody(“d92a34e11573c9c74cdf0ca457333296”))
.basicAuth("${username}", “${password}”)
.check(status.is(201))
)

Where

val expect = Map(
“Cache-control” → “no-cache”,
“Cache-store” → “no-store”,
“Expect” → “100-continue”,
“Expires” → “0”,
“Pragma” → “no-cache”)

LGTM, so it’s probably a regression wrt Expect:100-continue handling.

Sorry, but I’m way too swamped to build a sample app atm.
If you could share a private access to a Nexus repo and provide a sample simulation, it would be great!

Another piece of the puzzle is the issue appears to only occur when the application under test is behind a load balance (specifically AWS ELB).

I’ll see if I can put together a simplified reproduce case.

nginx as a reverse proxy in front of the application under test also appears to trigger the issue.

I’ve put together an example project that I believe reliably exhibits the behavior.

https://github.com/bradbeck/gatling-http-100

NOW, this is a reproducer, thanks!

https://github.com/gatling/gatling/issues/3650

Stéphane Landelle

GatlingCorp CTO
slandelle@gatling.io