You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2007/08/31 18:50:39 UTC
svn commit: r571520 - in /jakarta/jmeter/branches/rel-2-2: docs/
src/components/org/apache/jmeter/control/ src/core/org/apache/jmeter/
src/core/org/apache/jmeter/control/ xdocs/
Author: sebb
Date: Fri Aug 31 09:50:37 2007
New Revision: 571520
URL: http://svn.apache.org/viewvc?rev=571520&view=rev
Log:
Bug 38687 - Module controller does not work in non-GUI mode
Modified:
jakarta/jmeter/branches/rel-2-2/docs/changes.html
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/IncludeController.java
jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/ModuleController.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/JMeter.java
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/ReplaceableController.java
jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
Modified: jakarta/jmeter/branches/rel-2-2/docs/changes.html
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/docs/changes.html?rev=571520&r1=571519&r2=571520&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/docs/changes.html (original)
+++ jakarta/jmeter/branches/rel-2-2/docs/changes.html Fri Aug 31 09:50:37 2007
@@ -219,6 +219,11 @@
</li>
+ <li >
+ Bug 38687 - Module controller does not work in non-GUI mode
+ </li>
+
+
</ul>
<h4 >
Improvements since 2.3RC3
@@ -2958,7 +2963,6 @@
SSL testing should work with less user-fudging, and in non-gui mode
</li>
-
<li >
Mailer Model works in non-gui mode
Modified: jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/IncludeController.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/IncludeController.java?rev=571520&r1=571519&r2=571520&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/IncludeController.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/IncludeController.java Fri Aug 31 09:50:37 2007
@@ -63,7 +63,7 @@
public Object clone() {
// TODO - fix so that this is only called once per test, instead of at every clone
// Perhaps save previous filename, and only load if it has changed?
- this.SUBTREE = this.loadIncludedElements();
+ this.resolveReplacementSubTree(null);
IncludeController clone = (IncludeController) super.clone();
clone.setIncludePath(this.getIncludePath());
if (this.SUBTREE != null) {
@@ -102,6 +102,10 @@
*/
public HashTree getReplacementSubTree() {
return SUBTREE;
+ }
+
+ public void resolveReplacementSubTree(Object context) {
+ this.SUBTREE = this.loadIncludedElements();
}
/**
Modified: jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/ModuleController.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/ModuleController.java?rev=571520&r1=571519&r2=571520&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/ModuleController.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/components/org/apache/jmeter/control/ModuleController.java Fri Aug 31 09:50:37 2007
@@ -116,18 +116,27 @@
return null;
}
- private void restoreSelected() {
- if (selectedNode == null) {
- List nodePath = getNodePath();
- if (nodePath != null && nodePath.size() > 0) {
- GuiPackage gp = GuiPackage.getInstance();
- if (gp != null) {
- JMeterTreeNode root = (JMeterTreeNode) gp.getTreeModel().getRoot();
- traverse(root, nodePath, 1);
- }
- }
- }
- }
+ private void restoreSelected() {
+ GuiPackage gp = GuiPackage.getInstance();
+ if (gp != null) {
+ JMeterTreeNode root = (JMeterTreeNode) gp.getTreeModel().getRoot();
+ resolveReplacementSubTree(root);
+ }
+ }
+
+ /**
+ * Compute the replacement tree.
+ * @param context
+ */
+ public void resolveReplacementSubTree(Object context) {
+ JMeterTreeNode root = (JMeterTreeNode) context;
+ if (selectedNode == null) {
+ List nodePathList = getNodePath();
+ if (nodePathList != null && nodePathList.size() > 0) {
+ traverse(root, nodePathList, 1);
+ }
+ }
+ }
private void traverse(JMeterTreeNode node, List nodePath, int level) {
if (node != null && nodePath.size() > level) {
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/JMeter.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/JMeter.java?rev=571520&r1=571519&r2=571520&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/JMeter.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/JMeter.java Fri Aug 31 09:50:37 2007
@@ -28,6 +28,7 @@
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
+import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -57,6 +58,7 @@
import org.apache.jmeter.gui.action.ActionRouter;
import org.apache.jmeter.gui.action.Load;
import org.apache.jmeter.gui.tree.JMeterTreeListener;
+import org.apache.jmeter.gui.tree.JMeterTreeNode;
import org.apache.jmeter.gui.tree.JMeterTreeModel;
import org.apache.jmeter.plugin.JMeterPlugin;
import org.apache.jmeter.plugin.PluginManager;
@@ -68,7 +70,6 @@
import org.apache.jmeter.services.FileServer;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.TestListener;
-import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.threads.gui.ThreadGroupGui;
import org.apache.jmeter.timers.gui.AbstractTimerGui;
import org.apache.jmeter.util.BeanShellInterpreter;
@@ -78,6 +79,7 @@
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.gui.ComponentUtil;
import org.apache.jorphan.logging.LoggingManager;
+import org.apache.jorphan.collections.SearchByClass;
import org.apache.jorphan.reflect.ClassTools;
import org.apache.jorphan.util.JMeterException;
import org.apache.jorphan.util.JOrphanUtils;
@@ -665,6 +667,19 @@
HashTree tree = SaveService.loadTree(reader);
+ JMeterTreeModel treeModel = new JMeterTreeModel();
+ JMeterTreeNode root = (JMeterTreeNode) treeModel.getRoot();
+ treeModel.addSubTree(tree, root);
+
+ // Hack to resolve ModuleControllers in non GUI mode
+ SearchByClass replaceableControllers = new SearchByClass(ReplaceableController.class);
+ tree.traverse(replaceableControllers);
+ Collection replaceableControllersRes = replaceableControllers.getSearchResults();
+ for (Iterator iter = replaceableControllersRes.iterator(); iter.hasNext();) {
+ ReplaceableController replaceableController = (ReplaceableController) iter.next();
+ replaceableController.resolveReplacementSubTree(root);
+ }
+
// Remove the disabled items
// For GUI runs this is done in Start.java
convertSubTree(tree);
@@ -714,45 +729,69 @@
}
}
- /**
- * Code copied from AbstractAction.java and modified to suit TestElements
- *
- * @param tree
- */
- private void convertSubTree(HashTree tree) {
- Iterator iter = new LinkedList(tree.list()).iterator();
- while (iter.hasNext()) {
- TestElement item = (TestElement) iter.next();
- if (item.isEnabled()) {
- // This is done for GUI runs in JMeterTreeModel.addSubTree()
- if (item instanceof TestPlan) {
- TestPlan tp = (TestPlan) item;
- tp.setFunctionalMode(tp.isFunctionalMode());
- tp.setSerialized(tp.isSerialized());
- }
- // TODO: this is a bit of a hack, but seems to work for the Include Controller
- if (item instanceof ReplaceableController) {
- // HACK: force the controller to load its tree
- ReplaceableController rc = (ReplaceableController) item.clone();
- HashTree subTree = tree.getTree(item);
- if (subTree != null) {
- HashTree replacementTree = rc.getReplacementSubTree();
- if (replacementTree != null) {
- convertSubTree(replacementTree);
- tree.replace(item,rc);
- tree.set(rc,replacementTree);
- }
- } else {
- convertSubTree(tree.getTree(item));
- }
- } else {
- convertSubTree(tree.getTree(item));
- } // ReplaceableController
- } else {// disabled
- tree.remove(item);
- }
- }
- }
+ /**
+ * Refactored from AbstractAction.java
+ *
+ * @param tree
+ */
+ public static void convertSubTree(HashTree tree) {
+ Iterator iter = new LinkedList(tree.list()).iterator();
+ while (iter.hasNext()) {
+ Object o = iter.next();
+ if (o instanceof TestElement) {
+ TestElement item = (TestElement) o;
+ if (item.isEnabled()) {
+ if (item instanceof ReplaceableController) {
+ // HACK: force the controller to load its tree
+ ReplaceableController rc = (ReplaceableController) item
+ .clone();
+ HashTree subTree = tree.getTree(item);
+ if (subTree != null) {
+ HashTree replacementTree = rc
+ .getReplacementSubTree();
+ if (replacementTree != null) {
+ convertSubTree(replacementTree);
+ tree.replace(item, rc);
+ tree.set(rc, replacementTree);
+ }
+ } else {
+ convertSubTree(tree.getTree(item));
+ }
+ } else {
+ convertSubTree(tree.getTree(item));
+ }
+ } else
+ tree.remove(item);
+ } else {
+ JMeterTreeNode item = (JMeterTreeNode) o;
+ if (item.isEnabled()) {
+ // Replacement only needs to occur when starting the engine
+ // @see StandardJMeterEngine.run()
+ if (item.getUserObject() instanceof ReplaceableController) {
+ ReplaceableController rc = (ReplaceableController) item
+ .getTestElement();
+ HashTree subTree = tree.getTree(item);
+
+ if (subTree != null) {
+ HashTree replacementTree = rc
+ .getReplacementSubTree();
+ if (replacementTree != null) {
+ convertSubTree(replacementTree);
+ tree.replace(item, rc);
+ tree.set(rc, replacementTree);
+ }
+ }
+ } else {
+ convertSubTree(tree.getTree(item));
+ TestElement testElement = item.getTestElement();
+ tree.replace(item, testElement);
+ }
+ } else {
+ tree.remove(item);
+ }
+ }
+ }
+ }
private JMeterEngine doRemoteInit(String hostName, HashTree testTree) {
JMeterEngine engine = null;
Modified: jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/ReplaceableController.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/ReplaceableController.java?rev=571520&r1=571519&r2=571520&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/ReplaceableController.java (original)
+++ jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/control/ReplaceableController.java Fri Aug 31 09:50:37 2007
@@ -42,4 +42,11 @@
* @see org.apache.jmeter.gui.action.AbstractAction#convertSubTree
*/
public HashTree getReplacementSubTree();
+
+ /**
+ * Compute the replacement tree.
+ *
+ * @param context
+ */
+ public void resolveReplacementSubTree(Object context);
}
Modified: jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml?rev=571520&r1=571519&r2=571520&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml Fri Aug 31 09:50:37 2007
@@ -47,6 +47,7 @@
<li>Bug 43122 - GUI changes not always picked up when short-cut keys used (bug introduced in 2.3RC3)</li>
<li>Bug 42947 - TestBeanGUI changes not picked up when short-cut keys used</li>
<li>Added serializer.jar (needed for update to xalan 2.7.0)</li>
+<li>Bug 38687 - Module controller does not work in non-GUI mode</li>
</ul>
<h4>Improvements since 2.3RC3</h4>
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org