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 [EMAIL PROTECTED]
  - *
  - * 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 [EMAIL PROTECTED]
  + *
  + * 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to