Statistics
| Branch: | Tag: | Revision:

root / htools / test.hs @ 9afa0de1

History | View | Annotate | Download (2.6 kB)

1 9b1e1cc9 Iustin Pop
{-| Unittest runner for ganeti-htools
2 15f4c8ca Iustin Pop
3 15f4c8ca Iustin Pop
-}
4 15f4c8ca Iustin Pop
5 e2fa2baf Iustin Pop
{-
6 e2fa2baf Iustin Pop
7 e2fa2baf Iustin Pop
Copyright (C) 2009 Google Inc.
8 e2fa2baf Iustin Pop
9 e2fa2baf Iustin Pop
This program is free software; you can redistribute it and/or modify
10 e2fa2baf Iustin Pop
it under the terms of the GNU General Public License as published by
11 e2fa2baf Iustin Pop
the Free Software Foundation; either version 2 of the License, or
12 e2fa2baf Iustin Pop
(at your option) any later version.
13 e2fa2baf Iustin Pop
14 e2fa2baf Iustin Pop
This program is distributed in the hope that it will be useful, but
15 e2fa2baf Iustin Pop
WITHOUT ANY WARRANTY; without even the implied warranty of
16 e2fa2baf Iustin Pop
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 e2fa2baf Iustin Pop
General Public License for more details.
18 e2fa2baf Iustin Pop
19 e2fa2baf Iustin Pop
You should have received a copy of the GNU General Public License
20 e2fa2baf Iustin Pop
along with this program; if not, write to the Free Software
21 e2fa2baf Iustin Pop
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 e2fa2baf Iustin Pop
02110-1301, USA.
23 e2fa2baf Iustin Pop
24 e2fa2baf Iustin Pop
-}
25 e2fa2baf Iustin Pop
26 15f4c8ca Iustin Pop
module Main(main) where
27 15f4c8ca Iustin Pop
28 38f536cb Iustin Pop
import Data.IORef
29 15f4c8ca Iustin Pop
import Test.QuickCheck.Batch
30 38f536cb Iustin Pop
import System.IO
31 38f536cb Iustin Pop
import System.Exit
32 06fe0cea Iustin Pop
import System (getArgs)
33 38f536cb Iustin Pop
34 15f4c8ca Iustin Pop
import Ganeti.HTools.QC
35 15f4c8ca Iustin Pop
36 06fe0cea Iustin Pop
fast :: TestOptions
37 06fe0cea Iustin Pop
fast = TestOptions
38 3fea6959 Iustin Pop
              { no_of_tests         = 500
39 3fea6959 Iustin Pop
              , length_of_tests     = 10
40 3fea6959 Iustin Pop
              , debug_tests         = False }
41 15f4c8ca Iustin Pop
42 06fe0cea Iustin Pop
slow :: TestOptions
43 06fe0cea Iustin Pop
slow = TestOptions
44 3fea6959 Iustin Pop
              { no_of_tests         = 50
45 3fea6959 Iustin Pop
              , length_of_tests     = 100
46 3fea6959 Iustin Pop
              , debug_tests         = False }
47 38f536cb Iustin Pop
48 38f536cb Iustin Pop
incIORef :: IORef Int -> IO ()
49 38f536cb Iustin Pop
incIORef ir = atomicModifyIORef ir (\x -> (x + 1, ()))
50 38f536cb Iustin Pop
51 38f536cb Iustin Pop
-- | Wrapper over a test runner with error counting
52 38f536cb Iustin Pop
wrapTest :: IORef Int
53 38f536cb Iustin Pop
         -> (TestOptions -> IO TestResult)
54 38f536cb Iustin Pop
         -> TestOptions -> IO TestResult
55 38f536cb Iustin Pop
wrapTest ir t to = do
56 38f536cb Iustin Pop
    tr <- t to
57 38f536cb Iustin Pop
    case tr of
58 38f536cb Iustin Pop
      TestFailed _ _ -> incIORef ir
59 8c5652f6 Iustin Pop
      TestAborted e -> do
60 8c5652f6 Iustin Pop
        incIORef ir
61 8c5652f6 Iustin Pop
        putStrLn ("Failure during test: <" ++ show e ++ ">")
62 38f536cb Iustin Pop
      _ -> return ()
63 38f536cb Iustin Pop
    return tr
64 38f536cb Iustin Pop
65 06fe0cea Iustin Pop
allTests :: [(String, TestOptions, [TestOptions -> IO TestResult])]
66 06fe0cea Iustin Pop
allTests =
67 691dcd2a Iustin Pop
  [ ("Utils", fast, testUtils)
68 691dcd2a Iustin Pop
  , ("PeerMap", fast, testPeerMap)
69 06fe0cea Iustin Pop
  , ("Container", fast, testContainer)
70 06fe0cea Iustin Pop
  , ("Instance", fast, testInstance)
71 06fe0cea Iustin Pop
  , ("Node", fast, testNode)
72 06fe0cea Iustin Pop
  , ("Text", fast, testText)
73 06fe0cea Iustin Pop
  , ("OpCodes", fast, testOpCodes)
74 db079755 Iustin Pop
  , ("Jobs", fast, testJobs)
75 c088674b Iustin Pop
  , ("Loader", fast, testLoader)
76 06fe0cea Iustin Pop
  , ("Cluster", slow, testCluster)
77 06fe0cea Iustin Pop
  ]
78 06fe0cea Iustin Pop
79 38f536cb Iustin Pop
main :: IO ()
80 15f4c8ca Iustin Pop
main = do
81 38f536cb Iustin Pop
  errs <- newIORef 0
82 3a3c1eb4 Iustin Pop
  let wrap = map (wrapTest errs)
83 06fe0cea Iustin Pop
  args <- getArgs
84 06fe0cea Iustin Pop
  let tests = if null args
85 06fe0cea Iustin Pop
              then allTests
86 06fe0cea Iustin Pop
              else filter (\(name, _, _) -> name `elem` args) allTests
87 06fe0cea Iustin Pop
  mapM_ (\(name, opts, tl) -> runTests name opts (wrap tl)) tests
88 38f536cb Iustin Pop
  terr <- readIORef errs
89 3a3c1eb4 Iustin Pop
  (if terr > 0
90 38f536cb Iustin Pop
   then do
91 38f536cb Iustin Pop
     hPutStrLn stderr $ "A total of " ++ show terr ++ " tests failed."
92 38f536cb Iustin Pop
     exitWith $ ExitFailure 1
93 38f536cb Iustin Pop
   else putStrLn "All tests succeeded.")