def test_cannot_write(self, mock_chmod, mock_chown, mock_flock): raw_file = RawFile(fixture_metadata()) mock_open = mock.mock_open() with patch_file("open", mock_open): mock_open().fileno.return_value = self.fileno mock_open().write.side_effect = OSError(1, "some error", FILE_PATH) with self.assertRaises(RawFileError) as cm: raw_file.write(b"data") mock_open().write.assert_called_once_with("data") mock_open.assert_has_calls([mock.call(FILE_PATH, "x")]) mock_flock.assert_called_once_with(self.fileno, fcntl.LOCK_EX) mock_chown.assert_called_once_with(FILE_PATH, FILE_OWNER, FILE_GROUP) mock_chmod.assert_called_once_with(self.fileno, FILE_PERMISSIONS) self.assertEqual(cm.exception.metadata, raw_file.metadata) self.assertEqual(cm.exception.action, RawFileError.ACTION_WRITE) self.assertEqual(cm.exception.reason, f"some error: '{FILE_PATH}'")
def test_cannot_chown_bad_user(self, mock_chmod, mock_chown, mock_flock): raw_file = RawFile(fixture_metadata()) mock_chown.side_effect = LookupError("some error") mock_open = mock.mock_open() with patch_file("open", mock_open): mock_open().fileno.return_value = self.fileno with self.assertRaises(RawFileError) as cm: raw_file.write(b"data") mock_open().write.assert_not_called() mock_open.assert_has_calls([mock.call(FILE_PATH, "x")]) mock_flock.assert_called_once_with(self.fileno, fcntl.LOCK_EX) mock_chown.assert_called_once_with(FILE_PATH, FILE_OWNER, FILE_GROUP) mock_chmod.assert_not_called() self.assertEqual(cm.exception.metadata, raw_file.metadata) self.assertEqual(cm.exception.action, RawFileError.ACTION_CHOWN) self.assertEqual(cm.exception.reason, "some error")
def test_already_exists(self, mock_chmod, mock_chown, mock_flock): raw_file = RawFile(fixture_metadata()) mock_open = mock.mock_open() with patch_file("open", mock_open): mock_open.side_effect = OSError(errno.EEXIST, "some error", FILE_PATH) with self.assertRaises(FileAlreadyExists) as cm: raw_file.write(b"data") mock_open().write.assert_not_called() mock_open.assert_has_calls([mock.call(FILE_PATH, "x")]) mock_flock.assert_not_called() mock_chown.assert_not_called() mock_chmod.assert_not_called() self.assertEqual(cm.exception.metadata, raw_file.metadata) self.assertEqual(cm.exception.action, RawFileError.ACTION_WRITE) self.assertEqual(cm.exception.reason, "")
def test_success_permissions(self, mock_chmod, mock_chown, mock_flock): self.assert_success( mock_flock, RawFile(fixture_metadata(owner=None, group=None)), "x", False, ) mock_chown.assert_not_called() mock_chmod.assert_called_once_with(self.fileno, FILE_PERMISSIONS)
def test_success_owner_group(self, mock_chmod, mock_chown, mock_flock): self.assert_success( mock_flock, RawFile(fixture_metadata(owner=None, permissions=None)), "x", False, ) mock_chown.assert_called_once_with(FILE_PATH, None, FILE_GROUP) mock_chmod.assert_not_called()
def test_success_overwrite(self, mock_chmod, mock_chown, mock_flock): self.assert_success( mock_flock, RawFile(fixture_metadata(owner=None, group=None, permissions=None)), "w", True, ) mock_chown.assert_not_called() mock_chmod.assert_not_called()
def test_success_minimal(self, mock_chmod, mock_chown, mock_flock): self.assert_success( mock_flock, RawFile(fixture_metadata(owner=None, group=None, permissions=None)), "x", False, ) mock_chown.assert_not_called() mock_chmod.assert_not_called()
def test_success_chown_permissions( self, mock_chmod, mock_chown, mock_flock ): self.assert_success( mock_flock, RawFile(fixture_metadata()), "x", False ) mock_chown.assert_called_once_with(FILE_PATH, FILE_OWNER, FILE_GROUP) mock_chmod.assert_called_once_with(self.fileno, FILE_PERMISSIONS)
def test_success_binary(self, mock_flock): self.assert_read_in_correct_mode( mock_flock, RawFile(fixture_metadata(binary=True)), "rb", )
def test_success_text(self, mock_flock): self.assert_read_in_correct_mode( mock_flock, RawFile(fixture_metadata()), "r", )
def test_return_false_if_file_does_not_exist(self, mock_exists): mock_exists.return_value = False self.assertFalse(RawFile(fixture_metadata()).exists()) mock_exists.assert_called_once_with(FILE_PATH)
def test_return_true_if_file_exists(self, mock_exists): mock_exists.return_value = True self.assertTrue(RawFile(fixture_metadata()).exists()) mock_exists.assert_called_once_with(FILE_PATH)
def test_file_not_found(self, mock_remove): mock_remove.side_effect = OSError(errno.ENOENT, "some error", FILE_PATH) RawFile(fixture_metadata()).remove(fail_if_file_not_found=False) mock_remove.assert_called_once_with(FILE_PATH)
def test_success(self, mock_remove): RawFile(fixture_metadata()).remove() mock_remove.assert_called_once_with(FILE_PATH)