]> git-server-git.apps.pok.os.sepia.ceph.com Git - teuthology.git/commitdiff
fake_fs: add fake open() support
authorJosh Durgin <jdurgin@redhat.com>
Fri, 20 Nov 2015 22:34:53 +0000 (14:34 -0800)
committerJosh Durgin <jdurgin@redhat.com>
Wed, 9 Dec 2015 21:04:54 +0000 (13:04 -0800)
Signed-off-by: Josh Durgin <jdurgin@redhat.com>
teuthology/test/fake_fs.py
teuthology/test/test_suite.py

index e3f0990801ac489d591a28d1075b754a7f931028..4290a821bd90fc917b2720b5a00b03cadc99aebe 100644 (file)
@@ -1,20 +1,24 @@
+from cStringIO import StringIO
+from contextlib import closing
+
 
 def make_fake_fstools(fake_filesystem):
     """
     Build a fake listdir() and isfile(), to be used instead of
-    os.listir() and os.isfile()
+    os.isdir() and os.isfile()
 
     An example fake_filesystem value:
         >>> fake_fs = {
             'a_directory': {
                 'another_directory': {
-                    'a_file': None,
-                    'another_file': None,
+                    'empty_file': None,
+                    'another_empty_file': None,
                 },
                 'random_file': None,
                 'yet_another_directory': {
                     'empty_directory': {},
                 },
+                'file_with_contents': 'data',
             },
         }
 
@@ -24,7 +28,7 @@ def make_fake_fstools(fake_filesystem):
         >>> fake_isfile('a_directory/yet_another_directory')
         False
 
-    :param fake_filesystem: A dict representing a filesystem layout
+    :param fake_filesystem: A dict representing a filesystem
     """
     assert isinstance(fake_filesystem, dict)
 
@@ -57,11 +61,23 @@ def make_fake_fstools(fake_filesystem):
                 raise OSError(
                     '[Errno 2] No such file or directory: %s' % component)
             subdict = subdict.get(component)
-        if subdict is None:
-            return True
-        else:
-            return False
+        return subdict is None or isinstance(subdict, str)
 
     def fake_isdir(path, fsdict=False):
         return not fake_isfile(path)
-    return fake_listdir, fake_isfile, fake_isdir
+
+    def fake_open(path, mode=None, buffering=None):
+        components = path.strip('/').split('/')
+        subdict = fake_filesystem
+        for component in components:
+            if component not in subdict:
+                raise IOError(
+                    '[Errno 2] No such file or directory: %s' % component)
+            subdict = subdict.get(component)
+        if isinstance(subdict, dict):
+            raise IOError('[Errno 21] Is a directory: %s' % path)
+        elif subdict is None:
+            return closing(StringIO(''))
+        return closing(StringIO(subdict))
+
+    return fake_listdir, fake_isfile, fake_isdir, fake_open
index a0a5b0875971dcc42c667b0c7f9e60b8452ba05a..ce0309155fe688def3e71b397ceee5a48a76e79d 100644 (file)
@@ -387,7 +387,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir, fake_isfile, fake_isdir = make_fake_fstools(fake_fs)
+        fake_listdir, fake_isfile, fake_isdir, _ = make_fake_fstools(fake_fs)
         result = suite.build_matrix('d0_0', fake_isfile, fake_isdir,
                                     fake_listdir)
         assert len(result) == 1
@@ -406,7 +406,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir, fake_isfile, fake_isdir = make_fake_fstools(fake_fs)
+        fake_listdir, fake_isfile, fake_isdir, _ = make_fake_fstools(fake_fs)
         result = suite.build_matrix('d0_0', fake_isfile, fake_isdir,
                                     fake_listdir)
         assert len(result) == 4
@@ -430,7 +430,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir, fake_isfile, fake_isdir = make_fake_fstools(fake_fs)
+        fake_listdir, fake_isfile, fake_isdir, _ = make_fake_fstools(fake_fs)
         result = suite.build_matrix('d0_0', fake_isfile, fake_isdir,
                                     fake_listdir)
         assert len(result) == 8
@@ -455,7 +455,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir, fake_isfile, fake_isdir = make_fake_fstools(fake_fs)
+        fake_listdir, fake_isfile, fake_isdir, _ = make_fake_fstools(fake_fs)
         result = suite.build_matrix('d0_0', fake_isfile, fake_isdir,
                                     fake_listdir)
         assert len(result) == 8
@@ -481,7 +481,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir, fake_isfile, fake_isdir = make_fake_fstools(fake_fs)
+        fake_listdir, fake_isfile, fake_isdir, _ = make_fake_fstools(fake_fs)
         result = suite.build_matrix('d0_0', fake_isfile, fake_isdir,
                                     fake_listdir)
         assert len(result) == 2
@@ -518,7 +518,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir, fake_isfile, fake_isdir = make_fake_fstools(fake_fs)
+        fake_listdir, fake_isfile, fake_isdir, _ = make_fake_fstools(fake_fs)
         result = suite.build_matrix('teuthology/no-ceph', fake_isfile,
                                     fake_isdir, fake_listdir)
         assert len(result) == 11
@@ -551,7 +551,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir, fake_isfile, fake_isdir = make_fake_fstools(fake_fs)
+        fake_listdir, fake_isfile, fake_isdir, _ = make_fake_fstools(fake_fs)
         result = suite.build_matrix('teuthology/no-ceph', fake_isfile,
                                     fake_isdir, fake_listdir)
         fake_fs2 = {
@@ -582,7 +582,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir2, fake_isfile2, fake_isdir2 = make_fake_fstools(fake_fs2)
+        fake_listdir2, fake_isfile2, fake_isdir2, _ = make_fake_fstools(fake_fs2)
         result2 = suite.build_matrix('teuthology/no-ceph', fake_isfile2,
                                      fake_isdir2, fake_listdir2)
         assert len(result) == 11
@@ -615,7 +615,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir, fake_isfile, fake_isdir = make_fake_fstools(fake_fs)
+        fake_listdir, fake_isfile, fake_isdir, _ = make_fake_fstools(fake_fs)
         result = suite.build_matrix('teuthology/no-ceph', fake_isfile,
                                     fake_isdir, fake_listdir)
         fake_fs2 = {
@@ -652,7 +652,7 @@ class TestBuildMatrix(object):
                 },
             },
         }
-        fake_listdir2, fake_isfile2, fake_isdir2 = make_fake_fstools(fake_fs2)
+        fake_listdir2, fake_isfile2, fake_isdir2, _ = make_fake_fstools(fake_fs2)
         result2 = suite.build_matrix('teuthology/no-ceph', fake_isfile2,
                                      fake_isdir2, fake_listdir2)
         assert len(result) == 11
@@ -674,7 +674,7 @@ class TestBuildMatrix(object):
                 'tasks': {'cfuse_workunit_suites_fsstress.yaml': None},
             },
         }
-        fake_listdir, fake_isfile, fake_isdir = make_fake_fstools(fake_fs)
+        fake_listdir, fake_isfile, fake_isdir, _ = make_fake_fstools(fake_fs)
         result = suite.build_matrix('thrash', fake_isfile,
                                     fake_isdir, fake_listdir)
         assert len(result) == 1