From 3eac5895570e84a6ff4c7ffcebd7fcc1c6a512d9 Mon Sep 17 00:00:00 2001 From: Jens Luetjen Date: Mon, 29 Feb 2016 20:47:11 +0100 Subject: [PATCH] Try to restore state only one time. Delete the persistant file after read. If something goes wrong during restore, the next start is clean. --- mopidy/core/actor.py | 4 ++++ tests/core/test_actor.py | 21 ++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/mopidy/core/actor.py b/mopidy/core/actor.py index 678796fb..59f10450 100644 --- a/mopidy/core/actor.py +++ b/mopidy/core/actor.py @@ -209,6 +209,10 @@ class Core( logger.info('Load state from %s', file_name) data = storage.load(file_name) + + # Try only once. If something goes wrong, the next start is clean. + os.remove(file_name) + if 'state' in data: core_state = data['state'] validation.check_instance(core_state, CoreState) diff --git a/tests/core/test_actor.py b/tests/core/test_actor.py index 290d1c60..e935241f 100644 --- a/tests/core/test_actor.py +++ b/tests/core/test_actor.py @@ -1,5 +1,6 @@ from __future__ import absolute_import, unicode_literals +import os import shutil import tempfile import unittest @@ -9,7 +10,7 @@ import mock import pykka from mopidy.core import Core -from mopidy.internal import versioning +from mopidy.internal import storage, versioning class CoreActorTest(unittest.TestCase): @@ -59,6 +60,8 @@ class CoreActorExportRestoreTest(unittest.TestCase): } } + os.mkdir(os.path.join(self.temp_dir, 'core')) + self.core = Core.start( config=config, mixer=None, backends=[]).proxy() @@ -67,9 +70,21 @@ class CoreActorExportRestoreTest(unittest.TestCase): shutil.rmtree(self.temp_dir) def test_export_state(self): - self.core.teardown() + self.core.teardown().get() # TODO: implement meaningful test def test_restore_state(self): - self.core.setup() + self.core.setup().get() # TODO: implement meaningful test + + def test_delete_state_file_on_restore(self): + file_path = os.path.join(self.temp_dir, 'core', 'persistent.state') + + data = {} + storage.save(file_path, data) + self.assertTrue(os.path.isfile(file_path), 'missing persistent file') + + self.core.setup().get() + + self.assertFalse(os.path.isfile(file_path), + 'persistent file has to be deleted')