diff options
author | nkozlovskiy <nmk@ydb.tech> | 2023-09-29 12:24:06 +0300 |
---|---|---|
committer | nkozlovskiy <nmk@ydb.tech> | 2023-09-29 12:41:34 +0300 |
commit | e0e3e1717e3d33762ce61950504f9637a6e669ed (patch) | |
tree | bca3ff6939b10ed60c3d5c12439963a1146b9711 /contrib/python/atomicwrites/py2/tests | |
parent | 38f2c5852db84c7b4d83adfcb009eb61541d1ccd (diff) | |
download | ydb-e0e3e1717e3d33762ce61950504f9637a6e669ed.tar.gz |
add ydb deps
Diffstat (limited to 'contrib/python/atomicwrites/py2/tests')
-rw-r--r-- | contrib/python/atomicwrites/py2/tests/test_atomicwrites.py | 91 | ||||
-rw-r--r-- | contrib/python/atomicwrites/py2/tests/ya.make | 13 |
2 files changed, 104 insertions, 0 deletions
diff --git a/contrib/python/atomicwrites/py2/tests/test_atomicwrites.py b/contrib/python/atomicwrites/py2/tests/test_atomicwrites.py new file mode 100644 index 0000000000..b3128c5b4f --- /dev/null +++ b/contrib/python/atomicwrites/py2/tests/test_atomicwrites.py @@ -0,0 +1,91 @@ +import errno +import os + +from atomicwrites import atomic_write + +import pytest + + +def test_atomic_write(tmpdir): + fname = tmpdir.join('ha') + for i in range(2): + with atomic_write(str(fname), overwrite=True) as f: + f.write('hoho') + + with pytest.raises(OSError) as excinfo: + with atomic_write(str(fname), overwrite=False) as f: + f.write('haha') + + assert excinfo.value.errno == errno.EEXIST + + assert fname.read() == 'hoho' + assert len(tmpdir.listdir()) == 1 + + +def test_teardown(tmpdir): + fname = tmpdir.join('ha') + with pytest.raises(AssertionError): + with atomic_write(str(fname), overwrite=True): + assert False + + assert not tmpdir.listdir() + + +def test_replace_simultaneously_created_file(tmpdir): + fname = tmpdir.join('ha') + with atomic_write(str(fname), overwrite=True) as f: + f.write('hoho') + fname.write('harhar') + assert fname.read() == 'harhar' + assert fname.read() == 'hoho' + assert len(tmpdir.listdir()) == 1 + + +def test_dont_remove_simultaneously_created_file(tmpdir): + fname = tmpdir.join('ha') + with pytest.raises(OSError) as excinfo: + with atomic_write(str(fname), overwrite=False) as f: + f.write('hoho') + fname.write('harhar') + assert fname.read() == 'harhar' + + assert excinfo.value.errno == errno.EEXIST + assert fname.read() == 'harhar' + assert len(tmpdir.listdir()) == 1 + + +# Verify that nested exceptions during rollback do not overwrite the initial +# exception that triggered a rollback. +def test_open_reraise(tmpdir): + fname = tmpdir.join('ha') + with pytest.raises(AssertionError): + aw = atomic_write(str(fname), overwrite=False) + with aw: + # Mess with internals, so commit will trigger a ValueError. We're + # testing that the initial AssertionError triggered below is + # propagated up the stack, not the second exception triggered + # during commit. + aw.rollback = lambda: 1 / 0 + # Now trigger our own exception. + assert False, "Intentional failure for testing purposes" + + +def test_atomic_write_in_pwd(tmpdir): + orig_curdir = os.getcwd() + try: + os.chdir(str(tmpdir)) + fname = 'ha' + for i in range(2): + with atomic_write(str(fname), overwrite=True) as f: + f.write('hoho') + + with pytest.raises(OSError) as excinfo: + with atomic_write(str(fname), overwrite=False) as f: + f.write('haha') + + assert excinfo.value.errno == errno.EEXIST + + assert open(fname).read() == 'hoho' + assert len(tmpdir.listdir()) == 1 + finally: + os.chdir(orig_curdir) diff --git a/contrib/python/atomicwrites/py2/tests/ya.make b/contrib/python/atomicwrites/py2/tests/ya.make new file mode 100644 index 0000000000..c193d0b3ba --- /dev/null +++ b/contrib/python/atomicwrites/py2/tests/ya.make @@ -0,0 +1,13 @@ +PY2TEST() + +PEERDIR( + contrib/python/atomicwrites +) + +TEST_SRCS( + test_atomicwrites.py +) + +NO_LINT() + +END() |