001 // $Header: /home/cvs/jakarta-jmeter/src/functions/org/apache/jmeter/functions/PackageTest.java,v 1.10.2.6 2004/09/25 20:59:50 sebb Exp $ 002 /* 003 * Copyright 2004 The Apache Software Foundation. 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 */ 018 019 /* 020 * Package to test functions 021 * 022 * Functions are created and parameters set up in one thread. 023 * 024 * They are then tested in another thread, or two threads running in parallel 025 * 026 */ 027 package org.apache.jmeter.functions; 028 029 import java.util.Collection; 030 import java.util.LinkedList; 031 032 import junit.extensions.ActiveTestSuite; 033 import junit.framework.Test; 034 import junit.framework.TestSuite; 035 036 import org.apache.jmeter.engine.util.CompoundVariable; 037 import org.apache.jmeter.junit.JMeterTestCase; 038 import org.apache.jmeter.threads.JMeterContext; 039 import org.apache.jmeter.threads.JMeterContextService; 040 import org.apache.jmeter.threads.JMeterVariables; 041 import org.apache.jmeter.util.JMeterUtils; 042 import org.apache.jorphan.logging.LoggingManager; 043 import org.apache.jorphan.util.JMeterStopThreadException; 044 import org.apache.log.Logger; 045 046 /** 047 * @version $Revision: 1.10.2.6 $ $Date: 2004/09/25 20:59:50 $ 048 */ 049 public class PackageTest extends JMeterTestCase 050 { 051 052 transient private static final Logger log = LoggingManager.getLoggerForClass(); 053 054 static{ 055 //LoggingManager.setPriority("DEBUG","jmeter"); 056 //LoggingManager.setTarget(new java.io.PrintWriter(System.out)); 057 } 058 059 public PackageTest(String arg0) 060 { 061 super(arg0); 062 } 063 064 065 // Create the CSVRead function and set its parameters. 066 private static CSVRead setParams(String p1, String p2) throws Exception 067 { 068 CSVRead cr = new CSVRead(); 069 Collection parms = new LinkedList(); Rate070 if (p1 != null) parms.add(new CompoundVariable(p1)); Rate071 if (p2 != null) parms.add(new CompoundVariable(p2)); 072 cr.setParameters(parms); 073 return cr; 074 } 075 076 // Create the StringFromFile function and set its parameters. 077 private static StringFromFile SFFParams(String p1, String p2, String p3, String p4) 078 throws Exception 079 { 080 StringFromFile sff = new StringFromFile(); 081 Collection parms = new LinkedList(); Rate082 if (p1 != null) parms.add(new CompoundVariable(p1)); Rate083 if (p2 != null) parms.add(new CompoundVariable(p2)); Rate084 if (p3 != null) parms.add(new CompoundVariable(p3)); Rate085 if (p4 != null) parms.add(new CompoundVariable(p4)); 086 sff.setParameters(parms); 087 return sff; 088 } 089 090 // Create the SplitFile function and set its parameters. 091 private static SplitFunction SplitParams(String p1, String p2, String p3) 092 throws Exception 093 { 094 SplitFunction split = new SplitFunction(); 095 Collection parms = new LinkedList(); Rate096 parms.add(new CompoundVariable(p1)); Rate097 if (p2 != null) parms.add(new CompoundVariable(p2)); Rate098 if (p3 != null) parms.add(new CompoundVariable(p3)); 099 split.setParameters(parms); 100 return split; 101 } 102 103 // Create the BeanShell function and set its parameters. 104 private static BeanShell BSHFParams(String p1, String p2, String p3) 105 throws Exception 106 { 107 BeanShell bsh = new BeanShell(); 108 bsh.setParameters(MakeParams(p1,p2,p3)); 109 return bsh; 110 } 111 private static Collection MakeParams(String p1, String p2, String p3) 112 { 113 Collection parms = new LinkedList(); Rate114 if (p1 != null) parms.add(new CompoundVariable(p1)); Rate115 if (p2 != null) parms.add(new CompoundVariable(p2)); Rate116 if (p3 != null) parms.add(new CompoundVariable(p3)); 117 return parms; 118 } 119 120 public static Test suite() throws Exception 121 { 122 TestSuite allsuites = new TestSuite(); 123 124 TestSuite bsh = new TestSuite("BeanShell"); 125 bsh.addTest( new PackageTest("BSH1")); 126 allsuites.addTest(bsh); 127 128 TestSuite suite = new TestSuite("SingleThreaded"); 129 suite.addTest(new PackageTest("CSVParams")); 130 suite.addTest(new PackageTest("CSVNoFile")); 131 suite.addTest(new PackageTest("CSVSetup")); 132 suite.addTest(new PackageTest("CSVRun")); 133 134 suite.addTest(new PackageTest("CSValias")); 135 suite.addTest(new PackageTest("CSVBlankLine")); 136 allsuites.addTest(suite); 137 138 //Reset files 139 suite.addTest(new PackageTest("CSVSetup")); 140 TestSuite par = new ActiveTestSuite("Parallel"); 141 par.addTest(new PackageTest("CSVThread1")); 142 par.addTest(new PackageTest("CSVThread2")); 143 allsuites.addTest(par); 144 145 TestSuite sff = new TestSuite("StringFromFile"); 146 sff.addTest(new PackageTest("SFFTest1")); 147 sff.addTest(new PackageTest("SFFTest2")); 148 sff.addTest(new PackageTest("SFFTest3")); 149 sff.addTest(new PackageTest("SFFTest4")); 150 sff.addTest(new PackageTest("SFFTest5")); 151 allsuites.addTest(sff); 152 153 TestSuite split = new TestSuite("SplitFunction"); 154 split.addTest(new PackageTest("SplitTest1")); 155 allsuites.addTest(split); 156 157 return allsuites; 158 } 159 160 private JMeterContext jmctx = null; 161 private JMeterVariables vars = null; 162 public void setUp() 163 { 164 jmctx = JMeterContextService.getContext(); 165 jmctx.setVariables(new JMeterVariables()); 166 vars = jmctx.getVariables(); 167 } 168 169 public void BSH1() throws Exception 170 { 171 String fn = "testfiles/BeanShellTest.bsh"; 172 BeanShell bsh; 173 try 174 { 175 bsh = BSHFParams(null,null,null); 176 fail("Expected InvalidVariableException"); 177 } catch (InvalidVariableException e) {} 178 179 try 180 { 181 bsh = BSHFParams("","",""); 182 fail("Expected InvalidVariableException"); 183 } catch (InvalidVariableException e) {} 184 185 bsh = BSHFParams("","",null); 186 assertEquals("",bsh.execute()); 187 188 bsh = BSHFParams("1",null,null); 189 assertEquals("1",bsh.execute()); 190 191 bsh = BSHFParams("1+1","VAR",null); 192 assertEquals("2",bsh.execute()); 193 assertEquals("2",vars.get("VAR")); 194 195 // Check some initial variables 196 bsh = BSHFParams("return threadName",null,null); 197 assertEquals(Thread.currentThread().getName(),bsh.execute()); 198 bsh = BSHFParams("return log.getClass().getName()",null,null); 199 assertEquals(log.getClass().getName(),bsh.execute()); 200 201 // Check source works 202 bsh = BSHFParams("source (\"testfiles/BeanShellTest.bsh\")",null,null); 203 assertEquals("9876",bsh.execute()); 204 205 // Check persistence 206 bsh = BSHFParams("${SCR1}",null,null); 207 208 vars.put("SCR1","var1=11"); 209 assertEquals("11",bsh.execute()); 210 211 vars.put("SCR1","var2=22"); 212 assertEquals("22",bsh.execute()); 213 214 vars.put("SCR1","x=var1"); 215 assertEquals("11",bsh.execute()); 216 217 vars.put("SCR1","++x"); 218 assertEquals("12",bsh.execute()); 219 220 vars.put("VAR1","test"); 221 vars.put("SCR1","vars.get(\"VAR1\")"); 222 assertEquals("test",bsh.execute()); 223 224 225 // Check init file functioning 226 JMeterUtils.getJMeterProperties() 227 .setProperty(BeanShell.INIT_FILE,fn); 228 bsh = BSHFParams("${SCR2}",null,null); 229 vars.put("SCR2","getprop(\""+BeanShell.INIT_FILE+"\")"); 230 assertEquals(fn,bsh.execute());// Check that bsh has read the file 231 vars.put("SCR2","getprop(\"avavaav\",\"default\")"); 232 assertEquals("default",bsh.execute()); 233 vars.put("SCR2","++i"); 234 assertEquals("1",bsh.execute()); 235 vars.put("SCR2","++i"); 236 assertEquals("2",bsh.execute()); 237 238 } 239 240 public void SplitTest1() throws Exception 241 { 242 SplitFunction split=null; 243 String src=""; 244 245 try 246 { 247 split = SplitParams("a,b,c",null,null); 248 fail("Expected InvalidVariableException (wrong number of parameters)"); 249 } 250 catch (InvalidVariableException e) 251 { 252 //OK 253 } 254 src="a,b,c"; 255 split = SplitParams(src,"VAR1",null); 256 assertEquals(src,split.execute()); 257 assertEquals(src,vars.get("VAR1")); 258 assertEquals("3",vars.get("VAR1_n")); 259 assertEquals("a",vars.get("VAR1_1")); 260 assertEquals("b",vars.get("VAR1_2")); 261 assertEquals("c",vars.get("VAR1_3")); 262 assertNull(vars.get("VAR1_4")); 263 264 split = SplitParams(src,"VAR2",","); 265 assertEquals(src,split.execute()); 266 assertEquals(src,vars.get("VAR2")); 267 assertEquals("3",vars.get("VAR2_n")); 268 assertEquals("a",vars.get("VAR2_1")); 269 assertEquals("b",vars.get("VAR2_2")); 270 assertEquals("c",vars.get("VAR2_3")); 271 assertNull(vars.get("VAR2_4")); 272 273 274 src = "a|b|c"; 275 split = SplitParams(src,"VAR3","|"); 276 assertEquals(src,split.execute()); 277 assertEquals(src,vars.get("VAR3")); 278 assertEquals("3",vars.get("VAR3_n")); 279 assertEquals("a",vars.get("VAR3_1")); 280 assertEquals("b",vars.get("VAR3_2")); 281 assertEquals("c",vars.get("VAR3_3")); 282 assertNull(vars.get("VAR3_4")); 283 284 src="a|b||"; 285 split = SplitParams(src,"VAR4","|"); 286 assertEquals(src,split.execute()); 287 assertEquals(src,vars.get("VAR4")); 288 assertEquals("3",vars.get("VAR4_n")); 289 assertEquals("a",vars.get("VAR4_1")); 290 assertEquals("b",vars.get("VAR4_2")); 291 assertEquals("?",vars.get("VAR4_3")); 292 assertNull(vars.get("VAR4_5")); 293 294 src="a,,c"; 295 vars.put("VAR",src); 296 split = SplitParams("${VAR}","VAR",null); 297 assertEquals(src,split.execute()); 298 assertEquals("3",vars.get("VAR_n")); 299 assertEquals("a",vars.get("VAR_1")); 300 assertEquals("?",vars.get("VAR_2")); 301 assertEquals("c",vars.get("VAR_3")); 302 } 303 304 public void SFFTest1() throws Exception 305 { 306 StringFromFile sff1 = SFFParams("testfiles/SFFTest#.txt","","1","3"); 307 assertEquals("uno",sff1.execute()); 308 assertEquals("dos",sff1.execute()); 309 assertEquals("tres",sff1.execute()); 310 assertEquals("cuatro",sff1.execute()); 311 assertEquals("cinco",sff1.execute()); 312 assertEquals("one",sff1.execute()); 313 assertEquals("two",sff1.execute()); 314 sff1.execute(); 315 sff1.execute(); 316 assertEquals("five",sff1.execute()); 317 assertEquals("eins",sff1.execute()); 318 sff1.execute(); 319 sff1.execute(); 320 sff1.execute(); 321 assertEquals("fuenf",sff1.execute()); 322 try 323 { 324 sff1.execute(); 325 fail("Should have thrown JMeterStopThreadException"); 326 } 327 catch (JMeterStopThreadException e) 328 { 329 // expected 330 } 331 } 332 333 public void SFFTest2() throws Exception 334 { 335 StringFromFile sff = SFFParams("testfiles/SFFTest1.txt","",null,null); 336 assertEquals("uno",sff.execute()); 337 assertEquals("dos",sff.execute()); 338 assertEquals("tres",sff.execute()); 339 assertEquals("cuatro",sff.execute()); 340 assertEquals("cinco",sff.execute()); 341 assertEquals("uno",sff.execute()); // Restarts 342 assertEquals("dos",sff.execute()); 343 assertEquals("tres",sff.execute()); 344 assertEquals("cuatro",sff.execute()); 345 assertEquals("cinco",sff.execute()); 346 } 347 348 public void SFFTest3() throws Exception 349 { 350 StringFromFile sff = SFFParams("testfiles/SFFTest1.txt","","",""); 351 assertEquals("uno",sff.execute()); 352 assertEquals("dos",sff.execute()); 353 assertEquals("tres",sff.execute()); 354 assertEquals("cuatro",sff.execute()); 355 assertEquals("cinco",sff.execute()); 356 assertEquals("uno",sff.execute()); // Restarts 357 assertEquals("dos",sff.execute()); 358 assertEquals("tres",sff.execute()); 359 assertEquals("cuatro",sff.execute()); 360 assertEquals("cinco",sff.execute()); 361 } 362 363 public void SFFTest4() throws Exception 364 { 365 StringFromFile sff = SFFParams("xxtestfiles/SFFTest1.txt","","",""); 366 assertEquals(StringFromFile.ERR_IND,sff.execute()); 367 assertEquals(StringFromFile.ERR_IND,sff.execute()); 368 } 369 370 // Test that only loops twice 371 public void SFFTest5() throws Exception 372 { 373 StringFromFile sff = SFFParams("testfiles/SFFTest1.txt","","","2"); 374 assertEquals("uno",sff.execute()); 375 assertEquals("dos",sff.execute()); 376 assertEquals("tres",sff.execute()); 377 assertEquals("cuatro",sff.execute()); 378 assertEquals("cinco",sff.execute()); 379 assertEquals("uno",sff.execute()); 380 assertEquals("dos",sff.execute()); 381 assertEquals("tres",sff.execute()); 382 assertEquals("cuatro",sff.execute()); 383 assertEquals("cinco",sff.execute()); 384 try 385 { 386 sff.execute(); 387 fail("Should have thrown JMeterStopThreadException"); 388 } 389 catch (JMeterStopThreadException e) 390 { 391 // expected 392 } 393 } 394 395 // Function objects to be tested 396 private static CSVRead cr1, cr2, cr3, cr4, cr5, cr6; 397 398 // Helper class used to implement co-routine between two threads 399 private static class Baton{ 400 void pass(){ 401 done(); 402 try 403 { 404 //System.out.println(">wait:"+Thread.currentThread().getName()); 405 wait(1000); 406 } 407 catch (InterruptedException e) 408 { 409 System.out.println(e); 410 } 411 //System.out.println("<wait:"+Thread.currentThread().getName()); 412 413 } 414 415 void done(){ 416 //System.out.println(">done:"+Thread.currentThread().getName()); 417 notifyAll(); 418 } 419 420 } 421 422 private static Baton baton = new Baton(); 423 424 public void CSVThread1() throws Exception 425 { 426 Thread.currentThread().setName("One"); 427 synchronized(baton){ 428 429 assertEquals("b1",cr1.execute(null,null)); 430 431 assertEquals("",cr4.execute(null,null)); 432 433 assertEquals("b2",cr1.execute(null,null)); 434 435 baton.pass(); 436 437 assertEquals("",cr4.execute(null,null)); 438 439 assertEquals("b4",cr1.execute(null,null)); 440 441 assertEquals("",cr4.execute(null,null)); 442 443 baton.pass(); 444 445 assertEquals("b3",cr1.execute(null,null)); 446 447 assertEquals("",cr4.execute(null,null)); 448 449 baton.done(); 450 } 451 } 452 453 public void CSVThread2() throws Exception 454 { 455 Thread.currentThread().setName("Two"); 456 Thread.sleep(500);// Allow other thread to start 457 synchronized(baton){ 458 459 assertEquals("b3",cr1.execute(null,null)); 460 461 assertEquals("",cr4.execute(null,null)); 462 463 baton.pass(); 464 465 assertEquals("b1",cr1.execute(null,null)); 466 467 assertEquals("",cr4.execute(null,null)); 468 469 assertEquals("b2",cr1.execute(null,null)); 470 471 baton.pass(); 472 473 assertEquals("",cr4.execute(null,null)); 474 475 assertEquals("b4",cr1.execute(null,null)); 476 477 baton.done(); 478 } 479 } 480 481 482 public void CSVRun() throws Exception 483 { 484 assertEquals("b1",cr1.execute(null,null)); 485 assertEquals("c1",cr2.execute(null,null)); 486 assertEquals("d1",cr3.execute(null,null)); 487 488 assertEquals("",cr4.execute(null,null)); 489 assertEquals("b2",cr1.execute(null,null)); 490 assertEquals("c2",cr2.execute(null,null)); 491 assertEquals("d2",cr3.execute(null,null)); 492 493 assertEquals("",cr4.execute(null,null)); 494 assertEquals("b3",cr1.execute(null,null)); 495 assertEquals("c3",cr2.execute(null,null)); 496 assertEquals("d3",cr3.execute(null,null)); 497 498 assertEquals("",cr4.execute(null,null)); 499 assertEquals("b4",cr1.execute(null,null)); 500 assertEquals("c4",cr2.execute(null,null)); 501 assertEquals("d4",cr3.execute(null,null)); 502 503 assertEquals("",cr4.execute(null,null)); 504 assertEquals("b1",cr1.execute(null,null)); 505 assertEquals("c1",cr2.execute(null,null)); 506 assertEquals("d1",cr3.execute(null,null)); 507 508 assertEquals("a1",cr5.execute(null,null)); 509 assertEquals("",cr6.execute(null,null)); 510 assertEquals("a2",cr5.execute(null,null)); 511 512 } 513 514 public void CSVParams() throws Exception 515 { 516 try { 517 setParams(null,null); 518 fail("Should have failed"); 519 } 520 catch (InvalidVariableException e) 521 { 522 } 523 try { 524 setParams(null,""); 525 fail("Should have failed"); 526 } 527 catch (InvalidVariableException e) 528 { 529 } 530 try { 531 setParams("",null); 532 fail("Should have failed"); 533 } 534 catch (InvalidVariableException e) 535 { 536 } 537 } 538 539 public void CSVSetup() throws Exception 540 { 541 cr1=setParams("testfiles/test.csv","1"); 542 cr2=setParams("testfiles/test.csv","2"); 543 cr3=setParams("testfiles/test.csv","3"); 544 cr4=setParams("testfiles/test.csv","next"); 545 cr5=setParams("","0"); 546 cr6=setParams("","next"); 547 } 548 549 public void CSValias() throws Exception 550 { 551 cr1 = setParams("testfiles/test.csv","*A"); 552 cr2 = setParams("*A","1"); 553 cr3 = setParams("*A","next"); 554 555 cr4 = setParams("testfiles/test.csv","*B"); 556 cr5 = setParams("*B","2"); 557 cr6 = setParams("*B","next"); 558 559 String s; 560 561 s = cr1.execute(null,null); // open as *A 562 assertEquals("",s); 563 s = cr2.execute(null,null); // col 1, line 1, *A 564 assertEquals("b1",s); 565 566 567 s = cr4.execute(null,null);// open as *B 568 assertEquals("",s); 569 s = cr5.execute(null,null);// col2 line 1 570 assertEquals("c1",s); 571 572 s = cr3.execute(null,null);// *A next 573 assertEquals("",s); 574 s = cr2.execute(null,null);// col 1, line 2, *A 575 assertEquals("b2",s); 576 577 s = cr5.execute(null,null);// col2, line 1, *B 578 assertEquals("c1",s); 579 580 s = cr6.execute(null,null);// *B next 581 assertEquals("",s); 582 583 s = cr5.execute(null,null);// col2, line 2, *B 584 assertEquals("c2",s); 585 586 } 587 588 public void CSVNoFile() throws Exception 589 { 590 String s; 591 592 cr1 = setParams("xtestfiles/test.csv","1"); 593 log.info("Expecting file not found"); 594 s = cr1.execute(null,null); 595 assertEquals("",s); 596 597 cr2 = setParams("xtestfiles/test.csv","next"); 598 log.info("Expecting no entry for file"); 599 s = cr2.execute(null,null); 600 assertEquals("",s); 601 602 cr3 = setParams("xtestfiles/test.csv","*ABC"); 603 log.info("Expecting file not found"); 604 s = cr3.execute(null,null); 605 assertEquals("",s); 606 607 cr4 = setParams("*ABC","1"); 608 log.info("Expecting cannot open file"); 609 s = cr4.execute(null,null); 610 assertEquals("",s); 611 } 612 613 // Check blank lines are treated as EOF 614 public void CSVBlankLine() throws Exception 615 { 616 CSVRead csv1 = setParams("testfiles/testblank.csv","1"); 617 CSVRead csv2 = setParams("testfiles/testblank.csv","next"); 618 619 String s; 620 621 for (int i = 1; i<=2; i++) 622 { 623 s= csv1.execute(null,null); 624 assertEquals("b1",s); 625 626 s= csv2.execute(null,null); 627 assertEquals("",s); 628 629 s= csv1.execute(null,null); 630 assertEquals("b2",s); 631 632 s= csv2.execute(null,null); 633 assertEquals("",s); 634 } 635 636 } 637 }