blob: 86deae1d84d817382bd930b8097d3afb0f8f2087 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "IOTransportTest.h"
CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::IOTransportTest );
using namespace activemq;
using namespace activemq::transport;
using namespace activemq::exceptions;
////////////////////////////////////////////////////////////////////////////////
// This will just test that we can start and stop the
// transport without any exceptions.
void IOTransportTest::testStartClose(){
decaf::io::BlockingByteArrayInputStream is;
decaf::io::ByteArrayOutputStream os;
MyCommandListener listener;
MyCommandReader reader;
MyCommandWriter writer;
MyExceptionListener exListener;
IOTransport transport;
transport.setCommandListener( &listener );
transport.setCommandReader( &reader );
transport.setCommandWriter( &writer );
transport.setInputStream( &is );
transport.setOutputStream( &os );
transport.setTransportExceptionListener( &exListener );
transport.start();
decaf::lang::Thread::sleep( 60 );
transport.close();
}
////////////////////////////////////////////////////////////////////////////////
void IOTransportTest::testRead(){
decaf::io::BlockingByteArrayInputStream is;
decaf::io::ByteArrayOutputStream os;
MyCommandListener listener;
MyCommandReader reader;
MyCommandWriter writer;
MyExceptionListener exListener;
IOTransport transport;
transport.setCommandListener( &listener );
transport.setCommandReader( &reader );
transport.setCommandWriter( &writer );
transport.setInputStream( &is );
transport.setOutputStream( &os );
transport.setTransportExceptionListener( &exListener );
transport.start();
decaf::lang::Thread::sleep( 10 );
unsigned char buffer[10] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
try{
synchronized( &is ){
is.setByteArray( buffer, 10 );
}
}catch( decaf::lang::Exception& ex ){
ex.setMark( __FILE__, __LINE__ );
}
decaf::lang::Thread::sleep( 100 );
CPPUNIT_ASSERT( listener.str == "1234567890" );
transport.close();
}
////////////////////////////////////////////////////////////////////////////////
void IOTransportTest::testWrite(){
decaf::io::BlockingByteArrayInputStream is;
decaf::io::ByteArrayOutputStream os;
MyCommandListener listener;
MyCommandReader reader;
MyCommandWriter writer;
MyExceptionListener exListener;
IOTransport transport;
transport.setCommandListener( &listener );
transport.setCommandReader( &reader );
transport.setCommandWriter( &writer );
transport.setInputStream( &is );
transport.setOutputStream( &os );
transport.setTransportExceptionListener( &exListener );
transport.start();
MyCommand cmd;
cmd.c = '1';
transport.oneway( &cmd );
cmd.c = '2';
transport.oneway( &cmd );
cmd.c = '3';
transport.oneway( &cmd );
cmd.c = '4';
transport.oneway( &cmd );
cmd.c = '5';
transport.oneway( &cmd );
const unsigned char* bytes = os.toByteArray();
std::size_t size = os.size();
CPPUNIT_ASSERT( size >= 5 );
CPPUNIT_ASSERT( bytes[0] == '1' );
CPPUNIT_ASSERT( bytes[1] == '2' );
CPPUNIT_ASSERT( bytes[2] == '3' );
CPPUNIT_ASSERT( bytes[3] == '4' );
CPPUNIT_ASSERT( bytes[4] == '5' );
transport.close();
}
////////////////////////////////////////////////////////////////////////////////
void IOTransportTest::testException(){
decaf::io::BlockingByteArrayInputStream is;
decaf::io::ByteArrayOutputStream os;
MyCommandListener listener;
MyCommandReader reader;
MyCommandWriter writer;
MyExceptionListener exListener;
IOTransport transport;
transport.setCommandListener( &listener );
transport.setCommandReader( &reader );
reader.throwException = true;
transport.setCommandWriter( &writer );
transport.setInputStream( &is );
transport.setOutputStream( &os );
transport.setTransportExceptionListener( &exListener );
unsigned char buffer[1] = { '1' };
try{
synchronized( &is ){
is.setByteArray( buffer, 1);
}
}catch( decaf::lang::Exception& ex ){
ex.setMark(__FILE__, __LINE__ );
}
transport.start();
synchronized(&exListener.mutex)
{
if(exListener.transport != &transport)
{
exListener.mutex.wait(1000);
}
}
CPPUNIT_ASSERT( exListener.transport == &transport );
transport.close();
}