As promised the tests refactoring interdiff:
diff --git a/lib/storage/filestorage.py b/lib/storage/filestorage.py
index cdfa0de..c980d17 100644
--- a/lib/storage/filestorage.py
+++ b/lib/storage/filestorage.py
@@ -132,7 +132,7 @@ class FileDeviceHelper(object):
except OSError as err:
base.ThrowError("%s: can't stat: %s", self.path, err)
- def Grow(self, amount, dryrun, backingstore, excl_stor):
+ def Grow(self, amount, dryrun, backingstore, _excl_stor):
"""Grow the file
@param amount: the amount (in mebibytes) to grow by.
@@ -241,7 +241,7 @@ class FileStorage(base.BlockDev):
return
if dryrun:
return
- self.file.Grow(amount, amount, dryrun, backingstore, excl_stor)
+ self.file.Grow(amount, dryrun, backingstore, excl_stor)
def Attach(self):
"""Attach to an existing file.
diff --git a/test/py/ganeti.storage.filestorage_unittest.py
b/test/py/ganeti.storage.filestorage_unittest.py
index 921bb28..918686d 100755
--- a/test/py/ganeti.storage.filestorage_unittest.py
+++ b/test/py/ganeti.storage.filestorage_unittest.py
@@ -235,61 +235,76 @@ class TestFileDeviceHelper(testutils.GanetiTestCase):
return filestorage.FileDeviceHelper(path,
_file_path_acceptance_fn=skip_checks)
-
- def test(self):
- # Get temp directory
- directory = tempfile.mkdtemp()
- subdirectory = io.PathJoin(directory, "pinky")
- path = io.PathJoin(subdirectory, "bunny")
-
- should_fail = lambda fn: self.assertRaises(errors.BlockDeviceError, fn)
-
- # Make sure it doesn't exist, and methods check for it
+ class TempEnvironment(object):
+ def __init__(self, create_file=False, delete_file=True):
+ self.create_file = create_file
+ self.delete_file = delete_file
+ def __enter__(self):
+ self.directory = tempfile.mkdtemp()
+ self.subdirectory = io.PathJoin(self.directory, "pinky")
+ os.mkdir(self.subdirectory)
+ self.path = io.PathJoin(self.subdirectory, "bunny")
+ if self.create_file:
+ open(self.path, mode="w")
+ return self
+ def __exit__(self, *args):
+ if self.delete_file:
+ os.unlink(self.path)
+ os.rmdir(self.subdirectory)
+ os.rmdir(self.directory)
+ return False #don't swallow exceptions
+
+ def testOperationsOnNonExistingFiles(self):
+ directory = subdirectory = path = "/e/no/ent"
+
+ # These should fail horribly.
TestFileDeviceHelper._Make(path).Exists(assert_exists=False)
- should_fail( lambda: \
+ self.assertRaises(errors.BlockDeviceError, lambda: \
TestFileDeviceHelper._Make(path).Exists(assert_exists=True))
- should_fail( lambda: \
+ self.assertRaises(errors.BlockDeviceError, lambda: \
TestFileDeviceHelper._Make(path).Size())
- should_fail( lambda: \
+ self.assertRaises(errors.BlockDeviceError, lambda: \
TestFileDeviceHelper._Make(path).Grow(0.020, True, False, None))
# Removing however fails silently.
TestFileDeviceHelper._Make(path).Remove()
# Make sure we don't create all directories for you unless we ask for it
- should_fail( lambda: \
+ self.assertRaises(errors.BlockDeviceError, lambda: \
TestFileDeviceHelper._Make(path, create_with_size=1))
- # Create the file.
- TestFileDeviceHelper._Make(path, create_with_size=1, create_folders=True)
-
- # This should still fail.
- should_fail( lambda: \
- TestFileDeviceHelper._Make(subdirectory).Size())
-
-
- self.assertTrue(TestFileDeviceHelper._Make(path).Exists())
-
- should_fail( lambda: \
- TestFileDeviceHelper._Make(path, create_with_size=0.042))
-
- TestFileDeviceHelper._Make(path).Exists(assert_exists=True)
- should_fail( lambda: \
- TestFileDeviceHelper._Make(path).Exists(assert_exists=False))
-
- should_fail( lambda: \
- TestFileDeviceHelper._Make(path).Grow(-1, False, True, None))
-
- TestFileDeviceHelper._Make(path).Grow(2, False, True, None)
- self.assertEqual(3.0,
- TestFileDeviceHelper._Make(path).Size() / 1024.0**2)
-
- TestFileDeviceHelper._Make(path).Remove()
- TestFileDeviceHelper._Make(path).Exists(assert_exists=False)
-
- os.rmdir(subdirectory)
- os.rmdir(directory)
-
+ def testFileCreation(self):
+ with TestFileDeviceHelper.TempEnvironment() as env:
+ TestFileDeviceHelper._Make(env.path, create_with_size=1)
+
+ self.assertTrue(TestFileDeviceHelper._Make(env.path).Exists())
+ TestFileDeviceHelper._Make(env.path).Exists(assert_exists=True)
+ self.assertRaises(errors.BlockDeviceError, lambda: \
+ TestFileDeviceHelper._Make(env.path).Exists(assert_exists=False))
+
+ self.assertRaises(errors.BlockDeviceError, lambda: \
+ TestFileDeviceHelper._Make("/enoent", create_with_size=0.042))
+
+ def testFailSizeDirectory(self):
+ # This should still fail.
+ with TestFileDeviceHelper.TempEnvironment(delete_file=False) as env:
+ self.assertRaises(errors.BlockDeviceError, lambda: \
+ TestFileDeviceHelper._Make(env.subdirectory).Size())
+
+ def testGrowFile(self):
+ with TestFileDeviceHelper.TempEnvironment(create_file=True) as env:
+ self.assertRaises(errors.BlockDeviceError, lambda: \
+ TestFileDeviceHelper._Make(env.path).Grow(-1, False, True, None))
+
+ TestFileDeviceHelper._Make(env.path).Grow(2, False, True, None)
+ self.assertEqual(2.0,
+ TestFileDeviceHelper._Make(env.path).Size() / 1024.0**2)
+
+ def testRemoveFile(self):
+ with TestFileDeviceHelper.TempEnvironment(create_file=True,
+ delete_file=False) as env:
+ TestFileDeviceHelper._Make(env.path).Remove()
+ TestFileDeviceHelper._Make(env.path).Exists(assert_exists=False)
if __name__ == "__main__":
testutils.GanetiTestProgram()
On Thu, Dec 5, 2013 at 3:42 PM, Santi Raffa <[email protected]> wrote:
> On Thu, Dec 5, 2013 at 1:22 PM, Thomas Thrainer <[email protected]> wrote:
>> On Thu, Dec 5, 2013 at 10:19 AM, Santi Raffa <[email protected]> wrote:
>>> + if not _file_path_acceptance_fn:
>>> + _file_path_acceptance_fn = CheckFileStoragePathAcceptance
>>> + _file_path_acceptance_fn(path)
>>> +
>>
>>
>> I think it'd be cleaner to put this as the default value in the parameter
>> list.
>
> I tried that, but it's not possible because this is a top-level
> definition that comes before CheckFileStoragePathAcceptance's; trying
> to do that gets you:
>
> NameError: name 'CheckFileStoragePathAcceptance' is not defined
>
>>> - def Grow(self, amount):
>>> + def Grow(self, amount, dryrun, backingstore, excl_stor):
>>
>>
>> Why excl_stor?
>
> If we're going to modify the implementation of FileDeviceHelper.Grow
> to handle the disk templates' parameters uniformly, I figured we
> might've as well passed all of the parameters to it.
>
> OTOH, changing the signature of Grow and the name of Create requires
> changing the tests to match.
>
> --- a/test/py/ganeti.storage.filestorage_unittest.py
> +++ b/test/py/ganeti.storage.filestorage_unittest.py
> @@ -227,7 +227,7 @@ class TestFileDeviceHelper(testutils.GanetiTestCase):
> def _Make(path, create_with_size=None, create_folders=False):
> skip_checks = lambda path: None
> if create_with_size:
> - return filestorage.FileDeviceHelper.Create(
> + return filestorage.FileDeviceHelper.CreateFile(
> path, create_with_size, create_folders=create_folders,
> _file_path_acceptance_fn=skip_checks
> )
> @@ -251,7 +251,7 @@ class TestFileDeviceHelper(testutils.GanetiTestCase):
> should_fail( lambda: \
> TestFileDeviceHelper._Make(path).Size())
> should_fail( lambda: \
> - TestFileDeviceHelper._Make(path).Grow(20))
> + TestFileDeviceHelper._Make(path).Grow(20, True, False, None))
>
> # Removing however fails silently.
> TestFileDeviceHelper._Make(path).Remove()
> @@ -278,9 +278,9 @@ class TestFileDeviceHelper(testutils.GanetiTestCase):
> TestFileDeviceHelper._Make(path).Exists(assert_exists=False))
>
> should_fail( lambda: \
> - TestFileDeviceHelper._Make(path).Grow(-30))
> + TestFileDeviceHelper._Make(path).Grow(-30, True, False, None))
>
> - TestFileDeviceHelper._Make(path).Grow(58)
> + TestFileDeviceHelper._Make(path).Grow(58, True, False, None)
> self.assertEqual(100 * 1024 * 1024,
> TestFileDeviceHelper._Make(path).Size())
>
> --
> Raffa Santi
> Google Germany GmbH
> Dienerstr. 12
> 80331 München
>
>
> Registergericht und -nummer: Hamburg, HRB 86891
> Sitz der Gesellschaft: Hamburg
> Geschäftsführer: Graham Law, Christine Elizabeth Flores
--
Raffa Santi
Google Germany GmbH
Dienerstr. 12
80331 München
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores