mstover1    2005/08/30 08:17:27

  Modified:    src/components/org/apache/jmeter/visualizers
                        ViewResultsFullVisualizer.java
               src/protocol/http/org/apache/jmeter/protocol/http/control
                        Cookie.java CookieManager.java
               src/core/org/apache/jmeter/resources messages.properties
               src/components/org/apache/jmeter/assertions
                        CompareAssertion.java
  Added:       src/components/org/apache/jmeter/visualizers
                        TreeNodeRenderer.java ComparisonVisualizer.java
               src/core/org/apache/jmeter/assertions
                        CompareAssertionResult.java
  Log:
  Cookies now differentiate based on port as well as host
  New ComparisonVisualizer for viewing falied comparison assertion results 
side-by-side.
  
  Revision  Changes    Path
  1.53      +1 -13     
jakarta-jmeter/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java
  
  Index: ViewResultsFullVisualizer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/visualizers/ViewResultsFullVisualizer.java,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- ViewResultsFullVisualizer.java    12 Jul 2005 20:50:29 -0000      1.52
  +++ ViewResultsFullVisualizer.java    30 Aug 2005 15:17:20 -0000      1.53
  @@ -585,7 +585,7 @@
   
                treeModel = new DefaultTreeModel(root);
                jTree = new JTree(treeModel);
  -             jTree.setCellRenderer(new ResultsNodeRenderer());
  +             jTree.setCellRenderer(new TreeNodeRenderer());
                
jTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
                jTree.addTreeSelectionListener(this);
                jTree.setRootVisible(false);
  @@ -642,18 +642,6 @@
   
                return resultsPane;
        }
  -
  -     private class ResultsNodeRenderer extends DefaultTreeCellRenderer {
  -             public Component getTreeCellRendererComponent(JTree tree, 
Object value, boolean sel, boolean expanded,
  -                             boolean leaf, int row, boolean focus) {
  -                     super.getTreeCellRendererComponent(tree, value, sel, 
expanded, leaf, row, focus);
  -                     if (!((SampleResult) ((DefaultMutableTreeNode) 
value).getUserObject()).isSuccessful()) {
  -                             this.setForeground(Color.red);
  -                     }
  -                     return this;
  -             }
  -     }
  -
        private static class LocalHTMLEditorKit extends HTMLEditorKit {
   
                private static final ViewFactory defaultFactory = new 
LocalHTMLFactory();
  
  
  
  1.1                  
jakarta-jmeter/src/components/org/apache/jmeter/visualizers/TreeNodeRenderer.java
  
  Index: TreeNodeRenderer.java
  ===================================================================
  package org.apache.jmeter.visualizers;
  
  import java.awt.Color;
  import java.awt.Component;
  
  import javax.swing.JTree;
  import javax.swing.tree.DefaultMutableTreeNode;
  import javax.swing.tree.DefaultTreeCellRenderer;
  
  import org.apache.jmeter.samplers.SampleResult;
  
  public class TreeNodeRenderer extends DefaultTreeCellRenderer {
  
        public TreeNodeRenderer() {
                super();
        }
        
        public Component getTreeCellRendererComponent(JTree tree, Object value, 
boolean sel, boolean expanded,
                        boolean leaf, int row, boolean focus) {
                super.getTreeCellRendererComponent(tree, value, sel, expanded, 
leaf, row, focus);
                Object obj = ((DefaultMutableTreeNode) value).getUserObject();
                if(obj instanceof SampleResult)
                {
                        if (!((SampleResult) obj).isSuccessful()) {
                                this.setForeground(Color.red);
                        }
                }
                return this;
        }
  
  }
  
  
  
  1.1                  
jakarta-jmeter/src/components/org/apache/jmeter/visualizers/ComparisonVisualizer.java
  
  Index: ComparisonVisualizer.java
  ===================================================================
  package org.apache.jmeter.visualizers;
  
  import java.awt.BorderLayout;
  import java.awt.Dimension;
  import java.awt.GridLayout;
  
  import javax.swing.JComponent;
  import javax.swing.JPanel;
  import javax.swing.JScrollPane;
  import javax.swing.JSplitPane;
  import javax.swing.JTextPane;
  import javax.swing.JTree;
  import javax.swing.event.TreeSelectionEvent;
  import javax.swing.event.TreeSelectionListener;
  import javax.swing.tree.DefaultMutableTreeNode;
  import javax.swing.tree.DefaultTreeModel;
  import javax.swing.tree.TreePath;
  import javax.swing.tree.TreeSelectionModel;
  
  import org.apache.jmeter.assertions.AssertionResult;
  import org.apache.jmeter.assertions.CompareAssertionResult;
  import org.apache.jmeter.samplers.Clearable;
  import org.apache.jmeter.samplers.SampleResult;
  import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
  
  public class ComparisonVisualizer extends AbstractVisualizer implements 
Clearable {
        JTree resultsTree;
  
        DefaultTreeModel treeModel;
  
        DefaultMutableTreeNode root;
  
        JTextPane base, secondary;
  
        public ComparisonVisualizer() {
                super();
                init();
        }
  
        public void add(SampleResult sample) {
  
                DefaultMutableTreeNode currNode = new 
DefaultMutableTreeNode(sample);
                treeModel.insertNodeInto(currNode, root, root.getChildCount());
                if (root.getChildCount() == 1) {
                        resultsTree.expandPath(new TreePath(root));
                }
        }
  
        public String getLabelResource() {
                return "comparison_visualizer_title";
        }
  
        private void init() {
                setLayout(new BorderLayout());
                setBorder(makeBorder());
                add(makeTitlePanel(), BorderLayout.NORTH);
                JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
                split.add(getTreePanel());
                split.add(getSideBySidePanel());
                add(split, BorderLayout.CENTER);
        }
  
        private JComponent getSideBySidePanel() {
                JPanel main = new JPanel(new GridLayout(1, 2));
                JScrollPane base = new JScrollPane(getBaseTextPane());
                base.setPreferredSize(base.getMinimumSize());
                JScrollPane secondary = new JScrollPane(getSecondaryTextPane());
                secondary.setPreferredSize(secondary.getMinimumSize());
                main.add(base);
                main.add(secondary);
                main.setPreferredSize(main.getMinimumSize());
                return main;
        }
  
        private JTextPane getBaseTextPane() {
                base = new JTextPane();
                return base;
        }
  
        private JTextPane getSecondaryTextPane() {
                secondary = new JTextPane();
                return secondary;
        }
  
        private JComponent getTreePanel() {
                root = new DefaultMutableTreeNode("Root");
                treeModel = new DefaultTreeModel(root);
                resultsTree = new JTree(treeModel);
                resultsTree.setCellRenderer(new TreeNodeRenderer());
                resultsTree.setCellRenderer(new TreeNodeRenderer());
                
resultsTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
                resultsTree.addTreeSelectionListener(new Selector());
                resultsTree.setRootVisible(false);
                resultsTree.setShowsRootHandles(true);
  
                JScrollPane treePane = new JScrollPane(resultsTree);
                treePane.setPreferredSize(new Dimension(150, 50));
                JPanel panel = new JPanel(new GridLayout(1, 1));
                panel.add(treePane);
                return panel;
        }
  
        private class Selector implements TreeSelectionListener {
                /*
                 * (non-Javadoc)
                 * 
                 * @see 
javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
                 */
                public void valueChanged(TreeSelectionEvent e) {
                        try {
                                DefaultMutableTreeNode node = 
(DefaultMutableTreeNode) resultsTree.getLastSelectedPathComponent();
                                SampleResult sr = (SampleResult) 
node.getUserObject();
                                AssertionResult[] results = 
sr.getAssertionResults();
                                CompareAssertionResult result = null;
                                for (AssertionResult r : results) {
                                        if (r instanceof 
CompareAssertionResult) {
                                                result = 
(CompareAssertionResult) r;
                                                break;
                                        }
                                }
                                if (result == null)
                                        result = new CompareAssertionResult();
                                base.setText(result.getBaseResult());
                                secondary.setText(result.getSecondaryResult());
                        } catch (Exception err) {
                                base.setText("Invalid Node " + err);
                                secondary.setText("Invalid Node " + err);
                        }
                        base.setCaretPosition(0);
                        secondary.setCaretPosition(0);
                }
  
        }
  
        /*
         * (non-Javadoc)
         * 
         * @see org.apache.jmeter.gui.AbstractJMeterGuiComponent#clear()
         */
        @Override
        public void clear() {
                super.clear();
                while (root.getChildCount() > 0) {
                        // the child to be removed will always be 0 'cos as the 
nodes are
                        // removed the nth node will become (n-1)th
                        treeModel.removeNodeFromParent((DefaultMutableTreeNode) 
root.getChildAt(0));
                        base.setText("");
                        secondary.setText("");
                }
        }
  
  }
  
  
  
  1.13      +14 -1     
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/control/Cookie.java
  
  Index: Cookie.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/control/Cookie.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Cookie.java       12 Jul 2005 20:50:46 -0000      1.12
  +++ Cookie.java       30 Aug 2005 15:17:23 -0000      1.13
  @@ -23,6 +23,7 @@
   import org.apache.jmeter.config.ConfigElement;
   import org.apache.jmeter.testelement.AbstractTestElement;
   import org.apache.jmeter.testelement.property.BooleanProperty;
  +import org.apache.jmeter.testelement.property.IntegerProperty;
   import org.apache.jmeter.testelement.property.LongProperty;
   import org.apache.jorphan.util.JOrphanUtils;
   
  @@ -41,6 +42,8 @@
        private static String SECURE = "Cookie.secure";
   
        private static String PATH = "Cookie.path";
  +     
  +     private static String PORT = "Cookie.port";
   
        /**
         * create the coookie
  @@ -146,6 +149,16 @@
        public synchronized void setPath(String path) {
                setProperty(PATH, path);
        }
  +     
  +     public void setPort(int port)
  +     {
  +             setProperty(new IntegerProperty(PORT,port));
  +     }
  +     
  +     public int getPort()
  +     {
  +             return getProperty(PORT).getIntValue();
  +     }
   
        /**
         * creates a string representation of this cookie
  
  
  
  1.41      +5 -3      
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/control/CookieManager.java
  
  Index: CookieManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/control/CookieManager.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- CookieManager.java        12 Jul 2005 20:50:46 -0000      1.40
  +++ CookieManager.java        30 Aug 2005 15:17:24 -0000      1.41
  @@ -278,7 +278,8 @@
                                                + cookie.getPath() + " 
expires=" + cookie.getExpires());
                        }
                        if (host.endsWith(cookie.getDomain()) && 
url.getFile().startsWith(cookie.getPath())
  -                                     && ((cookie.getExpires() == 0) // treat 
as never expiring
  +                                     && ((cookie.getExpires() == 0 && // 
treat as never expiring
  +                                     (cookie.getPort() == 0 || 
cookie.getPort() == url.getPort())) 
                                                                                
                        // (bug 27713)
                                        || (System.currentTimeMillis() / 1000) 
<= cookie.getExpires())) {
                                if (header.length() > 0) {
  @@ -333,6 +334,7 @@
                                                                                
                                                                        // means
                                                                                
                                                                        // 
session
                                                                                
                                                                        // 
cookie
  +             newCookie.setPort(url.getPort());
                // check the rest of the headers
                while (st.hasMoreTokens()) {
                        nvp = st.nextToken();
  
  
  
  1.1                  
jakarta-jmeter/src/core/org/apache/jmeter/assertions/CompareAssertionResult.java
  
  Index: CompareAssertionResult.java
  ===================================================================
  package org.apache.jmeter.assertions;
  
  
  public class CompareAssertionResult extends AssertionResult {
        private static final long serialVersionUID = 1;
        
        private ResultHolder comparedResults = new ResultHolder();
  
        public CompareAssertionResult() {
                super();
        }
  
        public CompareAssertionResult(boolean failure, boolean error, String 
message) {
                super(failure, error, message);
        }
        
        public void addToBaseResult(String resultData)
        {
                comparedResults.addToBaseResult(resultData);
        }
        
        public void addToSecondaryResult(String resultData)
        {
                comparedResults.addToSecondaryResult(resultData);
        }
        
        public String getBaseResult()
        {
                return comparedResults.baseResult;
        }
        
        public String getSecondaryResult()
        {
                return comparedResults.secondaryResult;
        }
  
        private class ResultHolder
        {
                String baseResult;
                String secondaryResult;
                
                public ResultHolder()
                {
                        
                }
                
                public void addToBaseResult(String r)
                {
                        if(baseResult == null)
                        {
                                baseResult = r;
                        }
                        else
                        {
                                baseResult = baseResult + "\n\n" + r;
                        }
                }
                
                public void addToSecondaryResult(String r)
                {
                        if(secondaryResult == null)
                        {
                                secondaryResult = r;
                        }
                        else
                        {
                                secondaryResult = secondaryResult + "\n\n" + r;
                        }
                }
        }
  }
  
  
  
  1.162     +1 -0      
jakarta-jmeter/src/core/org/apache/jmeter/resources/messages.properties
  
  Index: messages.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages.properties,v
  retrieving revision 1.161
  retrieving revision 1.162
  diff -u -r1.161 -r1.162
  --- messages.properties       29 Aug 2005 01:24:19 -0000      1.161
  +++ messages.properties       30 Aug 2005 15:17:25 -0000      1.162
  @@ -76,6 +76,7 @@
   column_number=Column number of CSV file | next | *alias
   compare=Compare
   comparefilt=Compare filter
  +comparison_visualizer_title=Comparison Assertion Visualizer
   config_element=Config Element
   config_save_settings=Configure
   configure_wsdl=Configure
  
  
  
  1.4       +45 -64    
jakarta-jmeter/src/components/org/apache/jmeter/assertions/CompareAssertion.java
  
  Index: CompareAssertion.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/assertions/CompareAssertion.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CompareAssertion.java     29 Aug 2005 21:04:12 -0000      1.3
  +++ CompareAssertion.java     30 Aug 2005 15:17:26 -0000      1.4
  @@ -22,7 +22,9 @@
   public class CompareAssertion extends AbstractTestElement implements 
Assertion, TestBean, Serializable,
                LoopIterationListener {
        static Logger log = LoggingManager.getLoggerForClass();
  +
        transient List responses;
  +
        private static final Substitution emptySub = new StringSubstitution("");
   
        transient boolean iterationDone = false;
  @@ -30,7 +32,7 @@
        private boolean compareContent = true;
   
        private long compareTime = -1;
  -     
  +
        Collection<String> stringsToSkip;
   
        public CompareAssertion() {
  @@ -41,18 +43,16 @@
                log.info("get assertion result for sample");
                responses.add(response);
                if (responses.size() > 1) {
  -                     AssertionResult result = new 
AssertionResult(false,false,null);
  +                     CompareAssertionResult result = new 
CompareAssertionResult(false, false, null);
                        compareContent(result);
                        compareTime(result);
                        return result;
                } else
                        return new AssertionResult(false, false, null);
        }
  -     
  -     protected void compareTime(AssertionResult result)
  -     {
  -             if(compareTime > -1)
  -             {
  +
  +     protected void compareTime(CompareAssertionResult result) {
  +             if (compareTime > -1) {
                        Iterator iter = responses.iterator();
                        long prevTime = -1;
                        SampleResult prevResult = null;
  @@ -60,29 +60,19 @@
                        while (iter.hasNext()) {
                                SampleResult sResult = (SampleResult) 
iter.next();
                                long currentTime = sResult.getTime();
  -                             if (prevTime != -1)
  -                             {
  +                             if (prevTime != -1) {
                                        success = Math.abs(prevTime - 
currentTime) < compareTime;
                                        prevResult = sResult;
                                }
                                if (!success) {
                                        result.setFailure(true);
  -                                     StringBuffer message = new 
StringBuffer("##################\n");
  -                                     message.append("From Request: ");
  -                                     message.append(prevResult.toString());
  -                                     message.append("\n\n");
  -                                     message.append("Response Time = ");
  -                                     message.append(prevTime);
  -                                     message.append("\n\n");
  -                                     message.append("Not Close Enough To: 
\n\n");
  -                                     message.append("From Request: ");
  -                                     message.append(sResult.toString());
  -                                     message.append("\n\n");
  -                                     message.append("Response Time = ");
  -                                     message.append(currentTime);
  -                                     message.append("/n/n");
  -                                     
message.append("==============================\n\n");
  -                                     
result.setFailureMessage(message.toString());
  +                                     StringBuffer buf = new 
StringBuffer(prevResult.getSamplerData().trim()).append("\n").append(
  +                                                     
prevResult.getRequestHeaders()).append("\n\n").append("Response Time: 
").append(prevTime);
  +                                     result.addToBaseResult(buf.toString());
  +                                     buf = new 
StringBuffer(sResult.getSamplerData().trim()).append("\n").append(
  +                                                     
sResult.getRequestHeaders()).append("\n\n").append("Response Time: 
").append(currentTime);
  +                                     
result.addToSecondaryResult(buf.toString());
  +                                     result.setFailureMessage("Responses 
differ in response time");
                                        break;
                                }
                                prevResult = sResult;
  @@ -91,7 +81,7 @@
                }
        }
   
  -     protected void compareContent(AssertionResult result) {
  +     protected void compareContent(CompareAssertionResult result) {
                if (compareContent) {
                        Iterator iter = responses.iterator();
                        String prevContent = null;
  @@ -104,60 +94,48 @@
                                        currentContent = new 
String(sResult.getResponseData(), sResult.getDataEncoding());
                                } catch (UnsupportedEncodingException e) {
                                        result.setError(true);
  -                                     result.setFailureMessage("Unsupported 
Encoding Exception: " +sResult.getDataEncoding());
  +                                     result.setFailureMessage("Unsupported 
Encoding Exception: " + sResult.getDataEncoding());
                                        return;
                                }
                                currentContent = filterString(currentContent);
  -                             if (prevContent != null)
  -                             {
  +                             if (prevContent != null) {
                                        success = 
prevContent.equals(currentContent);
                                }
                                if (!success) {
                                        result.setFailure(true);
  -                                     StringBuffer message = new 
StringBuffer("##################\n");
  -                                     message.append("From Request: ");
  -                                     message.append(prevResult.toString());
  -                                     message.append("\n\n");
  -                                     message.append(prevContent);
  -                                     message.append("\n\n");
  -                                     message.append("Not Equal To: \n\n");
  -                                     message.append("From Request: ");
  -                                     message.append(sResult.toString());
  -                                     message.append("\n\n");
  -                                     message.append(currentContent);
  -                                     message.append("\n\n");
  -                                     
message.append("==============================\n\n");
  -                                     
result.setFailureMessage(message.toString());
  +                                     StringBuffer buf = new 
StringBuffer(prevResult.getSamplerData().trim()).append("\n").append(
  +                                                     
prevResult.getRequestHeaders()).append("\n\n").append(prevContent);
  +                                     result.addToBaseResult(buf.toString());
  +                                     buf = new 
StringBuffer(sResult.getSamplerData().trim()).append("\n").append(
  +                                                     
sResult.getRequestHeaders()).append("\n\n").append(currentContent);
  +                                     
result.addToSecondaryResult(buf.toString());
  +                                     result.setFailureMessage("Responses 
differ in content");
                                        break;
                                }
                                prevResult = sResult;
                                prevContent = currentContent;
                        }
                }
  -     } 
  -     
  -     private String filterString(String content)
  -     {
  -             if(stringsToSkip == null || stringsToSkip.size() == 0)
  -             {
  +     }
  +
  +     private String filterString(String content) {
  +             if (stringsToSkip == null || stringsToSkip.size() == 0) {
                        return content;
  -             }
  -             else
  -             {
  -                     for(String regex : stringsToSkip)
  -                     {
  +             } else {
  +                     for (String regex : stringsToSkip) {
                                log.info("replacing regex: " + regex);
  -                             content = 
Util.substitute(JMeterUtils.getMatcher(),JMeterUtils.getPatternCache().getPattern(regex),emptySub,content,Util.SUBSTITUTE_ALL);
  +                             content = 
Util.substitute(JMeterUtils.getMatcher(), 
JMeterUtils.getPatternCache().getPattern(regex),
  +                                             emptySub, content, 
Util.SUBSTITUTE_ALL);
                        }
                }
                return content;
        }
  -     
  +
        /*
  -              * (non-Javadoc)
  -              * 
  -              * @see 
org.apache.jmeter.engine.event.LoopIterationListener#iterationStart(org.apache.jmeter.engine.event.LoopIterationEvent)
  -              */
  +      * (non-Javadoc)
  +      * 
  +      * @see 
org.apache.jmeter.engine.event.LoopIterationListener#iterationStart(org.apache.jmeter.engine.event.LoopIterationEvent)
  +      */
        public void iterationStart(LoopIterationEvent iterEvent) {
                log.info("iteration started for compare Assertion");
                responses = new LinkedList();
  @@ -181,7 +159,8 @@
        }
   
        /**
  -      * @param compareContent The compareContent to set.
  +      * @param compareContent
  +      *            The compareContent to set.
         */
        public void setCompareContent(boolean compareContent) {
                this.compareContent = compareContent;
  @@ -195,7 +174,8 @@
        }
   
        /**
  -      * @param compareTime The compareTime to set.
  +      * @param compareTime
  +      *            The compareTime to set.
         */
        public void setCompareTime(long compareTime) {
                this.compareTime = compareTime;
  @@ -209,10 +189,11 @@
        }
   
        /**
  -      * @param stringsToSkip The stringsToSkip to set.
  +      * @param stringsToSkip
  +      *            The stringsToSkip to set.
         */
        public void setStringsToSkip(Collection stringsToSkip) {
  -             this.stringsToSkip = (Collection<String>)stringsToSkip;
  +             this.stringsToSkip = (Collection<String>) stringsToSkip;
        }
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to