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