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