/* * 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. */ package org.jboss.jbossts.qa.ArjunaCore.Common; import org.jboss.jbossts.qa.ArjunaCore.Utils.qautil; import java.util.ArrayList; import java.util.Iterator; /** * Simple test to see if Uid generation is unique. */ public class UidTest { public static void main(String[] args) { if (args.length != 2) { qautil.qadebug("runnig defaults"); UidTest ut = new UidTest(); } else { try { UidTest ut = new UidTest(Integer.parseInt(args[0]), Integer.parseInt(args[1])); } catch (NumberFormatException e) { qautil.debug("runnig defaults", e); UidTest ut = new UidTest(); } } } public UidTest() { this(10, 1000); } /** * To check this method we are going to start sub processes create a bunch of * Uid's then check that the final list is unique. */ public UidTest(int threads, int uids) { qautil.qadebug("Running Uid test with param " + threads + ", " + uids); mNumberOfThreads = threads; mNumberOfUids = uids; mUidSubProcess = new UidTestProcess[mNumberOfThreads]; //this will create the uidprocess objects and start //the sub process uidtestworker. qautil.qadebug("createing workers"); for (int i = 0; i < mNumberOfThreads; i++) { mUidSubProcess[i] = new UidTestProcess(mCommand, mNumberOfUids); } qautil.qadebug("wait until workers finished"); //wait until all subprocesses have finished boolean allfinished = false; while (!allfinished) { for (int i = 0; i < mNumberOfThreads; i++) { if (!mUidSubProcess[i].mFinished) { allfinished = false; break; } else { qautil.qadebug(i + ": Finished = " + mUidSubProcess[i].mFinished); allfinished = true; } } //go to sleep let other processes run try { Thread.currentThread().sleep(100); } catch (Exception e) { } } //gather all results for (int i = 0; i < mNumberOfThreads; i++) { Iterator iter = mUidSubProcess[i].mResults.iterator(); while (iter.hasNext()) { String s = (String) iter.next(); mUidList.add(s); } } boolean correct = true; ArrayList unique = new ArrayList(); //we now have a full list lets check for uniqueness. int uniqueSize = mUidList.size(); qautil.qadebug("Number of Uids = " + uniqueSize); for (int i = 0; i < uniqueSize; i++) { String s = (String) mUidList.get(i); if (unique.contains(s)) { qautil.debug("Found non unique uid = " + s + " at index: " + unique.indexOf(s)); correct = false; break; } else { qautil.qadebug(s); unique.add(s); } } //just in case sub process has not run if (correct && uniqueSize == 0) { correct = false; qautil.debug("Sub process has returned zero lenth array"); } if (correct) { System.out.println("Passed"); } else { System.out.println("Failed"); } } public int mNumberOfThreads; public int mNumberOfUids; public String mCommand = "java -Demma.verbosity.level=silent -cp " + System.getProperty("java.class.path") + " org.jboss.jbossts.qa.ArjunaCore.Common.UidTestWorker"; public ArrayList mUidList = new ArrayList(); private UidTestProcess[] mUidSubProcess; }