diff --git a/htest/Test/Ganeti/Query/Filter.hs b/htest/Test/Ganeti/Query/Filter.hs index 6bb0c2ce22128147224827385ee0f969897d3f81..8f7044b590c40ef8887d4094b71aa49f3ac41d53 100644 --- a/htest/Test/Ganeti/Query/Filter.hs +++ b/htest/Test/Ganeti/Query/Filter.hs @@ -42,6 +42,7 @@ import Test.Ganeti.Objects (genEmptyCluster) import Ganeti.BasicTypes import Ganeti.JSON import Ganeti.Objects +import Ganeti.Query.Filter import Ganeti.Query.Language import Ganeti.Query.Query import Ganeti.Utils (niceSort) @@ -159,9 +160,22 @@ prop_node_bad_filter rndname rndint = "numeric value in non-list field" ] +-- | Tests make simple filter. +prop_makeSimpleFilter :: Property +prop_makeSimpleFilter = + forAll (resize 10 $ listOf1 getName) $ \names -> + forAll getName $ \namefield -> + conjoin [ printTestCase "test expected names" $ + makeSimpleFilter namefield names ==? + OrFilter (map (EQFilter namefield . QuotedString) names) + , printTestCase "test empty names" $ + makeSimpleFilter namefield [] ==? EmptyFilter + ] + testSuite "Query/Filter" [ 'prop_node_single_filter , 'prop_node_many_filter , 'prop_node_regex_filter , 'prop_node_bad_filter + , 'prop_makeSimpleFilter ] diff --git a/htools/Ganeti/Query/Filter.hs b/htools/Ganeti/Query/Filter.hs index 24ce79639d14cf76af5e4d44416f226bf2888a7d..42453e167b94da79e5508052bd753b3c7dffdf8d 100644 --- a/htools/Ganeti/Query/Filter.hs +++ b/htools/Ganeti/Query/Filter.hs @@ -48,6 +48,7 @@ module Ganeti.Query.Filter ( compileFilter , evaluateFilter , requestedNames + , makeSimpleFilter ) where import Control.Applicative @@ -185,3 +186,9 @@ requestedNames namefield (EQFilter fld val) = then Just [val] else Nothing requestedNames _ _ = Nothing + +-- | Builds a simple filter from a list of names. +makeSimpleFilter :: String -> [String] -> Filter FilterField +makeSimpleFilter _ [] = EmptyFilter +makeSimpleFilter namefield vals = + OrFilter $ map (EQFilter namefield . QuotedString) vals