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

NFData VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Methods

rnf :: VersionNumber -> () #

Bounded VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Enum VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Generic VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Associated Types

type Rep VersionNumber 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

type Rep VersionNumber = D1 ('MetaData "VersionNumber" "Ouroboros.Network.Protocol.Handshake.Test" "ouroboros-network-1.0.0.0-inplace-protocols-tests-lib" 'False) (C1 ('MetaCons "Version_0" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Version_1" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Version_2" 'PrefixI 'False) (U1 :: Type -> Type)))
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 #

type Rep VersionNumber Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

type Rep VersionNumber = D1 ('MetaData "VersionNumber" "Ouroboros.Network.Protocol.Handshake.Test" "ouroboros-network-1.0.0.0-inplace-protocols-tests-lib" 'False) (C1 ('MetaCons "Version_0" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Version_1" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Version_2" 'PrefixI 'False) (U1 :: Type -> Type)))

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 #

NFData VersionData Source # 
Instance details

Defined in Ouroboros.Network.Protocol.Handshake.Test

Methods

rnf :: VersionData -> () #

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-1.0.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-1.0.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, MonadEvaluate 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, MonadEvaluate 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, MonadEvaluate m, Eq vData, Acceptable vData, NFData vData, Queryable vData, Show vData, NFData vNumber, 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, MonadEvaluate m, Acceptable vData, NFData vData, NFData vNumber, 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, MonadEvaluate m, MonadMask m, MonadThrow (STM m), MonadTime m, MonadTimer m, Acceptable vData, NFData vData, NFData vNumber, 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.