Do not send project closed event when it's a snapshot restore

Ref #602
This commit is contained in:
Julien Duponchelle 2016-08-15 13:30:02 +02:00
parent 937ffc7b73
commit 431bd789cb
No known key found for this signature in database
GPG Key ID: CE8B29639E07F5E8
3 changed files with 11 additions and 4 deletions

View File

@ -440,11 +440,12 @@ class Project:
os.remove(snapshot.path)
@asyncio.coroutine
def close(self):
def close(self, ignore_notification=False):
for compute in self._project_created_on_compute:
yield from compute.post("/projects/{}/close".format(self._id))
self._cleanPictures()
self._status = "closed"
if not ignore_notification:
self.controller.notification.emit("project.closed", self.__json__())
def _cleanPictures(self):

View File

@ -77,7 +77,8 @@ class Snapshot:
"""
yield from self._project.delete_on_computes()
yield from self._project.close()
# We don't send close notif to clients because the close / open dance is purely internal
yield from self._project.close(ignore_notification=True)
shutil.rmtree(os.path.join(self._project.path, "project-files"))
with open(self._path, "rb") as f:
project = yield from import_project(self._project.controller, self._project.id, f, location=self._project.path)

View File

@ -17,7 +17,7 @@
import os
import pytest
from unittest.mock import patch
from unittest.mock import patch, MagicMock
from gns3server.controller.project import Project
from gns3server.controller.snapshot import Snapshot
@ -90,9 +90,14 @@ def test_restore(project, controller, async_run):
assert os.path.exists(test_file)
assert len(project.nodes) == 2
controller._notification = MagicMock()
with patch("gns3server.config.Config.get_section_config", return_value={"local": True}):
async_run(snapshot.restore())
# project.closed notification should not be send when restoring snapshots
assert "project.closed" not in [c[0][0] for c in controller.notification.emit.call_args_list]
project = controller.get_project(project.id)
assert not os.path.exists(test_file)
assert len(project.nodes) == 1