/*
* JBoss, Home of Professional Open Source
* Copyright 2006, 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 com.hp.mwtests.ts.arjuna.recovery;
/*
* Copyright (C) 1999-2001 by HP Bluestone Software, Inc. All rights Reserved.
*
* HP Arjuna Labs,
* Newcastle upon Tyne,
* Tyne and Wear,
* UK.
*
* $Id: TransactionStatusConnectorTest.java 2342 2006-03-30 13:06:17Z $
*/
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import org.junit.Test;
import com.arjuna.ats.arjuna.common.Uid;
import com.arjuna.ats.arjuna.coordinator.ActionStatus;
import com.arjuna.ats.arjuna.recovery.Service;
import com.arjuna.ats.arjuna.utils.Utility;
import com.arjuna.ats.internal.arjuna.recovery.Listener;
import com.arjuna.ats.internal.arjuna.recovery.TransactionStatusConnector;
import com.arjuna.ats.internal.arjuna.recovery.TransactionStatusManagerItem;
class TransactionStatusConnectorTestService implements Service
{
public void doWork(InputStream is, OutputStream os)
throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(is));
PrintWriter out = new PrintWriter(new OutputStreamWriter(os));
try {
out.println(Utility.intToHexString(Utility.getpid()));
out.flush();
String rmStatus = in.readLine();
if (rmStatus.equals("OK")) {
for (int i = 0; i < 4; i++) {
_rx_tran_type = in.readLine();
_rx_uid_str = in.readLine();
out.println(_test_status);
out.flush();
}
}
}
catch (SocketException ex) {
; // Socket closed
}
catch (Exception ex) {
System.err.println("TestService failed " + ex);
}
}
public String _rx_tran_type;
public String _rx_uid_str;
public String _test_status;
public boolean _stop_test = false;
}
public class TransactionStatusConnectorTest
{
@Test
public void test()
{
assertTrue(test_setup());
test1();
assertEquals(0, _tests_failed);
assertEquals(1, _tests_passed);
}
/**
* Pre-test setup.
*/
private static boolean test_setup()
{
boolean setupOk = false;
try {
_tests_passed = 0;
_tests_failed = 0;
if (TransactionStatusManagerItem.createAndSave(_test_port)) {
_pidUid = Utility.getProcessUid();
_pidStr = Utility.intToHexString(Utility.getpid());
_test_service_socket = new ServerSocket(_test_port);
_test_service = new TransactionStatusConnectorTestService();
_test_status_1 = ActionStatus.COMMITTED;
_test_status_2 = ActionStatus.PREPARED;
_test_status_3 = ActionStatus.ABORTED;
_test_status_4 = ActionStatus.INVALID;
_test_uid_1 = new Uid();
_test_uid_2 = new Uid();
_test_uid_3 = new Uid();
_test_uid_4 = new Uid();
_test_tran_type_1 = "_test_tran_type_1";
_test_tran_type_2 = "_test_tran_type_2";
_test_tran_type_3 = "_test_tran_type_3";
_test_tran_type_4 = "_test_tran_type_4";
_listener = new Listener(_test_service_socket, _test_service);
_listener.start();
setupOk = true;
}
}
catch (Exception ex) {
System.err.println("test_setup: Failed " + ex);
}
return setupOk;
}
/**
* Test which checks that a transaction status connector can be
* created and transaction statuses can be retrieved using a simple
* test service.
*/
private static void test1()
{
try {
TransactionStatusConnector testTransactionStatusConnector =
new TransactionStatusConnector(_pidStr, _pidUid);
_test_service._test_status = Integer.toString(_test_status_1);
int test_status1 = testTransactionStatusConnector.getTransactionStatus
(_test_tran_type_1, _test_uid_1);
_rx_tran_type_1 = _test_service._rx_tran_type;
_rx_uid_str_1 = _test_service._rx_uid_str;
_test_service._test_status = Integer.toString(_test_status_2);
int test_status2 = testTransactionStatusConnector.getTransactionStatus
(_test_tran_type_2, _test_uid_2);
_rx_tran_type_2 = _test_service._rx_tran_type;
_rx_uid_str_2 = _test_service._rx_uid_str;
_test_service._test_status = Integer.toString(_test_status_3);
int test_status3 = testTransactionStatusConnector.getTransactionStatus
(_test_tran_type_3, _test_uid_3);
_rx_tran_type_3 = _test_service._rx_tran_type;
_rx_uid_str_3 = _test_service._rx_uid_str;
_test_service._test_status = Integer.toString(_test_status_4);
int test_status4 = testTransactionStatusConnector.getTransactionStatus
(_test_tran_type_4, _test_uid_4);
_rx_tran_type_4 = _test_service._rx_tran_type;
_rx_uid_str_4 = _test_service._rx_uid_str;
if ((test_status1 == _test_status_1) &&
(test_status2 == _test_status_2) &&
(test_status3 == _test_status_3) &&
(test_status4 == _test_status_4) &&
(_rx_tran_type_1.equals(_test_tran_type_1)) &&
(_rx_tran_type_2.equals(_test_tran_type_2)) &&
(_rx_tran_type_3.equals(_test_tran_type_3)) &&
(_rx_tran_type_4.equals(_test_tran_type_4)) &&
(_rx_uid_str_1.equals(_test_uid_1.toString())) &&
(_rx_uid_str_2.equals(_test_uid_2.toString())) &&
(_rx_uid_str_3.equals(_test_uid_3.toString())) &&
(_rx_uid_str_4.equals(_test_uid_4.toString()))) {
System.out.println(_unit_test + "test1: passed");
_tests_passed++;
} else {
System.out.println(_unit_test + "test1: failed");
_tests_failed++;
}
_listener.stopListener();
}
catch (Exception ex) {
ex.printStackTrace();
System.err.println(_unit_test + " test1 " + ex);
_tests_failed++;
}
}
private static final String _unit_test = "com.hp.mwtests.ts.arjuna.recovery.TransactionStatusConnectorTest: ";
private static final int _test_port = 4321;
private static TransactionStatusConnectorTestService _test_service;
private static Socket _test_socket;
private static String _test_host;
private static ServerSocket _test_service_socket;
private static Listener _listener;
private static Uid _pidUid;
private static String _pidStr;
private static BufferedReader _from_test_service;
private static PrintWriter _to_test_service;
private static int _test_status;
private static int _test_status_1;
private static int _test_status_2;
private static int _test_status_3;
private static int _test_status_4;
private static Uid _test_uid_1;
private static Uid _test_uid_2;
private static Uid _test_uid_3;
private static Uid _test_uid_4;
private static String _test_tran_type_1;
private static String _test_tran_type_2;
private static String _test_tran_type_3;
private static String _test_tran_type_4;
private static String _rx_tran_type_1;
private static String _rx_tran_type_2;
private static String _rx_tran_type_3;
private static String _rx_tran_type_4;
private static String _rx_uid_str_1;
private static String _rx_uid_str_2;
private static String _rx_uid_str_3;
private static String _rx_uid_str_4;
private static int _tests_passed = 0;
private static int _tests_failed = 0;
}