Statistics
| Branch: | Tag: | Revision:

root / htools / test.hs @ 9afa0de1

History | View | Annotate | Download (2.6 kB)

1
{-| Unittest runner for ganeti-htools
2

    
3
-}
4

    
5
{-
6

    
7
Copyright (C) 2009 Google Inc.
8

    
9
This program is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 2 of the License, or
12
(at your option) any later version.
13

    
14
This program is distributed in the hope that it will be useful, but
15
WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17
General Public License for more details.
18

    
19
You should have received a copy of the GNU General Public License
20
along with this program; if not, write to the Free Software
21
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22
02110-1301, USA.
23

    
24
-}
25

    
26
module Main(main) where
27

    
28
import Data.IORef
29
import Test.QuickCheck.Batch
30
import System.IO
31
import System.Exit
32
import System (getArgs)
33

    
34
import Ganeti.HTools.QC
35

    
36
fast :: TestOptions
37
fast = TestOptions
38
              { no_of_tests         = 500
39
              , length_of_tests     = 10
40
              , debug_tests         = False }
41

    
42
slow :: TestOptions
43
slow = TestOptions
44
              { no_of_tests         = 50
45
              , length_of_tests     = 100
46
              , debug_tests         = False }
47

    
48
incIORef :: IORef Int -> IO ()
49
incIORef ir = atomicModifyIORef ir (\x -> (x + 1, ()))
50

    
51
-- | Wrapper over a test runner with error counting
52
wrapTest :: IORef Int
53
         -> (TestOptions -> IO TestResult)
54
         -> TestOptions -> IO TestResult
55
wrapTest ir t to = do
56
    tr <- t to
57
    case tr of
58
      TestFailed _ _ -> incIORef ir
59
      TestAborted e -> do
60
        incIORef ir
61
        putStrLn ("Failure during test: <" ++ show e ++ ">")
62
      _ -> return ()
63
    return tr
64

    
65
allTests :: [(String, TestOptions, [TestOptions -> IO TestResult])]
66
allTests =
67
  [ ("Utils", fast, testUtils)
68
  , ("PeerMap", fast, testPeerMap)
69
  , ("Container", fast, testContainer)
70
  , ("Instance", fast, testInstance)
71
  , ("Node", fast, testNode)
72
  , ("Text", fast, testText)
73
  , ("OpCodes", fast, testOpCodes)
74
  , ("Jobs", fast, testJobs)
75
  , ("Loader", fast, testLoader)
76
  , ("Cluster", slow, testCluster)
77
  ]
78

    
79
main :: IO ()
80
main = do
81
  errs <- newIORef 0
82
  let wrap = map (wrapTest errs)
83
  args <- getArgs
84
  let tests = if null args
85
              then allTests
86
              else filter (\(name, _, _) -> name `elem` args) allTests
87
  mapM_ (\(name, opts, tl) -> runTests name opts (wrap tl)) tests
88
  terr <- readIORef errs
89
  (if terr > 0
90
   then do
91
     hPutStrLn stderr $ "A total of " ++ show terr ++ " tests failed."
92
     exitWith $ ExitFailure 1
93
   else putStrLn "All tests succeeded.")