diff options
author | Thiago da Silva <thiago@redhat.com> | 2014-04-12 12:40:44 -0400 |
---|---|---|
committer | Thiago da Silva <thiago@redhat.com> | 2015-02-20 12:53:06 -0500 |
commit | 88bc71ff92026d889125bc0c4b14b450e41e62c4 (patch) | |
tree | 32576f33f0965fa790f8990afbbbd6c22ef8056b | |
parent | fc318e921b073cdbe9fbe62b8c893634b057f0e8 (diff) |
Added option to read whole file
Added option to read whole file if caller send -1
as the buflen to read function.
Also added a copy of getsize to File class, now called
fgetsize, which returns the size of the file as
reported by fstat
Removed flags paramater from read function as it is never
used by libgfapi.
Change-Id: Ia1c04ef9717d9ca098e1961300d6ee216381c989
Signed-off-by: Thiago da Silva <thiago@redhat.com>
Signed-off-by: Prashanth Pai <ppai@redhat.com>
-rwxr-xr-x | glusterfs/gfapi.py | 19 | ||||
-rw-r--r-- | test/unit/gluster/test_gfapi.py | 12 |
2 files changed, 29 insertions, 2 deletions
diff --git a/glusterfs/gfapi.py b/glusterfs/gfapi.py index 2d51a96..af25d18 100755 --- a/glusterfs/gfapi.py +++ b/glusterfs/gfapi.py @@ -104,6 +104,12 @@ class File(object): raise OSError(err, os.strerror(err)) return ret + def fgetsize(self): + """ + Return the size of a file, reported by fstat() + """ + return self.fstat().st_size + def fstat(self): """ Returns Stat object for this file. @@ -137,9 +143,18 @@ class File(object): """ return api.glfs_lseek(self.fd, pos, how) - def read(self, buflen, flags=0): + def read(self, buflen=-1): + """ + read file + + :param buflen: length of read buffer. If less than 0, then whole + file is read. Default is -1. + :returns: buffer of size buflen + """ + if buflen < 0: + buflen = self.fgetsize() rbuf = ctypes.create_string_buffer(buflen) - ret = api.glfs_read(self.fd, rbuf, buflen, flags) + ret = api.glfs_read(self.fd, rbuf, buflen, 0) if ret > 0: return rbuf elif ret < 0: diff --git a/test/unit/gluster/test_gfapi.py b/test/unit/gluster/test_gfapi.py index 1608332..0d73a32 100644 --- a/test/unit/gluster/test_gfapi.py +++ b/test/unit/gluster/test_gfapi.py @@ -180,6 +180,18 @@ class TestFile(unittest.TestCase): b = self.fd.read(5) self.assertEqual(b, 0) + def test_read_buflen_negative(self): + _mock_fgetsize = Mock(return_value=12345) + + def _mock_glfs_read(fd, rbuf, buflen, flags): + self.assertEqual(buflen, 12345) + return buflen + + for buflen in (-1,-2,-999): + with patch("glusterfs.gfapi.api.glfs_read", _mock_glfs_read): + with patch("glusterfs.gfapi.File.fgetsize", _mock_fgetsize): + b = self.fd.read(buflen) + def test_write_success(self): mock_glfs_write = Mock() mock_glfs_write.return_value = 5 |