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
This commit is contained in:
Hemna 2020-02-04 15:28:04 -05:00 committed by Walter A. Boring IV (hemna)
parent 2961c30bce
commit e9ec55ce1a
2 changed files with 22 additions and 5 deletions

View File

@ -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:

View File

@ -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')