+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',
},
}
>>> 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)
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
},
},
}
- 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
},
},
}
- 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
},
},
}
- 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
},
},
}
- 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
},
},
}
- 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
},
},
}
- 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
},
},
}
- 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 = {
},
},
}
- 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
},
},
}
- 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 = {
},
},
}
- 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
'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