From d9b681ea9c8ed4368b488fa7032b19b25c49e3be Mon Sep 17 00:00:00 2001
From: Helga Velroyen <helgav@google.com>
Date: Wed, 15 May 2013 14:52:47 +0200
Subject: [PATCH] Generators for disks

This patch adds generators for Disk instances to the Haskell
test code. It uses somewhat more reasonable generators to
fill the fields instead of just arbitrary values.
'genDiskWithChildren' is a generator that generates a disk
with a specified number of disk children. To avoid shooting
ourselves in the foot we do not generate further (grand)
child disks for the child disks. 'genDisk' calls
'genDiskWithChildren' by requesting three children as a
resonable default.

Signed-off-by: Helga Velroyen <helgav@google.com>
Reviewed-by: Klaus Aehlig <aehlig@google.com>
---
 test/hs/Test/Ganeti/Objects.hs | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/test/hs/Test/Ganeti/Objects.hs b/test/hs/Test/Ganeti/Objects.hs
index 23ea054eb..9fdaec4b3 100644
--- a/test/hs/Test/Ganeti/Objects.hs
+++ b/test/hs/Test/Ganeti/Objects.hs
@@ -31,6 +31,8 @@ module Test.Ganeti.Objects
   ( testObjects
   , Node(..)
   , genConfigDataWithNetworks
+  , genDisk
+  , genDiskWithChildren
   , genEmptyCluster
   , genInstWithNets
   , genValidNetwork
@@ -140,6 +142,21 @@ genInstWithNets nets = do
       new_inst = plain_inst { instNics = partial_nics }
   return new_inst
 
+genDiskWithChildren :: Int -> Gen Disk
+genDiskWithChildren num_children = do
+  logicalid <- arbitrary
+  children <- vectorOf num_children (genDiskWithChildren 0)
+  ivname <- genName
+  size <- arbitrary
+  mode <- arbitrary
+  name <- genMaybe genName
+  uuid <- genName
+  let disk = Disk logicalid children ivname size mode name uuid
+  return disk
+
+genDisk :: Gen Disk
+genDisk = genDiskWithChildren 3
+
 -- | FIXME: This generates completely random data, without normal
 -- validation rules.
 $(genArbitrary ''PartialISpecParams)
-- 
GitLab