예제 #1
0
파일: gfapi.py 프로젝트: yingyun001/vdsm
def volumeStatvfs(volumeName, host=GLUSTER_VOL_HOST,
                  port=GLUSTER_VOL_PORT,
                  protocol=GLUSTER_VOL_PROTOCOL):
    module = "gluster.gfapi"
    command = [constants.EXT_PYTHON, '-m', module, '-v', volumeName,
               '-p', str(port), '-H', host, '-t', protocol, '-c', 'statvfs']

    # to include /usr/share/vdsm in python path
    env = os.environ.copy()
    env['PYTHONPATH'] = "%s:%s" % (
        env.get("PYTHONPATH", ""), constants.P_VDSM)
    env['PYTHONPATH'] = ":".join(map(os.path.abspath,
                                     env['PYTHONPATH'].split(":")))

    rc, out, err = commands.execCmd(command, raw=True, env=env)
    if rc != 0:
        raise ge.GlfsStatvfsException(rc, [out], [err])
    res = json.loads(out)
    return os.statvfs_result((res['f_bsize'],
                              res['f_frsize'],
                              res['f_blocks'],
                              res['f_bfree'],
                              res['f_bavail'],
                              res['f_files'],
                              res['f_ffree'],
                              res['f_favail'],
                              res['f_flag'],
                              res['f_namemax']))
예제 #2
0
파일: gfapi.py 프로젝트: yingyun001/vdsm
def volumeStatvfsGet(volumeId, host=GLUSTER_VOL_HOST,
                     port=GLUSTER_VOL_PORT,
                     protocol=GLUSTER_VOL_PROTOCOL):
    statvfsdata = StatVfsStruct()

    fs = glfsInit(volumeId, host, port, protocol)

    rc = _glfs_statvfs(fs, GLUSTER_VOL_PATH, ctypes.byref(statvfsdata))
    if rc != 0:
        raise ge.GlfsStatvfsException(rc=rc)

    glfsFini(fs, volumeId)

    # To convert to os.statvfs_result we need to pass tuple/list in
    # following order: bsize, frsize, blocks, bfree, bavail, files,
    #                  ffree, favail, flag, namemax
    return os.statvfs_result((statvfsdata.f_bsize,
                              statvfsdata.f_frsize,
                              statvfsdata.f_blocks,
                              statvfsdata.f_bfree,
                              statvfsdata.f_bavail,
                              statvfsdata.f_files,
                              statvfsdata.f_ffree,
                              statvfsdata.f_favail,
                              statvfsdata.f_flag,
                              statvfsdata.f_namemax))
예제 #3
0
def useddiskspace(path):
	return 0 # for testing purposes
	if sys.platform == "linux2":
		r=os.statvfs_result(os.statvfs(path))
		return r.f_bsize*r.f_blocks-r.f_bsize*r.f_bfree
	else:
		return 0 #could be a bad idea
예제 #4
0
    def test_ignore_unmounted_and_virtual_mountpoints(self):
        """
        Make sure autofs and virtual mountpoints are ignored. This is to
        ensure non-regression on bug #1045374.
        """
        self.read_access = True
        content = "\n".join([
            "auto_direct /opt/whatever autofs", "none /run/lock tmpfs",
            "proc /proc proc", "/dev/sda1 /home ext4"
        ])

        f = open(self.mount_file, "w")
        f.write(content)
        f.close()

        self.stat_results["/home"] = os.statvfs_result(
            (4096, 0, 1000, 500, 0, 0, 0, 0, 0, 0))

        result = [x for x in get_mount_info(self.mount_file, self.statvfs)]
        expected = {
            "device": "/dev/sda1",
            "mount-point": "/home",
            "filesystem": "ext4",
            "total-space": 3,
            "free-space": 1
        }
        self.assertEqual([expected], result)
예제 #5
0
    def test_statvfs_attributes(self):
        if not hasattr(os, "statvfs"):
            return

        try:
            result = os.statvfs(self.fname)
        except OSError as e:
            # On AtheOS, glibc always returns ENOSYS
            if e.errno == errno.ENOSYS:
                return

        # Make sure direct access works
        self.assertEqual(result.f_bfree, result[3])

        # Make sure all the attributes are there.
        members = ('bsize', 'frsize', 'blocks', 'bfree', 'bavail', 'files',
                   'ffree', 'favail', 'flag', 'namemax')
        for value, member in enumerate(members):
            self.assertEqual(getattr(result, 'f_' + member), result[value])

        # Make sure that assignment really fails
        try:
            result.f_bfree = 1
            self.fail("No exception thrown")
        except AttributeError:
            pass

        try:
            result.parrot = 1
            self.fail("No exception thrown")
        except AttributeError:
            pass

        # Use the constructor with a too-short tuple.
        try:
            result2 = os.statvfs_result((10, ))
            self.fail("No exception thrown")
        except TypeError:
            pass

        # Use the constructor with a too-long tuple.
        try:
            result2 = os.statvfs_result(
                (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))
        except TypeError:
            pass
예제 #6
0
    def test_statvfs_attributes(self):
        if not hasattr(os, "statvfs"):
            return

        try:
            result = os.statvfs(self.fname)
        except OSError as e:
            # On AtheOS, glibc always returns ENOSYS
            import errno
            if e.errno == errno.ENOSYS:
                return

        # Make sure direct access works
        self.assertEquals(result.f_bfree, result[3])

        # Make sure all the attributes are there.
        members = ('bsize', 'frsize', 'blocks', 'bfree', 'bavail', 'files',
                    'ffree', 'favail', 'flag', 'namemax')
        for value, member in enumerate(members):
            self.assertEquals(getattr(result, 'f_' + member), result[value])

        # Make sure that assignment really fails
        try:
            result.f_bfree = 1
            self.fail("No exception thrown")
        except AttributeError:
            pass

        try:
            result.parrot = 1
            self.fail("No exception thrown")
        except AttributeError:
            pass

        # Use the constructor with a too-short tuple.
        try:
            result2 = os.statvfs_result((10,))
            self.fail("No exception thrown")
        except TypeError:
            pass

        # Use the constructr with a too-long tuple.
        try:
            result2 = os.statvfs_result((0,1,2,3,4,5,6,7,8,9,10,11,12,13,14))
        except TypeError:
            pass
예제 #7
0
파일: test_os.py 프로젝트: sjb8100/UTM-Demo
    def test_statvfs_attributes(self):
        if not hasattr(os, "statvfs"):
            return

        import statvfs
        result = os.statvfs(self.fname)

        # Make sure direct access works
        self.assertEquals(result.f_bfree, result[statvfs.F_BFREE])

        # Make sure all the attributes are there
        members = dir(result)
        for name in dir(statvfs):
            if name[:2] == 'F_':
                attr = name.lower()
                self.assertEquals(getattr(result, attr),
                                  result[getattr(statvfs, name)])
                self.assert_(attr in members)

        # Make sure that assignment really fails
        try:
            result.f_bfree = 1
            self.fail("No exception thrown")
        except TypeError:
            pass

        try:
            result.parrot = 1
            self.fail("No exception thrown")
        except AttributeError:
            pass

        # Use the constructor with a too-short tuple.
        try:
            result2 = os.statvfs_result((10, ))
            self.fail("No exception thrown")
        except TypeError:
            pass

        # Use the constructr with a too-long tuple.
        try:
            result2 = os.statvfs_result(
                (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))
        except TypeError:
            pass
예제 #8
0
    def test_statvfs_attributes(self):
        if not hasattr(os, "statvfs"):
            return

        import statvfs

        result = os.statvfs(self.fname)

        # Make sure direct access works
        self.assertEquals(result.f_bfree, result[statvfs.F_BFREE])

        # Make sure all the attributes are there
        members = dir(result)
        for name in dir(statvfs):
            if name[:2] == "F_":
                attr = name.lower()
                self.assertEquals(getattr(result, attr), result[getattr(statvfs, name)])
                self.assert_(attr in members)

        # Make sure that assignment really fails
        try:
            result.f_bfree = 1
            self.fail("No exception thrown")
        except TypeError:
            pass

        try:
            result.parrot = 1
            self.fail("No exception thrown")
        except AttributeError:
            pass

        # Use the constructor with a too-short tuple.
        try:
            result2 = os.statvfs_result((10,))
            self.fail("No exception thrown")
        except TypeError:
            pass

        # Use the constructr with a too-long tuple.
        try:
            result2 = os.statvfs_result((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))
        except TypeError:
            pass
예제 #9
0
    def statvfs(self, path):
        """
        :param str path: Absolute path on target.
        :rtype: os.statvfs_result

        Return statvfs information (disk size, free space etc.) about remote
        filesystem.
        """
        st = self.evaluate(f'import os; print(os.statvfs({str(path)!r}))')
        return os.statvfs_result(st)
예제 #10
0
 def get_mount_info(self, *args, **kwargs):
     if "mounts_file" not in kwargs:
         kwargs["mounts_file"] = self.makeFile("/dev/hda1 / ext3 rw 0 0\n")
     if "mtab_file" not in kwargs:
         kwargs["mtab_file"] = self.makeFile("/dev/hda1 / ext3 rw 0 0\n")
     if "statvfs" not in kwargs:
         kwargs["statvfs"] = lambda path: os.statvfs_result(
             (0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
     plugin = MountInfo(*args, **kwargs)
     # To make sure tests are isolated from the real system by default.
     plugin.is_device_removable = lambda x: False
     return plugin
예제 #11
0
 def add_mount(self,
               point,
               block_size=4096,
               capacity=1000,
               unused=1000,
               fs="ext3",
               device=None):
     if device is None:
         device = "/dev/" + point.replace("/", "_")
     self.stat_results[point] = os.statvfs_result(
         (block_size, 0, capacity, unused, 0, 0, 0, 0, 0, 0))
     f = open(self.mount_file, "a")
     f.write("/dev/%s %s %s rw 0 0\n" % (device, point, fs))
     f.close()
 def mock_os_statvfs(self):
     f_bsize = 4096
     f_frsize = 4096
     f_blocks = 12868767
     f_bfree = 11503139
     f_bavail = 10847779
     f_files = 3276800
     f_ffree = 3220784
     f_favail = 3220784
     f_flag = 4096
     f_namemax = 255
     return os.statvfs_result((f_bsize, f_frsize,
                              f_blocks, f_bfree,
                              f_bavail, f_files,
                              f_ffree, f_favail,
                              f_flag, f_namemax))
예제 #13
0
def statvfs(volume, host='localhost', port=24007, protocal='tcp'):
    _lazy_init_libgfapi()
    data = StatVfsData()
    _api.glfs_statvfs.restype = ctypes.c_int
    _api.glfs_statvfs.argtypes = [
        ctypes.c_void_p, ctypes.c_char_p,
        ctypes.POINTER(StatVfsData)
    ]
    fs = _mount_gluster_volume(volume, host, port, protocal)
    rc = _api.glfs_statvfs(fs, "/", ctypes.byref(data))

    # To convert to os.statvfs_result we need to pass tuple/list in
    # following order: bsize, frsize, blocks, bfree, bavail, files
    # ffree, favail, flag, namemax
    return os.statvfs_result(
        (data.f_bsize, data.f_frsize, data.f_blocks, data.f_bfree,
         data.f_bavail, data.f_files, data.f_ffree, data.f_favail, data.f_flag,
         data.f_namemax))
예제 #14
0
    def set_mount_points(self, points, read_access=True, fs='ext4'):
        """
        This method prepares a fake mounts file containing the
        mount points specified in the C{points} list of strings. This file
        can then be used by referencing C{self.mount_file}.

        If C{read_access} is set to C{False}, then all mount points will
        yield a permission denied error when inspected.
        """
        self.read_access = read_access
        content = "\n".join("/dev/sda%d %s %s rw 0 0" % (i, point, fs)
                            for i, point in enumerate(points))
        f = open(self.mount_file, "w")
        f.write(content)
        f.close()
        for point in points:
            self.stat_results[point] = os.statvfs_result(
                (4096, 0, 1000, 500, 0, 0, 0, 0, 0, 0))
예제 #15
0
파일: gfapi.py 프로젝트: nirs/vdsm
def volumeStatvfs(volumeName, host=GLUSTER_VOL_HOST, port=GLUSTER_VOL_PORT, protocol=GLUSTER_VOL_PROTOCOL):
    module = "gluster.gfapi"
    command = [
        constants.EXT_PYTHON,
        "-m",
        module,
        "-v",
        volumeName,
        "-p",
        str(port),
        "-H",
        host,
        "-t",
        protocol,
        "-c",
        "statvfs",
    ]

    # to include /usr/share/vdsm in python path
    env = os.environ.copy()
    env["PYTHONPATH"] = "%s:%s" % (env.get("PYTHONPATH", ""), constants.P_VDSM)
    env["PYTHONPATH"] = ":".join(map(os.path.abspath, env["PYTHONPATH"].split(":")))

    rc, out, err = commands.execCmd(command, raw=True, env=env)
    if rc != 0:
        raise ge.GlfsStatvfsException(rc, [out], [err])
    res = json.loads(out)
    return os.statvfs_result(
        (
            res["f_bsize"],
            res["f_frsize"],
            res["f_blocks"],
            res["f_bfree"],
            res["f_bavail"],
            res["f_files"],
            res["f_ffree"],
            res["f_favail"],
            res["f_flag"],
            res["f_namemax"],
        )
    )
예제 #16
0
def volumeStatvfsGet(volumeId,
                     host=GLUSTER_VOL_HOST,
                     port=GLUSTER_VOL_PORT,
                     protocol=GLUSTER_VOL_PROTOCOL):
    statvfsdata = StatVfsStruct()

    fs = glfsInit(volumeId, host, port, protocol)

    rc = _glfs_statvfs(fs, GLUSTER_VOL_PATH, ctypes.byref(statvfsdata))
    if rc != 0:
        raise ge.GlfsStatvfsException(rc=rc)

    glfsFini(fs, volumeId)

    # To convert to os.statvfs_result we need to pass tuple/list in
    # following order: bsize, frsize, blocks, bfree, bavail, files,
    #                  ffree, favail, flag, namemax
    return os.statvfs_result(
        (statvfsdata.f_bsize, statvfsdata.f_frsize, statvfsdata.f_blocks,
         statvfsdata.f_bfree, statvfsdata.f_bavail, statvfsdata.f_files,
         statvfsdata.f_ffree, statvfsdata.f_favail, statvfsdata.f_flag,
         statvfsdata.f_namemax))
예제 #17
0
def statvfs(volume, host='localhost', port=24007, protocal='tcp'):
    _lazy_init_libgfapi()
    data = StatVfsData()
    _api.glfs_statvfs.restype = ctypes.c_int
    _api.glfs_statvfs.argtypes = [ctypes.c_void_p,
                                  ctypes.c_char_p,
                                  ctypes.POINTER(StatVfsData)]
    fs = _mount_gluster_volume(volume, host, port, protocal)
    rc = _api.glfs_statvfs(fs, "/", ctypes.byref(data))

    # To convert to os.statvfs_result we need to pass tuple/list in
    # following order: bsize, frsize, blocks, bfree, bavail, files
    # ffree, favail, flag, namemax
    return os.statvfs_result((data.f_bsize,
                              data.f_frsize,
                              data.f_blocks,
                              data.f_bfree,
                              data.f_bavail,
                              data.f_files,
                              data.f_ffree,
                              data.f_favail,
                              data.f_flag,
                              data.f_namemax))
예제 #18
0
def volumeStatvfs(volumeName,
                  host=GLUSTER_VOL_HOST,
                  port=GLUSTER_VOL_PORT,
                  protocol=GLUSTER_VOL_PROTOCOL):
    module = "gluster.gfapi"
    command = [
        constants.EXT_PYTHON, '-m', module, '-v', volumeName, '-p',
        str(port), '-H', host, '-t', protocol, '-c', 'statvfs'
    ]

    # to include /usr/share/vdsm in python path
    env = os.environ.copy()
    env['PYTHONPATH'] = "%s:%s" % (env.get("PYTHONPATH", ""), constants.P_VDSM)
    env['PYTHONPATH'] = ":".join(
        map(os.path.abspath, env['PYTHONPATH'].split(":")))

    rc, out, err = utils.execCmd(command, raw=True, env=env)
    if rc != 0:
        raise ge.GlfsStatvfsException(rc, [out], [err])
    res = json.loads(out)
    return os.statvfs_result(
        (res['f_bsize'], res['f_frsize'], res['f_blocks'], res['f_bfree'],
         res['f_bavail'], res['f_files'], res['f_ffree'], res['f_favail'],
         res['f_flag'], res['f_namemax']))
예제 #19
0
def freediskspace(path):
	if sys.platform == "linux2":
		r=os.statvfs_result(os.statvfs(path))
		return r.f_bsize*r.f_bavail
	else:
		return 0 #could be a bad idea
예제 #20
0
파일: ll_os_stat.py 프로젝트: charred/pypy
def make_statvfs_result(tup):
    return os.statvfs_result(tup)
예제 #21
0
 def get_free_space(self):
     st = os.statvfs_result(".")
     du = st.f_bavail * st.f_frsize
     return du
예제 #22
0
class StatAttributeTests(unittest.TestCase):
    def setUp(self):
        os.mkdir(test_support.TESTFN)
        self.fname = os.path.join(test_support.TESTFN, "f1")
        f = open(self.fname, 'wb')
        f.write("ABC")
        f.close()

    def tearDown(self):
        os.unlink(self.fname)
        os.rmdir(test_support.TESTFN)

    def test_stat_attributes(self):
        if not hasattr(os, "stat"):
            return

        import stat
        result = os.stat(self.fname)

        # Make sure direct access works
        self.assertEquals(result[stat.ST_SIZE], 3)
        self.assertEquals(result.st_size, 3)

        import sys

        # Make sure all the attributes are there
        members = dir(result)
        for name in dir(stat):
            if name[:3] == 'ST_':
                attr = name.lower()
                if name.endswith("TIME"):

                    def trunc(x):
                        return int(x)
                else:

                    def trunc(x):
                        return x

                self.assertEquals(trunc(getattr(result, attr)),
                                  result[getattr(stat, name)])
                self.assert_(attr in members)

        try:
            result[200]
            self.fail("No exception thrown")
        except IndexError:
            pass

        # Make sure that assignment fails
        try:
            result.st_mode = 1
            self.fail("No exception thrown")
        except TypeError:
            pass

        try:
            result.st_rdev = 1
            self.fail("No exception thrown")
        except (AttributeError, TypeError):
            pass

        try:
            result.parrot = 1
            self.fail("No exception thrown")
        except AttributeError:
            pass

        # Use the stat_result constructor with a too-short tuple.
        try:
            result2 = os.stat_result((10, ))
            self.fail("No exception thrown")
        except TypeError:
            pass

        # Use the constructr with a too-long tuple.
        try:
            result2 = os.stat_result(
                (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))
        except TypeError:
            pass

    def test_statvfs_attributes(self):
        if not hasattr(os, "statvfs"):
            return

        import statvfs
        try:
            result = os.statvfs(self.fname)
        except OSError, e:
            # On AtheOS, glibc always returns ENOSYS
            import errno
            if e.errno == errno.ENOSYS:
                return

        # Make sure direct access works
        self.assertEquals(result.f_bfree, result[statvfs.F_BFREE])

        # Make sure all the attributes are there
        members = dir(result)
        for name in dir(statvfs):
            if name[:2] == 'F_':
                attr = name.lower()
                self.assertEquals(getattr(result, attr),
                                  result[getattr(statvfs, name)])
                self.assert_(attr in members)

        # Make sure that assignment really fails
        try:
            result.f_bfree = 1
            self.fail("No exception thrown")
        except TypeError:
            pass

        try:
            result.parrot = 1
            self.fail("No exception thrown")
        except AttributeError:
            pass

        # Use the constructor with a too-short tuple.
        try:
            result2 = os.statvfs_result((10, ))
            self.fail("No exception thrown")
        except TypeError:
            pass

        # Use the constructr with a too-long tuple.
        try:
            result2 = os.statvfs_result(
                (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14))
        except TypeError:
            pass
예제 #23
0
 def _hijack(self, path):
     return os.statvfs_result((0, 1, int(self.bytes_total), int(self.bytes_free), 0, 0, 0, 0, 0, 255))
예제 #24
0
파일: ll_os_stat.py 프로젝트: sota/pypy-old
def make_statvfs_result(tup):
    return os.statvfs_result(tup)
예제 #25
0
def make_statvfs_result(tup):
    args = tuple(
        lltype.cast_primitive(TYPE, value)
        for value, (name, TYPE) in zip(tup, STATVFS_FIELDS))
    return os.statvfs_result(args)
예제 #26
0
def statvfs(request):
    with mock.patch('os.statvfs') as statvfs:
        expected = os.statvfs_result(
            (4096, 4096, 100000, 10000, 10000, 10000, 1000, 100, 4096, 255))
        statvfs.side_effect = lambda path: expected
        yield (expected.f_frsize, expected.f_bavail, expected.f_blocks)
예제 #27
0
 def get_free_space(self):
     st = os.statvfs_result(".")
     du = st.f_bavail * st.f_frsize
     return du
 def test_simfs(self):
     self.patch('os.statvfs', lambda fs: os.statvfs_result(
         (4096, 4096, 20971520, 17750785, 17750785, 1600000, 1275269, 1275269, 4096, 255)
     ))
     self.assertEqual(ms.get_disk_info('simfs'), '80 GiB')
예제 #29
0
def statvfs_result_fixture(path):
    """Fixture for a dummy statvfs_result."""
    return os.statvfs_result((4096, 0, mb(1000), mb(100), 0, 0, 0, 0, 0, 0))
예제 #30
0
 def statvfs(self):
     """
     See :meth:`FileJuggler.do_statvfs`.
     """
     return os.statvfs_result(self._execute(['STATVFS']))
예제 #31
0
 def statvfs(self, path):
     """return stat information about remote filesystem"""
     st = self.evaluate('import os; print(os.statvfs({!r}))'.format(
         str(path)))
     return os.statvfs_result(st)
예제 #32
0
 def statvfs(path, multiplier=lambda: next(counter)):
     return os.statvfs_result(
         (4096, 0, mb(1000), mb(multiplier() * 100), 0, 0, 0, 0, 0, 0))
예제 #33
0
 def test_get_filesystem_subpath(self):
     self.set_mount_points(["/"])
     self.stat_results["/"] = os.statvfs_result(
         (4096, 0, 1000, 500, 0, 0, 0, 0, 0, 0))
     info = get_filesystem_for_path("/home", self.mount_file, self.statvfs)
     self.assertEqual(info["mount-point"], "/")
예제 #34
0
def make_statvfs_result(tup):
    args = tuple(lltype.cast_primitive(TYPE, value) for value, (name, TYPE) in zip(tup, STATVFS_FIELDS))
    return os.statvfs_result(args)
 def test_simfs(self):
     self.patch(
         'os.statvfs', lambda fs: os.statvfs_result(
             (4096, 4096, 20971520, 17750785, 17750785, 1600000, 1275269,
              1275269, 4096, 255)))
     self.assertEqual(ms.get_disk_info('simfs'), '80 GiB')
예제 #36
0
class StatAttributeTests(unittest.TestCase):
    def setUp(self):
        os.mkdir(test_support.TESTFN)
        self.fname = os.path.join(test_support.TESTFN, "f1")
        f = open(self.fname, 'wb')
        f.write("ABC")
        f.close()

    def tearDown(self):
        os.unlink(self.fname)
        os.rmdir(test_support.TESTFN)

    @unittest.skipUnless(hasattr(os, 'stat'), 'test needs os.stat()')
    def test_stat_attributes(self):
        import stat
        result = os.stat(self.fname)

        # Make sure direct access works
        self.assertEqual(result[stat.ST_SIZE], 3)
        self.assertEqual(result.st_size, 3)

        # Make sure all the attributes are there
        members = dir(result)
        for name in dir(stat):
            if name[:3] == 'ST_':
                attr = name.lower()
                if name.endswith("TIME"):
                    def trunc(x): return int(x)
                else:
                    def trunc(x): return x
                self.assertEqual(trunc(getattr(result, attr)),
                                 result[getattr(stat, name)])
                self.assertIn(attr, members)

        try:
            result[200]
            self.fail("No exception raised")
        except IndexError:
            pass

        # Make sure that assignment fails
        try:
            result.st_mode = 1
            self.fail("No exception raised")
        except (AttributeError, TypeError):
            pass

        try:
            result.st_rdev = 1
            self.fail("No exception raised")
        except (AttributeError, TypeError):
            pass

        try:
            result.parrot = 1
            self.fail("No exception raised")
        except AttributeError:
            pass

        # Use the stat_result constructor with a too-short tuple.
        try:
            result2 = os.stat_result((10,))
            self.fail("No exception raised")
        except TypeError:
            pass

        # Use the constructor with a too-long tuple.
        try:
            result2 = os.stat_result((0,1,2,3,4,5,6,7,8,9,10,11,12,13,14))
        except TypeError:
            pass


    @unittest.skipUnless(hasattr(os, 'statvfs'), 'test needs os.statvfs()')
    def test_statvfs_attributes(self):
        try:
            result = os.statvfs(self.fname)
        except OSError, e:
            # On AtheOS, glibc always returns ENOSYS
            if e.errno == errno.ENOSYS:
                self.skipTest('glibc always returns ENOSYS on AtheOS')

        # Make sure direct access works
        self.assertEqual(result.f_bfree, result[3])

        # Make sure all the attributes are there.
        members = ('bsize', 'frsize', 'blocks', 'bfree', 'bavail', 'files',
                    'ffree', 'favail', 'flag', 'namemax')
        for value, member in enumerate(members):
            self.assertEqual(getattr(result, 'f_' + member), result[value])

        # Make sure that assignment really fails
        try:
            result.f_bfree = 1
            self.fail("No exception raised")
        except TypeError:
            pass

        try:
            result.parrot = 1
            self.fail("No exception raised")
        except AttributeError:
            pass

        # Use the constructor with a too-short tuple.
        try:
            result2 = os.statvfs_result((10,))
            self.fail("No exception raised")
        except TypeError:
            pass

        # Use the constructor with a too-long tuple.
        try:
            result2 = os.statvfs_result((0,1,2,3,4,5,6,7,8,9,10,11,12,13,14))
        except TypeError:
            pass
예제 #37
0
def statvfs(request):
    with mock.patch('os.statvfs') as statvfs:
        expected = os.statvfs_result(
            (4096, 4096, 100000, 10000, 10000, 10000, 1000, 100, 4096, 255))
        statvfs.side_effect = lambda path: expected
        yield expected