Statistics
| Branch: | Tag: | Revision:

root / test.hs @ db079755

History | View | Annotate | Download (2.5 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
  [ ("PeerMap", fast, testPeerMap)
68
  , ("Container", fast, testContainer)
69
  , ("Instance", fast, testInstance)
70
  , ("Node", fast, testNode)
71
  , ("Text", fast, testText)
72
  , ("OpCodes", fast, testOpCodes)
73
  , ("Jobs", fast, testJobs)
74
  , ("Loader", fast, testLoader)
75
  , ("Cluster", slow, testCluster)
76
  ]
77

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