Statistics
| Branch: | Tag: | Revision:

root / test / hs / Test / Ganeti / Query / Network.hs @ 36162faf

History | View | Annotate | Download (2.9 kB)

1 834bea99 Helga Velroyen
{-# LANGUAGE TemplateHaskell #-}
2 834bea99 Helga Velroyen
{-# OPTIONS_GHC -fno-warn-orphans #-}
3 834bea99 Helga Velroyen
4 834bea99 Helga Velroyen
{-| Unittests for Network Queries.
5 834bea99 Helga Velroyen
6 834bea99 Helga Velroyen
-}
7 834bea99 Helga Velroyen
8 834bea99 Helga Velroyen
{-
9 834bea99 Helga Velroyen
10 834bea99 Helga Velroyen
Copyright (C) 2013 Google Inc.
11 834bea99 Helga Velroyen
12 834bea99 Helga Velroyen
This program is free software; you can redistribute it and/or modify
13 834bea99 Helga Velroyen
it under the terms of the GNU General Public License as published by
14 834bea99 Helga Velroyen
the Free Software Foundation; either version 2 of the License, or
15 834bea99 Helga Velroyen
(at your option) any later version.
16 834bea99 Helga Velroyen
17 834bea99 Helga Velroyen
This program is distributed in the hope that it will be useful, but
18 834bea99 Helga Velroyen
WITHOUT ANY WARRANTY; without even the implied warranty of
19 834bea99 Helga Velroyen
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20 834bea99 Helga Velroyen
General Public License for more details.
21 834bea99 Helga Velroyen
22 834bea99 Helga Velroyen
You should have received a copy of the GNU General Public License
23 834bea99 Helga Velroyen
along with this program; if not, write to the Free Software
24 834bea99 Helga Velroyen
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 834bea99 Helga Velroyen
02110-1301, USA.
26 834bea99 Helga Velroyen
27 834bea99 Helga Velroyen
-}
28 834bea99 Helga Velroyen
29 834bea99 Helga Velroyen
module Test.Ganeti.Query.Network
30 834bea99 Helga Velroyen
  ( testQuery_Network
31 834bea99 Helga Velroyen
  ) where
32 834bea99 Helga Velroyen
33 834bea99 Helga Velroyen
import Ganeti.JSON
34 834bea99 Helga Velroyen
import Ganeti.Objects
35 834bea99 Helga Velroyen
import Ganeti.Query.Network
36 834bea99 Helga Velroyen
import Ganeti.Types
37 834bea99 Helga Velroyen
38 834bea99 Helga Velroyen
import Test.Ganeti.Objects
39 834bea99 Helga Velroyen
import Test.Ganeti.TestCommon
40 834bea99 Helga Velroyen
import Test.Ganeti.TestHelper
41 834bea99 Helga Velroyen
42 834bea99 Helga Velroyen
import Test.QuickCheck
43 834bea99 Helga Velroyen
44 834bea99 Helga Velroyen
import qualified Data.Map as Map
45 834bea99 Helga Velroyen
import Data.Maybe
46 834bea99 Helga Velroyen
47 834bea99 Helga Velroyen
instance Arbitrary ConfigData where
48 834bea99 Helga Velroyen
  arbitrary = genEmptyCluster 0 >>= genConfigDataWithNetworks
49 834bea99 Helga Velroyen
50 834bea99 Helga Velroyen
-- | Check if looking up a valid network ID of a nodegroup yields
51 834bea99 Helga Velroyen
-- a non-Nothing result.
52 834bea99 Helga Velroyen
prop_getGroupConnection :: NodeGroup -> Property
53 834bea99 Helga Velroyen
prop_getGroupConnection group =
54 834bea99 Helga Velroyen
  let net_keys = (Map.keys . fromContainer . groupNetworks) group
55 834bea99 Helga Velroyen
  in True ==? all
56 834bea99 Helga Velroyen
    (\nk -> isJust (getGroupConnection nk group)) net_keys
57 834bea99 Helga Velroyen
58 834bea99 Helga Velroyen
-- | Checks if looking up an ID of a non-existing network in a node group
59 834bea99 Helga Velroyen
-- yields 'Nothing'.
60 834bea99 Helga Velroyen
prop_getGroupConnection_notFound :: NodeGroup -> String -> Property
61 834bea99 Helga Velroyen
prop_getGroupConnection_notFound group uuid =
62 834bea99 Helga Velroyen
  let net_keys = (Map.keys . fromContainer . groupNetworks) group
63 834bea99 Helga Velroyen
  in notElem uuid net_keys ==> isNothing (getGroupConnection uuid group)
64 834bea99 Helga Velroyen
65 834bea99 Helga Velroyen
-- | Checks whether actually connected instances are identified as such.
66 834bea99 Helga Velroyen
prop_instIsConnected :: ConfigData -> Property
67 834bea99 Helga Velroyen
prop_instIsConnected cfg =
68 834bea99 Helga Velroyen
  let nets = (fromContainer . configNetworks) cfg
69 834bea99 Helga Velroyen
      net_keys = Map.keys nets
70 834bea99 Helga Velroyen
      net_names = map (fromNonEmpty . networkName) (Map.elems nets)
71 834bea99 Helga Velroyen
  in  forAll (genInstWithNets net_names) $ \inst ->
72 834bea99 Helga Velroyen
      True ==? all (\nk -> instIsConnected cfg nk inst) net_keys
73 834bea99 Helga Velroyen
74 834bea99 Helga Velroyen
-- | Tests whether instances that are not connected to a network are
75 834bea99 Helga Velroyen
-- correctly classified as such.
76 834bea99 Helga Velroyen
prop_instIsConnected_notFound :: ConfigData -> String -> Property
77 834bea99 Helga Velroyen
prop_instIsConnected_notFound cfg network_uuid =
78 834bea99 Helga Velroyen
  let nets = (fromContainer . configNetworks) cfg
79 834bea99 Helga Velroyen
      net_keys = Map.keys nets
80 834bea99 Helga Velroyen
      net_names = map (fromNonEmpty . networkName) (Map.elems nets)
81 834bea99 Helga Velroyen
  in  notElem network_uuid net_keys ==>
82 834bea99 Helga Velroyen
      forAll (genInstWithNets net_names) $ \inst ->
83 834bea99 Helga Velroyen
        not (instIsConnected cfg network_uuid inst)
84 834bea99 Helga Velroyen
85 834bea99 Helga Velroyen
testSuite "Query_Network"
86 0b08c8bf Helga Velroyen
  [ 'prop_getGroupConnection
87 834bea99 Helga Velroyen
  , 'prop_getGroupConnection_notFound
88 834bea99 Helga Velroyen
  , 'prop_instIsConnected
89 834bea99 Helga Velroyen
  , 'prop_instIsConnected_notFound
90 834bea99 Helga Velroyen
  ]
91 834bea99 Helga Velroyen