From 1d526ac42c9ddf4d096fd85df2fbd338bc71a092 Mon Sep 17 00:00:00 2001 From: almansour Date: Sun, 12 Dec 2021 00:43:25 +0200 Subject: [PATCH] Fix test element name changing inside loop causing a bug --- .../jmeter/controller/ParallelSampler.java | 2 +- .../controller/ParallelSamplerTest.java | 41 ++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/parallel/src/main/java/com/blazemeter/jmeter/controller/ParallelSampler.java b/parallel/src/main/java/com/blazemeter/jmeter/controller/ParallelSampler.java index e0a1741..ba74ef2 100644 --- a/parallel/src/main/java/com/blazemeter/jmeter/controller/ParallelSampler.java +++ b/parallel/src/main/java/com/blazemeter/jmeter/controller/ParallelSampler.java @@ -69,7 +69,7 @@ public SampleResult sample(Entry e) { for (TestElement ctl : controllers) { reqText.append(ctl.getName()).append("\n"); JMeterThread jmThread = new JMeterThreadParallel(getTestTree(ctl), this, notifier, getGenerateParent()); - String name = JMeterContextService.getContext().getThread() + " - " + this.getName() + " - " + ctl.getName(); + String name = JMeterContextService.getContext().getThread().toString(); jmThread.setThreadName(name); jmThread.setThreadGroup(threadGroup); jmThread.setEngine(JMeterContextService.getContext().getEngine()); diff --git a/parallel/src/test/java/com/blazemeter/jmeter/controller/ParallelSamplerTest.java b/parallel/src/test/java/com/blazemeter/jmeter/controller/ParallelSamplerTest.java index eacc9e2..130f1bd 100644 --- a/parallel/src/test/java/com/blazemeter/jmeter/controller/ParallelSamplerTest.java +++ b/parallel/src/test/java/com/blazemeter/jmeter/controller/ParallelSamplerTest.java @@ -124,6 +124,34 @@ public void underLoop() throws Exception { assertEquals(5, EmulSampler.count.get()); } + @Test + public void underLoopWithIterationNumber() throws Exception { + EmulSampler payload = new NameChangingEmulSampler(); + payload.setName("payload"); + + ParallelSampler sam = new ParallelSampler(); + sam.threadStarted(); + sam.setName("Parallel Sampler"); + sam.addTestElement(payload); + + LoopController ctl = getLoopController(5); + ctl.addTestElement(sam); + + JMeterThread thr = new JMeterThread(new HashTree(ctl), sam, sam.notifier); + thr.setThreadName("root"); + thr.setThreadGroup(new DummyThreadGroup()); + JMeterContextService.getContext().setThread(thr); + + addToContext(sam, thr); + addToContext(payload, thr); + + sam.setRunningVersion(true); + ctl.setRunningVersion(true); + payload.setRunningVersion(true); + thr.run(); + assertEquals(5, EmulSampler.count.get()); + } + private LoopController getLoopController(int loops) { LoopController ctl = new LoopControllerTracked(); ctl.setName("Top Loop"); @@ -149,7 +177,7 @@ public void addToContext(TestElement te, JMeterThread parentThread) throws NoSuc public static class EmulSampler extends DummySampler { private volatile transient static int instances = 0; - private volatile transient static AtomicInteger count = new AtomicInteger(); + protected volatile transient static AtomicInteger count = new AtomicInteger(); public EmulSampler() { instances++; @@ -164,6 +192,17 @@ public SampleResult sample(Entry e) { } } + public static class NameChangingEmulSampler extends EmulSampler { + + public NameChangingEmulSampler() { + super(); + } + + @Override + public String getName() { + return super.getName() + count.get(); + } + } @Test public void testThreadSafeCookieManager() throws Exception {