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 kh...@apache.org on 2001/10/26 14:55:33 UTC
cvs commit: jakarta-jmeter/src/org/apache/jmeter/protocol/http/modifier AnchorModifier.java
khammond 01/10/26 05:55:33
Modified: src/org/apache/jmeter/protocol/http/modifier
AnchorModifier.java
Log:
Fix submitted by Mike Stover.
Revision Changes Path
1.7 +286 -284 jakarta-jmeter/src/org/apache/jmeter/protocol/http/modifier/AnchorModifier.java
Index: AnchorModifier.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/org/apache/jmeter/protocol/http/modifier/AnchorModifier.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AnchorModifier.java 2001/08/31 00:46:44 1.6
+++ AnchorModifier.java 2001/10/26 12:55:33 1.7
@@ -1,284 +1,286 @@
-/*
- * ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" and
- * "Apache JMeter" must not be used to endorse or promote products
- * derived from this software without prior written permission. For
- * written permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * "Apache JMeter", nor may "Apache" appear in their name, without
- * prior written permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.jmeter.protocol.http.modifier;
-
-import org.apache.jmeter.config.ResponseBasedModifier;
-import org.apache.jmeter.gui.JMeterComponentModel;
-import org.apache.jmeter.config.ConfigElement;
-import org.apache.jmeter.samplers.Entry;
-import org.apache.jmeter.protocol.http.config.UrlConfig;
-import org.apache.jmeter.protocol.http.parser.HtmlParser;
-import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
-import org.apache.jmeter.samplers.SampleResult;
-import org.apache.jmeter.samplers.Sampler;
-import org.apache.jmeter.config.Argument;
-import org.apache.jmeter.config.Arguments;
-import org.apache.jmeter.gui.NamePanel;
-
-import java.util.*;
-import java.io.*;
-import org.w3c.dom.*;
-import org.xml.sax.SAXException;
-import java.net.*;
-
-/************************************************************
- * Title: Jakarta-JMeter Description: Copyright: Copyright (c) 2001 Company:
- * Apache
- *
- *@author Michael Stover
- *@created $Date: 2001/08/31 00:46:44 $
- *@version 1.0
- ***********************************************************/
-
-public class AnchorModifier implements JMeterComponentModel, ResponseBasedModifier,
- Serializable
-{
-
- private static Random rand = new Random();
-
- /************************************************************
- * !ToDo (Constructor description)
- ***********************************************************/
- public AnchorModifier()
- {
- }
-
- public void addJMeterComponent(JMeterComponentModel obj)
- {
- }
-
- public void uncompile()
- {
- }
-
- public Collection getAddList()
- {
- return null;
- }
-
- public void setName(String name)
- {
- }
-
- public String getName()
- {
- return getClassLabel();
- }
-
- public Class getGuiClass()
- {
- return NamePanel.class;
- }
-
- /************************************************************
- * !ToDoo (Method description)
- *
- *@return !ToDo (Return description)
- ***********************************************************/
- public String getClassLabel()
- {
- return "HTML Link parser";
- }
-
- /************************************************************
- * !ToDo (Method description)
- *
- *@return !ToDo (Return description)
- ***********************************************************/
- public Object clone()
- {
- return this;
- }
-
- /************************************************************
- * Modifies an Entry object based on HTML response text.
- *
- *@param entry !ToDo (Parameter description)
- *@param result !ToDo (Parameter description)
- *@return !ToDo (Return description)
- ***********************************************************/
- public boolean modifyEntry(Entry entry, SampleResult result)
- {
- List potentialLinks = new ArrayList();
- String responseText = (String)result.getValue(SampleResult.TEXT_RESPONSE);
- UrlConfig config = (UrlConfig)entry.getConfigElement(UrlConfig.class);
- Document html;
- try
- {
- html = (Document)HtmlParser.getDOM(responseText);
- }
- catch (SAXException e)
- {
- return false;
- }
- addAnchorUrls(html, result, config, potentialLinks);
- addFormUrls(html,result,config,potentialLinks);
- if (potentialLinks.size() > 0)
- {
- UrlConfig url = (UrlConfig)potentialLinks.get(rand.nextInt(potentialLinks.size()));
- config.setDomain(url.getDomain());
- config.setPath(url.getPath());
- if(url.getMethod().equals(UrlConfig.POST))
- {
- Iterator iter = config.getArguments().iterator();
- while(iter.hasNext())
- {
- Argument arg = (Argument)iter.next();
- modifyArgument(arg,url.getArguments());
- }
- }
- else
- {
- config.removeArguments();
- config.parseArguments(url.getQueryString());
- }
- config.setProtocol(url.getProtocol());
- return true;
- }
- return false;
- }
-
- private void modifyArgument(Argument arg,Arguments args)
- {
- List possibleReplacements = new ArrayList();
- Iterator iter = args.iterator();
- Argument replacementArg;
- while (iter.hasNext())
- {
- replacementArg = (Argument)iter.next();
- try
- {
- if(HtmlParser.isArgumentMatched(replacementArg,arg))
- {
- possibleReplacements.add(replacementArg);
- }
- }
- catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- if(possibleReplacements.size() > 0)
- {
- replacementArg = (Argument)possibleReplacements.get(rand.nextInt(possibleReplacements.size()));
- arg.setName(replacementArg.getName());
- arg.setValue(replacementArg.getValue());
- }
- }
-
- /************************************************************
- * !ToDo
- *
- *@param config !ToDo
- ***********************************************************/
- public void addConfigElement(ConfigElement config)
- {
- }
-
- private void addFormUrls(Document html,SampleResult result,UrlConfig config,
- List potentialLinks)
- {
- NodeList nodeList = html.getElementsByTagName("form");
- for(int x = 0;x < nodeList.getLength();x++)
- {
- Node tempNode = nodeList.item(x);
- Node form = tempNode.cloneNode(true);
- try
- {
- UrlConfig newUrl = HtmlParser.createURLFromForm(form,
- (URL)result.getValue(HTTPSampler.URL));
- newUrl.setMethod(UrlConfig.POST);
- if(HtmlParser.isAnchorMatched(newUrl,config))
- {
- potentialLinks.add(newUrl);
- }
- }
- catch (MalformedURLException e)
- {
- }
- catch (org.apache.oro.text.regex.MalformedPatternException e)
- {
- System.out.println("Bad pattern");
- }
- }
- }
-
- private void addAnchorUrls(Document html, SampleResult result, UrlConfig config, List potentialLinks)
- {
- NodeList nodeList = html.getElementsByTagName("a");
- for (int i = 0; i < nodeList.getLength(); i++)
- {
- Node tempNode = nodeList.item(i);
- NamedNodeMap nnm = tempNode.getAttributes();
- Node namedItem = nnm.getNamedItem("href");
- String hrefStr = namedItem.getNodeValue();
- try
- {
- UrlConfig newUrl = HtmlParser.createUrlFromAnchor(hrefStr, (URL)result.getValue(HTTPSampler.URL));
- newUrl.setMethod(UrlConfig.GET);
- if (HtmlParser.isAnchorMatched(newUrl, config))
- {
- potentialLinks.add(newUrl);
- }
- }
- catch (MalformedURLException e)
- {
- }
- catch (org.apache.oro.text.regex.MalformedPatternException e)
- {
- System.out.println("Bad pattern");
- }
- }
- }
-}
+/*
+ * ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache JMeter" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache JMeter", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+package org.apache.jmeter.protocol.http.modifier;
+
+import org.apache.jmeter.config.ResponseBasedModifier;
+import org.apache.jmeter.gui.JMeterComponentModel;
+import org.apache.jmeter.config.ConfigElement;
+import org.apache.jmeter.samplers.Entry;
+import org.apache.jmeter.protocol.http.config.UrlConfig;
+import org.apache.jmeter.protocol.http.parser.HtmlParser;
+import org.apache.jmeter.protocol.http.sampler.HTTPSampler;
+import org.apache.jmeter.samplers.SampleResult;
+import org.apache.jmeter.samplers.Sampler;
+import org.apache.jmeter.config.Argument;
+import org.apache.jmeter.config.Arguments;
+import org.apache.jmeter.gui.NamePanel;
+
+import java.util.*;
+import java.io.*;
+import org.w3c.dom.*;
+import org.xml.sax.SAXException;
+import java.net.*;
+import org.apache.jmeter.config.AbstractConfigElement;
+
+/************************************************************
+ * Title: Jakarta-JMeter Description: Copyright: Copyright (c) 2001 Company:
+ * Apache
+ *
+ *@author Michael Stover
+ *@created $Date: 2001/10/26 12:55:33 $
+ *@version 1.0
+ ***********************************************************/
+
+public class AnchorModifier extends AbstractConfigElement implements JMeterComponentModel, ResponseBasedModifier,
+ Serializable
+{
+
+ private static Random rand = new Random();
+
+ /************************************************************
+ * !ToDo (Constructor description)
+ ***********************************************************/
+ public AnchorModifier()
+ {
+ }
+
+ public void addJMeterComponent(JMeterComponentModel obj)
+ {
+ }
+
+ public void uncompile()
+ {
+ }
+
+ public Collection getAddList()
+ {
+ return null;
+ }
+
+ public void setName(String name)
+ {
+ }
+
+ public String getName()
+ {
+ return getClassLabel();
+ }
+
+ public Class getGuiClass()
+ {
+ return NamePanel.class;
+ }
+
+ /************************************************************
+ * !ToDoo (Method description)
+ *
+ *@return !ToDo (Return description)
+ ***********************************************************/
+ public String getClassLabel()
+ {
+ return "HTML Link parser";
+ }
+
+ /************************************************************
+ * !ToDo (Method description)
+ *
+ *@return !ToDo (Return description)
+ ***********************************************************/
+ public Object clone()
+ {
+ return this;
+ }
+
+ /************************************************************
+ * Modifies an Entry object based on HTML response text.
+ *
+ *@param entry !ToDo (Parameter description)
+ *@param result !ToDo (Parameter description)
+ *@return !ToDo (Return description)
+ ***********************************************************/
+ public boolean modifyEntry(Entry entry, SampleResult result)
+ {
+ List potentialLinks = new ArrayList();
+ String responseText = (String)result.getValue(SampleResult.TEXT_RESPONSE);
+ UrlConfig config = (UrlConfig)entry.getConfigElement(UrlConfig.class);
+ Document html;
+ try
+ {
+ html = (Document)HtmlParser.getDOM(responseText);
+ }
+ catch (SAXException e)
+ {
+ return false;
+ }
+ addAnchorUrls(html, result, config, potentialLinks);
+ addFormUrls(html,result,config,potentialLinks);
+ if (potentialLinks.size() > 0)
+ {
+ UrlConfig url = (UrlConfig)potentialLinks.get(rand.nextInt(potentialLinks.size()));
+ config.setDomain(url.getDomain());
+ config.setPath(url.getPath());
+ if(url.getMethod().equals(UrlConfig.POST))
+ {
+ Iterator iter = config.getArguments().iterator();
+ while(iter.hasNext())
+ {
+ Argument arg = (Argument)iter.next();
+ modifyArgument(arg,url.getArguments());
+ }
+ }
+ else
+ {
+ config.removeArguments();
+ config.putProperty(config.ARGUMENTS,url.getProperty(url.ARGUMENTS));
+ //config.parseArguments(url.getQueryString());
+ }
+ config.setProtocol(url.getProtocol());
+ return true;
+ }
+ return false;
+ }
+
+ private void modifyArgument(Argument arg,Arguments args)
+ {
+ List possibleReplacements = new ArrayList();
+ Iterator iter = args.iterator();
+ Argument replacementArg;
+ while (iter.hasNext())
+ {
+ replacementArg = (Argument)iter.next();
+ try
+ {
+ if(HtmlParser.isArgumentMatched(replacementArg,arg))
+ {
+ possibleReplacements.add(replacementArg);
+ }
+ }
+ catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ if(possibleReplacements.size() > 0)
+ {
+ replacementArg = (Argument)possibleReplacements.get(rand.nextInt(possibleReplacements.size()));
+ arg.setName(replacementArg.getName());
+ arg.setValue(replacementArg.getValue());
+ }
+ }
+
+ /************************************************************
+ * !ToDo
+ *
+ *@param config !ToDo
+ ***********************************************************/
+ public void addConfigElement(ConfigElement config)
+ {
+ }
+
+ private void addFormUrls(Document html,SampleResult result,UrlConfig config,
+ List potentialLinks)
+ {
+ NodeList nodeList = html.getElementsByTagName("form");
+ for(int x = 0;x < nodeList.getLength();x++)
+ {
+ Node tempNode = nodeList.item(x);
+ Node form = tempNode.cloneNode(true);
+ try
+ {
+ UrlConfig newUrl = HtmlParser.createURLFromForm(form,
+ (URL)result.getValue(HTTPSampler.URL));
+ newUrl.setMethod(UrlConfig.POST);
+ if(HtmlParser.isAnchorMatched(newUrl,config))
+ {
+ potentialLinks.add(newUrl);
+ }
+ }
+ catch (MalformedURLException e)
+ {
+ }
+ catch (org.apache.oro.text.regex.MalformedPatternException e)
+ {
+ System.out.println("Bad pattern");
+ }
+ }
+ }
+
+ private void addAnchorUrls(Document html, SampleResult result, UrlConfig config, List potentialLinks)
+ {
+ NodeList nodeList = html.getElementsByTagName("a");
+ for (int i = 0; i < nodeList.getLength(); i++)
+ {
+ Node tempNode = nodeList.item(i);
+ NamedNodeMap nnm = tempNode.getAttributes();
+ Node namedItem = nnm.getNamedItem("href");
+ String hrefStr = namedItem.getNodeValue();
+ try
+ {
+ UrlConfig newUrl = HtmlParser.createUrlFromAnchor(hrefStr, (URL)result.getValue(HTTPSampler.URL));
+ newUrl.setMethod(UrlConfig.GET);
+ if (HtmlParser.isAnchorMatched(newUrl, config))
+ {
+ potentialLinks.add(newUrl);
+ }
+ }
+ catch (MalformedURLException e)
+ {
+ }
+ catch (org.apache.oro.text.regex.MalformedPatternException e)
+ {
+ System.out.println("Bad pattern");
+ }
+ }
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org