| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Simulation.Network.Snocket
Contents
Description
This module provides simulation environment and a snocket implementation
suitable for IOSim.
Though this module is designed for simulation / testing, it lives in the library, since it is needed in `ouroboros-network-framework:test` and `ouroboros-network:test' components.
TODO: Create a snocket package, in order to avoid having to have
ouroboros-network-testing as a dependency for this cabal library.
Synopsis
- withSnocket :: (Alternative (STM m), MonadDelay m, MonadLabelledSTM m, MonadMask m, MonadTimer m, MonadThrow (STM m), GlobalAddressScheme peerAddr, Ord peerAddr, Typeable peerAddr, Show peerAddr) => Tracer m (WithAddr (TestAddress peerAddr) (SnocketTrace m (TestAddress peerAddr))) -> BearerInfo -> Map (NormalisedId (TestAddress peerAddr)) (Script BearerInfo) -> (Snocket m (FD m (TestAddress peerAddr)) (TestAddress peerAddr) -> m (ObservableNetworkState (TestAddress peerAddr)) -> m a) -> m a
- newtype ObservableNetworkState addr = ObservableNetworkState {
- onsConnections :: Map (NormalisedId addr) addr
- data ResourceException
- = (Typeable addr, Show addr) => NotReleasedListeningSockets [addr] (Maybe SomeException)
- | (Typeable addr, Ord addr, Show addr) => NotReleasedConnections (Map (NormalisedId addr) ConnectionState) (Maybe SomeException)
- data SDUSize
- newtype Script a = Script (NonEmpty a)
- type Size = Int64
- data SnocketTrace (m :: Type -> Type) addr
- = STConnecting (FD_ m addr) addr
- | STConnected (FD_ m addr) OpenType
- | STBearerInfo BearerInfo
- | STConnectError (FD_ m addr) addr IOError
- | STConnectTimeout TimeoutDetail
- | STBindError (FD_ m addr) addr IOError
- | STClosing SockType (Wedge (ConnectionId addr) [addr])
- | STClosed SockType (Maybe (Maybe ConnectionState))
- | STClosingQueue Bool
- | STClosedQueue Bool
- | STAcceptFailure SockType SomeException
- | STAccepting
- | STAccepted addr
- | STAttenuatedChannelTrace (ConnectionId addr) AttenuatedChannelTrace
- data SockType
- data OpenType
- normaliseId :: Ord addr => ConnectionId addr -> NormalisedId addr
- data BearerInfo = BearerInfo {
- biConnectionDelay :: !DiffTime
- biInboundAttenuation :: Time -> Size -> (DiffTime, SuccessOrFailure)
- biOutboundAttenuation :: Time -> Size -> (DiffTime, SuccessOrFailure)
- biInboundWriteFailure :: !(Maybe Int)
- biOutboundWriteFailure :: !(Maybe Int)
- biAcceptFailures :: !(Maybe (DiffTime, IOError))
- biSDUSize :: !SDUSize
- data IOErrType
- data SuccessOrFailure
- data TimeoutDetail
- noAttenuation :: BearerInfo
- data FD (m :: Type -> Type) peerAddr
- makeFDRawBearer :: forall (m :: Type -> Type) addr. (MonadST m, MonadThrow m, MonadLabelledSTM m, Show addr) => Tracer m FDRawBearerTrace -> MakeRawBearer m (FD m (TestAddress addr))
- makeFDBearer :: forall addr (m :: Type -> Type). (MonadMonotonicTime m, MonadSTM m, MonadThrow m, Show addr) => MakeBearer m (FD m (TestAddress addr))
- class GlobalAddressScheme addr where
- getAddressType :: TestAddress addr -> AddressType
- ephemeralAddress :: AddressType -> Natural -> TestAddress addr
- data AddressType
- data WithAddr addr event = WithAddr {
- waLocalAddr :: Maybe addr
- waRemoteAddr :: Maybe addr
- waEvent :: event
Simulated Snocket
withSnocket :: (Alternative (STM m), MonadDelay m, MonadLabelledSTM m, MonadMask m, MonadTimer m, MonadThrow (STM m), GlobalAddressScheme peerAddr, Ord peerAddr, Typeable peerAddr, Show peerAddr) => Tracer m (WithAddr (TestAddress peerAddr) (SnocketTrace m (TestAddress peerAddr))) -> BearerInfo -> Map (NormalisedId (TestAddress peerAddr)) (Script BearerInfo) -> (Snocket m (FD m (TestAddress peerAddr)) (TestAddress peerAddr) -> m (ObservableNetworkState (TestAddress peerAddr)) -> m a) -> m a Source #
A bracket which runs a network simulation. When the simulation
terminates it verifies that all listening sockets and all connections are
closed. It might throw ResourceException.
newtype ObservableNetworkState addr Source #
Simulation accessible network environment consumed by simSnocket.
Constructors
| ObservableNetworkState | |
Fields
| |
Instances
| Show addr => Show (ObservableNetworkState addr) Source # | |
Defined in Simulation.Network.Snocket Methods showsPrec :: Int -> ObservableNetworkState addr -> ShowS # show :: ObservableNetworkState addr -> String # showList :: [ObservableNetworkState addr] -> ShowS # | |
data ResourceException Source #
Constructors
| (Typeable addr, Show addr) => NotReleasedListeningSockets [addr] (Maybe SomeException) | |
| (Typeable addr, Ord addr, Show addr) => NotReleasedConnections (Map (NormalisedId addr) ConnectionState) (Maybe SomeException) |
Instances
| Exception ResourceException Source # | |
Defined in Simulation.Network.Snocket Methods toException :: ResourceException -> SomeException # fromException :: SomeException -> Maybe ResourceException # | |
| Show ResourceException Source # | |
Defined in Simulation.Network.Snocket Methods showsPrec :: Int -> ResourceException -> ShowS # show :: ResourceException -> String # showList :: [ResourceException] -> ShowS # | |
Instances
| Enum SDUSize | |||||
| Generic SDUSize | |||||
Defined in Network.Mux.Types Associated Types
| |||||
| Num SDUSize | |||||
| Integral SDUSize | |||||
Defined in Network.Mux.Types | |||||
| Real SDUSize | |||||
Defined in Network.Mux.Types Methods toRational :: SDUSize -> Rational # | |||||
| Show SDUSize | |||||
| Eq SDUSize | |||||
| Ord SDUSize | |||||
| type Rep SDUSize | |||||
Defined in Network.Mux.Types | |||||
Instances
| Functor Script | |
| Foldable Script | |
Defined in Test.Ouroboros.Network.Data.Script Methods fold :: Monoid m => Script m -> m # foldMap :: Monoid m => (a -> m) -> Script a -> m # foldMap' :: Monoid m => (a -> m) -> Script a -> m # foldr :: (a -> b -> b) -> b -> Script a -> b # foldr' :: (a -> b -> b) -> b -> Script a -> b # foldl :: (b -> a -> b) -> b -> Script a -> b # foldl' :: (b -> a -> b) -> b -> Script a -> b # foldr1 :: (a -> a -> a) -> Script a -> a # foldl1 :: (a -> a -> a) -> Script a -> a # elem :: Eq a => a -> Script a -> Bool # maximum :: Ord a => Script a -> a # minimum :: Ord a => Script a -> a # | |
| Traversable Script | |
| Arbitrary a => Arbitrary (Script a) | |
| NFData a => NFData (Script a) | |
Defined in Test.Ouroboros.Network.Data.Script | |
| Show a => Show (Script a) | |
| Eq a => Eq (Script a) | |
data SnocketTrace (m :: Type -> Type) addr Source #
Constructors
| STConnecting (FD_ m addr) addr | |
| STConnected (FD_ m addr) OpenType | |
| STBearerInfo BearerInfo | |
| STConnectError (FD_ m addr) addr IOError | |
| STConnectTimeout TimeoutDetail | |
| STBindError (FD_ m addr) addr IOError | |
| STClosing SockType (Wedge (ConnectionId addr) [addr]) | |
| STClosed SockType (Maybe (Maybe ConnectionState)) | TODO: Document meaning of 'Maybe (Maybe OpenState)' |
| STClosingQueue Bool | |
| STClosedQueue Bool | |
| STAcceptFailure SockType SomeException | |
| STAccepting | |
| STAccepted addr | |
| STAttenuatedChannelTrace (ConnectionId addr) AttenuatedChannelTrace |
Instances
| Show addr => Show (SnocketTrace m addr) Source # | |
Defined in Simulation.Network.Snocket Methods showsPrec :: Int -> SnocketTrace m addr -> ShowS # show :: SnocketTrace m addr -> String # showList :: [SnocketTrace m addr] -> ShowS # | |
Constructors
| ListeningSock | |
| ConnectionSock | |
| UnknownType |
Either simultaneous open or normal open. Unlike in TCP, only one side will will know that it is doing simultaneous open.
Constructors
| SimOpen | Simultaneous open |
| NormalOpen | Normal open |
normaliseId :: Ord addr => ConnectionId addr -> NormalisedId addr Source #
Safe constructor of NormalisedId
data BearerInfo Source #
Each bearer info describes outbound and inbound side of a point to point bearer.
Constructors
| BearerInfo | |
Fields
| |
Instances
| Show BearerInfo Source # | |
Defined in Simulation.Network.Snocket Methods showsPrec :: Int -> BearerInfo -> ShowS # show :: BearerInfo -> String # showList :: [BearerInfo] -> ShowS # | |
Error types.
Constructors
| IOErrConnectionAborted | |
| IOErrResourceExhausted |
data SuccessOrFailure #
data TimeoutDetail Source #
Constructors
| WaitingToConnect | |
| WaitingToBeAccepted |
Instances
| Show TimeoutDetail Source # | |
Defined in Simulation.Network.Snocket Methods showsPrec :: Int -> TimeoutDetail -> ShowS # show :: TimeoutDetail -> String # showList :: [TimeoutDetail] -> ShowS # | |
noAttenuation :: BearerInfo Source #
BearerInfo without attenuation and instantaneous connect delay. It also
using the production value of SDUSize.
makeFDRawBearer :: forall (m :: Type -> Type) addr. (MonadST m, MonadThrow m, MonadLabelledSTM m, Show addr) => Tracer m FDRawBearerTrace -> MakeRawBearer m (FD m (TestAddress addr)) Source #
Make a RawBearer from an FD. Since this is only used for testing, we
can bypass the requirement of moving raw bytes directly between file
descriptors and provided memory buffers, and we can instead covertly use
plain old ByteString under the hood. This allows us to use the
AttenuatedChannel inside the FD_, even though its send and receive
methods do not have the right format.
makeFDBearer :: forall addr (m :: Type -> Type). (MonadMonotonicTime m, MonadSTM m, MonadThrow m, Show addr) => MakeBearer m (FD m (TestAddress addr)) Source #
class GlobalAddressScheme addr where Source #
A type class for global IP address scheme. Every node in the simulation has an ephemeral address. Every node in the simulation has an implicit ipv4 and ipv6 address (if one is not bound by explicitly).
Methods
getAddressType :: TestAddress addr -> AddressType Source #
ephemeralAddress :: AddressType -> Natural -> TestAddress addr Source #
Instances
| GlobalAddressScheme Int Source # | All negative addresses are ephemeral. Even address are IPv4, while odd ones are IPv6. |
Defined in Simulation.Network.Snocket Methods getAddressType :: TestAddress Int -> AddressType Source # ephemeralAddress :: AddressType -> Natural -> TestAddress Int Source # | |
data AddressType Source #
Connection manager supports IPv4 and IPv6 addresses.
Constructors
| IPv4Address | |
| IPv6Address |
Instances
| Show AddressType Source # | |
Defined in Ouroboros.Network.ConnectionManager.Types Methods showsPrec :: Int -> AddressType -> ShowS # show :: AddressType -> String # showList :: [AddressType] -> ShowS # | |
data WithAddr addr event Source #
Constructors
| WithAddr | |
Fields
| |