on master help sign in
Re-review changes.
7c901dcJulian K. Arni
servant-client/test/Servant/StreamSpec.hs+11−14
@@ -29,12 +29,14 @@ module Servant.StreamSpec (spec) where
29import Control.Monad (replicateM_, void)
29import Control.Monad (replicateM_, void)
30import qualified Data.ByteString as BS
30import qualified Data.ByteString as BS
31import Data.Proxy
31import Data.Proxy
32−import GHC.Stats
32+import GHC.Stats (currentBytesUsed, getGCStats)
33import qualified Network.HTTP.Client as C
33import qualified Network.HTTP.Client as C
34import Prelude ()
34import Prelude ()
35import Prelude.Compat
35import Prelude.Compat
36+import System.IO (IOMode (ReadMode), withFile)
36import System.IO.Unsafe (unsafePerformIO)
37import System.IO.Unsafe (unsafePerformIO)
37import Test.Hspec
38import Test.Hspec
39+import Test.QuickCheck
38
40
39import Servant.API ((:<|>) ((:<|>)), (:>), JSON,
41import Servant.API ((:<|>) ((:<|>)), (:>), JSON,
40 NetstringFraming, NewlineFraming,
42 NetstringFraming, NewlineFraming,
@@ -44,7 +46,6 @@ import Servant.Client
44import Servant.ClientSpec (Person (..))
46import Servant.ClientSpec (Person (..))
45import qualified Servant.ClientSpec as CS
47import qualified Servant.ClientSpec as CS
46import Servant.Server
48import Servant.Server
47−import Data.ByteString.Random.MWC (random)
48
49
49
50
50spec :: Spec
51spec :: Spec
@@ -80,17 +81,17 @@ server = serve sapi
80 :<|> return (StreamGenerator lotsGenerator)
81 :<|> return (StreamGenerator lotsGenerator)
81 where
82 where
82 lotsGenerator f r = do
83 lotsGenerator f r = do
83− _ <- f ""
84+ f ""
85+ withFile "/dev/urandom" ReadMode $
84− streamFiveMBNTimes 1000 r
86+ \handle -> streamFiveMBNTimes handle 1000 r
85 return ()
87 return ()
86
88
87− streamFiveMBNTimes :: Int -> (BS.ByteString -> IO ()) -> IO ()
89+ streamFiveMBNTimes handle left sink
88− streamFiveMBNTimes left sink
89− | left <= 0 = return ()
90+ | left <= 0 = return ""
90 | otherwise = do
91 | otherwise = do
91− msg <- random (megabytes 5)
92+ msg <- BS.hGet handle (megabytes 5)
92 sink msg
93 sink msg
93− streamFiveMBNTimes (left - 1) sink
94+ streamFiveMBNTimes handle (left - 1) sink
94
95
95
96
96
97
@@ -128,12 +129,8 @@ streamSpec = beforeAll (CS.startWaiApp server) $ afterAll CS.endWaiApp $ do
128 Right (ResultStream res) <- runClient getGetALot baseUrl
129 Right (ResultStream res) <- runClient getGetALot baseUrl
129 let consumeNChunks n = replicateM_ n (res void)
130 let consumeNChunks n = replicateM_ n (res void)
130 consumeNChunks 900
131 consumeNChunks 900
131−#if MIN_VERSION_base(4,9,0)
132− memUsed <- max_mem_in_use_bytes <$> getRTSStats
133−#else
134 memUsed <- currentBytesUsed <$> getGCStats
132 memUsed <- currentBytesUsed <$> getGCStats
135−#endif
136 memUsed `shouldSatisfy` (< (megabytes 20))
133 memUsed `shouldSatisfy` (< (megabytes 20))
137
134
138megabytes :: Num a => a -> a
135megabytes :: Num a => a -> a
139−megabytes n = n * (1000 ^ (2 :: Int))
136+megabytes n = n * (1000 ^ 2)