packages feed

hedgehog-extras-0.6.2.0: test/Hedgehog/Extras/Stock/IO/Network/PortSpec.hs

module Hedgehog.Extras.Stock.IO.Network.PortSpec
  ( hprop_randomPort
  ) where

import           Data.Function
import           Data.Semigroup
import           Hedgehog (Property)
import qualified Hedgehog as H
import qualified Hedgehog.Extras as H
import qualified Hedgehog.Extras.Stock.IO.Network.Port as IO
import qualified Network.Socket as N
import           Text.Show

hprop_randomPort :: Property
hprop_randomPort =
  H.propertyOnce $ do
    let hostAddress = N.tupleToHostAddress (0, 0, 0, 0)

    pn <- H.evalIO $ IO.randomPort hostAddress

    H.note_ $ "Allocated port: " <> show pn

    -- Check that the port is available and can be bound to a socket.
    sock <- H.evalIO $ N.socket N.AF_INET N.Stream N.defaultProtocol
    H.evalIO $ N.bind sock $ N.SockAddrInet pn hostAddress
    H.evalIO $ N.close sock