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 | ] |