|
1 |
{-# LANGUAGE TemplateHaskell #-}
|
|
2 |
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
|
3 |
|
|
4 |
{-| Unittests for the @/proc/diskstats@ parser -}
|
|
5 |
|
|
6 |
{-
|
|
7 |
|
|
8 |
Copyright (C) 2013 Google Inc.
|
|
9 |
|
|
10 |
This program is free software; you can redistribute it and/or modify
|
|
11 |
it under the terms of the GNU General Public License as published by
|
|
12 |
the Free Software Foundation; either version 2 of the License, or
|
|
13 |
(at your option) any later version.
|
|
14 |
|
|
15 |
This program is distributed in the hope that it will be useful, but
|
|
16 |
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
17 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
18 |
General Public License for more details.
|
|
19 |
|
|
20 |
You should have received a copy of the GNU General Public License
|
|
21 |
along with this program; if not, write to the Free Software
|
|
22 |
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
23 |
02110-1301, USA.
|
|
24 |
|
|
25 |
-}
|
|
26 |
|
|
27 |
module Test.Ganeti.Block.Diskstats.Parser (testBlock_Diskstats_Parser) where
|
|
28 |
|
|
29 |
import Test.QuickCheck as QuickCheck hiding (Result)
|
|
30 |
import Test.HUnit
|
|
31 |
|
|
32 |
import Test.Ganeti.TestHelper
|
|
33 |
import Test.Ganeti.TestCommon
|
|
34 |
|
|
35 |
import Control.Applicative ((<*>), (<$>))
|
|
36 |
import qualified Data.Attoparsec.Text as A
|
|
37 |
import Data.Text (pack)
|
|
38 |
import Text.Printf
|
|
39 |
|
|
40 |
import Ganeti.Block.Diskstats.Parser (diskstatsParser)
|
|
41 |
import Ganeti.Block.Diskstats.Types
|
|
42 |
|
|
43 |
{-# ANN module "HLint: ignore Use camelCase" #-}
|
|
44 |
|
|
45 |
|
|
46 |
-- | Test a diskstats.
|
|
47 |
case_diskstats :: Assertion
|
|
48 |
case_diskstats = testParser diskstatsParser "proc_diskstats.txt"
|
|
49 |
[ Diskstats 1 0 "ram0" 0 0 0 0 0 0 0 0 0 0 0
|
|
50 |
, Diskstats 1 1 "ram1" 0 0 0 0 0 0 0 0 0 0 0
|
|
51 |
, Diskstats 1 2 "ram2" 0 0 0 0 0 0 0 0 0 0 0
|
|
52 |
, Diskstats 1 3 "ram3" 0 0 0 0 0 0 0 0 0 0 0
|
|
53 |
, Diskstats 1 4 "ram4" 0 0 0 0 0 0 0 0 0 0 0
|
|
54 |
, Diskstats 1 5 "ram5" 0 0 0 0 0 0 0 0 0 0 0
|
|
55 |
, Diskstats 1 6 "ram6" 0 0 0 0 0 0 0 0 0 0 0
|
|
56 |
, Diskstats 1 7 "ram7" 0 0 0 0 0 0 0 0 0 0 0
|
|
57 |
, Diskstats 1 8 "ram8" 0 0 0 0 0 0 0 0 0 0 0
|
|
58 |
, Diskstats 1 9 "ram9" 0 0 0 0 0 0 0 0 0 0 0
|
|
59 |
, Diskstats 1 10 "ram10" 0 0 0 0 0 0 0 0 0 0 0
|
|
60 |
, Diskstats 1 11 "ram11" 0 0 0 0 0 0 0 0 0 0 0
|
|
61 |
, Diskstats 1 12 "ram12" 0 0 0 0 0 0 0 0 0 0 0
|
|
62 |
, Diskstats 1 13 "ram13" 0 0 0 0 0 0 0 0 0 0 0
|
|
63 |
, Diskstats 1 14 "ram14" 0 0 0 0 0 0 0 0 0 0 0
|
|
64 |
, Diskstats 1 15 "ram15" 0 0 0 0 0 0 0 0 0 0 0
|
|
65 |
, Diskstats 7 0 "loop0" 0 0 0 0 0 0 0 0 0 0 0
|
|
66 |
, Diskstats 7 1 "loop1" 0 0 0 0 0 0 0 0 0 0 0
|
|
67 |
, Diskstats 7 2 "loop2" 0 0 0 0 0 0 0 0 0 0 0
|
|
68 |
, Diskstats 7 3 "loop3" 0 0 0 0 0 0 0 0 0 0 0
|
|
69 |
, Diskstats 7 4 "loop4" 0 0 0 0 0 0 0 0 0 0 0
|
|
70 |
, Diskstats 7 5 "loop5" 0 0 0 0 0 0 0 0 0 0 0
|
|
71 |
, Diskstats 7 6 "loop6" 0 0 0 0 0 0 0 0 0 0 0
|
|
72 |
, Diskstats 7 7 "loop7" 0 0 0 0 0 0 0 0 0 0 0
|
|
73 |
, Diskstats 8 0 "sda" 89502 4833 4433387 89244 519115 62738 16059726 465120 0
|
|
74 |
149148 554564
|
|
75 |
, Diskstats 8 1 "sda1" 505 2431 8526 132 478 174 124358 8500 0 340 8632
|
|
76 |
, Diskstats 8 2 "sda2" 2 0 4 4 0 0 0 0 0 4 4
|
|
77 |
, Diskstats 8 5 "sda5" 88802 2269 4422249 89032 453703 62564 15935368 396244 0
|
|
78 |
90064 485500
|
|
79 |
, Diskstats 252 0 "dm-0" 90978 0 4420002 158632 582226 0 15935368 5592012 0
|
|
80 |
167688 5750652
|
|
81 |
, Diskstats 252 1 "dm-1" 88775 0 4402378 157204 469594 0 15136008 4910424 0
|
|
82 |
164556 5067640
|
|
83 |
, Diskstats 252 2 "dm-2" 1956 0 15648 1052 99920 0 799360 682492 0 4516 683552
|
|
84 |
, Diskstats 8 16 "sdb" 0 0 0 0 0 0 0 0 0 0 0
|
|
85 |
]
|
|
86 |
|
|
87 |
-- | The instance for generating arbitrary Diskstats
|
|
88 |
instance Arbitrary Diskstats where
|
|
89 |
arbitrary =
|
|
90 |
Diskstats <$> genNonNegative <*> genNonNegative <*> genName
|
|
91 |
<*> genNonNegative <*> genNonNegative <*> genNonNegative
|
|
92 |
<*> genNonNegative <*> genNonNegative <*> genNonNegative
|
|
93 |
<*> genNonNegative <*> genNonNegative <*> genNonNegative
|
|
94 |
<*> genNonNegative <*> genNonNegative
|
|
95 |
|
|
96 |
-- | Serialize a list of Diskstats in a parsable way
|
|
97 |
serializeDiskstatsList :: [Diskstats] -> String
|
|
98 |
serializeDiskstatsList = concatMap serializeDiskstats
|
|
99 |
|
|
100 |
-- | Serialize a Diskstats in a parsable way
|
|
101 |
serializeDiskstats :: Diskstats -> String
|
|
102 |
serializeDiskstats ds =
|
|
103 |
printf "\t%d\t%d %s %d %d %d %d %d %d %d %d %d %d %d\n"
|
|
104 |
(dsMajor ds) (dsMinor ds) (dsName ds) (dsReads ds) (dsMergedReads ds)
|
|
105 |
(dsSecRead ds) (dsTimeRead ds) (dsWrites ds) (dsMergedWrites ds)
|
|
106 |
(dsSecWritten ds) (dsTimeWrite ds) (dsIos ds) (dsTimeIO ds) (dsWIOmillis ds)
|
|
107 |
|
|
108 |
-- | Test whether an arbitrary Diskstats is parsed correctly
|
|
109 |
prop_diskstats :: [Diskstats] -> Property
|
|
110 |
prop_diskstats dsList =
|
|
111 |
case A.parseOnly diskstatsParser $ pack (serializeDiskstatsList dsList) of
|
|
112 |
Left msg -> failTest $ "Parsing failed: " ++ msg
|
|
113 |
Right obtained -> dsList ==? obtained
|
|
114 |
|
|
115 |
testSuite "Block/Diskstats/Parser"
|
|
116 |
[ 'case_diskstats,
|
|
117 |
'prop_diskstats
|
|
118 |
]
|