/* * JBoss, Home of Professional Open Source * Copyright 2007, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. * See the copyright.txt in the distribution for a * full listing of individual contributors. * This copyrighted material is made available to anyone wishing to use, * modify, copy, or redistribute it subject to the terms and conditions * of the GNU Lesser General Public License, v. 2.1. * This program is distributed in the hope that it will be useful, but WITHOUT A * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public License, * v.2.1 along with this distribution; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. * * (C) 2005-2006, * @author JBoss Inc. */ /* * Created by IntelliJ IDEA. * User: peter craddock * Date: 12-Mar-02 * Time: 14:19:06 */ package org.jboss.jbossts.qa.ArjunaCore.AbstractRecord.client; import com.arjuna.ats.arjuna.coordinator.ActionStatus; import com.arjuna.ats.arjuna.coordinator.TwoPhaseOutcome; import org.jboss.jbossts.qa.ArjunaCore.AbstractRecord.impl.ErrorService01; import org.jboss.jbossts.qa.ArjunaCore.Utils.BaseTestClient; import java.util.ArrayList; /** * This is a template to test the current outcome is * from the tests. we will use this to create a config file generator. */ public class ErrorClient04 extends BaseTestClient { public static void main(String[] args) { ErrorClient04 test = new ErrorClient04(args); } private ErrorClient04(String[] args) { super(args); } public void Test() { ///////////////////////////////////////////////////////////////////////////////////////// // set up values needed for test ///////////////////////////////////////////////////////////////////////////////////////// //setup values mMaxInt = 12; mMaxValue = 11; try { setNumberOfResources(getNumberOfArgs()); setCrashPoint(getNumberOfArgs() - 1); createArrayList(); } catch (Exception e) { Fail("Error in ErrorClient04.test() :", e); } ///////////////////////////////////////////////////////////////////////////////////////// // prepare output ///////////////////////////////////////////////////////////////////////////////////////// try { // create array to hold display results displayarray = new ArrayList(); String[] content = new String[mNumberOfResources + 1]; String s = ""; //headers for (int j = 0; j < mNumberOfResources; j++) { s = "Resource :" + (j + 1); content[j] = pad(s); } s = "Final Result"; content[mNumberOfResources] = pad(s); displayarray.add(content); } catch (Exception e) { Fail("Error in ErrorClient04.test() :", e); } ///////////////////////////////////////////////////////////////////////////////////////// //now perform tests and save results in the above array ///////////////////////////////////////////////////////////////////////////////////////// try { mCrashPoint = 1; //crash type not used in this test mCrashType = 1; //perform tests int testresources = 0; int[] mCrashArray; for (int i = 0; i < mPermutaionsList.size(); i++) { mCrashArray = (int[]) mPermutaionsList.get(i); testresources = mCrashArray.length; ErrorService01 mService = new ErrorService01(testresources); int mFinalValue = 0; createTx(); try { begin(); mService.setupOper(); mService.setCrash(mCrashPoint, mCrashArray); mFinalValue = intCommit(); } catch (Exception e) { Fail("Error doing work", e); } //save the values for display later String[] content = new String[mNumberOfResources + 1]; String s = ""; for (int x = 0; x < mNumberOfResources + 1; x++) { int value = -1; s = " "; if (x < mCrashArray.length) { value = mCrashArray[x]; s = TwoPhaseOutcome.stringForm(value); } content[x] = pad(s); if (x == mNumberOfResources) { s = ActionStatus.stringForm(mFinalValue); content[x] = pad(s); } } displayarray.add(content); } } catch (Exception e) { Fail("Error in ErrorClient04.test() :", e); } // now display saved data displayArray(); } private void createArrayList() { int numberoftests = 0; int displaycounter = 0; mPermutaionsList = new ArrayList(); for (int j = 0; j < mNumberOfResources; j++) { createIgnoreList(j + 1); numberoftests = mMaxInt - mIgnorList.length; for (int perms = 0; perms < j; perms++) { numberoftests = numberoftests * (mMaxInt - mIgnorList.length); } //setupCounterArray(j + 1); for (int i = 0; i < numberoftests; i++) { int[] last = null; if (i != 0 || j != 0) { last = (int[]) mPermutaionsList.get(displaycounter - 1); } mPermutaionsList.add(createArrays(j + 1, last)); //turn this off now its working //display(displaycounter); displaycounter++; } } } private int[] createArrays(int size, int[] last) { int[] crash = new int[size]; boolean increase = true; int value = -1; int testvalue = 0; if (last == null) { value = nextValidValue(value); crash[0] = value; return crash; } else { //if this happend new array size if (last.length != crash.length) { for (int i = 0; i < crash.length; i++) { value = nextValidValue(-1); crash[i] = value; } return crash; } for (int i = crash.length - 1; i > -1; i--) { value = last[i]; if (increase) { value = nextValidValue(value); } testvalue = value; if (value > mMaxValue) { value = nextValidValue(-1); } if (value != mMaxValue + 1) { increase = false; } if (testvalue == mMaxValue + 1) { increase = true; } crash[i] = value; } } return crash; } private int nextValidValue(int value) { value++; for (int i = 0; i < mIgnorList.length; i++) { if (value == mIgnorList[i]) { value++; nextValidValue(value); } } return value; } private void createIgnoreList(int resources) { //make sure mIgnoreList is not null mIgnorList = new int[0]; if (mCrashPoint == 1) { if (resources == 1) { mIgnorList = new int[3]; mIgnorList[0] = TwoPhaseOutcome.PREPARE_OK; mIgnorList[1] = TwoPhaseOutcome.PREPARE_NOTOK; mIgnorList[2] = TwoPhaseOutcome.PREPARE_READONLY; } else { mIgnorList = new int[4]; mIgnorList[0] = TwoPhaseOutcome.PREPARE_OK; mIgnorList[1] = TwoPhaseOutcome.PREPARE_NOTOK; mIgnorList[2] = TwoPhaseOutcome.PREPARE_READONLY; mIgnorList[3] = TwoPhaseOutcome.ONE_PHASE_ERROR; } } } private String pad(String s) { int size = 40; String out = s; for (int i = s.length(); i < size; i++) { out += " "; } return out; } private void displayArray() { for (int i = 0; i < displayarray.size(); i++) { String[] displaydata = null; String displayValue = ""; displaydata = (String[]) displayarray.get(i); for (int j = 0; j < displaydata.length; j++) { displayValue += displaydata[j]; } System.err.println(displayValue); } } /** * Helper method for debugging createarray function. */ private void display(int i) { int[] values = (int[]) mPermutaionsList.get(i); String s = ""; for (int j = 0; j < values.length; j++) { s += values[j] + ", "; } Debug(s); } private int mMaxInt = 12; private int mMaxValue = 11; private ArrayList mPermutaionsList; private ArrayList displayarray; private int[] mIgnorList = null; }