Targets.hs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. {-# LANGUAGE OverloadedStrings #-}
  2. module Targets (tests) where
  3. import Distribution.TestSuite
  4. import Base (simpleTest)
  5. import Control.Concurrent(forkIO)
  6. import qualified System.IO.Uniform as U
  7. import System.Timeout (timeout)
  8. import qualified Data.ByteString.Char8 as C8
  9. tests :: IO [Test]
  10. tests = return [
  11. simpleTest "network" testNetwork,
  12. simpleTest "file" testFile,
  13. --Test framework fails on this test
  14. --actual script works as expected
  15. simpleTest "network TLS" testTls
  16. ]
  17. testNetwork :: IO Progress
  18. testNetwork = do
  19. recv <- U.bindPort 8888
  20. forkIO $ do
  21. s <- U.accept recv
  22. l <- U.uRead s 100
  23. U.uPut s l
  24. U.uClose s
  25. return ()
  26. r' <- timeout 1000000 $ do
  27. s <- U.connectToHost "127.0.0.1" 8888
  28. let l = "abcdef\n"
  29. U.uPut s l
  30. l' <- U.uRead s 100
  31. U.uClose s
  32. if l == l'
  33. then return . Finished $ Pass
  34. else return . Finished . Fail . C8.unpack $ l'
  35. U.closePort recv
  36. case r' of
  37. Just r -> return r
  38. Nothing -> return . Finished . Fail $ "Execution blocked"
  39. testFile :: IO Progress
  40. testFile = do
  41. let file = "test/testFile"
  42. s <- U.openFile file
  43. let l = "abcde\n"
  44. U.uPut s l
  45. U.uClose s
  46. s' <- U.openFile file
  47. l' <- U.uRead s' 100
  48. U.uClose s'
  49. if l == l'
  50. then return . Finished $ Pass
  51. else return . Finished . Fail . C8.unpack $ l'
  52. testTls :: IO Progress
  53. testTls = do
  54. recv <- U.bindPort 8888
  55. let set = U.TlsSettings "test/key.pem" "test/cert.pem" "test/dh.pem"
  56. forkIO $ do
  57. s' <- U.accept recv
  58. s <- U.startTls set s'
  59. l <- U.uRead s 100
  60. U.uPut s l
  61. U.uClose s
  62. return ()
  63. r' <- timeout 1000000 $ do
  64. s' <- U.connectToHost "127.0.0.1" 8888
  65. s <- U.startTls set s'
  66. let l = "abcdef\n"
  67. U.uPut s l
  68. l' <- U.uRead s 100
  69. U.uClose s
  70. if l == l'
  71. then return . Finished $ Pass
  72. else return . Finished . Fail . C8.unpack $ l'
  73. U.closePort recv
  74. case r' of
  75. Just r -> return r
  76. Nothing -> return . Finished . Fail $ "Execution blocked"