Statistics
| Branch: | Tag: | Revision:

root / test.hs @ 49f9627a

History | View | Annotate | Download (2 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 Control.Monad
29
import Data.IORef
30
import Test.QuickCheck.Batch
31
import System.IO
32
import System.Exit
33

    
34
import Ganeti.HTools.QC
35

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

    
42

    
43
incIORef :: IORef Int -> IO ()
44
incIORef ir = atomicModifyIORef ir (\x -> (x + 1, ()))
45

    
46
-- | Wrapper over a test runner with error counting
47
wrapTest :: IORef Int
48
         -> (TestOptions -> IO TestResult)
49
         -> TestOptions -> IO TestResult
50
wrapTest ir t to = do
51
    tr <- t to
52
    case tr of
53
      TestFailed _ _ -> incIORef ir
54
      TestAborted _ -> incIORef ir
55
      _ -> return ()
56
    return tr
57

    
58
main :: IO ()
59
main = do
60
  errs <- newIORef 0
61
  let wrap = map (wrapTest errs)
62
  runTests "PeerMap" options $ wrap testPeerMap
63
  runTests "Container" options $ wrap testContainer
64
  runTests "Instance" options $ wrap testInstance
65
  runTests "Node" options $ wrap testNode
66
  runTests "Text" options $ wrap testText
67
  runTests "Cluster" options $ wrap testCluster
68
  terr <- readIORef errs
69
  (if terr > 0
70
   then do
71
     hPutStrLn stderr $ "A total of " ++ show terr ++ " tests failed."
72
     exitWith $ ExitFailure 1
73
   else putStrLn "All tests succeeded.")