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