From a9d6f4e0c710510c1cc7de16608c427432689b98 Mon Sep 17 00:00:00 2001
From: Agata Murawska <agatamurawska@google.com>
Date: Thu, 20 Sep 2012 17:16:53 +0200
Subject: [PATCH] Tests for NodeGroup query

This adds tests similar to those used for node query. For now the
prop_queryGroup_noUnknown is disabled and commented out, as it is
fasifiable with ndparams and ipolicy. It may be removed or fixed
later on.

Also, prop_queryGrooup_types has one less property checked - it is
not the case that number of result rows should be equal to number
of nodes.

Signed-off-by: Agata Murawska <agatamurawska@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 htest/Test/Ganeti/Query/Query.hs | 67 ++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/htest/Test/Ganeti/Query/Query.hs b/htest/Test/Ganeti/Query/Query.hs
index 8ff304b17..d2eac1b9e 100644
--- a/htest/Test/Ganeti/Query/Query.hs
+++ b/htest/Test/Ganeti/Query/Query.hs
@@ -43,6 +43,7 @@ import Test.Ganeti.TestCommon
 import Test.Ganeti.Objects (genEmptyCluster)
 
 import Ganeti.BasicTypes
+import Ganeti.Query.Group
 import Ganeti.Query.Language
 import Ganeti.Query.Node
 import Ganeti.Query.Query
@@ -147,9 +148,75 @@ case_queryNode_allfields = do
      (sortBy field_sort . map fst $ Map.elems nodeFieldsMap)
      (sortBy field_sort fdefs)
 
+-- * Same as above, but for group
+
+prop_queryGroup_noUnknown :: Property
+prop_queryGroup_noUnknown =
+  forAll (choose (0, maxNodes) >>= genEmptyCluster) $ \cluster ->
+   forAll (elements (Map.keys groupFieldsMap)) $ \field -> monadicIO $ do
+   QueryResult fdefs fdata <-
+     run (query cluster (Query QRGroup [field] EmptyFilter)) >>= resultProp
+   QueryFieldsResult fdefs' <-
+     resultProp $ queryFields (QueryFields QRGroup [field])
+   stop $ printTestCase ("Got unknown fields via query (" ++ show fdefs ++ ")")
+         (hasUnknownFields fdefs) .&&.
+          printTestCase ("Got unknown result status via query (" ++
+                         show fdata ++ ")")
+           (all (all ((/= RSUnknown) . rentryStatus)) fdata) .&&.
+          printTestCase ("Got unknown fields via query fields (" ++ show fdefs'
+                        ++ ")") (hasUnknownFields fdefs')
+
+prop_queryGroup_Unknown :: Property
+prop_queryGroup_Unknown =
+  forAll (choose (0, maxNodes) >>= genEmptyCluster) $ \cluster ->
+  forAll (arbitrary `suchThat` (`notElem` Map.keys groupFieldsMap))
+    $ \field -> monadicIO $ do
+  QueryResult fdefs fdata <-
+    run (query cluster (Query QRGroup [field] EmptyFilter)) >>= resultProp
+  QueryFieldsResult fdefs' <-
+    resultProp $ queryFields (QueryFields QRGroup [field])
+  stop $ printTestCase ("Got known fields via query (" ++ show fdefs ++ ")")
+         (not $ hasUnknownFields fdefs) .&&.
+         printTestCase ("Got /= ResultUnknown result status via query (" ++
+                        show fdata ++ ")")
+           (all (all ((== RSUnknown) . rentryStatus)) fdata) .&&.
+         printTestCase ("Got a Just in a result value (" ++
+                        show fdata ++ ")")
+           (all (all (isNothing . rentryValue)) fdata) .&&.
+         printTestCase ("Got known fields via query fields (" ++ show fdefs'
+                        ++ ")") (not $ hasUnknownFields fdefs')
+
+prop_queryGroup_types :: Property
+prop_queryGroup_types =
+  forAll (choose (0, maxNodes)) $ \numnodes ->
+  forAll (genEmptyCluster numnodes) $ \cfg ->
+  forAll (elements (Map.keys groupFieldsMap)) $ \field -> monadicIO $ do
+  QueryResult fdefs fdata <-
+    run (query cfg (Query QRGroup [field] EmptyFilter)) >>= resultProp
+  stop $ printTestCase ("Inconsistent result entries (" ++ show fdata ++ ")")
+         (conjoin $ map (conjoin . zipWith checkResultType fdefs) fdata) .&&.
+         printTestCase "Wrong field definitions length"
+           (length fdefs ==? 1) .&&.
+         printTestCase "Wrong field result rows length"
+           (all ((== 1) . length) fdata)
+
+case_queryGroup_allfields :: Assertion
+case_queryGroup_allfields = do
+   fdefs <- case queryFields (QueryFields QRGroup []) of
+              Bad msg -> fail $ "Error in query all fields: " ++ msg
+              Ok (QueryFieldsResult v) -> return v
+   let field_sort = compare `on` fdefName
+   assertEqual "Mismatch in all fields list"
+     (sortBy field_sort . map fst $ Map.elems groupFieldsMap)
+     (sortBy field_sort fdefs)
+
 testSuite "Query/Query"
   [ 'prop_queryNode_noUnknown
   , 'prop_queryNode_Unknown
   , 'prop_queryNode_types
   , 'case_queryNode_allfields
+  , 'prop_queryGroup_noUnknown
+  , 'prop_queryGroup_Unknown
+  , 'prop_queryGroup_types
+  , 'case_queryGroup_allfields
   ]
-- 
GitLab