Statistics
| Branch: | Tag: | Revision:

root / test / hs / Test / Ganeti / Block / Drbd / Types.hs @ eb62691c

History | View | Annotate | Download (5.1 kB)

1 9de303af Michele Tartara
{-# LANGUAGE TemplateHaskell #-}
2 9de303af Michele Tartara
{-# OPTIONS_GHC -fno-warn-orphans #-}
3 9de303af Michele Tartara
4 9de303af Michele Tartara
{-| Unittests for the types representing DRBD status -}
5 9de303af Michele Tartara
6 9de303af Michele Tartara
{-
7 9de303af Michele Tartara
8 9de303af Michele Tartara
Copyright (C) 2012 Google Inc.
9 9de303af Michele Tartara
10 9de303af Michele Tartara
This program is free software; you can redistribute it and/or modify
11 9de303af Michele Tartara
it under the terms of the GNU General Public License as published by
12 9de303af Michele Tartara
the Free Software Foundation; either version 2 of the License, or
13 9de303af Michele Tartara
(at your option) any later version.
14 9de303af Michele Tartara
15 9de303af Michele Tartara
This program is distributed in the hope that it will be useful, but
16 9de303af Michele Tartara
WITHOUT ANY WARRANTY; without even the implied warranty of
17 9de303af Michele Tartara
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18 9de303af Michele Tartara
General Public License for more details.
19 9de303af Michele Tartara
20 9de303af Michele Tartara
You should have received a copy of the GNU General Public License
21 9de303af Michele Tartara
along with this program; if not, write to the Free Software
22 9de303af Michele Tartara
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 9de303af Michele Tartara
02110-1301, USA.
24 9de303af Michele Tartara
25 9de303af Michele Tartara
-}
26 9de303af Michele Tartara
27 9de303af Michele Tartara
module Test.Ganeti.Block.Drbd.Types (testBlock_Drbd_Types) where
28 9de303af Michele Tartara
29 9de303af Michele Tartara
import Test.QuickCheck
30 9de303af Michele Tartara
31 9de303af Michele Tartara
import Test.Ganeti.TestHelper
32 9de303af Michele Tartara
import Test.Ganeti.TestCommon
33 9de303af Michele Tartara
34 9de303af Michele Tartara
import Text.JSON
35 9de303af Michele Tartara
import Text.Printf
36 9de303af Michele Tartara
37 9de303af Michele Tartara
import Ganeti.JSON
38 9de303af Michele Tartara
39 9de303af Michele Tartara
import Ganeti.Block.Drbd.Types
40 9de303af Michele Tartara
41 9de303af Michele Tartara
{-# ANN module "HLint: ignore Use camelCase" #-}
42 9de303af Michele Tartara
{-# ANN module "HLint: ignore Use string literal" #-}
43 9de303af Michele Tartara
44 9de303af Michele Tartara
-- * Arbitrary instances
45 9de303af Michele Tartara
46 9de303af Michele Tartara
$(genArbitrary ''ConnState)
47 9de303af Michele Tartara
$(genArbitrary ''Role)
48 9de303af Michele Tartara
$(genArbitrary ''DiskState)
49 9de303af Michele Tartara
$(genArbitrary ''SizeUnit)
50 9de303af Michele Tartara
$(genArbitrary ''TimeUnit)
51 9de303af Michele Tartara
52 9de303af Michele Tartara
-- | Natural numbers generator.
53 9de303af Michele Tartara
natural :: Gen Int
54 9de303af Michele Tartara
natural = choose (0, maxBound :: Int)
55 9de303af Michele Tartara
56 9de303af Michele Tartara
-- | Generator of percentages.
57 9de303af Michele Tartara
percent :: Gen Double
58 9de303af Michele Tartara
percent = choose (0 :: Double, 100 :: Double)
59 9de303af Michele Tartara
60 9de303af Michele Tartara
-- | Generator of write order flags.
61 9de303af Michele Tartara
wOrderFlag :: Gen Char
62 9de303af Michele Tartara
wOrderFlag = elements ['b', 'f', 'd', 'n']
63 9de303af Michele Tartara
64 9de303af Michele Tartara
-- | Property for testing the JSON serialization of a DeviceInfo.
65 9de303af Michele Tartara
prop_DeviceInfo :: Property
66 9de303af Michele Tartara
prop_DeviceInfo = do
67 9de303af Michele Tartara
  minor <- natural
68 9de303af Michele Tartara
  state <- arbitrary
69 9de303af Michele Tartara
  locRole <- arbitrary
70 9de303af Michele Tartara
  remRole <- arbitrary
71 9de303af Michele Tartara
  locState <- arbitrary
72 9de303af Michele Tartara
  remState <- arbitrary
73 9de303af Michele Tartara
  alg <- choose ('A','C')
74 9de303af Michele Tartara
  ns <- natural
75 9de303af Michele Tartara
  nr <- natural
76 9de303af Michele Tartara
  dw <- natural
77 9de303af Michele Tartara
  dr <- natural
78 9de303af Michele Tartara
  al <- natural
79 9de303af Michele Tartara
  bm <- natural
80 9de303af Michele Tartara
  lc <- natural
81 9de303af Michele Tartara
  pe <- natural
82 9de303af Michele Tartara
  ua <- natural
83 9de303af Michele Tartara
  ap <- natural
84 9de303af Michele Tartara
  ep <- genMaybe natural
85 9de303af Michele Tartara
  wo <- genMaybe wOrderFlag
86 9de303af Michele Tartara
  oos <- genMaybe natural
87 eb62691c Michele Tartara
  inst <- genMaybe arbitrary
88 9de303af Michele Tartara
  let obtained =
89 9de303af Michele Tartara
          showJSON $
90 9de303af Michele Tartara
            DeviceInfo minor state (LocalRemote locRole remRole)
91 9de303af Michele Tartara
              (LocalRemote locState remState) alg "r----" perfInd
92 9de303af Michele Tartara
              Nothing
93 9de303af Michele Tartara
              Nothing
94 9de303af Michele Tartara
              Nothing
95 eb62691c Michele Tartara
              inst
96 9de303af Michele Tartara
      perfInd =
97 9de303af Michele Tartara
        PerfIndicators ns nr dw dr al bm lc pe ua ap ep wo oos
98 9de303af Michele Tartara
      expected =
99 9de303af Michele Tartara
        makeObj
100 9de303af Michele Tartara
          [ ("minor", showJSON minor)
101 9de303af Michele Tartara
          , ("connectionState", showJSON state)
102 9de303af Michele Tartara
          , ("localRole", showJSON locRole)
103 9de303af Michele Tartara
          , ("remoteRole", showJSON remRole)
104 9de303af Michele Tartara
          , ("localState", showJSON locState)
105 9de303af Michele Tartara
          , ("remoteState", showJSON remState)
106 9de303af Michele Tartara
          , ("replicationProtocol", showJSON alg)
107 9de303af Michele Tartara
          , ("ioFlags", showJSON "r----")
108 9de303af Michele Tartara
          , ("perfIndicators", showJSON perfInd)
109 eb62691c Michele Tartara
          , ("instance", maybe JSNull showJSON inst)
110 9de303af Michele Tartara
          ]
111 9de303af Michele Tartara
  obtained ==? expected
112 9de303af Michele Tartara
113 9de303af Michele Tartara
-- | Property for testing the JSON serialization of a PerfIndicators.
114 9de303af Michele Tartara
prop_PerfIndicators :: Property
115 9de303af Michele Tartara
prop_PerfIndicators = do
116 9de303af Michele Tartara
  ns <- natural
117 9de303af Michele Tartara
  nr <- natural
118 9de303af Michele Tartara
  dw <- natural
119 9de303af Michele Tartara
  dr <- natural
120 9de303af Michele Tartara
  al <- natural
121 9de303af Michele Tartara
  bm <- natural
122 9de303af Michele Tartara
  lc <- natural
123 9de303af Michele Tartara
  pe <- natural
124 9de303af Michele Tartara
  ua <- natural
125 9de303af Michele Tartara
  ap <- natural
126 9de303af Michele Tartara
  ep <- genMaybe natural
127 9de303af Michele Tartara
  wo <- genMaybe wOrderFlag
128 9de303af Michele Tartara
  oos <- genMaybe natural
129 9de303af Michele Tartara
  let expected =
130 9de303af Michele Tartara
        showJSON $
131 9de303af Michele Tartara
          PerfIndicators ns nr dw dr al bm lc pe ua ap ep wo oos
132 9de303af Michele Tartara
      obtained =
133 9de303af Michele Tartara
        optFieldsToObj
134 9de303af Michele Tartara
          [ Just ("networkSend", showJSON ns)
135 9de303af Michele Tartara
          , Just ("networkReceive", showJSON nr)
136 9de303af Michele Tartara
          , Just ("diskWrite", showJSON dw)
137 9de303af Michele Tartara
          , Just ("diskRead", showJSON dr)
138 9de303af Michele Tartara
          , Just ("activityLog", showJSON al)
139 9de303af Michele Tartara
          , Just ("bitMap", showJSON bm)
140 9de303af Michele Tartara
          , Just ("localCount", showJSON lc)
141 9de303af Michele Tartara
          , Just ("pending", showJSON pe)
142 9de303af Michele Tartara
          , Just ("unacknowledged", showJSON ua)
143 9de303af Michele Tartara
          , Just ("applicationPending", showJSON ap)
144 9de303af Michele Tartara
          , optionalJSField "epochs" ep
145 9de303af Michele Tartara
          , optionalJSField "writeOrder" wo
146 9de303af Michele Tartara
          , optionalJSField "outOfSync" oos
147 9de303af Michele Tartara
          ]
148 9de303af Michele Tartara
  obtained ==? expected
149 9de303af Michele Tartara
150 9de303af Michele Tartara
-- | Function for testing the JSON serialization of a SyncStatus.
151 9de303af Michele Tartara
prop_SyncStatus :: Property
152 9de303af Michele Tartara
prop_SyncStatus = do
153 9de303af Michele Tartara
  perc <- percent
154 9de303af Michele Tartara
  numer <- natural
155 9de303af Michele Tartara
  denom <- natural
156 9de303af Michele Tartara
  sizeU1 <- arbitrary
157 9de303af Michele Tartara
  h <- choose (0, 23)
158 9de303af Michele Tartara
  m <- choose (0, 59)
159 9de303af Michele Tartara
  s <- choose (0, 59)
160 9de303af Michele Tartara
  sp <- natural
161 9de303af Michele Tartara
  wa <- genMaybe natural
162 9de303af Michele Tartara
  sizeU2 <- arbitrary
163 9de303af Michele Tartara
  timeU <- arbitrary
164 9de303af Michele Tartara
  let obtained = showJSON $
165 9de303af Michele Tartara
        SyncStatus perc numer denom sizeU1 (Time h m s) sp wa sizeU2 timeU
166 9de303af Michele Tartara
      expected = optFieldsToObj
167 9de303af Michele Tartara
        [ Just ("percentage", showJSON perc)
168 9de303af Michele Tartara
        , Just ("progress", showJSON $ show numer ++ "/" ++ show denom)
169 9de303af Michele Tartara
        , Just ("progressUnit", showJSON sizeU1)
170 9de303af Michele Tartara
        , Just ("timeToFinish", showJSON
171 9de303af Michele Tartara
            (printf "%02d:%02d:%02d" h m s :: String))
172 9de303af Michele Tartara
        , Just ("speed", showJSON sp)
173 9de303af Michele Tartara
        , optionalJSField "want" wa
174 9de303af Michele Tartara
        , Just ("speedUnit", showJSON $ show sizeU2 ++ "/" ++ show timeU)
175 9de303af Michele Tartara
        ]
176 9de303af Michele Tartara
  obtained ==? expected
177 9de303af Michele Tartara
178 9de303af Michele Tartara
testSuite "Block/Drbd/Types"
179 9de303af Michele Tartara
          [ 'prop_DeviceInfo
180 9de303af Michele Tartara
          , 'prop_PerfIndicators
181 9de303af Michele Tartara
          , 'prop_SyncStatus
182 9de303af Michele Tartara
          ]