Author: sebb
Date: Sat Mar 10 12:46:38 2007
New Revision: 516782

URL: http://svn.apache.org/viewvc?view=rev&rev=516782
Log:
Bug 40933, 40945 - optional matching of embedded resource URLs

Modified:
    
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
    
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java
    
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
    
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
    jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
    jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml

Modified: 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
 (original)
+++ 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/resources/messages.properties
 Sat Mar 10 12:46:38 2007
@@ -760,6 +760,7 @@
 web_server=Web Server
 web_server_domain=Server Name or IP\:
 web_server_port=Port Number\:
+web_testing_embedded_url_pattern=Embedded URLs must match\:
 web_testing_retrieve_images=Retrieve All Embedded Resources from HTML Files
 web_testing_title=HTTP Request
 webservice_proxy_host=Proxy Host

Modified: 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-2/src/core/org/apache/jmeter/util/JMeterUtils.java
 Sat Mar 10 12:46:38 2007
@@ -50,6 +50,7 @@
 import org.apache.jorphan.util.JOrphanUtils;
 import org.apache.log.Logger;
 import org.apache.oro.text.PatternCacheLRU;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.oro.text.regex.Perl5Compiler;
 import org.apache.oro.text.regex.Perl5Matcher;
 import org.xml.sax.XMLReader;
@@ -174,6 +175,35 @@
                return patternCache;
        }
 
+       /**
+        * Get a compiled expression from the pattern cache (READ_ONLY).
+        * 
+        * @param expression
+        * @return compiled pattern
+        * 
+        * @throws MalformedPatternException (Runtime)
+        * This should be caught for expressions that may vary (e.g. user input)
+        * 
+        */
+       public static Pattern getPattern(String expression){
+               return getPattern(expression, Perl5Compiler.READ_ONLY_MASK);
+       }
+       
+       /**
+        * Get a compiled expression from the pattern cache.
+        * 
+        * @param expression RE
+        * @param options e.g. READ_ONLY_MASK
+        * @return compiled pattern
+        * 
+        * @throws MalformedPatternException (Runtime)
+        * This should be caught for expressions that may vary (e.g. user input)
+        * 
+        */
+       public static Pattern getPattern(String expression, int options){
+               return patternCache.getPattern(expression, options);
+       }
+       
        public void initializeProperties(String file) {
                System.out.println("Initializing Properties: " + file);
                getProperties(file);

Modified: 
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/HttpTestSampleGui.java
 Sat Mar 10 12:46:38 2007
@@ -23,9 +23,12 @@
 
 import javax.swing.BorderFactory;
 import javax.swing.JCheckBox;
+import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JTextField;
 
 import org.apache.jmeter.gui.util.HorizontalPanel;
+import org.apache.jmeter.gui.util.VerticalPanel;
 import org.apache.jmeter.protocol.http.config.gui.MultipartUrlConfigGui;
 import org.apache.jmeter.protocol.http.config.gui.UrlConfigGui;
 import org.apache.jmeter.protocol.http.sampler.HTTPSamplerFactory;
@@ -33,6 +36,7 @@
 import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
 import org.apache.jmeter.testelement.TestElement;
 import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jorphan.gui.JLabeledTextField;
 
 //For unit tests, @see TestHttpTestSampleGui
 
@@ -47,6 +51,8 @@
 
        private JCheckBox isMon;
 
+       private JLabeledTextField embeddedRE; // regular expression used to 
match against embedded resource URLs
+       
        public HttpTestSampleGui() {
                init();
        }
@@ -54,8 +60,10 @@
        public void configure(TestElement element) {
                super.configure(element);
                urlConfigGui.configure(element);
-               getImages.setSelected(((HTTPSamplerBase) 
element).isImageParser());
-               isMon.setSelected(((HTTPSamplerBase) element).isMonitor());
+               final HTTPSamplerBase samplerBase = (HTTPSamplerBase) element;
+               getImages.setSelected(samplerBase.isImageParser());
+               isMon.setSelected(samplerBase.isMonitor());
+               embeddedRE.setText(samplerBase.getEmbeddedUrlRE());
        }
 
        public TestElement createTestElement() {
@@ -73,12 +81,15 @@
                TestElement el = urlConfigGui.createTestElement();
                sampler.clear();
                sampler.addTestElement(el);
+               final HTTPSamplerBase samplerBase = (HTTPSamplerBase) sampler;
                if (getImages.isSelected()) {
-                       ((HTTPSamplerBase) sampler).setImageParser(true);
+                       samplerBase.setImageParser(true);
                } else {
-                       sampler.removeProperty(HTTPSamplerBase.IMAGE_PARSER);// 
TODO - why?
+                       // The default is false, so we can remove the property 
to simplify JMX files
+                       sampler.removeProperty(HTTPSamplerBase.IMAGE_PARSER);
                }
-        ((HTTPSamplerBase) sampler).setMonitor(isMon.isSelected());
+               samplerBase.setMonitor(isMon.isSelected());
+               samplerBase.setEmbeddedUrlRE(embeddedRE.getText());
                this.configureTestElement(sampler);
        }
 
@@ -102,19 +113,21 @@
 
        private JPanel createOptionalTasksPanel() {
                // OPTIONAL TASKS
-               HorizontalPanel optionalTasksPanel = new HorizontalPanel();
+           JPanel optionalTasksPanel = new VerticalPanel();
                
optionalTasksPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
 JMeterUtils
                                .getResString("optional_tasks"))); // 
$NON-NLS-1$
 
+               JPanel checkBoxPanel = new HorizontalPanel();
                // RETRIEVE IMAGES
-               JPanel retrieveImagesPanel = new JPanel();
                getImages = new 
JCheckBox(JMeterUtils.getResString("web_testing_retrieve_images")); // 
$NON-NLS-1$
-               retrieveImagesPanel.add(getImages);
-               JPanel isMonitorPanel = new JPanel();
+               // Is monitor
                isMon = new 
JCheckBox(JMeterUtils.getResString("monitor_is_title")); // $NON-NLS-1$
-               isMonitorPanel.add(isMon);
-               optionalTasksPanel.add(retrieveImagesPanel);
-               optionalTasksPanel.add(isMonitorPanel);
+               checkBoxPanel.add(getImages);
+               checkBoxPanel.add(isMon);
+               optionalTasksPanel.add(checkBoxPanel);
+               // Embedded URL match regex
+               embeddedRE = new 
JLabeledTextField(JMeterUtils.getResString("web_testing_embedded_url_pattern"),30);
 // $NON-NLS-1$
+               optionalTasksPanel.add(embeddedRE);
                return optionalTasksPanel;
        }
 

Modified: 
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
--- 
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
 (original)
+++ 
jakarta/jmeter/branches/rel-2-2/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java
 Sat Mar 10 12:46:38 2007
@@ -52,6 +52,10 @@
 import org.apache.jorphan.logging.LoggingManager;
 import org.apache.jorphan.util.JOrphanUtils;
 import org.apache.log.Logger;
+import org.apache.oro.text.MalformedCachePatternException;
+import org.apache.oro.text.regex.Pattern;
+import org.apache.oro.text.regex.Perl5Compiler;
+import org.apache.oro.text.regex.Perl5Matcher;
 
 /**
  * Common constants and methods for HTTP samplers
@@ -147,7 +151,12 @@
        public final static String MULTIPART_FORM = "multipart_form"; // 
$NON-NLS-1$
 
        // public final static String ENCODED_PATH= "HTTPSampler.encoded_path";
+       
+       // IMAGE_PARSER now really means EMBEDDED_PARSER
        public final static String IMAGE_PARSER = "HTTPSampler.image_parser"; 
// $NON-NLS-1$
+       
+       // Embedded URLs must match this RE (if provided)
+       public final static String EMBEDDED_URL_RE = 
"HTTPSampler.embedded_url_re"; // $NON-NLS-1$
 
        public final static String MONITOR = "HTTPSampler.monitor"; // 
$NON-NLS-1$
 
@@ -531,6 +540,19 @@
        }
 
        /**
+        * Get the regular expression URLs must match.
+        * 
+        * @return regular expression (or empty) string
+        */
+       public String getEmbeddedUrlRE() {
+               return getPropertyAsString(EMBEDDED_URL_RE,"");
+       }
+
+       public void setEmbeddedUrlRE(String regex) {
+               setProperty(new StringProperty(EMBEDDED_URL_RE, regex));
+       }
+
+       /**
         * Obtain a result that will help inform the user that an error has 
occured
         * during sampling, and how long it took to detect the error.
         * 
@@ -776,6 +798,18 @@
                                res = container;
                        }
 
+                       // Get the URL matcher
+                       String re=getEmbeddedUrlRE();
+                       Perl5Matcher localMatcher = null;
+                       Pattern pattern = null;
+                       if (re.length()>0){
+                               try {
+                                   pattern = JMeterUtils.getPattern(re);
+                                       localMatcher = 
JMeterUtils.getMatcher();// don't fetch unless pattern compiles
+                               } catch (MalformedCachePatternException e) {
+                                       log.warn("Ignoring embedded URL match 
string: "+e.getMessage());
+                               }
+                       }
                        while (urls.hasNext()) {
                                Object binURL = urls.next();
                                try {
@@ -790,6 +824,9 @@
                             res.setSuccessful(false);
                             continue;
                         }
+                    }
+                    if (pattern != null && !localMatcher.matches(urlStrEnc, 
pattern)) {
+                       continue; // we have a pattern and the URL does not 
match, so skip it
                     }
                     HTTPSampleResult binRes = sample(url, GET, false, 
frameDepth + 1);
                                        res.addSubResult(binRes);

Modified: jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml (original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/changes.xml Sat Mar 10 12:46:38 2007
@@ -108,6 +108,7 @@
 <li>Bug 40381 - LDAP: more descriptive strings</li>
 <li>Bug 40369 (partial) Equals Response Assertion</li>
 <li>Bug 41705 - add content-encoding option to HTTP samplers for POST 
requests</li>
+<li>Bug 40933, 40945 - optional matching of embedded resource URLs</li>
 </ul>
 
 <h4>Non-functional improvements:</h4>
@@ -116,6 +117,7 @@
 <li>Replace com.sun.net classes with javax.net</li>
 <li>Extract external jar definitions into build.properties file</li>
 <li>Use specific jar names in build classpaths so errors are detected 
sooner</li>
+<li>Tidied up ORO calls; now only one cache</li>
 </ul>
 
 <h4>External jar updates:</h4>

Modified: 
jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml?view=diff&rev=516782&r1=516781&r2=516782
==============================================================================
--- jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml 
(original)
+++ jakarta/jmeter/branches/rel-2-2/xdocs/usermanual/component_reference.xml 
Sat Mar 10 12:46:38 2007
@@ -42,7 +42,7 @@
 <description>
        <br>Samplers perform the actual work of JMeter.</br>
 </description>
-<component name="FTP Request" index="&sect-num;.1.1" width="407" height="238" 
screenshot="gen-controller/ftp-request.gif">
+<component name="FTP Request" index="&sect-num;.1.1" width="407" height="238" 
screenshot="ftptest/ftp-request.gif">
 <description>This controller lets you send an FTP "retrieve file" request to 
an FTP server.
 If you are going to send multiple requests to the same FTP server, consider
 using a <complink name="FTP Request Defaults"/> Configuration
@@ -64,7 +64,7 @@
 
 </component>
 
-<component name="HTTP Request" index="&sect-num;.1.2"  width="608" 
height="574" screenshot="gen-controller/http-request.png">
+<component name="HTTP Request" index="&sect-num;.1.2"  width="558" 
height="600" screenshot="webtest/http-request.png">
 
 <description>
         <p>This sampler lets you send an HTTP/HTTPS request to a web server.  
It
@@ -174,6 +174,11 @@
         See below for more details.
         </property>
         <property name="Use as monitor" required="Yes">For use with the 
<complink name="Monitor Results"/> listener.</property>
+        <property name="Embedded URLs must match:" required="No">
+        If present, this must be a regular expression that is used to match 
against any embedded URLs found.
+        So if you only want to download embedded resources from 
http://server.com/, use the expression:
+        http://server\.com/.*
+        </property>
 </properties>
 <p>Upto and including JMeter 2.1.1, only responses with the content-type 
"text/html" were scanned for
 embedded resources. Other content-types were assumed to be something other 
than HTML.
@@ -201,7 +206,7 @@
 
 </component>
 
-<component name="JDBC Request" index="&sect-num;.1.3"  width="492" 
height="264" screenshot="gen-controller/jdbc-request.png">
+<component name="JDBC Request" index="&sect-num;.1.3"  width="492" 
height="264" screenshot="jdbctest/jdbc-request.png">
 
 <description><p>This sampler lets you send an JDBC Request (an SQL query) to a 
database.</p>
 <p>Before using this you need to set up a



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to