Statistics
| Branch: | Tag: | Revision:

root / test / hs / Test / Ganeti / Query / Aliases.hs @ 015f1517

History | View | Annotate | Download (2.6 kB)

1 3fd38382 Hrvoje Ribicic
{-# LANGUAGE TemplateHaskell #-}
2 3fd38382 Hrvoje Ribicic
{-# OPTIONS_GHC -fno-warn-orphans #-}
3 3fd38382 Hrvoje Ribicic
4 3fd38382 Hrvoje Ribicic
{-| Unittests for query aliases.
5 3fd38382 Hrvoje Ribicic
6 3fd38382 Hrvoje Ribicic
-}
7 3fd38382 Hrvoje Ribicic
8 3fd38382 Hrvoje Ribicic
{-
9 3fd38382 Hrvoje Ribicic
10 3fd38382 Hrvoje Ribicic
Copyright (C) 2013 Google Inc.
11 3fd38382 Hrvoje Ribicic
12 3fd38382 Hrvoje Ribicic
This program is free software; you can redistribute it and/or modify
13 3fd38382 Hrvoje Ribicic
it under the terms of the GNU General Public License as published by
14 3fd38382 Hrvoje Ribicic
the Free Software Foundation; either version 2 of the License, or
15 3fd38382 Hrvoje Ribicic
(at your option) any later version.
16 3fd38382 Hrvoje Ribicic
17 3fd38382 Hrvoje Ribicic
This program is distributed in the hope that it will be useful, but
18 3fd38382 Hrvoje Ribicic
WITHOUT ANY WARRANTY; without even the implied warranty of
19 3fd38382 Hrvoje Ribicic
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20 3fd38382 Hrvoje Ribicic
General Public License for more details.
21 3fd38382 Hrvoje Ribicic
22 3fd38382 Hrvoje Ribicic
You should have received a copy of the GNU General Public License
23 3fd38382 Hrvoje Ribicic
along with this program; if not, write to the Free Software
24 3fd38382 Hrvoje Ribicic
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 3fd38382 Hrvoje Ribicic
02110-1301, USA.
26 3fd38382 Hrvoje Ribicic
27 3fd38382 Hrvoje Ribicic
-}
28 3fd38382 Hrvoje Ribicic
29 3fd38382 Hrvoje Ribicic
module Test.Ganeti.Query.Aliases
30 3fd38382 Hrvoje Ribicic
  ( testQuery_Aliases
31 3fd38382 Hrvoje Ribicic
  ) where
32 3fd38382 Hrvoje Ribicic
33 3fd38382 Hrvoje Ribicic
import Data.List
34 3fd38382 Hrvoje Ribicic
35 3fd38382 Hrvoje Ribicic
import Test.Ganeti.TestHelper
36 3fd38382 Hrvoje Ribicic
import Test.HUnit
37 3fd38382 Hrvoje Ribicic
38 3fd38382 Hrvoje Ribicic
import Ganeti.Query.Common ()
39 3fd38382 Hrvoje Ribicic
import qualified Ganeti.Query.Instance as I
40 3fd38382 Hrvoje Ribicic
import Ganeti.Query.Language
41 3fd38382 Hrvoje Ribicic
import Ganeti.Query.Types
42 3fd38382 Hrvoje Ribicic
43 3fd38382 Hrvoje Ribicic
{-# ANN module "HLint: ignore Use camelCase" #-}
44 3fd38382 Hrvoje Ribicic
45 3fd38382 Hrvoje Ribicic
-- | Converts field list to field name list
46 3fd38382 Hrvoje Ribicic
toFieldNameList :: FieldList a b -> [FieldName]
47 3fd38382 Hrvoje Ribicic
toFieldNameList = map (\(x,_,_) -> fdefName x)
48 3fd38382 Hrvoje Ribicic
49 3fd38382 Hrvoje Ribicic
-- | Converts alias list to alias name list
50 3fd38382 Hrvoje Ribicic
toAliasNameList :: [(FieldName, FieldName)] -> [FieldName]
51 3fd38382 Hrvoje Ribicic
toAliasNameList = map fst
52 3fd38382 Hrvoje Ribicic
53 3fd38382 Hrvoje Ribicic
-- | Converts alias list to alias target list
54 3fd38382 Hrvoje Ribicic
toAliasTargetList :: [(FieldName, FieldName)] -> [FieldName]
55 3fd38382 Hrvoje Ribicic
toAliasTargetList = map snd
56 3fd38382 Hrvoje Ribicic
57 3fd38382 Hrvoje Ribicic
-- | Checks for shadowing
58 3fd38382 Hrvoje Ribicic
checkShadowing :: String
59 3fd38382 Hrvoje Ribicic
               -> FieldList a b
60 3fd38382 Hrvoje Ribicic
               -> [(FieldName, FieldName)]
61 3fd38382 Hrvoje Ribicic
               -> Assertion
62 3fd38382 Hrvoje Ribicic
checkShadowing name fields aliases =
63 3fd38382 Hrvoje Ribicic
  assertBool (name ++ " aliases do not shadow fields") .
64 3fd38382 Hrvoje Ribicic
    null $ toFieldNameList fields `intersect` toAliasNameList aliases
65 3fd38382 Hrvoje Ribicic
66 3fd38382 Hrvoje Ribicic
-- | Checks for target existence
67 3fd38382 Hrvoje Ribicic
checkTargets :: String
68 3fd38382 Hrvoje Ribicic
             -> FieldList a b
69 3fd38382 Hrvoje Ribicic
             -> [(FieldName, FieldName)]
70 3fd38382 Hrvoje Ribicic
             -> Assertion
71 3fd38382 Hrvoje Ribicic
checkTargets name fields aliases =
72 3fd38382 Hrvoje Ribicic
  assertBool (name ++ " alias targets exist") .
73 3fd38382 Hrvoje Ribicic
    null $ toAliasTargetList aliases \\ toFieldNameList fields
74 3fd38382 Hrvoje Ribicic
75 3fd38382 Hrvoje Ribicic
-- | Check that instance aliases do not shadow existing fields
76 3fd38382 Hrvoje Ribicic
case_instanceAliasesNoShadowing :: Assertion
77 3fd38382 Hrvoje Ribicic
case_instanceAliasesNoShadowing =
78 3fd38382 Hrvoje Ribicic
  checkShadowing "Instance" I.instanceFields I.instanceAliases
79 3fd38382 Hrvoje Ribicic
80 3fd38382 Hrvoje Ribicic
-- | Check that instance alias targets exist
81 3fd38382 Hrvoje Ribicic
case_instanceAliasesTargetsExist :: Assertion
82 3fd38382 Hrvoje Ribicic
case_instanceAliasesTargetsExist =
83 3fd38382 Hrvoje Ribicic
  checkTargets "Instance" I.instanceFields I.instanceAliases
84 3fd38382 Hrvoje Ribicic
85 3fd38382 Hrvoje Ribicic
testSuite "Query/Aliases"
86 3fd38382 Hrvoje Ribicic
  [ 'case_instanceAliasesNoShadowing,
87 3fd38382 Hrvoje Ribicic
    'case_instanceAliasesTargetsExist
88 3fd38382 Hrvoje Ribicic
  ]