akka.remote.transport
Class TestTransport

java.lang.Object
  extended by akka.remote.transport.TestTransport
All Implemented Interfaces:
Transport

public class TestTransport
extends java.lang.Object
implements Transport

Transport implementation to be used for testing.

The TestTransport is basically a shared memory between actor systems. The TestTransport could be programmed to emulate different failure modes of a Transport implementation. TestTransport keeps a log of the activities it was requested to do. This class is not optimized for performace and MUST not be used as an in-memory transport in production systems.


Nested Class Summary
static interface TestTransport.Activity
          Base trait for activities that are logged by TestTransport.
static class TestTransport.AssociateAttempt
           
static class TestTransport.AssociateAttempt$
           
static class TestTransport.AssociationRegistry
          Shared state among TestTransport instances.
static class TestTransport.DisassociateAttempt
           
static class TestTransport.DisassociateAttempt$
           
static class TestTransport.ListenAttempt
           
static class TestTransport.ListenAttempt$
           
static class TestTransport.ShutdownAttempt
           
static class TestTransport.ShutdownAttempt$
           
static class TestTransport.SwitchableLoggedBehavior<A,B>
          Test utility to make behavior of functions that return some Future[B] controllable from tests.
static class TestTransport.WriteAttempt
           
static class TestTransport.WriteAttempt$
           
 
Nested classes/interfaces inherited from interface akka.remote.transport.Transport
Transport.ActorAssociationEventListener, Transport.ActorAssociationEventListener$, Transport.AssociationEvent, Transport.AssociationEventListener, Transport.InboundAssociation, Transport.InboundAssociation$, Transport.InvalidAssociationException, Transport.InvalidAssociationException$
 
Constructor Summary
TestTransport(Address localAddress, TestTransport.AssociationRegistry registry, int maximumPayloadBytes, java.lang.String schemeIdentifier)
           
TestTransport(ExtendedActorSystem system, com.typesafe.config.Config conf)
           
 
Method Summary
 scala.concurrent.Future<AssociationHandle> associate(Address remoteAddress)
          Asynchronously opens a logical duplex link between two Transport Entities over a network.
 TestTransport.SwitchableLoggedBehavior<Address,AssociationHandle> associateBehavior()
          The TestTransport.SwitchableLoggedBehavior for the associate() method.
 void disassociate(TestAssociationHandle handle)
           
 TestTransport.SwitchableLoggedBehavior<TestAssociationHandle,scala.runtime.BoxedUnit> disassociateBehavior()
          The TestTransport.SwitchableLoggedBehavior for the disassociate() method on handles.
 boolean isResponsibleFor(Address address)
          A function that decides whether the specific transport instance is responsible for delivering to a given address.
 scala.concurrent.Future<scala.Tuple2<Address,scala.concurrent.Promise<Transport.AssociationEventListener>>> listen()
          Asynchronously attempts to setup the transport layer to listen and accept incoming associations.
 TestTransport.SwitchableLoggedBehavior<scala.runtime.BoxedUnit,scala.Tuple2<Address,scala.concurrent.Promise<Transport.AssociationEventListener>>> listenBehavior()
          The TestTransport.SwitchableLoggedBehavior for the listen() method.
 Address localAddress()
           
 int maximumPayloadBytes()
          Defines the maximum size of payload this transport is able to deliver.
 TestTransport.AssociationRegistry registry()
           
 java.lang.String schemeIdentifier()
          Returns a string that will be used as the scheme part of the URLs corresponding to this transport
 scala.concurrent.Future<java.lang.Object> shutdown()
          Shuts down the transport layer and releases all the corresponding resources.
 TestTransport.SwitchableLoggedBehavior<scala.runtime.BoxedUnit,java.lang.Object> shutdownBehavior()
          The TestTransport.SwitchableLoggedBehavior for the shutdown() method.
 java.lang.String toString()
           
 boolean write(TestAssociationHandle handle, ByteString payload)
           
 TestTransport.SwitchableLoggedBehavior<scala.Tuple2<TestAssociationHandle,ByteString>,java.lang.Object> writeBehavior()
          The TestTransport.SwitchableLoggedBehavior for the write() method on handles.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface akka.remote.transport.Transport
managementCommand
 

Constructor Detail

TestTransport

public TestTransport(Address localAddress,
                     TestTransport.AssociationRegistry registry,
                     int maximumPayloadBytes,
                     java.lang.String schemeIdentifier)

TestTransport

public TestTransport(ExtendedActorSystem system,
                     com.typesafe.config.Config conf)
Method Detail

localAddress

public Address localAddress()

registry

public final TestTransport.AssociationRegistry registry()

maximumPayloadBytes

public int maximumPayloadBytes()
Description copied from interface: Transport
Defines the maximum size of payload this transport is able to deliver. All transports MUST support at least 32kBytes (32000 octets) of payload, but some MAY support larger sizes.

Specified by:
maximumPayloadBytes in interface Transport
Returns:

schemeIdentifier

public java.lang.String schemeIdentifier()
Description copied from interface: Transport
Returns a string that will be used as the scheme part of the URLs corresponding to this transport

Specified by:
schemeIdentifier in interface Transport
Returns:
the scheme string

isResponsibleFor

public boolean isResponsibleFor(Address address)
Description copied from interface: Transport
A function that decides whether the specific transport instance is responsible for delivering to a given address. The function must be thread-safe and non-blocking.

The purpose of this function is to resolve cases when the scheme part of an URL is not enough to resolve the correct transport i.e. multiple instances of the same transport implementation are loaded. These cases arise when - the same transport, but with different configurations is used for different remote systems - a transport is able to serve one address only (hardware protocols, e.g. Serial port) and multiple instances are needed to be loaded for different endpoints.

Specified by:
isResponsibleFor in interface Transport
Parameters:
address - (undocumented)
Returns:
whether the transport instance is responsible to serve communications to the given address.

listenBehavior

public TestTransport.SwitchableLoggedBehavior<scala.runtime.BoxedUnit,scala.Tuple2<Address,scala.concurrent.Promise<Transport.AssociationEventListener>>> listenBehavior()
The TestTransport.SwitchableLoggedBehavior for the listen() method.

Returns:
(undocumented)

associateBehavior

public TestTransport.SwitchableLoggedBehavior<Address,AssociationHandle> associateBehavior()
The TestTransport.SwitchableLoggedBehavior for the associate() method.

Returns:
(undocumented)

shutdownBehavior

public TestTransport.SwitchableLoggedBehavior<scala.runtime.BoxedUnit,java.lang.Object> shutdownBehavior()
The TestTransport.SwitchableLoggedBehavior for the shutdown() method.

Returns:
(undocumented)

listen

public scala.concurrent.Future<scala.Tuple2<Address,scala.concurrent.Promise<Transport.AssociationEventListener>>> listen()
Description copied from interface: Transport
Asynchronously attempts to setup the transport layer to listen and accept incoming associations. The result of the attempt is wrapped by a Future returned by this method. The pair contained in the future contains a Promise for an ActorRef. By completing this Promise with an Transport.AssociationEventListener, that listener becomes responsible for handling incoming associations. Until the Promise is not completed, no associations are processed.

Specified by:
listen in interface Transport
Returns:
A Future containing a pair of the bound local address and a Promise of an AssociationListener that must be completed by the consumer of the future.

associate

public scala.concurrent.Future<AssociationHandle> associate(Address remoteAddress)
Description copied from interface: Transport
Asynchronously opens a logical duplex link between two Transport Entities over a network. It could be backed by a real transport-layer connection (TCP), more lightweight connections provided over datagram protocols (UDP with additional services), substreams of multiplexed connections (SCTP) or physical links (serial port).

This call returns a future of an AssociationHandle. A failed future indicates that the association attempt was unsuccessful. If the exception is Transport.InvalidAssociationException then the association request was invalid, and it is impossible to recover.

Specified by:
associate in interface Transport
Parameters:
remoteAddress - The address of the remote transport entity.
Returns:
A status instance representing failure or a success containing an AssociationHandle

shutdown

public scala.concurrent.Future<java.lang.Object> shutdown()
Description copied from interface: Transport
Shuts down the transport layer and releases all the corresponding resources. Shutdown is asynchronous signalling the end of the shutdown by completing the returned future.

The transport SHOULD try flushing pending writes before becoming completely closed.

Specified by:
shutdown in interface Transport
Returns:
Future signalling the completion of shutdown

writeBehavior

public TestTransport.SwitchableLoggedBehavior<scala.Tuple2<TestAssociationHandle,ByteString>,java.lang.Object> writeBehavior()
The TestTransport.SwitchableLoggedBehavior for the write() method on handles. All handle calls pass through this call. Please note, that write operations return a Boolean synchronously, so altering the behavior via pushDelayed will turn write to a blocking operation -- use of pushDelayed therefore is not recommended.

Returns:
(undocumented)

disassociateBehavior

public TestTransport.SwitchableLoggedBehavior<TestAssociationHandle,scala.runtime.BoxedUnit> disassociateBehavior()
The TestTransport.SwitchableLoggedBehavior for the disassociate() method on handles. All handle calls pass through this call.

Returns:
(undocumented)

write

public boolean write(TestAssociationHandle handle,
                     ByteString payload)

disassociate

public void disassociate(TestAssociationHandle handle)

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object