diff --git a/Ganeti/HTools/QC.hs b/Ganeti/HTools/QC.hs index fe214cd362cc426a4a5944acb4538e3e2547d62f..e20e1af8e4731ec50121e9a57323998e77101d98 100644 --- a/Ganeti/HTools/QC.hs +++ b/Ganeti/HTools/QC.hs @@ -28,6 +28,7 @@ module Ganeti.HTools.QC , test_Container , test_Instance , test_Node + , test_Text ) where import Test.QuickCheck @@ -61,7 +62,10 @@ instance Arbitrary Instance.Instance where name <- arbitrary mem <- choose(0, 100) dsk <- choose(0, 100) - run_st <- arbitrary + run_st <- elements ["ERROR_up", "ERROR_down", "ADMIN_down" + , "ERROR_nodedown", "ERROR_nodeoffline" + , "running" + , "no_such_status1", "no_such_status2"] pn <- arbitrary sn <- arbitrary vcpus <- arbitrary @@ -162,12 +166,58 @@ prop_Instance_setBoth inst pdx sdx = where _types = (inst::Instance.Instance, pdx::Types.Ndx, sdx::Types.Ndx) si = Instance.setBoth inst pdx sdx +prop_Instance_runStatus_True inst = + let run_st = Instance.running inst + run_tx = Instance.run_st inst + in + run_tx == "running" || run_tx == "ERROR_up" ==> run_st == True + +prop_Instance_runStatus_False inst = + let run_st = Instance.running inst + run_tx = Instance.run_st inst + in + run_tx /= "running" && run_tx /= "ERROR_up" ==> run_st == False + test_Instance = [ run prop_Instance_setIdx , run prop_Instance_setName , run prop_Instance_setPri , run prop_Instance_setSec , run prop_Instance_setBoth + , run prop_Instance_runStatus_True + , run prop_Instance_runStatus_False + ] + +-- Instance text loader tests + +prop_Text_Load_Instance name mem dsk vcpus status pnode snode pdx sdx = + let vcpus_s = show vcpus + dsk_s = show dsk + mem_s = show mem + rsnode = snode ++ "a" -- non-empty secondary node + rsdx = if pdx == sdx + then sdx + 1 + else sdx + ndx = [(pnode, pdx), (rsnode, rsdx)] + inst = Text.loadInst ndx + (name:mem_s:dsk_s:vcpus_s:status:pnode:rsnode:[]):: + Maybe (String, Instance.Instance) + _types = ( name::String, mem::Int, dsk::Int + , vcpus::Int, status::String + , pnode::String, snode::String + , pdx::Types.Ndx, sdx::Types.Ndx) + in + case inst of + Nothing -> False + Just (_, i) -> + (Instance.name i == name && + Instance.vcpus i == vcpus && + Instance.mem i == mem && + Instance.pnode i == pdx && + Instance.snode i == rsdx) + +test_Text = + [ run prop_Text_Load_Instance ] -- Node tests diff --git a/Ganeti/HTools/Text.hs b/Ganeti/HTools/Text.hs index 3db802e019bd79b716bcf6449a8a61e0956750e9..aea0c00edef873bd8507d2ec832c747571cea36b 100644 --- a/Ganeti/HTools/Text.hs +++ b/Ganeti/HTools/Text.hs @@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA module Ganeti.HTools.Text ( loadData + , loadInst ) where import Control.Monad diff --git a/test.hs b/test.hs index 59d6f101d16468edc5c214fea760cd68a14f5173..ab90f0169f65dc52c9dcb4ea6a511fd768da2f2c 100644 --- a/test.hs +++ b/test.hs @@ -38,3 +38,4 @@ main = do runTests "Container" options test_Container runTests "Instance" options test_Instance runTests "Node" options test_Node + runTests "Text" options test_Text