Statistics
| Branch: | Tag: | Revision:

root / test / hs / Test / Ganeti / Block / Diskstats / Parser.hs @ 92070017

History | View | Annotate | Download (4.5 kB)

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