network-3.2.8.0: tests/Network/Socket/ByteString/LazySpec.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
module Network.Socket.ByteString.LazySpec (main, spec) where
import Prelude hiding (getContents)
import Control.Monad
import qualified Data.ByteString.Lazy as L
import Network.Socket
import Network.Socket.ByteString.Lazy
import Network.Test.Common
import Test.Hspec
main :: IO ()
main = hspec spec
spec :: Spec
spec = do
describe "send" $ do
it "works well" $ do
let server sock = recv sock 1024 `shouldReturn` lazyTestMsg
client sock = send sock lazyTestMsg
tcpTest client server
it "throws when closed" $ do
let server _ = return ()
client sock = do
close sock
send sock lazyTestMsg `shouldThrow` anyException
tcpTest client server
describe "sendAll" $ do
it "works well" $ do
let server sock = recv sock 1024 `shouldReturn` lazyTestMsg
client sock = sendAll sock lazyTestMsg
tcpTest client server
it "throws when closed" $ do
let server _ = return ()
client sock = do
close sock
sendAll sock lazyTestMsg `shouldThrow` anyException
tcpTest client server
describe "getContents" $ do
it "works well" $ do
let server sock = getContents sock `shouldReturn` lazyTestMsg
client sock = do
void $ send sock lazyTestMsg
shutdown sock ShutdownSend
tcpTest client server
it "returns empty string at EOF" $ do
let client s = getContents s `shouldReturn` L.empty
server s = shutdown s ShutdownSend
tcpTest client server
describe "recv" $ do
it "works well" $ do
let server sock = recv sock 1024 `shouldReturn` lazyTestMsg
client sock = send sock lazyTestMsg
tcpTest client server
it "throws when closed" $ do
let server sock = do
close sock
recv sock 1024 `shouldThrow` anyException
client sock = send sock lazyTestMsg
tcpTest client server
it "can treat overflow" $ do
let server sock = do
seg1 <- recv sock (L.length lazyTestMsg - 3)
seg2 <- recv sock 1024
let msg = L.append seg1 seg2
msg `shouldBe` lazyTestMsg
client sock = send sock lazyTestMsg
tcpTest client server
it "returns empty string at EOF" $ do
let client s = recv s 4096 `shouldReturn` L.empty
server s = shutdown s ShutdownSend
tcpTest client server