module Haskoin.Util.Arbitrary.Message where
import Haskoin.Constants
import Haskoin.Network.Message
import Haskoin.Util.Arbitrary.Block
import Haskoin.Util.Arbitrary.Crypto
import Haskoin.Util.Arbitrary.Network
import Haskoin.Util.Arbitrary.Transaction
import Test.QuickCheck
arbitraryMessageHeader :: Gen MessageHeader
=
Word32 -> MessageCommand -> Word32 -> CheckSum32 -> MessageHeader
MessageHeader (Word32 -> MessageCommand -> Word32 -> CheckSum32 -> MessageHeader)
-> Gen Word32
-> Gen (MessageCommand -> Word32 -> CheckSum32 -> MessageHeader)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Word32
forall a. Arbitrary a => Gen a
arbitrary
Gen (MessageCommand -> Word32 -> CheckSum32 -> MessageHeader)
-> Gen MessageCommand
-> Gen (Word32 -> CheckSum32 -> MessageHeader)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen MessageCommand
arbitraryMessageCommand
Gen (Word32 -> CheckSum32 -> MessageHeader)
-> Gen Word32 -> Gen (CheckSum32 -> MessageHeader)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen Word32
forall a. Arbitrary a => Gen a
arbitrary
Gen (CheckSum32 -> MessageHeader)
-> Gen CheckSum32 -> Gen MessageHeader
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Gen CheckSum32
arbitraryCheckSum32
arbitraryMessage :: Network -> Gen Message
arbitraryMessage :: Network -> Gen Message
arbitraryMessage net :: Network
net =
[Gen Message] -> Gen Message
forall a. [Gen a] -> Gen a
oneof
[ Version -> Message
MVersion (Version -> Message) -> Gen Version -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Version
arbitraryVersion
, Message -> Gen Message
forall (m :: * -> *) a. Monad m => a -> m a
return Message
MVerAck
, Addr -> Message
MAddr (Addr -> Message) -> Gen Addr -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Addr
arbitraryAddr1
, Inv -> Message
MInv (Inv -> Message) -> Gen Inv -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Inv
arbitraryInv1
, GetData -> Message
MGetData (GetData -> Message) -> Gen GetData -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen GetData
arbitraryGetData
, NotFound -> Message
MNotFound (NotFound -> Message) -> Gen NotFound -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen NotFound
arbitraryNotFound
, GetBlocks -> Message
MGetBlocks (GetBlocks -> Message) -> Gen GetBlocks -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen GetBlocks
arbitraryGetBlocks
, GetHeaders -> Message
MGetHeaders (GetHeaders -> Message) -> Gen GetHeaders -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen GetHeaders
arbitraryGetHeaders
, Tx -> Message
MTx (Tx -> Message) -> Gen Tx -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Network -> Gen Tx
arbitraryTx Network
net
, Block -> Message
MBlock (Block -> Message) -> Gen Block -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Network -> Gen Block
arbitraryBlock Network
net
, MerkleBlock -> Message
MMerkleBlock (MerkleBlock -> Message) -> Gen MerkleBlock -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen MerkleBlock
arbitraryMerkleBlock
, Headers -> Message
MHeaders (Headers -> Message) -> Gen Headers -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Headers
arbitraryHeaders
, Message -> Gen Message
forall (m :: * -> *) a. Monad m => a -> m a
return Message
MGetAddr
, FilterLoad -> Message
MFilterLoad (FilterLoad -> Message) -> Gen FilterLoad -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen FilterLoad
arbitraryFilterLoad
, FilterAdd -> Message
MFilterAdd (FilterAdd -> Message) -> Gen FilterAdd -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen FilterAdd
arbitraryFilterAdd
, Message -> Gen Message
forall (m :: * -> *) a. Monad m => a -> m a
return Message
MFilterClear
, Ping -> Message
MPing (Ping -> Message) -> Gen Ping -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Ping
arbitraryPing
, Pong -> Message
MPong (Pong -> Message) -> Gen Pong -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Pong
arbitraryPong
, Alert -> Message
MAlert (Alert -> Message) -> Gen Alert -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Alert
arbitraryAlert
, Reject -> Message
MReject (Reject -> Message) -> Gen Reject -> Gen Message
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen Reject
arbitraryReject
, Message -> Gen Message
forall (m :: * -> *) a. Monad m => a -> m a
return Message
MSendHeaders
]