From d7e9e302154c3a2b0345e614ee8c2f38b4cfa69b Mon Sep 17 00:00:00 2001 From: Vladimir Sitnikov Date: Tue, 27 Jun 2023 13:53:38 +0300 Subject: [PATCH] fix: after disabling the Java Request sampler, it cannot be enabled again Java sampler was inheriting "enabled" status from its config element as internally, Java Sampler UI always creates a config element and merges it to the java sampler. The solution is to move "configureTestElement(sampler);" to the very end of modifyTestElement so all the base properties are populated based on the element properties rather than "config element" properties. Ideally we should somehow limit "mergeIn", and we should refrain from merging unexpected properties. Fixes https://github.com/apache/jmeter/issues/6004 --- .../gui/AbstractJMeterGuiComponent.java | 2 +- .../gui/AbstractJMeterGuiComponentTest.kt | 45 +++++++++++++++++++ .../java/control/gui/JavaTestSamplerGui.java | 4 +- 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 src/core/src/test/kotlin/org/apache/jmeter/gui/AbstractJMeterGuiComponentTest.kt diff --git a/src/core/src/main/java/org/apache/jmeter/gui/AbstractJMeterGuiComponent.java b/src/core/src/main/java/org/apache/jmeter/gui/AbstractJMeterGuiComponent.java index b9666382156..f9920f194f9 100644 --- a/src/core/src/main/java/org/apache/jmeter/gui/AbstractJMeterGuiComponent.java +++ b/src/core/src/main/java/org/apache/jmeter/gui/AbstractJMeterGuiComponent.java @@ -69,7 +69,7 @@ public abstract class AbstractJMeterGuiComponent extends JPanel implements JMete /** Logging */ private static final Logger log = LoggerFactory.getLogger(AbstractJMeterGuiComponent.class); - /** Flag indicating whether or not this component is enabled. */ + /** Flag indicating whether this component is enabled. */ private boolean enabled = true; /** diff --git a/src/core/src/test/kotlin/org/apache/jmeter/gui/AbstractJMeterGuiComponentTest.kt b/src/core/src/test/kotlin/org/apache/jmeter/gui/AbstractJMeterGuiComponentTest.kt new file mode 100644 index 00000000000..38c17c4bba4 --- /dev/null +++ b/src/core/src/test/kotlin/org/apache/jmeter/gui/AbstractJMeterGuiComponentTest.kt @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jmeter.gui + +import org.apache.jmeter.testelement.TestElement +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import javax.swing.JPopupMenu + +class AbstractJMeterGuiComponentTest { + @Test + fun isEnabled() { + val element = object : AbstractJMeterGuiComponent() { + override fun getLabelResource(): String = "dummy_element_for_tests" + + override fun createTestElement(): TestElement = TODO() + + override fun modifyTestElement(element: TestElement?) = TODO() + + override fun createPopupMenu(): JPopupMenu = TODO() + + override fun getMenuCategories(): MutableCollection = TODO() + } + + assertEquals(true, element.isEnabled, "element.isEnabled after creation of the element") + + element.clearGui() + assertEquals(true, element.isEnabled, "element.isEnabled after element.clearGui()") + } +} diff --git a/src/protocol/java/src/main/java/org/apache/jmeter/protocol/java/control/gui/JavaTestSamplerGui.java b/src/protocol/java/src/main/java/org/apache/jmeter/protocol/java/control/gui/JavaTestSamplerGui.java index 6877c488ec2..78a3b0502c5 100644 --- a/src/protocol/java/src/main/java/org/apache/jmeter/protocol/java/control/gui/JavaTestSamplerGui.java +++ b/src/protocol/java/src/main/java/org/apache/jmeter/protocol/java/control/gui/JavaTestSamplerGui.java @@ -78,8 +78,10 @@ public TestElement createTestElement() { public void modifyTestElement(TestElement sampler) { sampler.clear(); JavaConfig config = (JavaConfig) javaPanel.createTestElement(); - configureTestElement(sampler); sampler.addTestElement(config); + // Set base parameters (name, description, enabled) from the main control + // to avoid merging them from the config element above + configureTestElement(sampler); } /* Overrides AbstractJMeterGuiComponent.configure(TestElement) */