def test_cannot_open(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(1, "some error", FILE_PATH) 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_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, f"some error: '{FILE_PATH}'")
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")