summaryrefslogtreecommitdiff
path: root/oslo_vmware
diff options
context:
space:
mode:
authorHemna <waboring@hemna.com>2020-02-04 15:28:04 -0500
committerWalter A. Boring IV (hemna) <waboring@hemna.com>2020-02-05 16:16:58 +0000
commite9ec55ce1ac8d2d71452d9412cacef41116611df (patch)
tree7d3f2b111e62ccd789aab3ce7f53eba7c477a005 /oslo_vmware
parent2961c30bceee270dd54d170e66dbfea11e1d7f0f (diff)
downloadoslo-vmware-e9ec55ce1ac8d2d71452d9412cacef41116611df.tar.gz
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
Diffstat (limited to 'oslo_vmware')
-rw-r--r--oslo_vmware/rw_handles.py4
-rw-r--r--oslo_vmware/tests/test_rw_handles.py23
2 files changed, 22 insertions, 5 deletions
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')