aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/atomicwrites/py2/tests
diff options
context:
space:
mode:
authornkozlovskiy <nmk@ydb.tech>2023-09-29 12:24:06 +0300
committernkozlovskiy <nmk@ydb.tech>2023-09-29 12:41:34 +0300
commite0e3e1717e3d33762ce61950504f9637a6e669ed (patch)
treebca3ff6939b10ed60c3d5c12439963a1146b9711 /contrib/python/atomicwrites/py2/tests
parent38f2c5852db84c7b4d83adfcb009eb61541d1ccd (diff)
downloadydb-e0e3e1717e3d33762ce61950504f9637a6e669ed.tar.gz
add ydb deps
Diffstat (limited to 'contrib/python/atomicwrites/py2/tests')
-rw-r--r--contrib/python/atomicwrites/py2/tests/test_atomicwrites.py91
-rw-r--r--contrib/python/atomicwrites/py2/tests/ya.make13
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()