From ac1c0a07c519d26c7a3da6fbc6529f1a7d45f5d5 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Wed, 7 Mar 2012 00:20:32 +0200 Subject: [PATCH] Fix up Cluster nodeEvac unittests for shared storage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, these presume that the instance being generated always is DRBD/relocatable (but won't be in the future), and also presume that all relocation modes can be used (hint: not βΊ). So we add a couple of helper functions to restrict the used disk templates/relocation modes, and these two tests are ready for shared storage. Signed-off-by: Iustin Pop <iustin@google.com> Reviewed-by: Guido Trotter <ultrotter@google.com> --- htools/Ganeti/HTools/QC.hs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/htools/Ganeti/HTools/QC.hs b/htools/Ganeti/HTools/QC.hs index 3a9c98340..09b05bf6c 100644 --- a/htools/Ganeti/HTools/QC.hs +++ b/htools/Ganeti/HTools/QC.hs @@ -232,6 +232,17 @@ genUniquesList cnt = newelem <- arbitrary `suchThat` (`notElem` lst) return (newelem:lst)) [] [1..cnt] +-- | Checks if an instance is mirrored. +isMirrored :: Instance.Instance -> Bool +isMirrored = + (/= Types.MirrorNone) . Types.templateMirrorType . Instance.diskTemplate + +-- | Returns the possible change node types for a disk template. +evacModeOptions :: Types.MirrorType -> [Types.EvacMode] +evacModeOptions Types.MirrorNone = [] +evacModeOptions Types.MirrorInternal = [minBound..maxBound] -- DRBD can do all +evacModeOptions Types.MirrorExternal = [Types.ChangePrimary, Types.ChangeAll] + -- * Arbitrary instances -- | Defines a DNS name. @@ -1260,13 +1271,15 @@ check_EvacMode grp inst result = prop_ClusterAllocEvacuate = forAll (choose (4, 8)) $ \count -> forAll (genOnlineNode `suchThat` (isNodeBig 4)) $ \node -> - forAll (genInstanceSmallerThanNode node) $ \inst -> + forAll (genInstanceSmallerThanNode node `suchThat` isMirrored) $ \inst -> case genClusterAlloc count node inst of Types.Bad msg -> failTest msg Types.Ok (nl, il, inst') -> conjoin $ map (\mode -> check_EvacMode defGroup inst' $ Cluster.tryNodeEvac defGroupList nl il mode - [Instance.idx inst']) [minBound..maxBound] + [Instance.idx inst']) . + evacModeOptions . Types.templateMirrorType . + Instance.diskTemplate $ inst' -- | Checks that on a 4-8 node cluster with two node groups, once we -- allocate an instance on the first node group, we can also change @@ -1274,7 +1287,7 @@ prop_ClusterAllocEvacuate = prop_ClusterAllocChangeGroup = forAll (choose (4, 8)) $ \count -> forAll (genOnlineNode `suchThat` (isNodeBig 4)) $ \node -> - forAll (genInstanceSmallerThanNode node) $ \inst -> + forAll (genInstanceSmallerThanNode node `suchThat` isMirrored) $ \inst -> case genClusterAlloc count node inst of Types.Bad msg -> failTest msg Types.Ok (nl, il, inst') -> -- GitLab