1 // $Header: /home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/junit/protocol/http/parser/HtmlParserTester.java,v 1.14 2005/07/12 20:51:01 mstover1 Exp $ 2 /* 3 * Copyright 2001-2004 The Apache Software Foundation. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19 package org.apache.jmeter.junit.protocol.http.parser; 20 21 import java.net.MalformedURLException; 22 import java.net.URL; 23 24 import org.apache.jmeter.junit.JMeterTestCase; 25 import org.apache.jmeter.protocol.http.modifier.AnchorModifier; 26 import org.apache.jmeter.protocol.http.sampler.HTTPSampleResult; 27 import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase; 28 import org.apache.jmeter.protocol.http.sampler.HTTPNullSampler; 29 import org.apache.jmeter.threads.JMeterContext; 30 import org.apache.jmeter.threads.JMeterContextService; 31 32 /** 33 * Created June 14, 2001 34 * 35 * @version $Revision: 1.14 $ Last updated: $Date: 2005/07/12 20:51:01 $ 36 */ 37 public class HtmlParserTester extends JMeterTestCase { 38 AnchorModifier parser = new AnchorModifier(); 39 40 /** 41 * Constructor for the HtmlParserTester object. 42 */ 43 public HtmlParserTester(String name) { 44 super(name); 45 } 46 47 private JMeterContext jmctx = null; 48 49 public void setUp() { 50 jmctx = JMeterContextService.getContext(); 51 parser.setThreadContext(jmctx); 52 } 53 54 /** 55 * A unit test for JUnit. 56 */ 57 public void testSimpleParse() throws Exception { 58 HTTPSamplerBase config = makeUrlConfig(".*/index\\.html"); 59 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/previous.html"); 60 String responseText = "<html><head><title>Test page</title></head><body>" 61 + "<a href=\"index.html\">Goto index page</a></body></html>"; 62 HTTPSampleResult result = new HTTPSampleResult(); 63 jmctx.setCurrentSampler(context); 64 jmctx.setCurrentSampler(config); 65 result.setResponseData(responseText.getBytes()); 66 result.setSampleLabel(context.toString()); 67 result.setSamplerData(context.toString()); 68 result.setURL(context.getUrl()); 69 jmctx.setPreviousResult(result); 70 parser.process(); 71 assertEquals("http://www.apache.org/subdir/index.html", config.getUrl().toString()); 72 } 73 74 public void testSimpleParse2() throws Exception { 75 HTTPSamplerBase config = makeUrlConfig("/index\\.html"); 76 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/previous.html"); 77 String responseText = "<html><head><title>Test page</title></head><body>" 78 + "<a href=\"/index.html\">Goto index page</a>" + "hfdfjiudfjdfjkjfkdjf" 79 + "<b>bold text</b><a href=lowerdir/index.html>lower</a>" + "</body></html>"; 80 HTTPSampleResult result = new HTTPSampleResult(); 81 result.setResponseData(responseText.getBytes()); 82 result.setSampleLabel(context.toString()); 83 result.setURL(context.getUrl()); 84 jmctx.setCurrentSampler(context); 85 jmctx.setCurrentSampler(config); 86 jmctx.setPreviousResult(result); 87 parser.process(); 88 String newUrl = config.getUrl().toString(); 89 assertTrue("http://www.apache.org/index.html".equals(newUrl) 90 || "http://www.apache.org/subdir/lowerdir/index.html".equals(newUrl)); 91 } 92 93 public void testSimpleParse3() throws Exception { 94 HTTPSamplerBase config = makeUrlConfig(".*index.*"); 95 config.getArguments().addArgument("param1", "value1"); 96 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/previous.html"); 97 String responseText = "<html><head><title>Test page</title></head><body>" 98 + "<a href=\"/home/index.html?param1=value1\">" + "Goto index page</a></body></html>"; 99 HTTPSampleResult result = new HTTPSampleResult(); 100 result.setResponseData(responseText.getBytes()); 101 result.setSampleLabel(context.toString()); 102 result.setURL(context.getUrl()); 103 jmctx.setCurrentSampler(context); 104 jmctx.setCurrentSampler(config); 105 jmctx.setPreviousResult(result); 106 parser.process(); 107 String newUrl = config.getUrl().toString(); 108 assertEquals("http://www.apache.org/home/index.html?param1=value1", newUrl); 109 } 110 111 public void testSimpleParse4() throws Exception { 112 HTTPSamplerBase config = makeUrlConfig("/subdir/index\\..*"); 113 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/previous.html"); 114 String responseText = "<html><head><title>Test page</title></head><body>" 115 + "<A HREF=\"index.html\">Goto index page</A></body></html>"; 116 HTTPSampleResult result = new HTTPSampleResult(); 117 result.setResponseData(responseText.getBytes()); 118 result.setSampleLabel(context.toString()); 119 result.setURL(context.getUrl()); 120 jmctx.setCurrentSampler(context); 121 jmctx.setCurrentSampler(config); 122 jmctx.setPreviousResult(result); 123 parser.process(); 124 String newUrl = config.getUrl().toString(); 125 assertEquals("http://www.apache.org/subdir/index.html", newUrl); 126 } 127 128 public void testSimpleParse5() throws Exception { 129 HTTPSamplerBase config = makeUrlConfig("/subdir/index\\.h.*"); 130 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/one/previous.html"); 131 String responseText = "<html><head><title>Test page</title></head><body>" 132 + "<a href=\"../index.html\">Goto index page</a></body></html>"; 133 HTTPSampleResult result = new HTTPSampleResult(); 134 result.setResponseData(responseText.getBytes()); 135 result.setSampleLabel(context.toString()); 136 result.setURL(context.getUrl()); 137 jmctx.setCurrentSampler(context); 138 jmctx.setCurrentSampler(config); 139 jmctx.setPreviousResult(result); 140 parser.process(); 141 String newUrl = config.getUrl().toString(); 142 assertEquals("http://www.apache.org/subdir/index.html", newUrl); 143 } 144 145 public void testFailSimpleParse1() throws Exception { 146 HTTPSamplerBase config = makeUrlConfig(".*index.*?param2=.+1"); 147 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/previous.html"); 148 String responseText = "<html><head><title>Test page</title></head><body>" 149 + "<a href=\"/home/index.html?param1=value1\">" + "Goto index page</a></body></html>"; 150 HTTPSampleResult result = new HTTPSampleResult(); 151 String newUrl = config.getUrl().toString(); 152 result.setResponseData(responseText.getBytes()); 153 result.setSampleLabel(context.toString()); 154 result.setURL(context.getUrl()); 155 jmctx.setCurrentSampler(context); 156 jmctx.setCurrentSampler(config); 157 jmctx.setPreviousResult(result); 158 parser.process(); 159 assertEquals(newUrl, config.getUrl().toString()); 160 } 161 162 public void testFailSimpleParse3() throws Exception { 163 HTTPSamplerBase config = makeUrlConfig("/home/index.html"); 164 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/previous.html"); 165 String responseText = "<html><head><title>Test page</title></head><body>" 166 + "<a href=\"/home/index.html?param1=value1\">" + "Goto index page</a></body></html>"; 167 HTTPSampleResult result = new HTTPSampleResult(); 168 String newUrl = config.getUrl().toString(); 169 result.setResponseData(responseText.getBytes()); 170 result.setSampleLabel(context.toString()); 171 result.setURL(context.getUrl()); 172 jmctx.setCurrentSampler(context); 173 jmctx.setCurrentSampler(config); 174 jmctx.setPreviousResult(result); 175 parser.process(); 176 assertEquals(newUrl + "?param1=value1", config.getUrl().toString()); 177 } 178 179 public void testFailSimpleParse2() throws Exception { 180 HTTPSamplerBase config = makeUrlConfig(".*login\\.html"); 181 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/previous.html"); 182 String responseText = "<html><head><title>Test page</title></head><body>" 183 + "<a href=\"/home/index.html?param1=value1\">" + "Goto index page</a></body></html>"; 184 HTTPSampleResult result = new HTTPSampleResult(); 185 result.setResponseData(responseText.getBytes()); 186 result.setSampleLabel(context.toString()); 187 result.setURL(context.getUrl()); 188 jmctx.setCurrentSampler(context); 189 jmctx.setPreviousResult(result); 190 parser.process(); 191 String newUrl = config.getUrl().toString(); 192 assertTrue(!"http://www.apache.org/home/index.html?param1=value1".equals(newUrl)); 193 assertEquals(config.getUrl().toString(), newUrl); 194 } 195 196 /** 197 * A unit test for JUnit. 198 */ 199 public void testSimpleFormParse() throws Exception { 200 HTTPSamplerBase config = makeUrlConfig(".*index.html"); 201 config.addArgument("test", "g.*"); 202 config.setMethod(HTTPSamplerBase.POST); 203 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/previous.html"); 204 String responseText = "<html><head><title>Test page</title></head><body>" 205 + "<form action=\"index.html\" method=\"POST\">" + "<input type=\"checkbox\" name=\"test\"" 206 + " value=\"goto\">Goto index page</form></body></html>"; 207 HTTPSampleResult result = new HTTPSampleResult(); 208 result.setResponseData(responseText.getBytes()); 209 result.setSampleLabel(context.toString()); 210 result.setURL(context.getUrl()); 211 jmctx.setCurrentSampler(context); 212 jmctx.setCurrentSampler(config); 213 jmctx.setPreviousResult(result); 214 parser.process(); 215 assertEquals("http://www.apache.org/subdir/index.html", config.getUrl().toString()); 216 assertEquals("test=goto", config.getQueryString()); 217 } 218 219 /** 220 * A unit test for JUnit. 221 */ 222 public void testBadCharParse() throws Exception { 223 HTTPSamplerBase config = makeUrlConfig(".*index.html"); 224 config.addArgument("te$st", "g.*"); 225 config.setMethod(HTTPSamplerBase.POST); 226 HTTPSamplerBase context = makeContext("http://www.apache.org/subdir/previous.html"); 227 String responseText = "<html><head><title>Test page</title></head><body>" 228 + "<form action=\"index.html\" method=\"POST\">" + "<input type=\"checkbox\" name=\"te$st\"" 229 + " value=\"goto\">Goto index page</form></body></html>"; 230 HTTPSampleResult result = new HTTPSampleResult(); 231 result.setResponseData(responseText.getBytes()); 232 result.setSampleLabel(context.toString()); 233 result.setURL(context.getUrl()); 234 jmctx.setCurrentSampler(context); 235 jmctx.setCurrentSampler(config); 236 jmctx.setPreviousResult(result); 237 parser.process(); 238 assertEquals("http://www.apache.org/subdir/index.html", config.getUrl().toString()); 239 assertEquals("te%24st=goto", config.getQueryString()); 240 } 241 242 private HTTPSamplerBase makeContext(String url) throws MalformedURLException { 243 URL u = new URL(url); 244 HTTPSamplerBase context = new HTTPNullSampler(); 245 context.setDomain(u.getHost()); 246 context.setPath(u.getPath()); 247 context.setPort(u.getPort()); 248 context.setProtocol(u.getProtocol()); 249 context.parseArguments(u.getQuery()); 250 return context; 251 } 252 253 private HTTPSamplerBase makeUrlConfig(String path) { 254 HTTPSamplerBase config = new HTTPNullSampler(); 255 config.setDomain("www.apache.org"); 256 config.setMethod(HTTPSamplerBase.GET); 257 config.setPath(path); 258 config.setPort(80); 259 config.setProtocol("http"); 260 return config; 261 } 262 }