diff --git a/libcloud/storage/drivers/local.py b/libcloud/storage/drivers/local.py index f47d7c0649..b2f533e42e 100644 --- a/libcloud/storage/drivers/local.py +++ b/libcloud/storage/drivers/local.py @@ -59,7 +59,7 @@ def __enter__(self): return True def __exit__(self, type, value, traceback): - return value + return False class LockLocalStorage: diff --git a/libcloud/test/storage/test_local.py b/libcloud/test/storage/test_local.py index 7d7f271405..81ff58a2f3 100644 --- a/libcloud/test/storage/test_local.py +++ b/libcloud/test/storage/test_local.py @@ -237,6 +237,37 @@ def test_objects_success(self): container.delete() self.remove_tmp_file(tmppath) + def test_upload_object_via_stream_without_locking_propagates_error(self): + driver = LocalStorageDriver(self.key, ex_use_locking=False) + container = driver.create_container("failed-stream") + error = OSError("source stream failed") + + def failing_stream(): + yield b"partial data" + raise error + + with self.assertRaises(OSError) as raised: + driver.upload_object_via_stream(failing_stream(), container, "object") + + self.assertIs(raised.exception, error) + + def test_upload_object_without_locking_propagates_copy_error(self): + driver = LocalStorageDriver(self.key, ex_use_locking=False) + container = driver.create_container("failed-copy") + driver.upload_object_via_stream(iter([b"original"]), container, "object") + missing_source = os.path.join(self.key, "missing-source") + + with self.assertRaises(FileNotFoundError): + driver.upload_object(missing_source, container, "object") + + def test_upload_object_via_stream_without_locking_success(self): + driver = LocalStorageDriver(self.key, ex_use_locking=False) + container = driver.create_container("successful-stream") + obj = driver.upload_object_via_stream(iter([b"first", b"second"]), container, "object") + + self.assertEqual(obj.size, 11) + self.assertEqual(b"".join(driver.download_object_as_stream(obj)), b"firstsecond") + def test_get_container_doesnt_exist(self): try: self.driver.get_container(container_name="container1")