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 js...@apache.org on 2003/12/01 00:21:06 UTC

cvs commit: jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy Proxy.java ProxyControl.java

jsalvata    2003/11/30 15:21:06

  Modified:    src/protocol/http/org/apache/jmeter/protocol/http/proxy
                        Proxy.java ProxyControl.java
  Log:
  Partial solution to record results during proxy recording: now
  the proxy notifies listeners of the samples it runs.
  
  PR: 6730 [partial]
  CVS: ----------------------------------------------------------------------
  CVS: PR:
  CVS:   If this change addresses a PR in the problem report tracking
  CVS:   database, then enter the PR number(s) here.
  CVS: Obtained from:
  CVS:   If this change has been taken from another system, such as NCSA,
  CVS:   then name the system in this line, otherwise delete it.
  CVS: Submitted by:
  CVS:   If this code has been contributed to Apache by someone else; i.e.,
  CVS:   they sent us a patch or a new module, then include their name/email
  CVS:   address here. If this is your work then delete this line.
  CVS: Reviewed by:
  CVS:   If we are doing pre-commit code reviews and someone else has
  CVS:   reviewed your changes, include their name(s) here.
  CVS:   If you have not had it reviewed then delete this line.
  
  Revision  Changes    Path
  1.15      +6 -5      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java
  
  Index: Proxy.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Proxy.java	18 Nov 2003 18:26:55 -0000	1.14
  +++ Proxy.java	30 Nov 2003 23:21:06 -0000	1.15
  @@ -64,6 +64,7 @@
   
   import org.apache.jmeter.protocol.http.control.HeaderManager;
   import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
  +import org.apache.jmeter.samplers.SampleResult;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jorphan.logging.LoggingManager;
   import org.apache.log.Logger;
  @@ -133,7 +134,7 @@
       public void run()
       {
           HttpRequestHdr request = new HttpRequestHdr();
  -        byte[] serverResponse = new byte[0];
  +        SampleResult result = null;
           HeaderManager headers = null;
   
           HTTPSampler sampler = new HTTPSampler();
  @@ -152,9 +153,9 @@
               headers = request.getHeaderManager();
               sampler.setHeaderManager(headers);
   
  -            serverResponse = sampler.sample().getResponseData();
  +            result = sampler.sample();
               writeToClient(
  -                serverResponse,
  +                result.getResponseData(),
                   new BufferedOutputStream(clientSocket.getOutputStream()));
               /*
                * We don't want to store any cookies in the generated test plan
  @@ -178,7 +179,7 @@
                                     new TestElement[] { 
                                     	captureHttpHeaders ? headers : null 
                                     	},
  -                                  serverResponse);
  +                                  result);
               try
               {
                   clientSocket.close();
  
  
  
  1.35      +48 -2     jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
  
  Index: ProxyControl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- ProxyControl.java	29 Nov 2003 15:43:18 -0000	1.34
  +++ ProxyControl.java	30 Nov 2003 23:21:06 -0000	1.35
  @@ -81,6 +81,9 @@
   import org.apache.jmeter.protocol.http.control.HeaderManager;
   import org.apache.jmeter.protocol.http.control.RecordingController;
   import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
  +import org.apache.jmeter.samplers.SampleEvent;
  +import org.apache.jmeter.samplers.SampleListener;
  +import org.apache.jmeter.samplers.SampleResult;
   import org.apache.jmeter.testelement.TestElement;
   import org.apache.jmeter.testelement.property.BooleanProperty;
   import org.apache.jmeter.testelement.property.CollectionProperty;
  @@ -275,11 +278,12 @@
       public void deliverSampler(
           HTTPSampler sampler,
           TestElement[] subConfigs,
  -        byte[] serverResponse)
  +        SampleResult result)
       {
           if (filterUrl(sampler))
           {
               placeConfigElement(sampler, subConfigs);
  +            notifyListeners(new SampleEvent(result,sampler.getName()));
           }
       }
   
  @@ -600,6 +604,48 @@
                   "Invalid variables included for replacement into recorded "
                       + "sample",
                   e);
  +        }
  +    }
  +    
  +    /**
  +     * This will notify sample listeners of the sampling that just occured
  +     * -- so that we have a means to record the server's responses as we go.
  +     * <p>
  +     * Only listeners which are directly within the RecordingControllers or
  +     * ThreadGroups where recording is happening will be notified.
  +     * 
  +     * @param event sampling event to be delivered
  +     */
  +    private void notifyListeners(SampleEvent event) {
  +        JMeterTreeModel treeModel = GuiPackage.getInstance().getTreeModel();
  +        List nodes = treeModel.getNodesOfType(RecordingController.class);
  +        if (nodes.size() == 0)
  +        {
  +            nodes = treeModel.getNodesOfType(ThreadGroup.class);
  +        }
  +        Iterator iter = nodes.iterator();
  +        while (iter.hasNext())
  +        {
  +            JMeterTreeNode node = (JMeterTreeNode) iter.next();
  +
  +            if (!node.isEnabled())
  +            {
  +                continue;
  +            }
  +            else
  +            {
  +                Enumeration enum = node.children();
  +                while (enum.hasMoreElements())
  +                {
  +                    JMeterTreeNode subNode =
  +                        (JMeterTreeNode) enum.nextElement();
  +                    TestElement testElement =
  +                        (TestElement) subNode.createTestElement();
  +                    if (testElement instanceof SampleListener) {
  +                        ((SampleListener)testElement).sampleOccurred(event);
  +                    }
  +                }
  +            }
           }
       }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org


Re: cvs commit: jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy Proxy.java ProxyControl.java

Posted by Jordi Salvat i Alabart <js...@atg.com>.
Hi.

I've just noticed that this change can become problematic -- due to the 
need to notify listeners of test start/stop events to get them do their 
job properly. I will change it now -- or remove it if I can't get where 
I want to.

Sorry for the little mess.
-- 
Salut,

Jordi.

En/na jsalvata@apache.org ha escrit:
> jsalvata    2003/11/30 15:21:06
> 
>   Modified:    src/protocol/http/org/apache/jmeter/protocol/http/proxy
>                         Proxy.java ProxyControl.java
>   Log:
>   Partial solution to record results during proxy recording: now
>   the proxy notifies listeners of the samples it runs.
>   
>   PR: 6730 [partial]
>   CVS: ----------------------------------------------------------------------
>   CVS: PR:
>   CVS:   If this change addresses a PR in the problem report tracking
>   CVS:   database, then enter the PR number(s) here.
>   CVS: Obtained from:
>   CVS:   If this change has been taken from another system, such as NCSA,
>   CVS:   then name the system in this line, otherwise delete it.
>   CVS: Submitted by:
>   CVS:   If this code has been contributed to Apache by someone else; i.e.,
>   CVS:   they sent us a patch or a new module, then include their name/email
>   CVS:   address here. If this is your work then delete this line.
>   CVS: Reviewed by:
>   CVS:   If we are doing pre-commit code reviews and someone else has
>   CVS:   reviewed your changes, include their name(s) here.
>   CVS:   If you have not had it reviewed then delete this line.
>   
>   Revision  Changes    Path
>   1.15      +6 -5      jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java
>   
>   Index: Proxy.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java,v
>   retrieving revision 1.14
>   retrieving revision 1.15
>   diff -u -r1.14 -r1.15
>   --- Proxy.java	18 Nov 2003 18:26:55 -0000	1.14
>   +++ Proxy.java	30 Nov 2003 23:21:06 -0000	1.15
>   @@ -64,6 +64,7 @@
>    
>    import org.apache.jmeter.protocol.http.control.HeaderManager;
>    import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
>   +import org.apache.jmeter.samplers.SampleResult;
>    import org.apache.jmeter.testelement.TestElement;
>    import org.apache.jorphan.logging.LoggingManager;
>    import org.apache.log.Logger;
>   @@ -133,7 +134,7 @@
>        public void run()
>        {
>            HttpRequestHdr request = new HttpRequestHdr();
>   -        byte[] serverResponse = new byte[0];
>   +        SampleResult result = null;
>            HeaderManager headers = null;
>    
>            HTTPSampler sampler = new HTTPSampler();
>   @@ -152,9 +153,9 @@
>                headers = request.getHeaderManager();
>                sampler.setHeaderManager(headers);
>    
>   -            serverResponse = sampler.sample().getResponseData();
>   +            result = sampler.sample();
>                writeToClient(
>   -                serverResponse,
>   +                result.getResponseData(),
>                    new BufferedOutputStream(clientSocket.getOutputStream()));
>                /*
>                 * We don't want to store any cookies in the generated test plan
>   @@ -178,7 +179,7 @@
>                                      new TestElement[] { 
>                                      	captureHttpHeaders ? headers : null 
>                                      	},
>   -                                  serverResponse);
>   +                                  result);
>                try
>                {
>                    clientSocket.close();
>   
>   
>   
>   1.35      +48 -2     jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
>   
>   Index: ProxyControl.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java,v
>   retrieving revision 1.34
>   retrieving revision 1.35
>   diff -u -r1.34 -r1.35
>   --- ProxyControl.java	29 Nov 2003 15:43:18 -0000	1.34
>   +++ ProxyControl.java	30 Nov 2003 23:21:06 -0000	1.35
>   @@ -81,6 +81,9 @@
>    import org.apache.jmeter.protocol.http.control.HeaderManager;
>    import org.apache.jmeter.protocol.http.control.RecordingController;
>    import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
>   +import org.apache.jmeter.samplers.SampleEvent;
>   +import org.apache.jmeter.samplers.SampleListener;
>   +import org.apache.jmeter.samplers.SampleResult;
>    import org.apache.jmeter.testelement.TestElement;
>    import org.apache.jmeter.testelement.property.BooleanProperty;
>    import org.apache.jmeter.testelement.property.CollectionProperty;
>   @@ -275,11 +278,12 @@
>        public void deliverSampler(
>            HTTPSampler sampler,
>            TestElement[] subConfigs,
>   -        byte[] serverResponse)
>   +        SampleResult result)
>        {
>            if (filterUrl(sampler))
>            {
>                placeConfigElement(sampler, subConfigs);
>   +            notifyListeners(new SampleEvent(result,sampler.getName()));
>            }
>        }
>    
>   @@ -600,6 +604,48 @@
>                    "Invalid variables included for replacement into recorded "
>                        + "sample",
>                    e);
>   +        }
>   +    }
>   +    
>   +    /**
>   +     * This will notify sample listeners of the sampling that just occured
>   +     * -- so that we have a means to record the server's responses as we go.
>   +     * <p>
>   +     * Only listeners which are directly within the RecordingControllers or
>   +     * ThreadGroups where recording is happening will be notified.
>   +     * 
>   +     * @param event sampling event to be delivered
>   +     */
>   +    private void notifyListeners(SampleEvent event) {
>   +        JMeterTreeModel treeModel = GuiPackage.getInstance().getTreeModel();
>   +        List nodes = treeModel.getNodesOfType(RecordingController.class);
>   +        if (nodes.size() == 0)
>   +        {
>   +            nodes = treeModel.getNodesOfType(ThreadGroup.class);
>   +        }
>   +        Iterator iter = nodes.iterator();
>   +        while (iter.hasNext())
>   +        {
>   +            JMeterTreeNode node = (JMeterTreeNode) iter.next();
>   +
>   +            if (!node.isEnabled())
>   +            {
>   +                continue;
>   +            }
>   +            else
>   +            {
>   +                Enumeration enum = node.children();
>   +                while (enum.hasMoreElements())
>   +                {
>   +                    JMeterTreeNode subNode =
>   +                        (JMeterTreeNode) enum.nextElement();
>   +                    TestElement testElement =
>   +                        (TestElement) subNode.createTestElement();
>   +                    if (testElement instanceof SampleListener) {
>   +                        ((SampleListener)testElement).sampleOccurred(event);
>   +                    }
>   +                }
>   +            }
>            }
>        }
>    
>   
>   
>   
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org