diff -r 95efe37482e3 -r 4e78ad846fb6 gameServer/stresstest.hs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gameServer/stresstest.hs Wed Feb 18 15:04:40 2009 +0000 @@ -0,0 +1,51 @@ +{-# LANGUAGE CPP #-} + +module Main where + +import IO +import System.IO +import Control.Concurrent +import Network +import Control.Exception +import Control.Monad +import System.Random + +#if !defined(mingw32_HOST_OS) +import System.Posix +#endif + +session1 nick room = ["NICK", nick, "", "PROTO", "24", "", "CHAT_STRING", "lobby 1", "", "CREATE", room, "", "CHAT_STRING", "room 1", "", "QUIT", "bye-bye", ""] +session2 nick room = ["NICK", nick, "", "PROTO", "24", "", "LIST", "", "JOIN", room, "", "CHAT_STRING", "room 2", "", "PART", "", "CHAT_STRING", "lobby after part", "", "QUIT", "bye-bye", ""] +session3 nick room = ["NICK", nick, "", "PROTO", "24", "", "LIST", "", "JOIN", room, "", "CHAT_STRING", "room 2", "", "QUIT", "bye-bye", ""] + +emulateSession sock s = do + mapM_ (\x -> hPutStrLn sock x >> hFlush sock >> randomRIO (50000::Int, 90000) >>= threadDelay) s + hFlush sock + threadDelay 225000 + +testing = Control.Exception.handle (\e -> putStrLn $ show e) $ do + putStrLn "Start" + sock <- connectTo "127.0.0.1" (PortNumber 46631) + + num1 <- randomRIO (70000::Int, 70100) + num2 <- randomRIO (0::Int, 2) + num3 <- randomRIO (0::Int, 5) + let nick1 = show $ num1 + let room1 = show $ num2 + case num2 of + 0 -> emulateSession sock $ session1 nick1 room1 + 1 -> emulateSession sock $ session2 nick1 room1 + 2 -> emulateSession sock $ session3 nick1 room1 + hClose sock + putStrLn "Finish" + +forks = forever $ do + delay <- randomRIO (10000::Int, 19000) + threadDelay delay + forkIO testing + +main = withSocketsDo $ do +#if !defined(mingw32_HOST_OS) + installHandler sigPIPE Ignore Nothing; +#endif + forks