001 package org.cocome.tradingsystem.systests.scenarios; 002 003 import java.util.Random; 004 005 /** 006 * This test covers use case 1 for multiple cash desks in parallel. 007 * 008 * @author Benjamin Hummel 009 * @author Christian Pfaller 010 * @author $Author: hummel $ 011 * @version $Rev: 64 $ 012 * @levd.rating GREEN Rev: 64 013 */ 014 public class ProcessSaleConcurrentTest extends ProcessSaleBase { 015 016 /** Number of concurrent sales processes. */ 017 private static final int NUM_PROCESSES = 3; 018 019 /** Execute the test scenario. */ 020 public void testScenario() throws Exception { 021 022 ProcessSaleBase[] saleProcesses = new ProcessSaleBase[NUM_PROCESSES]; 023 for (int i = 0; i < NUM_PROCESSES; ++i) { 024 saleProcesses[i] = new ProcessSaleBase(); 025 saleProcesses[i].copySetup(this); 026 saleProcesses[i].initializeCashDesk(0, i); 027 } 028 029 int numFinished = 0; 030 int[] states = new int[NUM_PROCESSES]; 031 Random interleavingGenerator = new Random(42); 032 033 while (numFinished < NUM_PROCESSES) { 034 int pid = interleavingGenerator.nextInt(NUM_PROCESSES); 035 switch (states[pid]) { 036 case 0: 037 saleProcesses[pid].startNewSale(15); 038 break; 039 case 1: 040 case 2: 041 case 3: 042 saleProcesses[pid].enterProducts(5); 043 break; 044 case 4: 045 saleProcesses[pid].finishSale(); 046 break; 047 case 5: 048 saleProcesses[pid].handleCashPayment(); 049 break; 050 case 6: 051 ++numFinished; 052 break; 053 } 054 ++states[pid]; 055 } 056 } 057 058 }