From 7cfd9b407aa8d8fc9ab4c158ce98c019cf27cc84 Mon Sep 17 00:00:00 2001 From: Pierre Gerold Date: Fri, 27 Nov 2015 18:19:01 +0100 Subject: [PATCH] Add test for non atomic writing --- .../services/contents/tests/test_manager.py | 51 +++++++++++++++---- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/notebook/services/contents/tests/test_manager.py b/notebook/services/contents/tests/test_manager.py index 3ff2c805f..7b224e4f5 100644 --- a/notebook/services/contents/tests/test_manager.py +++ b/notebook/services/contents/tests/test_manager.py @@ -46,7 +46,7 @@ class TestFileContentsManager(TestCase): def symlink(self, contents_manager, src, dst): """Make a symlink to src from dst - + src and dst are api_paths """ src_os_path = contents_manager._get_os_path(src) @@ -106,7 +106,7 @@ class TestFileContentsManager(TestCase): self.assertNotEqual(cp_dir, cp_subdir) self.assertEqual(cp_dir, os.path.join(root, cpm.checkpoint_dir, cp_name)) self.assertEqual(cp_subdir, os.path.join(root, subd, cpm.checkpoint_dir, cp_name)) - + @dec.skip_win32 def test_bad_symlink(self): with TemporaryDirectory() as td: @@ -120,7 +120,7 @@ class TestFileContentsManager(TestCase): self.symlink(cm, "target", '%s/%s' % (path, 'bad symlink')) model = cm.get(path) self.assertEqual(model['content'], [file_model]) - + @dec.skip_win32 def test_good_symlink(self): with TemporaryDirectory() as td: @@ -140,19 +140,19 @@ class TestFileContentsManager(TestCase): sorted(dir_model['content'], key=lambda x: x['name']), [symlink_model, file_model], ) - + def test_403(self): if hasattr(os, 'getuid'): if os.getuid() == 0: raise SkipTest("Can't test permissions as root") if sys.platform.startswith('win'): raise SkipTest("Can't test permissions on Windows") - + with TemporaryDirectory() as td: cm = FileContentsManager(root_dir=td) model = cm.new_untitled(type='file') os_path = cm._get_os_path(model['path']) - + os.chmod(os_path, 0o400) try: with cm.open(os_path, 'w') as f: @@ -188,7 +188,7 @@ class TestFileContentsManager(TestCase): class TestContentsManager(TestCase): - + def setUp(self): self._temp_dir = TemporaryDirectory() self.td = self._temp_dir.name @@ -198,10 +198,10 @@ class TestContentsManager(TestCase): def tearDown(self): self._temp_dir.cleanup() - + def make_dir(self, api_path): """make a subdirectory at api_path - + override in subclasses if contents are not on the filesystem. """ _make_dir(self.contents_manager, api_path) @@ -247,7 +247,7 @@ class TestContentsManager(TestCase): self.assertEqual(model['name'], 'Untitled Folder') self.assertEqual(model['path'], 'Untitled Folder') sub_dir = model['path'] - + model = cm.new_untitled(path=sub_dir) assert isinstance(model, dict) self.assertIn('name', model) @@ -528,3 +528,34 @@ class TestContentsManager(TestCase): cm.mark_trusted_cells(nb, path) cm.check_and_sign(nb, path) assert cm.notary.check_signature(nb) + + +class TestContentsManagerNoAtomic(TestCase): + + def setUp(self): + self._temp_dir = TemporaryDirectory() + self.td = self._temp_dir.name + self.contents_manager = FileContentsManager( + root_dir = self.td, + ) + self.contents_manager.use_atomic_writing = False + + def tearDown(self): + self._temp_dir.cleanup() + + def new_notebook_no_atomic(self): + """ + + """ + cm = self.contents_manager + model = cm.new_untitled(type="notebook") + name = model['name'] + path = model['path'] + + full_model = cm.get(path) + nb = full_model['content'] + nb['metadata']['counter'] = int(1e6 * time.time()) + self.add_code_cell(nb) + + cm.save(full_model, path) + return nb, name, path