summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-02-13 11:59:11 +0000
committerGerrit Code Review <review@openstack.org>2020-02-13 11:59:11 +0000
commitfbb6cedfbebda04613e8176eb109bfb3018486dc (patch)
treebbabd1b65d5bb05f4cb63f6ce26d7318d16424e9
parent1f5425e962ff75e8ac247783175fb13962d2f5ec (diff)
parent4f8726c8143adbeeaa91eed7a7fa13c1e9d96017 (diff)
downloadoslo-vmware-fbb6cedfbebda04613e8176eb109bfb3018486dc.tar.gz
Merge "Adds standard file operation functions"3.1.0
-rw-r--r--oslo_vmware/rw_handles.py32
-rw-r--r--oslo_vmware/tests/test_rw_handles.py25
2 files changed, 57 insertions, 0 deletions
diff --git a/oslo_vmware/rw_handles.py b/oslo_vmware/rw_handles.py
index 3a01ed9..5a9c201 100644
--- a/oslo_vmware/rw_handles.py
+++ b/oslo_vmware/rw_handles.py
@@ -177,6 +177,32 @@ class FileHandle(object):
"""
raise NotImplementedError()
+ def tell(self):
+ """Get the position of File Handle
+
+ :return: position
+ """
+ raise NotImplementedError()
+
+ def fileno(self):
+ """returns the integer file descriptor
+ by default this is not supported and raises IOError
+ """
+ raise IOError()
+
+ def seek(self, offset):
+ """sets the file's current position at the offset
+
+ :param offset: offset
+ """
+ pass
+
+ def flush(self):
+ """flushes the internal buffer
+
+ """
+ pass
+
def get_size(self):
"""Get size of the file to be read.
@@ -484,6 +510,9 @@ class VmdkWriteHandle(VmdkHandle):
""""Get managed object reference of the VM created for import."""
return self._vm_ref
+ def tell(self):
+ return self._bytes_written
+
def write(self, data):
"""Write data to the file.
@@ -585,6 +614,9 @@ class VmdkReadHandle(VmdkHandle):
LOG.exception(excep_msg)
raise exceptions.VimException(excep_msg, excep)
+ def tell(self):
+ return self._bytes_read
+
def close(self):
"""Releases the lease and close the connection.
diff --git a/oslo_vmware/tests/test_rw_handles.py b/oslo_vmware/tests/test_rw_handles.py
index 064ad8e..9f78fa1 100644
--- a/oslo_vmware/tests/test_rw_handles.py
+++ b/oslo_vmware/tests/test_rw_handles.py
@@ -168,6 +168,12 @@ class VmdkHandleTest(base.TestCase):
self.assertRaises(exceptions.VimException, handle.update_progress)
+ def test_fileno(self):
+ session = mock.Mock()
+ handle = rw_handles.VmdkHandle(session, None, 'fake-url', None)
+
+ self.assertRaises(IOError, handle.fileno)
+
class VmdkWriteHandleTest(base.TestCase):
"""Tests for VmdkWriteHandle."""
@@ -228,6 +234,16 @@ class VmdkWriteHandleTest(base.TestCase):
self._conn.putrequest.assert_called_once_with('PUT', '/ds/disk1.vmdk')
self._conn.send.assert_called_once_with(data)
+ def test_tell(self):
+ session = self._create_mock_session()
+ handle = rw_handles.VmdkWriteHandle(session, '10.1.2.3', 443,
+ 'rp-1', 'folder-1', None,
+ 100)
+ data = [1] * 10
+ handle.write(data)
+ self.assertEqual(len(data), handle._bytes_written)
+ self.assertEqual(len(data), handle.tell())
+
def test_write_post(self):
session = self._create_mock_session()
handle = rw_handles.VmdkWriteHandle(session, '10.1.2.3', 443,
@@ -326,6 +342,15 @@ class VmdkReadHandleTest(base.TestCase):
data = handle.read(chunk_size)
self.assertEqual('fake-data', data)
+ def test_tell(self):
+ chunk_size = rw_handles.READ_CHUNKSIZE
+ session = self._create_mock_session()
+ handle = rw_handles.VmdkReadHandle(session, '10.1.2.3', 443,
+ 'vm-1', '[ds] disk1.vmdk',
+ chunk_size * 10)
+ data = handle.read(chunk_size)
+ self.assertEqual(len(data), handle.tell())
+
def test_update_progress(self):
chunk_size = len('fake-data')
vmdk_size = chunk_size * 10