diff --git a/htest/Test/Ganeti/Query/Query.hs b/htest/Test/Ganeti/Query/Query.hs
index 8ff304b17f285a46fd8832d6a8db1110b02cc9ab..d2eac1b9eb82836421c73a757e49f16332c18d5c 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
   ]