Merge lp:~nataliabidart/ubuntuone-client/better-info-logs-stable-1-2 into lp:ubuntuone-client/stable-1-2

Proposed by Natalia Bidart
Status: Merged
Approved by: Natalia Bidart
Approved revision: 508
Merged at revision: 510
Proposed branch: lp:~nataliabidart/ubuntuone-client/better-info-logs-stable-1-2
Merge into: lp:ubuntuone-client/stable-1-2
Diff against target: 187 lines (+92/-11)
4 files modified
tests/syncdaemon/test_eq_inotify.py (+28/-4)
tests/syncdaemon/test_sync.py (+52/-0)
ubuntuone/syncdaemon/event_queue.py (+8/-3)
ubuntuone/syncdaemon/fsm/fsm.py (+4/-4)
To merge this branch: bzr merge lp:~nataliabidart/ubuntuone-client/better-info-logs-stable-1-2
Reviewer Review Type Date Requested Status
Rick McBride (community) Approve
Tim Cole (community) Approve
Review via email: mp+25101@code.launchpad.net

Commit message

Improving logging when performing delete actions.

Description of the change

Improving logging when performing delete actions.

To post a comment you must log in.
Revision history for this message
Tim Cole (tcole) :
review: Approve
Revision history for this message
Rick McBride (rmcbride) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'tests/syncdaemon/test_eq_inotify.py'
--- tests/syncdaemon/test_eq_inotify.py 2010-03-26 15:58:49 +0000
+++ tests/syncdaemon/test_eq_inotify.py 2010-05-11 20:54:28 +0000
@@ -221,6 +221,12 @@
221 def setUp(self):221 def setUp(self):
222 """Setup the test."""222 """Setup the test."""
223 BaseEQTestCase.setUp(self)223 BaseEQTestCase.setUp(self)
224
225 # add a Memento handler to the logger
226 self.handler = testcase.MementoHandler()
227 self.handler.setLevel(logging.INFO)
228 self.eq.log.addHandler(self.handler)
229
224 # create the deferred for the tests230 # create the deferred for the tests
225 self._deferred = defer.Deferred()231 self._deferred = defer.Deferred()
226232
@@ -366,8 +372,17 @@
366 def handle_FS_FILE_DELETE(innerself, path):372 def handle_FS_FILE_DELETE(innerself, path):
367 if path != testfile:373 if path != testfile:
368 self.finished_error("received a wrong path")374 self.finished_error("received a wrong path")
369 else:375 return
370 self.finished_ok()376
377 check = len(self.handler.records) == 1 and \
378 'FS_FILE_DELETE' in self.handler.records[0].message and\
379 testfile in self.handler.records[0].message and \
380 self.handler.records[0].levelno == logging.INFO
381 if not check:
382 self.finished_error("FS_FILE_DELETE must appear in INFO.")
383 return
384
385 self.finished_ok()
371386
372 self.eq.inotify_add_watch(self.root_dir)387 self.eq.inotify_add_watch(self.root_dir)
373 self.eq.subscribe(HitMe())388 self.eq.subscribe(HitMe())
@@ -387,8 +402,17 @@
387 def handle_FS_DIR_DELETE(innerself, path):402 def handle_FS_DIR_DELETE(innerself, path):
388 if path != testdir:403 if path != testdir:
389 self.finished_error("received a wrong path")404 self.finished_error("received a wrong path")
390 else:405 return
391 self.finished_ok()406
407 check = len(self.handler.records) == 1 and \
408 'FS_DIR_DELETE' in self.handler.records[0].message and\
409 testdir in self.handler.records[0].message and \
410 self.handler.records[0].levelno == logging.INFO
411 if not check:
412 self.finished_error("FS_DIR_DELETE must appear in INFO.")
413 return
414
415 self.finished_ok()
392416
393 self.eq.inotify_add_watch(self.root_dir)417 self.eq.inotify_add_watch(self.root_dir)
394 self.eq.subscribe(HitMe())418 self.eq.subscribe(HitMe())
395419
=== modified file 'tests/syncdaemon/test_sync.py'
--- tests/syncdaemon/test_sync.py 2010-04-23 15:23:09 +0000
+++ tests/syncdaemon/test_sync.py 2010-05-11 20:54:28 +0000
@@ -33,8 +33,10 @@
33 MementoHandler, DummyClass33 MementoHandler, DummyClass
34)34)
3535
36from contrib.testing import testcase
36from ubuntuone.syncdaemon.dbus_interface import DBusInterface37from ubuntuone.syncdaemon.dbus_interface import DBusInterface
37from ubuntuone.syncdaemon.filesystem_manager import FileSystemManager38from ubuntuone.syncdaemon.filesystem_manager import FileSystemManager
39from ubuntuone.syncdaemon.fsm import fsm as fsm_module
38from ubuntuone.syncdaemon.main import Main40from ubuntuone.syncdaemon.main import Main
39from ubuntuone.syncdaemon.sync import FSKey, Sync, SyncStateMachineRunner41from ubuntuone.syncdaemon.sync import FSKey, Sync, SyncStateMachineRunner
40from ubuntuone.syncdaemon.volume_manager import Share42from ubuntuone.syncdaemon.volume_manager import Share
@@ -303,3 +305,53 @@
303305
304 self.ssmr.delete_file(event='AQ_DOWNLOAD_ERROR', params=None,306 self.ssmr.delete_file(event='AQ_DOWNLOAD_ERROR', params=None,
305 server_hash='')307 server_hash='')
308
309class FakedState(object):
310 """A faked state."""
311
312 def __init__(self, action_func):
313 self.action_func = action_func
314 self.values = []
315
316 def get_transition(self, event_name, parameters):
317 """A fake get_transition."""
318 class A(object): pass
319 result = A()
320 result.action_func = self.action_func
321 result.target = self.values
322 return result
323
324
325class StateMachineRunnerTestCase(BaseTwistedTestCase):
326 """Test suite for StateMachineRunner."""
327
328 def setUp(self):
329 """Init."""
330 BaseTwistedTestCase.setUp(self)
331
332 logger = logging.getLogger('ubuntuone.SyncDaemon.sync')
333 self.smr = fsm_module.StateMachineRunner(None, logger)
334 self.handler = testcase.MementoHandler()
335 self.handler.setLevel(logging.INFO)
336 logger.addHandler(self.handler)
337
338 def test_on_event_logs_info(self):
339 """Test proper logging in on_event."""
340 event_name = 'TEST_EVENT'
341 parameters = object()
342 action_func = 'SOME_ACTION_FUNC'
343 setattr(self.smr, action_func, lambda *_: None)
344 self.patch(self.smr, 'get_state', lambda: FakedState(action_func))
345 self.smr.on_event(event_name=event_name, parameters=parameters)
346
347 # assert over logging
348 self.assertTrue(len(self.handler.records), 1)
349
350 record = self.handler.records[0]
351 self.assertEqual(record.levelno, logging.INFO)
352
353 msg = record.message
354 error = '%s must be in record.message (%s)'
355 self.assertTrue(event_name in msg, error % (event_name, msg))
356 self.assertTrue(str(parameters) in msg, error % (parameters, msg))
357 self.assertTrue(action_func in msg, error % (action_func, msg))
306358
=== modified file 'ubuntuone/syncdaemon/event_queue.py'
--- ubuntuone/syncdaemon/event_queue.py 2010-04-12 17:58:20 +0000
+++ ubuntuone/syncdaemon/event_queue.py 2010-05-11 20:54:28 +0000
@@ -577,7 +577,7 @@
577 return False577 return False
578578
579 def handle_dir_delete(self, fullpath):579 def handle_dir_delete(self, fullpath):
580 """ handle the case of move a dir to a non-watched directory """580 """Handle the case of move a dir to a non-watched directory."""
581 paths = self.eq.fs.get_paths_starting_with(fullpath,581 paths = self.eq.fs.get_paths_starting_with(fullpath,
582 include_base=False)582 include_base=False)
583 paths.sort(reverse=True)583 paths.sort(reverse=True)
@@ -739,8 +739,13 @@
739 The signature for each event is forced on each method, not in this739 The signature for each event is forced on each method, not in this
740 'push' arguments.740 'push' arguments.
741 """741 """
742 self.log.debug("push_event: %s, args:%s, kw:%s",742 log_msg = "push_event: %s, args:%s, kw:%s"
743 event_name, args, kwargs)743 if event_name.endswith('DELETE'):
744 # log every DELETE in INFO level
745 self.log.info(log_msg, event_name, args, kwargs)
746 else:
747 self.log.debug(log_msg, event_name, args, kwargs)
748
744 # get the event parameters749 # get the event parameters
745 try:750 try:
746 event_params = EVENTS[event_name]751 event_params = EVENTS[event_name]
747752
=== modified file 'ubuntuone/syncdaemon/fsm/fsm.py'
--- ubuntuone/syncdaemon/fsm/fsm.py 2010-01-22 17:25:09 +0000
+++ ubuntuone/syncdaemon/fsm/fsm.py 2010-05-11 20:54:28 +0000
@@ -131,7 +131,8 @@
131 self.log.debug("passing")131 self.log.debug("passing")
132 else:132 else:
133 # pylint: disable-msg=W0703133 # pylint: disable-msg=W0703
134 self.log.debug("Calling %s"%action_func_name)134 self.log.info("Calling %s (got %s:%s)",
135 action_func_name, event_name, parameters)
135 try:136 try:
136 af(event_name, parameters, *args)137 af(event_name, parameters, *args)
137 except Exception, e:138 except Exception, e:
@@ -158,7 +159,7 @@
158 enter_state.values, event_name, parameters,159 enter_state.values, event_name, parameters,
159 out_state.values, transition.target))160 out_state.values, transition.target))
160 raise ValueError("Incorrect out state")161 raise ValueError("Incorrect out state")
161 self.log.debug("Called %s"%action_func_name)162 self.log.debug("Called %s", action_func_name)
162 return action_func_name163 return action_func_name
163164
164 def get_state(self):165 def get_state(self):
@@ -193,8 +194,7 @@
193 # fsm_parser depends on python-uno for reading ods documents194 # fsm_parser depends on python-uno for reading ods documents
194 # this shouldnt be called with an .ods file on production195 # this shouldnt be called with an .ods file on production
195 # environments196 # environments
196 from ubuntuone.syncdaemon.fsm import \197 from ubuntuone.syncdaemon.fsm import fsm_parser
197 fsm_parser
198 spec = fsm_parser.parse(input_data)198 spec = fsm_parser.parse(input_data)
199 elif input_data.endswith(".py"):199 elif input_data.endswith(".py"):
200 result = {}200 result = {}

Subscribers

People subscribed via source and target branches