/*
* 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.
*/
//
// Copyright (C) 2001,
//
// Hewlett-Packard Company,
// Newcastle upon Tyne,
// Tyne and Wear,
// UK.
//
package org.jboss.jbossts.qa.CurrentTests01;
/*
* Copyright (C) 1999-2001 by HP Bluestone Software, Inc. All rights Reserved.
*
* HP Arjuna Labs,
* Newcastle upon Tyne,
* Tyne and Wear,
* UK.
*
* $Id: Test35.java,v 1.3 2004/11/02 11:55:39 kconner Exp $
*/
/*
* Try to get around the differences between Ansi CPP and
* K&R cpp with concatenation.
*/
/*
* Copyright (C) 1999-2001 by HP Bluestone Software, Inc. All rights Reserved.
*
* HP Arjuna Labs,
* Newcastle upon Tyne,
* Tyne and Wear,
* UK.
*
* $Id: Test35.java,v 1.3 2004/11/02 11:55:39 kconner Exp $
*/
import org.jboss.jbossts.qa.Utils.OAInterface;
import org.jboss.jbossts.qa.Utils.ORBInterface;
import org.jboss.jbossts.qa.Utils.OTS;
import org.omg.CORBA.INVALID_TRANSACTION;
import org.omg.CORBA.TRANSACTION_ROLLEDBACK;
public class Test35
{
public static void main(String[] args)
{
boolean correct = true;
int interPhaseSleepPeriod;
if (args.length != 0)
{
interPhaseSleepPeriod = Integer.parseInt(args[args.length - 1]);
interPhaseSleepPeriod = interPhaseSleepPeriod * 1000;
}
else
{
interPhaseSleepPeriod = 0;
}
try
{
ORBInterface.initORB(args, null);
OAInterface.initOA();
System.err.println("Purpose of test: This test has been introduced to ensure that setting a transaction\n" +
"timeout of 0 (zero) seconds will remove any existing timeout. The test operates\n" +
"in two phases;\n\n" +
"In the first phase, a transaction timeout of 4 secs is set. A transaction is then\n" +
"started, the thread then immediately goes to sleep for 8 seconds. When the thread\n" +
"wakes, an attempt is made to commit the transaction. An exception (INVALID_TRANSACTION)\n" +
"is expected to be thrown at this point as the transaction should have timed out and\n" +
"been rolled back.\n\n" +
"In the second phase, a transaction timeout of 0 secs is set. A transaction is then\n" +
"started, the thread then immediately goes to sleep for 12 seconds. When the thread\n" +
"wakes up, an attempt is again made to commit the transaction. This time the commit\n" +
"should work and the test will thus be regarded as having passed. If instead an\n" +
"exception is thrown because the transaction has timed out, this would indicate that\n" +
"setting the timeout to 0 did not remove the previous timeout and the test should\n" +
"therefore be regarded as having failed.\n\n" +
"An additional pause may be specified in between the above two phases to allow a\n" +
"manual check to see whether the TX_REAPER_THREAD is thrashing the CPU, as it\n" +
"has done in the past. To activate this interphase pause, you simply need to pass\n" +
"an integer as a parameter to the test. The test will then pause for this amount\n" +
"of seconds between phases one and two.\n\n");
org.omg.CosTransactions.Current current = OTS.get_current();
System.err.println("Client: Initiating phase one");
System.err.println("Client: Setting 4 second timeout");
current.set_timeout(4);
System.err.println("Client: Starting transaction then sleeping for 12 seconds");
current.begin();
Thread.sleep(12000);
try
{
System.err.println("Client: Trying commit (expect INVALID_TRANSACTION exception)...");
current.commit(true);
System.err.println("Client: Commit OK - Warning: Expected INVALID_TRANSACTION or TRANSACTION_ROLLEDBACK exception to be thrown");
System.err.println("Client: Test should fail");
correct = false;
}
catch (INVALID_TRANSACTION invalidTransaction)
{
System.err.println("Client: Caught INVALID_TRANSACTION exception");
}
catch(TRANSACTION_ROLLEDBACK transactionRolledback)
{
System.out.println("Client: Caught TRANSACTION_ROLLEDBACK exception");
}
catch (Exception exception)
{
System.err.println("Client: Caught unexpected exception: " + exception);
exception.printStackTrace(System.err);
correct = false;
}
if (correct)
{
if (interPhaseSleepPeriod != 0)
{
try
{
System.err.println("Client: Inter-phase sleep period of " + (interPhaseSleepPeriod / 1000) + " seconds");
Thread.sleep(interPhaseSleepPeriod);
}
catch (Exception exception)
{
System.err.println("Client: Caught unexpected exception: " + exception);
exception.printStackTrace(System.err);
correct = false;
}
}
if (correct)
{
System.err.println("Client: Initiating phase two");
System.err.println("Client: Setting 0 second timeout");
current.set_timeout(0);
System.err.println("Client: Starting transaction then sleeping for 8 seconds");
current.begin();
Thread.sleep(8000);
try
{
System.err.println("Client: Trying commit (expect 'Commit OK')...");
current.commit(true);
System.err.println("Client: Commit OK");
System.err.println("Client: Test should pass");
}
catch (INVALID_TRANSACTION invalidTransaction)
{
System.err.println("Client: Caught INVALID_TRANSACTION exception - Warning: Expected Commit OK");
System.err.println("Client: Test should fail");
correct = false;
}
catch (Exception exception)
{
System.err.println("Client: Caught unexpected exception: " + exception);
exception.printStackTrace(System.err);
correct = false;
}
}
}
}
catch (Exception exception)
{
System.err.println("Client: Caught unexpected exception: " + exception);
exception.printStackTrace(System.err);
correct = false;
}
if (correct)
{
System.out.println("Passed");
}
else
{
System.out.println("Failed");
}
try
{
OAInterface.shutdownOA();
ORBInterface.shutdownORB();
}
catch (Exception exception)
{
System.err.println("Client: Caught unexpected exception: " + exception);
exception.printStackTrace(System.err);
}
}
}