Merge lp:~nataliabidart/ubuntuone-client/filter-events-for-unsubscribed-volumes into lp:ubuntuone-client

Proposed by Natalia Bidart
Status: Merged
Approved by: dobey
Approved revision: not available
Merged at revision: not available
Proposed branch: lp:~nataliabidart/ubuntuone-client/filter-events-for-unsubscribed-volumes
Merge into: lp:ubuntuone-client
Diff against target: 106 lines (+77/-2)
2 files modified
tests/syncdaemon/test_action_queue.py (+74/-2)
ubuntuone/syncdaemon/action_queue.py (+3/-0)
To merge this branch: bzr merge lp:~nataliabidart/ubuntuone-client/filter-events-for-unsubscribed-volumes
Reviewer Review Type Date Requested Status
dobey (community) Approve
Guillermo Gonzalez Approve
Review via email: mp+17385@code.launchpad.net

Commit message

Filtering SV_HASH_NEW event for un-subscribed udf's.

To post a comment you must log in.
Revision history for this message
Natalia Bidart (nataliabidart) wrote :

Filtering SV_HASH_NEW event for un-subscribed udf's.

Revision history for this message
Guillermo Gonzalez (verterok) wrote :

Looks good.

review: Approve
Revision history for this message
dobey (dobey) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'tests/syncdaemon/test_action_queue.py'
2--- tests/syncdaemon/test_action_queue.py 2010-01-13 20:07:41 +0000
3+++ tests/syncdaemon/test_action_queue.py 2010-01-14 15:57:14 +0000
4@@ -31,11 +31,11 @@
5 from twisted.python.failure import DefaultException, Failure
6
7 from contrib.testing.testcase import (
8- BaseTwistedTestCase,
9+ BaseTwistedTestCase, FakeMain,
10 MementoHandler,
11 )
12
13-from ubuntuone.storageprotocol import client
14+from ubuntuone.storageprotocol import client, volumes
15 from ubuntuone.syncdaemon.dbus_interface import DBusInterface
16 from ubuntuone.syncdaemon.main import Main
17 from ubuntuone.syncdaemon.action_queue import (
18@@ -502,3 +502,75 @@
19 events = [('AQ_DELETE_VOLUME_ERROR', (), {'volume_id': VOLUME, 'error': msg})]
20 self.assertEquals(events, self.command.action_queue.event_queue.events)
21 self.assertTrue(res is None)
22+
23+
24+class FilterEventsTestCase(BaseTwistedTestCase):
25+ """Tests for event filtering when a volume is not of our interest."""
26+
27+ def setUp(self):
28+ """Init."""
29+ BaseTwistedTestCase.setUp(self)
30+ self.log = logging.getLogger("ubuntuone.SyncDaemon.TEST")
31+ self.log.info("starting test %s.%s", self.__class__.__name__,
32+ self._testMethodName)
33+ self.root_dir = self.mktemp('root_dir')
34+ self.data_dir = self.mktemp('data_dir')
35+ self.shares_dir = self.mktemp('shares_dir')
36+ self.partials_dir = self.mktemp('partials_dir')
37+ self.main = FakeMain(self.root_dir, self.shares_dir,
38+ self.data_dir, self.partials_dir)
39+ self.vm = self.main.vm
40+
41+ self.action_queue = ActionQueue(FakedEventQueue(), self.main,
42+ host='localhost', port=0,
43+ dns_srv=False)
44+
45+ def tearDown(self):
46+ """Clean up."""
47+ self.action_queue = None
48+
49+ self.main.shutdown()
50+ self.rmtree(self.root_dir)
51+ self.rmtree(self.data_dir)
52+ self.rmtree(self.shares_dir)
53+ self.log.info("finished test %s.%s", self.__class__.__name__,
54+ self._testMethodName)
55+ return BaseTwistedTestCase.tearDown(self)
56+
57+ def test_SV_HASH_NEW_is_pushed_for_subscrined_volume(self):
58+ """SV_HASH_NEW is filtered when the volume is unsubscribed."""
59+ udf_id = 'udf_id'
60+ udf_volume = volumes.UDFVolume(udf_id, 'udf_node',
61+ u'~/ñoño'.encode("utf8"))
62+ self.vm.handle_SV_VOLUME_CREATED(volume=udf_volume)
63+ self.vm.subscribe_udf(udf_id)
64+ assert self.vm.udfs[udf_id].subscribed
65+
66+ kwargs = dict(share_id=udf_id, node_id=None, hash=None)
67+ self.action_queue._node_state_callback(**kwargs)
68+ self.assertEquals([('SV_HASH_NEW', (), kwargs)],
69+ self.action_queue.event_queue.events)
70+
71+ def test_SV_HASH_NEW_is_filtered_for_unsubscrined_volume(self):
72+ """SV_HASH_NEW is filtered when the volume is unsubscribed."""
73+ # build a VM and add it an UDF with subscribed to False
74+ udf_id = 'udf_id'
75+ udf_volume = volumes.UDFVolume(udf_id, 'udf_node',
76+ u'~/ñoño'.encode("utf8"))
77+ self.vm.handle_SV_VOLUME_CREATED(volume=udf_volume)
78+ self.vm.unsubscribe_udf(udf_id)
79+ assert not self.vm.udfs[udf_id].subscribed
80+
81+ self.action_queue._node_state_callback(share_id=udf_id,
82+ node_id=None, hash=None)
83+ self.assertEquals([], self.action_queue.event_queue.events)
84+
85+ def test_SV_HASH_NEW_doesnt_fail_for_non_udf(self):
86+ """SV_HASH_NEW keeps working like before for non-udfs."""
87+ other_id = 'not in udfs'
88+ assert other_id not in self.vm.udfs
89+
90+ kwargs = dict(share_id=other_id, node_id=None, hash=None)
91+ self.action_queue._node_state_callback(**kwargs)
92+ self.assertEquals([('SV_HASH_NEW', (), kwargs)],
93+ self.action_queue.event_queue.events)
94
95=== modified file 'ubuntuone/syncdaemon/action_queue.py'
96--- ubuntuone/syncdaemon/action_queue.py 2010-01-13 20:07:41 +0000
97+++ ubuntuone/syncdaemon/action_queue.py 2010-01-14 15:57:14 +0000
98@@ -817,6 +817,9 @@
99 """
100 Called by the client when notified that node changed.
101 """
102+ volume = self.main.vm.udfs.get(share_id, None)
103+ if volume is not None and not volume.subscribed:
104+ return
105 self.event_queue.push('SV_HASH_NEW',
106 share_id=share_id, node_id=node_id, hash=hash)
107

Subscribers

People subscribed via source and target branches