From e9ec55ce1ac8d2d71452d9412cacef41116611df Mon Sep 17 00:00:00 2001 From: Hemna Date: Tue, 4 Feb 2020 15:28:04 -0500 Subject: Add ability to change read chunk size This patch adds the ability to change the read chunk size during a call to VmdkReadHandle.read calls. The read size defaults to READ_CHUNKSIZE, which was the previous behavior. Change-Id: I2480a2dfc42b51a22a2fce071c62c97d84555cf1 --- oslo_vmware/rw_handles.py | 4 ++-- oslo_vmware/tests/test_rw_handles.py | 23 ++++++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) (limited to 'oslo_vmware') diff --git a/oslo_vmware/rw_handles.py b/oslo_vmware/rw_handles.py index 3a01ed9..a3ba84e 100644 --- a/oslo_vmware/rw_handles.py +++ b/oslo_vmware/rw_handles.py @@ -565,7 +565,7 @@ class VmdkReadHandle(VmdkHandle): ssl_thumbprint=thumbprint) super(VmdkReadHandle, self).__init__(session, lease, url, self._conn) - def read(self, chunk_size): + def read(self, chunk_size=READ_CHUNKSIZE): """Read a chunk of data from the VMDK file. :param chunk_size: size of read chunk @@ -573,7 +573,7 @@ class VmdkReadHandle(VmdkHandle): :raises: VimException """ try: - data = self._file_handle.read(READ_CHUNKSIZE) + data = self._file_handle.read(chunk_size) self._bytes_read += len(data) return data except Exception as excep: diff --git a/oslo_vmware/tests/test_rw_handles.py b/oslo_vmware/tests/test_rw_handles.py index 064ad8e..3723b2a 100644 --- a/oslo_vmware/tests/test_rw_handles.py +++ b/oslo_vmware/tests/test_rw_handles.py @@ -272,8 +272,10 @@ class VmdkReadHandleTest(base.TestCase): def setUp(self): super(VmdkReadHandleTest, self).setUp() + + def _mock_connection(self, read_data='fake-data'): self._resp = mock.Mock() - self._resp.read.return_value = 'fake-data' + self._resp.read.return_value = read_data self._conn = mock.Mock() self._conn.getresponse.return_value = self._resp patcher = mock.patch( @@ -282,7 +284,9 @@ class VmdkReadHandleTest(base.TestCase): HTTPConnectionMock = patcher.start() HTTPConnectionMock.return_value = self._conn - def _create_mock_session(self, disk=True, progress=-1): + def _create_mock_session(self, disk=True, progress=-1, + read_data='fake-data'): + self._mock_connection(read_data=read_data) device_url = mock.Mock() device_url.disk = disk device_url.url = 'http://*/ds/disk1.vmdk' @@ -323,8 +327,21 @@ class VmdkReadHandleTest(base.TestCase): handle = rw_handles.VmdkReadHandle(session, '10.1.2.3', 443, 'vm-1', '[ds] disk1.vmdk', chunk_size * 10) + fake_data = 'fake-data' data = handle.read(chunk_size) - self.assertEqual('fake-data', data) + self.assertEqual(fake_data, data) + self.assertEqual(len(fake_data), handle._bytes_read) + + def test_read_small(self): + read_data = 'fake' + session = self._create_mock_session(read_data=read_data) + + read_size = len(read_data) + handle = rw_handles.VmdkReadHandle(session, '10.1.2.3', 443, + 'vm-1', '[ds] disk1.vmdk', + read_size * 10) + handle.read(read_size) + self.assertEqual(read_size, handle._bytes_read) def test_update_progress(self): chunk_size = len('fake-data') -- cgit v1.2.1