ouroboros-network:protocols-tests-lib
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Network.Protocol.Handshake.Test

Synopsis

Documentation

data VersionNumber Source #

Testing version number

Constructors

Version_0 
Version_1 
Version_2 

Instances

Instances details
Arbitrary VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Bounded VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Enum VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Show VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Eq VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Ord VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Arbitrary (AnyMessage (Handshake VersionNumber Term)) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Methods

arbitrary :: Gen (AnyMessage (Handshake VersionNumber Term)) #

shrink :: AnyMessage (Handshake VersionNumber Term) -> [AnyMessage (Handshake VersionNumber Term)] #

Eq (AnyMessage (Handshake VersionNumber Term)) Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Methods

(==) :: AnyMessage (Handshake VersionNumber Term) -> AnyMessage (Handshake VersionNumber Term) -> Bool #

(/=) :: AnyMessage (Handshake VersionNumber Term) -> AnyMessage (Handshake VersionNumber Term) -> Bool #

data VersionData Source #

Instances

Instances details
Arbitrary VersionData Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

CoArbitrary VersionData Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Methods

coarbitrary :: VersionData -> Gen b -> Gen b #

Generic VersionData Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Associated Types

type Rep VersionData 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

type Rep VersionData = D1 ('MetaData "VersionData" "Ouroboros.Network.Protocol.Handshake.Test" "ouroboros-network-0.23.0.0-inplace-protocols-tests-lib" 'False) (C1 ('MetaCons "VersionData" 'PrefixI 'True) (S1 ('MetaSel ('Just "dataVersion0") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: (S1 ('MetaSel ('Just "dataVersion1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool) :*: S1 ('MetaSel ('Just "dataVersion2") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool))))
Show VersionData Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Eq VersionData Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Acceptable VersionData Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Queryable VersionData Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

type Rep VersionData Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

type Rep VersionData = D1 ('MetaData "VersionData" "Ouroboros.Network.Protocol.Handshake.Test" "ouroboros-network-0.23.0.0-inplace-protocols-tests-lib" 'False) (C1 ('MetaCons "VersionData" 'PrefixI 'True) (S1 ('MetaSel ('Just "dataVersion0") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: (S1 ('MetaSel ('Just "dataVersion1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool) :*: S1 ('MetaSel ('Just "dataVersion2") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool))))

genValidVersion :: VersionNumber -> Gen (Version VersionData Bool) Source #

Generate a valid ProtocolVersion VersionNumber r

genInvalidVersion :: VersionNumber -> Gen (Version VersionData Bool) Source #

Generate an invalid ProtocolVersion VersionNumber r.

genValidVersions :: Gen (Versions VersionNumber VersionData Bool) Source #

Generate valid Versions.

genVersions :: Gen (Versions VersionNumber VersionData Bool) Source #

Generate possibly invalid Versions.

validVersion :: VersionNumber -> Version VersionData Bool -> Bool Source #

Check if a ProtocolVersion VersionNumber r is valid.

maybeAccept :: Accept a -> Maybe a Source #

prop_connect :: ArbitraryVersions -> Property Source #

Run a handshake protocol, without going via a channel.

prop_channel :: (MonadAsync m, MonadCatch m, MonadST m) => m (Channel m ByteString, Channel m ByteString) -> Versions VersionNumber VersionData Bool -> Versions VersionNumber VersionData Bool -> m Property Source #

Run a simple block-fetch client and server using connected channels.

prop_pipe_IO :: ArbitraryVersions -> Property Source #

Run prop_channel in the IO monad using local pipes.

prop_channel_asymmetric Source #

Arguments

:: (MonadAsync m, MonadMask m, MonadST m) 
=> m (Channel m ByteString, Channel m ByteString) 
-> Versions VersionNumber VersionData Bool

client versions

-> m Property 

Run a simple handshake client and server using connected channels. The server can only decode a subset of versions send by client. This test is using a fixed server Versions which can only accept a single version Version_1 (it cannot decode any other version).

prop_pipe_asymmetric_IO :: ArbitraryVersions -> Property Source #

Run prop_channel in the IO monad using local pipes.

prop_acceptable_symmetric :: (Acceptable vData, Eq vData) => vData -> vData -> Bool Source #

prop_query_version :: (MonadAsync m, MonadCatch m, Eq vData, Acceptable vData, Queryable vData, Show vData, Ord vNumber, Show vNumber) => m (Channel m ByteString, Channel m ByteString) -> Codec (Handshake vNumber Term) DeserialiseFailure m ByteString -> VersionDataCodec Term vNumber vData -> Versions vNumber vData Bool -> Versions vNumber vData Bool -> (vData -> vData) -> m Property Source #

Run a query for the server's supported version.

prop_acceptOrRefuse_symmetric :: forall vNumber vData r. (Acceptable vData, Eq vData, Show vData, Ord vNumber, Show vNumber) => Versions vNumber vData r -> Versions vNumber vData r -> Property Source #

Run prop_peerSharing_symmetric with SimNet.

| acceptOrRefuse is symmetric in the following sense:

Either both sides: * accept the same version and version data; or * refuse

The refuse reason might differ, although if one side refuses it with Refused the other side must refuse the same version.

prop_channel_simultaneous_open :: (MonadAsync m, MonadCatch m, Acceptable vData, Ord vNumber) => m (Channel m ByteString, Channel m ByteString) -> Codec (Handshake vNumber Term) DeserialiseFailure m ByteString -> VersionDataCodec Term vNumber vData -> Versions vNumber vData Bool -> Versions vNumber vData Bool -> m Property Source #

Run two handshake clients against each other, which simulates a TCP simultaneous open.

prop_channel_simultaneous_open_sim :: forall vNumber vData m. (Alternative (STM m), MonadAsync m, MonadDelay m, MonadLabelledSTM m, MonadMask m, MonadThrow (STM m), MonadTime m, MonadTimer m, Acceptable vData, Ord vNumber) => Codec (Handshake vNumber Term) DeserialiseFailure m ByteString -> VersionDataCodec Term vNumber vData -> Versions vNumber vData Bool -> Versions vNumber vData Bool -> m Property Source #

prop_codec_valid_cbor :: AnyMessage (Handshake VersionNumber Term) -> Property Source #

Check that the encoder produces a valid CBOR.