From 3afe57817e00cc62ab92492ac32b3dbcab79cea0 Mon Sep 17 00:00:00 2001 From: Sebastian Bazley Date: Fri, 29 Oct 2010 23:49:01 +0000 Subject: [PATCH] Bug 50178 - HeaderManager added as child of Thread Group can create concatenated HeaderManager names and OutOfMemoryException git-svn-id: https://svn.apache.org/repos/asf/jakarta/jmeter/trunk@1028948 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/jmeter/testelement/AbstractTestElement.java | 9 +++++++++ .../org/apache/jmeter/testelement/TestElement.java | 6 ++++++ src/core/org/apache/jmeter/threads/TestCompiler.java | 4 +++- .../jmeter/protocol/http/sampler/HTTPSamplerBase.java | 10 ++++++++++ xdocs/changes.xml | 1 + 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/core/org/apache/jmeter/testelement/AbstractTestElement.java b/src/core/org/apache/jmeter/testelement/AbstractTestElement.java index 546c944db5..a91222aca6 100644 --- a/src/core/org/apache/jmeter/testelement/AbstractTestElement.java +++ b/src/core/org/apache/jmeter/testelement/AbstractTestElement.java @@ -86,6 +86,15 @@ public abstract class AbstractTestElement implements TestElement, Serializable { propMap.clear(); } + /** + * {@inheritDoc} + *

+ * Default implementation - does nothing + */ + public void clearTestElementChildren(){ + // NOOP + } + /** * {@inheritDoc} */ diff --git a/src/core/org/apache/jmeter/testelement/TestElement.java b/src/core/org/apache/jmeter/testelement/TestElement.java index 4342196537..337332472d 100644 --- a/src/core/org/apache/jmeter/testelement/TestElement.java +++ b/src/core/org/apache/jmeter/testelement/TestElement.java @@ -37,6 +37,12 @@ public interface TestElement extends Cloneable { // N.B. Comments originally only applied to Test Plans, hence the name - which can now not be easily changed public void addTestElement(TestElement child); + + /** + * This method should clear any test element properties that are merged + * by {@link #addTestElement(TestElement)}. + */ + public void clearTestElementChildren(); public void setProperty(String key, String value); diff --git a/src/core/org/apache/jmeter/threads/TestCompiler.java b/src/core/org/apache/jmeter/threads/TestCompiler.java index ba7befa7f7..3832881e11 100644 --- a/src/core/org/apache/jmeter/threads/TestCompiler.java +++ b/src/core/org/apache/jmeter/threads/TestCompiler.java @@ -240,7 +240,8 @@ public class TestCompiler implements HashTreeTraverser { private static class ObjectPair { - private TestElement child, parent; + private final TestElement child; + private final TestElement parent; public ObjectPair(TestElement one, TestElement two) { this.child = one; @@ -270,6 +271,7 @@ public class TestCompiler implements HashTreeTraverser { } private void configureWithConfigElements(Sampler sam, List configs) { + sam.clearTestElementChildren(); Iterator iter = configs.iterator(); while (iter.hasNext()) { ConfigTestElement config = iter.next(); diff --git a/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java b/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java index 1bd341583b..279d8c226a 100644 --- a/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java +++ b/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java @@ -528,6 +528,16 @@ public abstract class HTTPSamplerBase extends AbstractSampler } } + /** + * {@inheritDoc} + *

+ * Clears the Header Manager property so subsequent loops don't keep merging more elements + */ + @Override + public void clearTestElementChildren(){ + removeProperty(HEADER_MANAGER); + } + public void setPort(int value) { setProperty(new IntegerProperty(PORT, value)); } diff --git a/xdocs/changes.xml b/xdocs/changes.xml index e2ac1d3856..961de9e22f 100644 --- a/xdocs/changes.xml +++ b/xdocs/changes.xml @@ -68,6 +68,7 @@ To override the default local language fully, set the JMeter property "language"

HTTP Samplers and Proxy

Other Samplers