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