I'm trying to construct a check on a test over server sent events, to test that they were received within a short timeframe.
I started with a simple check, using a regex. This completes with success when the message arrives.
.check(wsAwait.within(15 seconds).until(1).regex("""timestamp"""))
However, I've failed to get a more complex check to work, which examines the message body to extract a "sent" timestamp from the message and compare with the received time:
.check(wsAwait.within(15 seconds).until(1).jsonPath("$.data.timestamp").ofType[Long].transform( ts => java.lang.System.currentTimeMillis() - ts ).lessThan(5000L))
In this case, the check just times-out. I changed the final assertion to 'greaterThan()' and it still fails.
The messages are received ok (by switching debug on for the SSE agent).
e.g.
*Received message '{"data":"{"user_id":"51d04790-df95-3bca-8c83-a5af6748a1ff","timestamp":1511434385963,"payload":{"@type":"DocumentNotificationPayload","document_id":"de670ed1-1a96-325b-9d77-95fbf7d96123","event_type":"updated","last_modified_timestamp":1511434385963}}"}'*
So I'm sure the jsonPath is correct, and I'm marshalling it correctly.
regards
Ash
Sorry forgot to say this is Gatling 2.2.4.
A bit more context…
sse("notifications")
.open(s"${connectPath}")
.header("Authorization", "${authHeader}")
.check(....)
Ok, i worked around the problem by using a regexp over the JSON, although it’s pretty fragile.
Ash