You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by vl...@apache.org on 2023/06/16 05:39:28 UTC
[jmeter] 02/02: test: CollectSamplesListener should be NoThreadClone, so it collects all the events
This is an automated email from the ASF dual-hosted git repository.
vladimirsitnikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jmeter.git
commit c46e37a4f0ef8a0aa87c2ea4fe2cab9e0423c49d
Author: Vladimir Sitnikov <si...@gmail.com>
AuthorDate: Fri Jun 16 08:38:03 2023 +0300
test: CollectSamplesListener should be NoThreadClone, so it collects all the events
Previously, HttpRequestInterruptTest received no events because the
listener was cloned, however, the test assumed there were no events because
the sampling was interrupted.
---
.../openmodel/ThreadsInterruptAtFinishTest.kt | 4 +--
.../jmeter/test/samplers/CollectSamplesListener.kt | 3 ++-
.../protocol/http/HttpRequestInterruptTest.kt | 30 +++++++++++++---------
3 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/src/core/src/test/kotlin/org/apache/jmeter/threads/openmodel/ThreadsInterruptAtFinishTest.kt b/src/core/src/test/kotlin/org/apache/jmeter/threads/openmodel/ThreadsInterruptAtFinishTest.kt
index 6e79eb8140..34d5586a65 100644
--- a/src/core/src/test/kotlin/org/apache/jmeter/threads/openmodel/ThreadsInterruptAtFinishTest.kt
+++ b/src/core/src/test/kotlin/org/apache/jmeter/threads/openmodel/ThreadsInterruptAtFinishTest.kt
@@ -32,9 +32,9 @@ import kotlin.time.Duration.Companion.seconds
class ThreadsInterruptAtFinishTest : JMeterTestCase() {
@Test
- @Timeout(5, unit = TimeUnit.SECONDS)
+ @Timeout(10, unit = TimeUnit.SECONDS)
fun `openmodel interrupts sleep`() {
- executePlanAndCollectEvents(10.seconds) {
+ assertInterruptionsPresent {
OpenModelThreadGroup::class {
scheduleString = "rate(50 / sec) random_arrivals(100 ms) pause(1 s)"
ThreadSleep::class {
diff --git a/src/core/src/testFixtures/kotlin/org/apache/jmeter/test/samplers/CollectSamplesListener.kt b/src/core/src/testFixtures/kotlin/org/apache/jmeter/test/samplers/CollectSamplesListener.kt
index 05c7aca0d3..10869b82c7 100644
--- a/src/core/src/testFixtures/kotlin/org/apache/jmeter/test/samplers/CollectSamplesListener.kt
+++ b/src/core/src/testFixtures/kotlin/org/apache/jmeter/test/samplers/CollectSamplesListener.kt
@@ -17,6 +17,7 @@
package org.apache.jmeter.test.samplers
+import org.apache.jmeter.engine.util.NoThreadClone
import org.apache.jmeter.reporters.AbstractListenerElement
import org.apache.jmeter.samplers.SampleEvent
import org.apache.jmeter.samplers.SampleListener
@@ -25,7 +26,7 @@ import java.util.Collections
/**
* Collects [SampleEvent] to a list.
*/
-class CollectSamplesListener : AbstractListenerElement(), SampleListener {
+class CollectSamplesListener : AbstractListenerElement(), SampleListener, NoThreadClone {
private val mutableEvents: MutableList<SampleEvent> = Collections.synchronizedList(mutableListOf<SampleEvent>())
// Copy the events to prevent late arrivals after the test has finished
diff --git a/src/protocol/http/src/test/kotlin/org/apache/jmeter/protocol/http/HttpRequestInterruptTest.kt b/src/protocol/http/src/test/kotlin/org/apache/jmeter/protocol/http/HttpRequestInterruptTest.kt
index ac3f54e975..90e25213d2 100644
--- a/src/protocol/http/src/test/kotlin/org/apache/jmeter/protocol/http/HttpRequestInterruptTest.kt
+++ b/src/protocol/http/src/test/kotlin/org/apache/jmeter/protocol/http/HttpRequestInterruptTest.kt
@@ -22,35 +22,39 @@ import com.github.tomakehurst.wiremock.client.WireMock.get
import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo
import com.github.tomakehurst.wiremock.junit5.WireMockTest
import org.apache.jmeter.junit.JMeterTestCase
+import org.apache.jmeter.protocol.http.sampler.HTTPSamplerFactory
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy
-import org.apache.jmeter.samplers.SampleEvent
import org.apache.jmeter.test.assertions.executePlanAndCollectEvents
import org.apache.jmeter.threads.openmodel.OpenModelThreadGroup
import org.junit.jupiter.api.Assertions.assertEquals
-import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Timeout
+import org.junit.jupiter.api.fail
+import org.junit.jupiter.params.ParameterizedTest
+import org.junit.jupiter.params.provider.ValueSource
import java.util.concurrent.TimeUnit
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
@WireMockTest
class HttpRequestInterruptTest : JMeterTestCase() {
- @Test
- @Timeout(5, unit = TimeUnit.SECONDS)
- fun `httpClient4 interrupts`(server: WireMockRuntimeInfo) {
+ @ParameterizedTest
+ @Timeout(10, unit = TimeUnit.SECONDS)
+ @ValueSource(strings = [HTTPSamplerFactory.IMPL_HTTP_CLIENT4, HTTPSamplerFactory.HTTP_SAMPLER_JAVA])
+ fun `http request interrupts`(httpImplementation: String, server: WireMockRuntimeInfo) {
server.wireMock.register(
get("/delayed")
.willReturn(
aResponse()
- .withStatus(200)
.withFixedDelay(1.minutes.inWholeMilliseconds.toInt())
+ .withStatus(200)
)
)
- val events = executePlanAndCollectEvents(50.seconds) {
+ val events = executePlanAndCollectEvents(5.seconds) {
OpenModelThreadGroup::class {
scheduleString = "rate(50 / sec) random_arrivals(100 ms) pause(1 s)"
HTTPSamplerProxy::class {
+ implementation = httpImplementation
method = "GET"
protocol = "http"
domain = "localhost"
@@ -60,10 +64,12 @@ class HttpRequestInterruptTest : JMeterTestCase() {
}
}
- assertEquals(
- listOf<SampleEvent>(),
- events,
- "No samples expected as all the threads should be interrupted before the request completes"
- )
+ assertEquals(5, events.size) { "5 events expected, got $events" }
+ if (events.any { it.result.isSuccessful || it.result.isResponseCodeOK || it.result.time < 500 }) {
+ fail(
+ "All events should be failing, and they should take more than 500ms since the requests " +
+ "should have been cancelled after 1sec. Results are: $events"
+ )
+ }
}
}