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 }