Merge lp:~nataliabidart/ubuntuone-client/run-upload-run-stable-2-0 into lp:ubuntuone-client

Proposed by Natalia Bidart
Status: Superseded
Proposed branch: lp:~nataliabidart/ubuntuone-client/run-upload-run-stable-2-0
Merge into: lp:ubuntuone-client
Diff against target: 2080 lines (+1928/-0) (has conflicts)
4 files modified
tests/platform/linux/test_dbus.py (+1685/-0)
tests/platform/linux/test_notification.py (+7/-0)
tests/status/test_aggregator.py (+5/-0)
tests/syncdaemon/test_interaction_interfaces.py (+231/-0)
Text conflict in tests/platform/linux/test_dbus.py
Text conflict in tests/platform/linux/test_notification.py
Text conflict in tests/status/test_aggregator.py
Text conflict in tests/syncdaemon/test_interaction_interfaces.py
To merge this branch: bzr merge lp:~nataliabidart/ubuntuone-client/run-upload-run-stable-2-0
Reviewer Review Type Date Requested Status
Ubuntu One hackers Pending
Review via email: mp+81472@code.launchpad.net

Commit message

- Make the Upload process do not close the tempfile until is finished
  (LP: #872924).
- Reset the tempfile on every Upload _run() (LP: #884959).

To post a comment you must log in.
1144. By Natalia Bidart

All tests green, now for sure.

Unmerged revisions

1144. By Natalia Bidart

All tests green, now for sure.

1143. By Natalia Bidart

All tests are green now.

1142. By Natalia Bidart

- Make the Upload process do not close the tempfile until is finished
 (LP: #872924).
- Reset the tempfile on every Upload _run() (LP: #884959).

1141. By Facundo Batista

Fix filter by share and path (LP: #807737).

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'tests/platform/linux/test_dbus.py'
--- tests/platform/linux/test_dbus.py 2011-10-28 15:30:54 +0000
+++ tests/platform/linux/test_dbus.py 2011-11-07 17:17:24 +0000
@@ -341,3 +341,1688 @@
341 pass341 pass
342 return d342 return d
343 test_restart.skip = "leaves dbus stuff around, need to cleanup"343 test_restart.skip = "leaves dbus stuff around, need to cleanup"
344<<<<<<< TREE
345=======
346
347
348class ConfigTests(DBusTwistedTestCase):
349 """Basic tests to the Config object exposed via D-Bus."""
350
351 def get_client(self):
352 """Return a Config DBusClient."""
353 return DBusClient(self.bus, '/config', DBUS_IFACE_CONFIG_NAME)
354
355 def test_get_throttling_limits(self):
356 """Test get_throttling_limits exposed method."""
357 client = self.get_client()
358 d = defer.Deferred()
359 aq = self.main.action_q
360 def reply_handler(result):
361 """Handle the reply."""
362 self.assertEquals(aq.readLimit, result['download'])
363 self.assertEquals(aq.writeLimit, result['upload'])
364 self.assertEquals(100, result['download'])
365 self.assertEquals(200, result['upload'])
366 d.callback(True)
367 def reply_handler_None(result):
368 """Handle the reply."""
369 self.assertEquals(-1, result['download'])
370 self.assertEquals(-1, result['upload'])
371 aq.readLimit = 100
372 aq.writeLimit = 200
373 client.call_method('get_throttling_limits',
374 reply_handler=reply_handler,
375 error_handler=self.error_handler)
376 client.call_method('get_throttling_limits',
377 reply_handler=reply_handler_None,
378 error_handler=self.error_handler)
379 return d
380
381
382 def test_set_throttling_limits(self):
383 """Test set_throttling_limits exposed method."""
384 client = self.get_client()
385 d = defer.Deferred()
386 def reply_handler(_):
387 """Handle the reply."""
388 aq = self.main.action_q
389 self.assertEquals(aq.readLimit, 100)
390 self.assertEquals(aq.writeLimit, 500)
391 d.callback(True)
392 client.call_method('set_throttling_limits', 100, 500,
393 reply_handler=reply_handler,
394 error_handler=self.error_handler)
395 return d
396
397 def test_enable_bandwidth_throttling(self):
398 """Test enable_bandwidth_throttling exposed method."""
399 client = self.get_client()
400 d = defer.Deferred()
401 aq = self.main.action_q
402 aq.throttling = False
403 def reply_handler(_):
404 """Handle the reply."""
405 self.assertTrue(aq.throttling_enabled)
406 d.callback(True)
407 client.call_method('enable_bandwidth_throttling',
408 reply_handler=reply_handler,
409 error_handler=self.error_handler)
410 return d
411
412 def test_disable_bandwidth_throttling(self):
413 """Test disable_bandwidth_throttling exposed method."""
414 client = self.get_client()
415 d = defer.Deferred()
416 aq = self.main.action_q
417 aq.throttling = True
418 def reply_handler(_):
419 """Handle the reply."""
420 self.assertFalse(aq.throttling_enabled)
421 d.callback(True)
422 client.call_method('disable_bandwidth_throttling',
423 reply_handler=reply_handler,
424 error_handler=self.error_handler)
425 return d
426
427 def test_bandwidth_throttling_enabled(self):
428 """Test bandwidth_throttling_enabled exposed method."""
429 client = self.get_client()
430 d = defer.Deferred()
431 def reply_handler_enabled(result):
432 """Handle the reply."""
433 self.assertEquals(1, result)
434 d.callback(True)
435
436 def reply_handler_disabled(result):
437 """Handle the reply."""
438 self.assertEquals(0, result)
439 self.main.action_q.throttling_enabled = True
440 client.call_method('bandwidth_throttling_enabled',
441 reply_handler=reply_handler_enabled,
442 error_handler=self.error_handler)
443 client.call_method('bandwidth_throttling_enabled',
444 reply_handler=reply_handler_disabled,
445 error_handler=self.error_handler)
446 return d
447
448 def test_udf_autosubscribe_enabled(self):
449 """Test for Config.udf_autosubscribe_enabled."""
450 client = self.get_client()
451 d = defer.Deferred()
452
453 def reply_handler_disabled(result):
454 """Handle the reply."""
455 self.assertFalse(result)
456 config.get_user_config().set_udf_autosubscribe(not result)
457 client.call_method('udf_autosubscribe_enabled',
458 reply_handler=reply_handler_enabled,
459 error_handler=self.error_handler)
460
461 def reply_handler_enabled(result):
462 """Handle the reply."""
463 self.assertTrue(result)
464 d.callback(True)
465
466 client.call_method('udf_autosubscribe_enabled',
467 reply_handler=reply_handler_disabled,
468 error_handler=self.error_handler)
469 return d
470
471 def test_enable_udf_autosubscribe(self):
472 """Test for Config.enable_udf_autosubscribe."""
473 client = self.get_client()
474 d = defer.Deferred()
475 def reply_handler(_):
476 """Handle the reply."""
477 self.assertTrue(config.get_user_config().get_udf_autosubscribe())
478 d.callback(True)
479 client.call_method('enable_udf_autosubscribe',
480 reply_handler=reply_handler,
481 error_handler=self.error_handler)
482 return d
483
484 def test_disable_udf_autosubscribe(self):
485 """Test for Config.disable_udf_autosubscribe."""
486 client = self.get_client()
487 d = defer.Deferred()
488 def reply_handler(_):
489 """Handle the reply."""
490 self.assertFalse(config.get_user_config().get_udf_autosubscribe())
491 d.callback(True)
492 client.call_method('disable_udf_autosubscribe',
493 reply_handler=reply_handler,
494 error_handler=self.error_handler)
495 return d
496
497 def test_share_autosubscribe_enabled(self):
498 """Test for Config.share_autosubscribe_enabled."""
499 client = self.get_client()
500 d = defer.Deferred()
501
502 def reply_handler_disabled(result):
503 """Handle the reply."""
504 self.assertFalse(result)
505 config.get_user_config().set_share_autosubscribe(not result)
506 client.call_method('share_autosubscribe_enabled',
507 reply_handler=reply_handler_enabled,
508 error_handler=self.error_handler)
509
510 def reply_handler_enabled(result):
511 """Handle the reply."""
512 self.assertTrue(result)
513 d.callback(True)
514
515 client.call_method('share_autosubscribe_enabled',
516 reply_handler=reply_handler_disabled,
517 error_handler=self.error_handler)
518 return d
519
520 def test_enable_share_autosubscribe(self):
521 """Test for Config.enable_share_autosubscribe."""
522 client = self.get_client()
523 d = defer.Deferred()
524 def reply_handler(_):
525 """Handle the reply."""
526 self.assertTrue(config.get_user_config().get_share_autosubscribe())
527 d.callback(True)
528 client.call_method('enable_share_autosubscribe',
529 reply_handler=reply_handler,
530 error_handler=self.error_handler)
531 return d
532
533 def test_disable_share_autosubscribe(self):
534 """Test for Config.disable_share_autosubscribe."""
535 client = self.get_client()
536 d = defer.Deferred()
537 def reply_handler(_):
538 """Handle the reply."""
539 self.assertFalse(config.get_user_config().get_share_autosubscribe())
540 d.callback(True)
541 client.call_method('disable_share_autosubscribe',
542 reply_handler=reply_handler,
543 error_handler=self.error_handler)
544 return d
545
546 def test_autoconnect_enabled(self):
547 """Test for Config.autoconnect_enabled."""
548 client = self.get_client()
549 d = defer.Deferred()
550
551 def reply_handler_disabled(result):
552 """Handle the reply."""
553 self.assertFalse(result)
554 config.get_user_config().set_autoconnect(not result)
555 d.callback(True)
556
557 def reply_handler_enabled(result):
558 """Handle the reply."""
559 self.assertTrue(result)
560 config.get_user_config().set_autoconnect(not result)
561 client.call_method('autoconnect_enabled',
562 reply_handler=reply_handler_disabled,
563 error_handler=self.error_handler)
564
565 client.call_method('autoconnect_enabled',
566 reply_handler=reply_handler_enabled,
567 error_handler=self.error_handler)
568 return d
569
570 def test_enable_autoconnect(self):
571 """Test for Config.enable_autoconnect."""
572 client = self.get_client()
573 d = defer.Deferred()
574 orig = config.get_user_config().get_autoconnect()
575 # restore autoconnect to original value
576 self.addCleanup(config.get_user_config().set_autoconnect, orig)
577
578 def reply_handler(_):
579 """Handle the reply."""
580 self.assertTrue(config.get_user_config().get_autoconnect())
581 d.callback(True)
582
583 client.call_method('enable_autoconnect',
584 reply_handler=reply_handler,
585 error_handler=self.error_handler)
586 return d
587
588 def test_disable_autoconnect(self):
589 """Test for Config.disable_autoconnect."""
590 client = self.get_client()
591 d = defer.Deferred()
592 orig = config.get_user_config().get_autoconnect()
593 # restore autoconnect to original value
594 self.addCleanup(config.get_user_config().set_autoconnect, orig)
595
596 def reply_handler(_):
597 """Handle the reply."""
598 self.assertFalse(config.get_user_config().get_autoconnect())
599 d.callback(True)
600
601 client.call_method('disable_autoconnect',
602 reply_handler=reply_handler,
603 error_handler=self.error_handler)
604 return d
605
606 def test_set_autoconnect_enabled(self):
607 """Test for Config.set_autoconnect_enabled.
608
609 DEPRECATED.
610
611 """
612 client = self.get_client()
613 d = defer.Deferred()
614 orig = config.get_user_config().get_autoconnect()
615 # restore autoconnect to original value
616 self.addCleanup(config.get_user_config().set_autoconnect, orig)
617
618 def reply_handler(_):
619 """Handle the reply."""
620 self.assertEqual(config.get_user_config().get_autoconnect(),
621 not orig)
622 d.callback(True)
623
624 client.call_method('set_autoconnect_enabled', not orig,
625 reply_handler=reply_handler,
626 error_handler=self.error_handler)
627 return d
628
629 def test_show_all_notifications_enabled(self):
630 """Test for Config.show_all_notifications_enabled."""
631 client = self.get_client()
632 d = defer.Deferred()
633
634 def reply_handler_disabled(result):
635 """Handle the reply."""
636 self.assertTrue(result)
637 config.get_user_config().set_show_all_notifications(not result)
638 client.call_method('show_all_notifications_enabled',
639 reply_handler=reply_handler_enabled,
640 error_handler=self.error_handler)
641
642 def reply_handler_enabled(result):
643 """Handle the reply."""
644 self.assertFalse(result)
645 d.callback(True)
646
647 client.call_method('show_all_notifications_enabled',
648 reply_handler=reply_handler_disabled,
649 error_handler=self.error_handler)
650 return d
651
652 def test_enable_show_all_notifications(self):
653 """Test for Config.enable_show_all_notifications."""
654 client = self.get_client()
655 d = defer.Deferred()
656 self.main.status_listener.show_all_notifications = False
657 def reply_handler(_):
658 """Handle the reply."""
659 user_config = config.get_user_config()
660 self.assertTrue(user_config.get_show_all_notifications())
661 self.assertTrue(self.main.status_listener.show_all_notifications)
662 d.callback(True)
663 client.call_method('enable_show_all_notifications',
664 reply_handler=reply_handler,
665 error_handler=self.error_handler)
666 return d
667
668 def test_disable_show_all_notifications(self):
669 """Test for Config.disable_show_all_notifications."""
670 client = self.get_client()
671 d = defer.Deferred()
672 self.main.status_listener.show_all_notifications = True
673 def reply_handler(_):
674 """Handle the reply."""
675 user_config = config.get_user_config()
676 self.assertFalse(user_config.get_show_all_notifications())
677 self.assertFalse(self.main.status_listener.show_all_notifications)
678 d.callback(True)
679 client.call_method('disable_show_all_notifications',
680 reply_handler=reply_handler,
681 error_handler=self.error_handler)
682 return d
683
684
685class DBusOAuthTestCase(BaseTwistedTestCase):
686 """Tests the interaction between dbus_interface and credentials.
687
688 Check conditions when autconnecting is False.
689
690 """
691
692 timeout = 2
693 method = 'register'
694 autoconnecting = False
695
696 @defer.inlineCallbacks
697 def setUp(self):
698 """Init."""
699 yield super(DBusOAuthTestCase, self).setUp()
700 self.events = []
701 self.patch(DBusInterface, 'test', True)
702 self.patch(dbus, 'Interface', FakedSSOBackend)
703 self.patch(dbus.service, 'BusName', FakedBusName)
704 self.bus = FakedSessionBus()
705
706 self.data_dir = self.mktemp('data_dir')
707 self.partials_dir = self.mktemp('partials')
708 self.root_dir = self.mktemp('root_dir')
709 self.shares_dir = self.mktemp('shares_dir')
710 self.main = FakeMain(self.root_dir, self.shares_dir,
711 self.data_dir, self.partials_dir)
712 self.dbus_iface = DBusInterface(bus=self.bus, main=self.main,
713 system_bus=None, send_events=False)
714 self.dbus_iface.event_queue.push = lambda name, **kw: \
715 self.events.append((name, kw))
716 self.memento = MementoHandler()
717 logger.addHandler(self.memento)
718 self.addCleanup(logger.removeHandler, self.memento)
719
720 @defer.inlineCallbacks
721 def tearDown(self, *args):
722 """Shutdown."""
723 self.main.shutdown()
724 yield super(DBusOAuthTestCase, self).tearDown()
725
726 @defer.inlineCallbacks
727 def test_signals_are_connected(self):
728 """Dbus signals have connected handlers."""
729
730 def f(*a, **kw):
731 """Just succeed."""
732 self.assertIn((DBUS_CREDENTIALS_IFACE, None), self.bus.callbacks)
733 cb = self.bus.callbacks[(DBUS_CREDENTIALS_IFACE, None)]
734 self.assertEqual(self.dbus_iface._signal_handler, cb)
735 self.dbus_iface._deferred.callback(None)
736
737 self.patch(FakedSSOBackend, self.method, f)
738 yield self.dbus_iface.connect(autoconnecting=self.autoconnecting)
739
740 @defer.inlineCallbacks
741 def test_signals_are_removed_after_connection(self):
742 """Dbus signals are removed after connection."""
743
744 def f(*a, **kw):
745 """Just succeed."""
746 self.dbus_iface._deferred.callback(None)
747
748 self.patch(FakedSSOBackend, self.method, f)
749 yield self.dbus_iface.connect(autoconnecting=self.autoconnecting)
750 self.assertNotIn((DBUS_CREDENTIALS_IFACE, None), self.bus.callbacks)
751
752 @defer.inlineCallbacks
753 def test_connect_pushes_SYS_USER_CONNECT_with_the_token(self):
754 """On connect, the event SYS_USER_CONNECT is pushed."""
755
756 def f(*a, **kw):
757 """Receive credentials."""
758 self.dbus_iface._signal_handler(FAKED_CREDENTIALS,
759 member='CredentialsFound')
760
761 self.patch(FakedSSOBackend, self.method, f)
762 yield self.dbus_iface.connect(autoconnecting=self.autoconnecting)
763 self.assertEqual(self.events, [('SYS_USER_CONNECT',
764 {'access_token': FAKED_CREDENTIALS})])
765
766 @defer.inlineCallbacks
767 def test_connect_raises_NoAccessToken_if_no_token(self):
768 """If no credentials, NoAccessToken is raised."""
769
770 def f(*a, **kw):
771 """Receive error signal."""
772 self.dbus_iface._signal_handler({'error_type': 'Error description',
773 'error_detail': 'Detailed error'},
774 member='CredentialsError')
775
776 self.patch(FakedSSOBackend, self.method, f)
777 d = self.dbus_iface.connect(autoconnecting=self.autoconnecting)
778 d.addErrback(lambda failure: self.assertEqual(NoAccessToken,
779 failure.type))
780 yield d
781
782 @defer.inlineCallbacks
783 def test_connect_raises_NoAccessToken_if_auth_denied(self):
784 """If no credentials, NoAccessToken if user denied auth."""
785
786 def f(*a, **kw):
787 """Receive error signal."""
788 self.dbus_iface._signal_handler(member='AuthorizationDenied')
789
790 self.patch(FakedSSOBackend, self.method, f)
791 d = self.dbus_iface.connect(autoconnecting=self.autoconnecting)
792 d.addErrback(lambda failure: self.assertEqual(NoAccessToken,
793 failure.type))
794 yield d
795
796 @defer.inlineCallbacks
797 def test_connect_raises_NoAccessToken_if_no_creds(self):
798 """If no credentials, NoAccessToken if no credentials."""
799
800 def f(*a, **kw):
801 """Receive error signal."""
802 self.dbus_iface._signal_handler(member='CredentialsNotFound')
803
804 self.patch(FakedSSOBackend, self.method, f)
805 d = self.dbus_iface.connect(autoconnecting=self.autoconnecting)
806 d.addErrback(lambda failure: self.assertEqual(NoAccessToken,
807 failure.type))
808 yield d
809
810 @defer.inlineCallbacks
811 def test_dbus_exceptions_are_handled(self):
812 """Every DbusException is handled."""
813 expected = exceptions.DBusException('test me')
814
815 def f(*a, **kw):
816 """Just fail."""
817 raise expected
818
819 self.patch(FakedSSOBackend, self.method, f)
820 d = self.dbus_iface.connect(autoconnecting=self.autoconnecting)
821 d.addErrback(lambda failure: self.assertEqual(expected, failure.value))
822 yield d
823
824 @defer.inlineCallbacks
825 def test_other_exceptions_are_logged_and_re_raised(self):
826 """Every other Exception is logged and re raised."""
827 expected = TypeError('test me')
828
829 def f(*a, **kw):
830 """Just fail."""
831 raise expected
832
833 self.patch(FakedSSOBackend, self.method, f)
834 d = self.dbus_iface.connect(autoconnecting=self.autoconnecting)
835 d.addErrback(lambda failure: self.assertEqual(expected, failure.value))
836 yield d
837 self.assertTrue(len(self.memento.records) > 0)
838 record = self.memento.records[1]
839 msg = record.message
840 self.assertIn('connect failed while getting the token', msg)
841 self.assertIn(expected, record.exc_info)
842
843 def test_oauth_credentials_are_none_at_startup(self):
844 """If the oauth_credentials are not passed as param, they are None."""
845 self.assertTrue(self.dbus_iface.oauth_credentials is None)
846
847 @defer.inlineCallbacks
848 def test_oauth_credentials_are_used_to_connect(self):
849 """If present, the oauth_credentials are used to connect."""
850 expected = {'consumer_key': 'ubuntuone',
851 'consumer_secret': 'hammertime',
852 'token': 'faked_token',
853 'token_secret': 'faked_token_secret'}
854 self.dbus_iface.oauth_credentials = (expected['token'],
855 expected['token_secret'])
856 yield self.dbus_iface.connect(autoconnecting=self.autoconnecting)
857 self.assertEqual(self.events, [('SYS_USER_CONNECT',
858 {'access_token': expected})])
859
860 @defer.inlineCallbacks
861 def test_oauth_credentials_can_be_a_four_uple(self):
862 """If present, the oauth_credentials are used to connect."""
863 expected = {'consumer_key': 'faked_consumer_key',
864 'consumer_secret': 'faked_consumer_secret',
865 'token': 'faked_token',
866 'token_secret': 'faked_token_secret'}
867 self.dbus_iface.oauth_credentials = (expected['consumer_key'],
868 expected['consumer_secret'],
869 expected['token'],
870 expected['token_secret'])
871 yield self.dbus_iface.connect(autoconnecting=self.autoconnecting)
872 self.assertEqual(self.events, [('SYS_USER_CONNECT',
873 {'access_token': expected})])
874
875 @defer.inlineCallbacks
876 def test_log_warning_if_oauth_credentials_len_is_useless(self):
877 """Log a warning and return if the oauth_credentials are useless."""
878 self.dbus_iface.oauth_credentials = ('consumer_key',
879 'consumer_secret',
880 'token_secret')
881 yield self.dbus_iface.connect(autoconnecting=self.autoconnecting)
882 self.assertEqual(self.events, [])
883 msgs = (str(self.dbus_iface.oauth_credentials), 'useless')
884 self.assertTrue(self.memento.check_warning(*msgs))
885
886 def test_signal_handler_remains_generic(self):
887 """The signal handler function should be generic."""
888 self.dbus_iface._signal_handler()
889 # no failure
890 self.assertTrue(self.memento.check_debug('member: None'))
891
892 self.dbus_iface._signal_handler(no_member_kwarg='Test')
893 # no failure
894 self.assertTrue(self.memento.check_debug('member: None'))
895
896
897class DBusOAuthTestCaseRegister(DBusOAuthTestCase):
898 """Tests the interaction between dbus_interface and credentials.
899
900 Check conditions when autconnecting is True.
901
902 """
903
904 method = 'find_credentials'
905 autoconnecting = True
906
907
908class FolderTests(DBusTwistedTestCase):
909 """Tests for the Folder object exposed via dbus."""
910
911 @defer.inlineCallbacks
912 def setUp(self):
913 """Setup the test."""
914 yield super(FolderTests, self).setUp()
915 self.home_dir = self.mktemp('ubuntuonehacker')
916 self.folders_client = DBusClient(self.bus, '/folders',
917 DBUS_IFACE_FOLDERS_NAME)
918 self._old_home = os.environ['HOME']
919 os.environ['HOME'] = self.home_dir
920
921 @defer.inlineCallbacks
922 def tearDown(self):
923 os.environ['HOME'] = self._old_home
924 yield super(FolderTests, self).tearDown()
925
926 def _create_udf(self, id, node_id, suggested_path, subscribed=True):
927 """Create an UDF and returns it and the volume."""
928 path = get_udf_path(suggested_path)
929 # make sure suggested_path is unicode
930 if isinstance(suggested_path, str):
931 suggested_path = suggested_path.decode('utf-8')
932 udf = UDF(str(id), str(node_id), suggested_path, path, subscribed)
933 return udf
934
935 def testget_udf_dict(self):
936 """Test for Folders.get_udf_dict."""
937 suggested_path = u'~/ñoño'
938 udf = self._create_udf(uuid.uuid4(), 'node_id', suggested_path,
939 subscribed=False)
940 udf_dict = get_udf_dict(udf)
941 # check the path it's unicode
942 self.assertEquals(udf_dict['path'], udf.path.decode('utf-8'))
943 self.assertEquals(udf_dict['volume_id'], udf.id)
944 self.assertEquals(udf_dict['suggested_path'], udf.suggested_path)
945 self.assertEquals(udf_dict['node_id'], udf.node_id)
946 self.assertFalse(udf_dict['subscribed'])
947
948 def testget_udf_dict_bad_encoding(self):
949 """Test for Folders.get_udf_dict."""
950 suggested_path = u'~/Música'
951 udf = self._create_udf(uuid.uuid4(), 'node_id', suggested_path,
952 subscribed=False)
953 udf.suggested_path = udf.suggested_path.encode('utf-8')
954 udf_dict = get_udf_dict(udf)
955 # check the path it's unicode
956 self.assertEquals(udf_dict['path'], udf.path.decode('utf-8'))
957 self.assertEquals(udf_dict['volume_id'], udf.id)
958 self.assertEquals(repr(udf_dict['suggested_path']),
959 repr(udf.suggested_path.decode('utf-8')))
960 self.assertEquals(udf_dict['node_id'], udf.node_id)
961 self.assertFalse(udf_dict['subscribed'])
962
963 @defer.inlineCallbacks
964 def test_get_folders(self):
965 """Test for Folders.get_folders."""
966 suggested_path = u'~/ñoño'
967 udf = self._create_udf(uuid.uuid4(), 'node_id', suggested_path)
968 d = defer.Deferred()
969 self.folders_client.call_method('get_folders',
970 reply_handler=d.callback,
971 error_handler=self.error_handler)
972 info = yield d
973 self.assertEquals(len(info), 0)
974 # add a udf
975 yield self.main.vm.add_udf(udf)
976 d2 = defer.Deferred()
977 self.folders_client.call_method('get_folders',
978 reply_handler=d2.callback,
979 error_handler=self.error_handler)
980 info = yield d2
981 udf_dict = get_udf_dict(self.main.vm.get_volume(udf.volume_id))
982 self.assertEquals(1, len(info))
983 for key, value in udf_dict.items():
984 self.assertEquals(info[0][key], value)
985
986 def test_get_info(self):
987 """Test for Folders.get_info."""
988 suggested_path = u'~/ñoño'
989 udf = self._create_udf(uuid.uuid4(), 'node_id', suggested_path)
990 d = defer.Deferred()
991 self.folders_client.call_method('get_info', udf.path,
992 reply_handler=self.error_handler,
993 error_handler=d.callback)
994 def check_error(f):
995 """Check we get an error."""
996 # check the error type
997 self.assertEquals('org.freedesktop.DBus.Python.KeyError',
998 f._dbus_error_name)
999 # add a udf
1000 add_deferred = self.main.vm.add_udf(udf)
1001 def get_info(_):
1002 """Call get_info once we created the udf."""
1003 d = defer.Deferred()
1004 self.folders_client.call_method('get_info', udf.path,
1005 reply_handler=d.callback,
1006 error_handler=self.error_handler)
1007 return d
1008 add_deferred.addCallback(get_info)
1009 return add_deferred
1010 def check(info):
1011 """Check we get the udf info."""
1012 udf_dict = get_udf_dict(self.main.vm.get_volume(udf.volume_id))
1013 self.assertEquals(info, udf_dict)
1014 d.addCallback(check_error)
1015 d.addCallback(check)
1016 return d
1017
1018 def test_create(self):
1019 """Test for Folders.create."""
1020 path = os.path.join(self.home_dir, u'ñoño/'.encode('utf-8'))
1021 id = uuid.uuid4()
1022 node_id = uuid.uuid4()
1023 d = defer.Deferred()
1024 # patch AQ.create_udf
1025 def create_udf(path, name, marker):
1026 """Fake create_udf."""
1027 # check that the marker it's the full path to the udf
1028 udf_path = os.path.join(os.path.expanduser(path.encode('utf-8')), name.encode('utf-8'))
1029 if str(marker) != udf_path:
1030 d.errback(ValueError("marker != path - "
1031 "marker: %r path: %r" % (marker, udf_path)))
1032 self.main.event_q.push("AQ_CREATE_UDF_OK", volume_id=id,
1033 node_id=node_id, marker=marker)
1034 self.main.action_q.create_udf = create_udf
1035 def created_handler(info):
1036 """FolderCreated handler."""
1037 d.callback(info)
1038 match = self.bus.add_signal_receiver(created_handler,
1039 signal_name='FolderCreated')
1040 self.signal_receivers.add(match)
1041 self.folders_client.call_method('create', path,
1042 reply_handler=lambda *agrs: None,
1043 error_handler=self.error_handler)
1044 def check(info):
1045 """Check the FolderCreated info."""
1046 self.assertTrue(os.path.exists(info['path'].encode('utf-8')),
1047 info['path'].encode('utf-8'))
1048 self.assertEquals(info['path'].encode('utf-8'),
1049 os.path.normpath(path))
1050 mdobj = self.main.fs.get_by_path(path)
1051 udf = self.main.vm.get_volume(mdobj.share_id)
1052 self.assertNotEqual(None, udf)
1053 self.assertEquals(udf.path, os.path.normpath(path))
1054 udf_dict = get_udf_dict(udf)
1055 self.assertEquals(info, udf_dict)
1056 self.main.vm.udf_deleted(udf.volume_id)
1057
1058 d.addCallback(check)
1059 d.addErrback(self.error_handler)
1060 return d
1061
1062 def test_create_server_error(self):
1063 """Test for Folders.create."""
1064 path = os.path.join(self.home_dir, u'ñoño')
1065 d = defer.Deferred()
1066 # patch AQ.create_udf
1067 def create_udf(path, name, marker):
1068 """Fake create_udf, that fails."""
1069 self.main.event_q.push("AQ_CREATE_UDF_ERROR",
1070 marker=marker, error="Oops, error!")
1071 self.main.action_q.create_udf = create_udf
1072 def create_handler(info, error):
1073 """FolderCreateError handler."""
1074 d.callback((info, error))
1075 match = self.bus.add_signal_receiver(create_handler,
1076 signal_name='FolderCreateError')
1077 self.signal_receivers.add(match)
1078 self.folders_client.call_method('create', path,
1079 reply_handler=lambda *agrs: None,
1080 error_handler=self.error_handler)
1081 def check(result):
1082 """Check the result."""
1083 info, error = result
1084 self.assertEquals(info['path'], path)
1085 self.assertEquals(error, 'Oops, error!')
1086 d.addCallback(check)
1087 return d
1088
1089 def test_create_client_error(self):
1090 """Test for Folders.create."""
1091 path = os.path.join(self.home_dir, u'ñoño')
1092 d = defer.Deferred()
1093 # patch AQ.create_udf
1094 def create_udf(path, name, marker):
1095 """Fake create_udf, that fails."""
1096 raise ValueError("I'm broken.")
1097 self.main.action_q.create_udf = create_udf
1098 def create_handler(info, error):
1099 """FolderCreateError handler."""
1100 d.callback((info, error))
1101 match = self.bus.add_signal_receiver(create_handler,
1102 signal_name='FolderCreateError')
1103 self.signal_receivers.add(match)
1104 self.folders_client.call_method('create', path,
1105 reply_handler=lambda *agrs: None,
1106 error_handler=self.error_handler)
1107 def check(result):
1108 """Check the result."""
1109 info, error = result
1110 self.assertEquals(info['path'], path)
1111 self.assertEquals(error, "UNKNOWN_ERROR: I'm broken.")
1112 d.addCallback(check)
1113 return d
1114
1115 def test_create_error_signal(self):
1116 """Test for FolderCreateError."""
1117 path = os.path.join(self.home_dir, u'ñoño'.encode('utf-8'))
1118 d = defer.Deferred()
1119 def create_error_handler(info, error):
1120 """FolderCreateError handler"""
1121 self.assertEquals(info['path'], path.decode('utf-8'))
1122 self.assertEquals(error, "I'm broken")
1123 d.callback(True)
1124 match = self.bus.add_signal_receiver(create_error_handler,
1125 signal_name='FolderCreateError')
1126 self.signal_receivers.add(match)
1127 # TODO: once create_udf is implemented remove this callLater
1128 reactor.callLater(0, self.main.event_q.push,
1129 'VM_UDF_CREATE_ERROR', path=path, error="I'm broken")
1130 return d
1131
1132 @defer.inlineCallbacks
1133 def test_delete(self):
1134 """Test for Folders.delete."""
1135 suggested_path = u'~/ñoño'
1136 udf = self._create_udf(uuid.uuid4(), 'node_id', suggested_path)
1137 yield self.main.vm.add_udf(udf)
1138 d = defer.Deferred()
1139 def delete_volume(volume_id, path):
1140 """Fake delete_volume."""
1141 self.main.event_q.push("AQ_DELETE_VOLUME_OK", volume_id=udf.id)
1142 self.main.action_q.delete_volume = delete_volume
1143 def deleted_handler(info):
1144 """FolderDeleted handler."""
1145 self.assertRaises(KeyError, self.main.fs.get_by_path,
1146 info['path'].encode('utf-8'))
1147 self.assertRaises(VolumeDoesNotExist,
1148 self.main.vm.get_volume, str(info['volume_id']))
1149 d.callback(True)
1150 match = self.bus.add_signal_receiver(deleted_handler,
1151 signal_name='FolderDeleted')
1152 self.signal_receivers.add(match)
1153 def check_deleted(info):
1154 """The callback."""
1155 self.assertNotIn(udf.volume_id, self.main.vm.udfs)
1156 self.assertRaises(KeyError, self.main.fs.get_by_path, udf.path)
1157 self.assertRaises(VolumeDoesNotExist,
1158 self.main.vm.get_volume, udf.volume_id)
1159 self.folders_client.call_method('delete', udf.volume_id,
1160 reply_handler=check_deleted,
1161 error_handler=self.error_handler)
1162 yield d
1163
1164 @defer.inlineCallbacks
1165 def test_delete_error_signal(self):
1166 """Test for FolderDeleteError."""
1167 suggested_path = u'~/ñoño'
1168 udf = self._create_udf(uuid.uuid4(), 'node_id', suggested_path)
1169 yield self.main.vm.add_udf(udf)
1170 d = defer.Deferred()
1171 # patch delete_volume to fail
1172 def delete_volume(volume_id, path):
1173 """Fake delete_volume."""
1174 self.main.event_q.push("AQ_DELETE_VOLUME_ERROR",
1175 volume_id=udf.volume_id, error="I'm broken")
1176 self.main.action_q.delete_volume = delete_volume
1177 def deleted_error_handler(info, error):
1178 """FolderDeleteError handler."""
1179 self.assertEquals(info['volume_id'], udf.volume_id)
1180 self.assertEquals(error, "I'm broken")
1181 d.callback(True)
1182 match = self.bus.add_signal_receiver(deleted_error_handler,
1183 signal_name='FolderDeleteError')
1184 self.signal_receivers.add(match)
1185 self.folders_client.call_method('delete', udf.volume_id,
1186 reply_handler=lambda *args: None,
1187 error_handler=self.error_handler)
1188 yield d
1189 self.main.vm.udf_deleted(udf.volume_id)
1190
1191 @defer.inlineCallbacks
1192 def test_delete_error_signal_folder_id(self):
1193 """Test for FolderDeleteError for a volume that doesn't exists."""
1194 udf_id = 'foobar'
1195 d = defer.Deferred()
1196 def deleted_error_handler(info, error):
1197 """FolderDeleteError handler."""
1198 d.callback((info, error))
1199 match = self.bus.add_signal_receiver(deleted_error_handler,
1200 signal_name='FolderDeleteError')
1201 self.signal_receivers.add(match)
1202 self.folders_client.call_method('delete', udf_id,
1203 reply_handler=lambda *args: None,
1204 error_handler=d.errback)
1205 info, error = yield d
1206 self.assertEquals(info['volume_id'], udf_id)
1207 self.assertEquals(error, "DOES_NOT_EXIST")
1208
1209 @defer.inlineCallbacks
1210 def test_subscribe(self):
1211 """Test for Folders.subscribe and that it fires a dbus signal."""
1212 suggested_path = u'~/ñoño'
1213 udf = self._create_udf(uuid.uuid4(), 'node_id', suggested_path,
1214 subscribed=False)
1215 yield self.main.vm.add_udf(udf)
1216 d = defer.Deferred()
1217 def subscribe_handler(info):
1218 """FolderSubscribed handler."""
1219 d.callback(info)
1220 match = self.bus.add_signal_receiver(subscribe_handler,
1221 signal_name='FolderSubscribed')
1222 self.signal_receivers.add(match)
1223 self.folders_client.call_method('subscribe', udf.volume_id,
1224 reply_handler=lambda x: None,
1225 error_handler=self.error_handler)
1226 def check(info):
1227 """Check that the folder is subscribed."""
1228 self.assertTrue(info['subscribed'],
1229 "UDF %s isn't subscribed" % udf.volume_id)
1230 d.addCallback(check)
1231 d.addCallback(lambda _: self.main.vm.udf_deleted(udf.volume_id))
1232 yield d
1233
1234 @defer.inlineCallbacks
1235 def test_unsubscribe(self):
1236 """Test for Folders.unsubscribe."""
1237 suggested_path = u'~/ñoño'
1238 udf = self._create_udf(uuid.uuid4(), 'node_id', suggested_path,
1239 subscribed=True)
1240 yield self.main.vm.add_udf(udf)
1241 d = defer.Deferred()
1242 self.folders_client.call_method('unsubscribe', udf.volume_id,
1243 reply_handler=d.callback,
1244 error_handler=self.error_handler)
1245 def check(r):
1246 """Check that the folder it's not subscribed."""
1247 self.assertFalse(self.main.vm.udfs[udf.volume_id].subscribed,
1248 "UDF %s is subscribed" % udf.volume_id)
1249 d.addCallback(check)
1250 yield d
1251
1252 @defer.inlineCallbacks
1253 def test_unsubscribe_signal(self):
1254 """Test for Folders.unsubscribe fired dbus signal."""
1255 suggested_path = u'~/ñoño'
1256 udf = self._create_udf(uuid.uuid4(), 'node_id', suggested_path,
1257 subscribed=True)
1258 yield self.main.vm.add_udf(udf)
1259 signal_deferred = defer.Deferred()
1260 d = defer.Deferred()
1261 def unsubscribe_handler(info):
1262 """FolderUnSubscribed handler."""
1263 self.assertFalse(info['subscribed'],
1264 "UDF %s is subscribed" % udf.volume_id)
1265 signal_deferred.callback(info)
1266 match = self.bus.add_signal_receiver(unsubscribe_handler,
1267 signal_name='FolderUnSubscribed')
1268 self.signal_receivers.add(match)
1269 self.folders_client.call_method('unsubscribe', udf.volume_id,
1270 reply_handler=d.callback,
1271 error_handler=self.error_handler)
1272 def check(r):
1273 """Check that the folder it's not subscribed."""
1274 a_udf = self.main.vm.udfs[udf.volume_id]
1275 self.assertFalse(a_udf.subscribed,
1276 "UDF %s is subscribed" % a_udf.volume_id)
1277 return signal_deferred
1278 d.addCallback(check)
1279 d.addCallback(lambda _: self.main.vm.udf_deleted(udf.volume_id))
1280 yield d
1281
1282 @defer.inlineCallbacks
1283 def test_refresh_volumes(self):
1284 """Just check that refresh_volumes method works."""
1285 client = DBusClient(self.bus, '/folders', DBUS_IFACE_FOLDERS_NAME)
1286 list_volumes_d = defer.Deferred()
1287 self.main.action_q.list_volumes = lambda: list_volumes_d.callback(True)
1288
1289 d = defer.Deferred()
1290 client.call_method('refresh_volumes',
1291 reply_handler=d.callback,
1292 error_handler=self.error_handler)
1293 yield list_volumes_d
1294 yield d
1295
1296
1297class LauncherTests(DBusTwistedTestCase, MockerTestCase):
1298 """Tests for the launcher Dbus Interface."""
1299
1300 @defer.inlineCallbacks
1301 def test_unset_urgency(self):
1302 """Calling remove_urgency removes the urgency hint."""
1303 launcher = self.mocker.replace(
1304 "ubuntuone.platform.linux.launcher.UbuntuOneLauncher")
1305 launcher()
1306 launcher_instance = self.mocker.mock()
1307 self.mocker.result(launcher_instance)
1308 launcher_instance.set_urgent(False)
1309 self.mocker.replay()
1310 client = DBusClient(self.bus, '/launcher', DBUS_IFACE_LAUNCHER_NAME)
1311 d = defer.Deferred()
1312 client.call_method('unset_urgency',
1313 reply_handler=d.callback,
1314 error_handler=self.error_handler)
1315 yield d
1316
1317
1318class ShareTests(DBusTwistedTestCase):
1319 """Share specific tests."""
1320
1321 @defer.inlineCallbacks
1322 def setUp(self):
1323 """Setup the test."""
1324 yield super(ShareTests, self).setUp()
1325 self.client = DBusClient(self.bus, '/shares', DBUS_IFACE_SHARES_NAME)
1326
1327 def _create_share(self, volume_id=None, node_id=None, access_level='View',
1328 accepted=True, subscribed=False):
1329 """Create a Share and return it."""
1330 share_path = os.path.join(self.main.shares_dir, 'share')
1331 if volume_id is None:
1332 volume_id = str(uuid.uuid4())
1333 if node_id is None:
1334 node_id = str(uuid.uuid4())
1335 share = Share(path=share_path, volume_id=volume_id, node_id=node_id,
1336 accepted=accepted, access_level=access_level,
1337 subscribed=subscribed)
1338 return share
1339
1340 @defer.inlineCallbacks
1341 def test_delete_share(self):
1342 """Test for Shares.delete_share."""
1343 share = self._create_share(accepted=True)
1344 yield self.main.vm.add_share(share)
1345 d = defer.Deferred()
1346 def delete_volume(volume_id, path):
1347 """Fake delete_volume."""
1348 self.main.event_q.push("AQ_DELETE_VOLUME_OK", volume_id=volume_id)
1349 self.main.action_q.delete_volume = delete_volume
1350 def deleted_handler(info):
1351 """ShareDeleted handler."""
1352 self.assertRaises(KeyError, self.main.fs.get_by_path,
1353 info['path'].decode('utf-8'))
1354 self.assertRaises(VolumeDoesNotExist,
1355 self.main.vm.get_volume, str(info['volume_id']))
1356 d.callback(True)
1357 match = self.bus.add_signal_receiver(deleted_handler,
1358 signal_name='ShareDeleted')
1359 self.signal_receivers.add(match)
1360 def check_deleted(info):
1361 """The callback."""
1362 self.assertNotIn(share.volume_id, self.main.vm.shares)
1363 self.assertRaises(KeyError, self.main.fs.get_by_path, share.path)
1364 self.assertRaises(VolumeDoesNotExist,
1365 self.main.vm.get_volume, share.volume_id)
1366 self.client.call_method('delete_share', share.volume_id,
1367 reply_handler=check_deleted,
1368 error_handler=self.error_handler)
1369 yield d
1370
1371 @defer.inlineCallbacks
1372 def test_delete_share_from_me(self):
1373 """Test for Shares.delete_share with share from_me."""
1374 share = self._create_share(accepted=True)
1375 yield self.main.vm.add_shared(share)
1376 d = defer.Deferred()
1377 def delete_share(volume_id):
1378 """Fake delete_volume."""
1379 self.main.event_q.push("AQ_DELETE_SHARE_OK", share_id=volume_id)
1380 self.patch(self.main.action_q, 'delete_share', delete_share)
1381 def deleted_handler(info):
1382 """ShareDeleted handler."""
1383 self.assertRaises(KeyError,
1384 self.main.vm.shared.__getitem__, str(info['volume_id']))
1385 d.callback(True)
1386 match = self.bus.add_signal_receiver(deleted_handler,
1387 signal_name='ShareDeleted')
1388 self.signal_receivers.add(match)
1389 self.client.call_method('delete_share', share.volume_id,
1390 reply_handler=lambda _: None,
1391 error_handler=self.error_handler)
1392 yield d
1393
1394 @defer.inlineCallbacks
1395 def test_delete_share_error_signal(self):
1396 """Test for Shares.delete_share with an error."""
1397 share = self._create_share(accepted=True)
1398 yield self.main.vm.add_share(share)
1399 d = defer.Deferred()
1400 # patch delete_volume to fail
1401 def delete_volume(volume_id, path):
1402 """Fake delete_volume."""
1403 self.main.event_q.push("AQ_DELETE_VOLUME_ERROR",
1404 volume_id=volume_id, error="I'm broken")
1405 self.main.action_q.delete_volume = delete_volume
1406 def deleted_error_handler(info, error):
1407 """ShareDeleteError handler."""
1408 self.assertEquals(info['volume_id'], share.volume_id)
1409 self.assertEquals(error, "I'm broken")
1410 d.callback(True)
1411 match = self.bus.add_signal_receiver(deleted_error_handler,
1412 signal_name='ShareDeleteError')
1413 self.signal_receivers.add(match)
1414 self.client.call_method('delete_share', share.volume_id,
1415 reply_handler=lambda *args: None,
1416 error_handler=self.error_handler)
1417 yield d
1418
1419 @defer.inlineCallbacks
1420 def test_delete_share_from_me_error(self):
1421 """Test failure of Shares.delete_share with a share from_me."""
1422 share = self._create_share(accepted=True)
1423 yield self.main.vm.add_shared(share)
1424 d = defer.Deferred()
1425 # patch delete_share to fail
1426 def delete_share(share_id):
1427 """Fake delete_share."""
1428 self.main.event_q.push("AQ_DELETE_SHARE_ERROR",
1429 share_id=share_id, error="I'm broken")
1430 self.patch(self.main.action_q, 'delete_share', delete_share)
1431 def deleted_error_handler(info, error):
1432 """ShareDeleteError handler."""
1433 self.assertEquals(info['volume_id'], share.volume_id)
1434 self.assertEquals(error, "I'm broken")
1435 d.callback(True)
1436 match = self.bus.add_signal_receiver(deleted_error_handler,
1437 signal_name='ShareDeleteError')
1438 self.signal_receivers.add(match)
1439 self.client.call_method('delete_share', share.volume_id,
1440 reply_handler=lambda *args: None,
1441 error_handler=self.error_handler)
1442 yield d
1443
1444 def test_delete_share_from_me_doesnotexist(self):
1445 """Test failure of Shares.delete_share with a share from_me."""
1446 d = defer.Deferred()
1447 # patch delete_share to fail
1448 def deleted_error_handler(info, error):
1449 """ShareDeleteError handler."""
1450 self.assertEquals(info['volume_id'], 'missing_share_id')
1451 self.assertEquals(error, "DOES_NOT_EXIST")
1452 d.callback(True)
1453 match = self.bus.add_signal_receiver(deleted_error_handler,
1454 signal_name='ShareDeleteError')
1455 self.signal_receivers.add(match)
1456 self.client.call_method('delete_share', 'missing_share_id',
1457 reply_handler=lambda *args: None,
1458 error_handler=self.error_handler)
1459 return d
1460
1461 @defer.inlineCallbacks
1462 def test_subscribe(self):
1463 """Test for Shares.subscribe and that it fires a dbus signal."""
1464 share = self._create_share(accepted=True, subscribed=False)
1465 yield self.main.vm.add_share(share)
1466
1467 d = defer.Deferred()
1468 match = self.bus.add_signal_receiver(d.callback,
1469 signal_name='ShareSubscribed')
1470 self.signal_receivers.add(match)
1471
1472 match = self.bus.add_signal_receiver(lambda _, error: d.errback(error),
1473 signal_name='ShareSubscribeError')
1474 self.signal_receivers.add(match)
1475
1476 self.client.call_method('subscribe', share.volume_id,
1477 reply_handler=lambda x: None,
1478 error_handler=self.error_handler)
1479 info = yield d
1480 self.assertTrue(bool(info['subscribed']),
1481 "share %r should be subscribed" % share)
1482 yield self.main.vm.share_deleted(share.volume_id)
1483
1484 @defer.inlineCallbacks
1485 def test_subscribe_error(self):
1486 """Test for Shares.subscribe when there is an error."""
1487 # do not add a share to have an error
1488
1489 d = defer.Deferred()
1490
1491 match = self.bus.add_signal_receiver(lambda sid, _: d.callback(sid),
1492 signal_name='ShareSubscribeError')
1493 self.signal_receivers.add(match)
1494
1495 match = self.bus.add_signal_receiver(d.errback,
1496 signal_name='ShareSubscribed')
1497 self.signal_receivers.add(match)
1498
1499 self.client.call_method('subscribe', 'invalid_id',
1500 reply_handler=lambda x: None,
1501 error_handler=self.error_handler)
1502 yield d
1503
1504 @defer.inlineCallbacks
1505 def test_unsubscribe(self):
1506 """Test for Shares.unsubscribe."""
1507 share = self._create_share(accepted=True, subscribed=True)
1508 yield self.main.vm.add_share(share)
1509
1510 d = defer.Deferred()
1511 match = self.bus.add_signal_receiver(d.callback,
1512 signal_name='ShareUnSubscribed')
1513 self.signal_receivers.add(match)
1514
1515 match = self.bus.add_signal_receiver(lambda _, error: d.errback(error),
1516 signal_name='ShareUnSubscribeError')
1517 self.signal_receivers.add(match)
1518
1519 self.client.call_method('unsubscribe', share.volume_id,
1520 reply_handler=lambda x: None,
1521 error_handler=self.error_handler)
1522 info = yield d
1523
1524 self.assertFalse(info['subscribed'],
1525 "share %r should be subscribed" % share)
1526
1527 self.main.vm.share_deleted(share.volume_id)
1528
1529 @defer.inlineCallbacks
1530 def test_unsubscribe_error(self):
1531 """Test for Shares.unsubscribe when there is an error."""
1532 # do not add a share to have an error
1533
1534 d = defer.Deferred()
1535 match = self.bus.add_signal_receiver(lambda sid, _: d.callback(sid),
1536 signal_name='ShareUnSubscribeError')
1537 self.signal_receivers.add(match)
1538
1539 match = self.bus.add_signal_receiver(d.errback,
1540 signal_name='ShareUnSubscribed')
1541 self.signal_receivers.add(match)
1542
1543 self.client.call_method('unsubscribe', 'invalid_id',
1544 reply_handler=lambda x: None,
1545 error_handler=self.error_handler)
1546 yield d
1547
1548
1549class TestStatusEmitSignals(DBusTwistedTestCase, MockerTestCase):
1550 """Test that the emit method have been correctly implemented."""
1551
1552 @defer.inlineCallbacks
1553 def setUp(self):
1554 """Setup tests."""
1555 yield super(TestStatusEmitSignals, self).setUp()
1556 self.signal_method = self.mocker.mock()
1557
1558 def test_emit_content_queue_changed(self):
1559 """Emit ContentQueueChanged."""
1560 self.status.ContentQueueChanged = self.signal_method
1561 self.signal_method()
1562 self.mocker.replay()
1563 # will assert that the signal method was called
1564 self.status.emit_content_queue_changed()
1565
1566 def test_emit_requestqueue_removed(self):
1567 """Emit RequestQueueRemoved."""
1568 self.status.RequestQueueRemoved = self.signal_method
1569 self.signal_method('name', 'id', {})
1570 self.mocker.replay()
1571 # will assert that the signal method was called
1572 self.status.emit_requestqueue_removed('name', 'id', {})
1573
1574 def test_emit_requestqueue_added(self):
1575 """Emit RequestQueueAdded."""
1576 self.status.RequestQueueAdded = self.signal_method
1577 self.signal_method('name', 'id', {})
1578 self.mocker.replay()
1579 # will assert that the signal method was called
1580 self.status.emit_requestqueue_added('name', 'id', {})
1581
1582 def test_emit_invalid_name(self):
1583 """Emit InvalidName."""
1584 dirname = 'dirname'
1585 filename = 'filename'
1586 self.status.InvalidName = self.signal_method
1587 self.signal_method(unicode(dirname), str(filename))
1588 self.mocker.replay()
1589 self.status.emit_invalid_name(dirname, filename)
1590
1591 def test_emit_broken_node(self):
1592 """Emit BrokenNode."""
1593 volume_id = 'volume_id'
1594 node_id = 'node_id'
1595 mdid = 'mdid'
1596 path = 'path'
1597 self.status.BrokenNode = self.signal_method
1598 self.signal_method(volume_id, node_id, mdid, path.decode('utf8'))
1599 self.mocker.replay()
1600 self.status.emit_broken_node(volume_id, node_id, mdid,
1601 path.decode('utf8'))
1602
1603 def test_emit_status_changed(self):
1604 """Emit StatusChanged."""
1605 status = 'status'
1606 status_mock = self.mocker.mock()
1607 self.status.syncdaemon_status = status_mock
1608 status_mock.current_status()
1609 self.mocker.result(status)
1610 self.status.StatusChanged = self.signal_method
1611 self.signal_method(status)
1612 self.mocker.replay()
1613 self.status.emit_status_changed(status)
1614
1615 def test_emit_download_started(self):
1616 """Emit DownloadStarted."""
1617 download = 'download'
1618 self.status.DownloadStarted = self.signal_method
1619 self.signal_method(download)
1620 self.mocker.replay()
1621 self.status.emit_download_started(download)
1622
1623 def test_emit_download_file_progress(self):
1624 """Emit DownloadFileProgress."""
1625 download = 'download'
1626 string_info = {'blah':'3', 'do':'4'}
1627 self.status.DownloadFileProgress = self.signal_method
1628 self.signal_method(download, string_info)
1629 self.mocker.replay()
1630 self.status.emit_download_file_progress(download, blah=3, do=4)
1631
1632 def test_emit_download_finished(self):
1633 """Emit DownloadFinished."""
1634 download = 'download'
1635 string_info = {'blah':'3', 'do':'4'}
1636 self.status.DownloadFinished = self.signal_method
1637 self.signal_method(download, string_info)
1638 self.mocker.replay()
1639 self.status.emit_download_finished(download, blah=3, do=4)
1640
1641 def test_emit_upload_started(self):
1642 """Emit UploadStarted."""
1643 upload = 'upload'
1644 self.status.UploadStarted = self.signal_method
1645 self.signal_method(upload)
1646 self.mocker.replay()
1647 self.status.emit_upload_started(upload)
1648
1649 def test_emit_upload_file_progress(self):
1650 """Emit UploadFileProgress."""
1651 upload = 'upload'
1652 string_info = {'blah':'3', 'do':'4'}
1653 self.status.UploadFileProgress = self.signal_method
1654 self.signal_method(upload , string_info)
1655 self.mocker.replay()
1656 self.status.emit_upload_file_progress(upload , blah=3, do=4)
1657
1658 def test_emit_upload_finished(self):
1659 """Emit UploadFinished."""
1660 upload = 'upload'
1661 string_info = {'blah':'3', 'do':'4'}
1662 self.status.UploadFinished= self.signal_method
1663 self.signal_method(upload , string_info)
1664 self.mocker.replay()
1665 self.status.emit_upload_finished(upload, blah=3, do=4)
1666
1667 def test_emit_account_changed(self):
1668 """Emit AccountChanged."""
1669 info_dict = {'purchased_bytes': unicode('34')}
1670 account_info = self.mocker.mock()
1671 account_info.purchased_bytes
1672 self.mocker.result('34')
1673 self.status.AccountChanged = self.signal_method
1674 self.signal_method(info_dict)
1675 self.mocker.replay()
1676 self.status.emit_account_changed(account_info)
1677
1678 def test_emit_metaqueue_changed(self):
1679 """Emit MetaQueueChanged."""
1680 self.status.MetaQueueChanged = self.signal_method
1681 self.signal_method()
1682 self.mocker.replay()
1683 self.status.emit_metaqueue_changed()
1684
1685
1686class TestEventsEmitSignals(DBusTwistedTestCase, MockerTestCase):
1687 """Test that the emit method have been correctly implemented."""
1688
1689 @defer.inlineCallbacks
1690 def setUp(self):
1691 """Setup tests."""
1692 yield super(TestEventsEmitSignals, self).setUp()
1693 self.signal_method = self.mocker.mock()
1694
1695 def test_emit_event(self):
1696 """Test the Event signal."""
1697 items = {1:2}
1698 event = self.mocker.mock()
1699 event.iteritems()
1700 self.mocker.result(items.iteritems())
1701 self.events.Event = self.signal_method
1702 self.signal_method({'1':'2'})
1703 self.mocker.replay()
1704 self.events.emit_event(event)
1705
1706
1707class TestSyncDaemonEmitSignals(DBusTwistedTestCase, MockerTestCase):
1708 """Test that the emit method have been correctly implemented."""
1709
1710 @defer.inlineCallbacks
1711 def setUp(self):
1712 """Setup tests."""
1713 yield super(TestSyncDaemonEmitSignals, self).setUp()
1714 self.signal_method = self.mocker.mock()
1715
1716
1717 def test_emit_root_mismatch(self):
1718 """Emit RootMismatch signal."""
1719 root_id = 'root_id'
1720 new_root_id = 'new_root_id'
1721 self.sync.RootMismatch = self.signal_method
1722 self.signal_method(root_id, new_root_id)
1723 self.mocker.replay()
1724 self.sync.emit_root_mismatch(root_id, new_root_id)
1725
1726 def test_emit_quota_exceeded(self):
1727 """Emit QuotaExceeded signal."""
1728 volume_dict = 'volume_dict'
1729 self.sync.QuotaExceeded = self.signal_method
1730 self.signal_method(volume_dict)
1731 self.mocker.replay()
1732 self.sync.emit_quota_exceeded(volume_dict)
1733
1734
1735class TestSharesEmitSignals(DBusTwistedTestCase, MockerTestCase):
1736 """Test that the emit method have been correctly implemented."""
1737
1738 @defer.inlineCallbacks
1739 def setUp(self):
1740 """Setup tests."""
1741 yield super(TestSharesEmitSignals, self).setUp()
1742 self.signal_method = self.mocker.mock()
1743 self.shares.syncdaemon_shares = self.mocker.mock()
1744 self.get_share_dict = self.mocker.replace(
1745 'ubuntuone.syncdaemon.interaction_interfaces.get_share_dict')
1746
1747 def test_emit_share_changed_deleted(self):
1748 share = 'share'
1749 message = 'deleted'
1750 share_dict = {'share':'id'}
1751 self.get_share_dict(share)
1752 self.mocker.result(share_dict)
1753 self.shares.ShareDeleted = self.signal_method
1754 self.signal_method(share_dict)
1755 self.mocker.replay()
1756 self.shares.emit_share_changed(message, share)
1757
1758 def test_emit_share_changed_changed(self):
1759 share = 'share'
1760 message = 'changed'
1761 share_dict = {'share':'id'}
1762 self.get_share_dict(share)
1763 self.mocker.result(share_dict)
1764 self.shares.ShareChanged = self.signal_method
1765 self.signal_method(share_dict)
1766 self.mocker.replay()
1767 self.shares.emit_share_changed(message, share)
1768
1769 def test_emit_share_delete_error(self):
1770 """Emit ShareDeleteError signal."""
1771 share = 'share'
1772 error = 'error'
1773 share_dict = {'share':'id'}
1774 self.get_share_dict(share)
1775 self.mocker.result(share_dict)
1776 self.shares.ShareDeleteError = self.signal_method
1777 self.signal_method(share_dict, error)
1778 self.mocker.replay()
1779 self.shares.emit_share_delete_error(share, error)
1780
1781 def test_emit_free_space(self):
1782 """Emit ShareChanged when free space changes """
1783 free_bytes = '0'
1784 share_dict = shares = {'1': 'share', 'free_bytes':'0' }
1785 share = 'share'
1786 share_id = '1'
1787 self.shares.syncdaemon_shares.shares
1788 self.mocker.result(shares)
1789 self.shares.syncdaemon_shares.shares
1790 self.mocker.result(shares)
1791 self.get_share_dict(share)
1792 self.mocker.result(share_dict)
1793 self.shares.ShareChanged = self.signal_method
1794 self.signal_method(share_dict)
1795 self.mocker.replay()
1796 self.shares.emit_free_space(share_id, free_bytes)
1797
1798 def test_emit_share_created(self):
1799 """Emit ShareCreated signal """
1800 share_info = 'info'
1801 self.shares.ShareCreated = self.signal_method
1802 self.signal_method(share_info)
1803 self.mocker.replay()
1804 self.shares.emit_share_created(share_info)
1805
1806 def test_emit_share_create_error(self):
1807 """Emit ShareCreateError signal."""
1808 share_info = 'id'
1809 error = 'error'
1810 info = 'info'
1811 self.shares.syncdaemon_shares.get_create_error_share_info(share_info)
1812 self.mocker.result(info)
1813 self.shares.ShareCreateError = self.signal_method
1814 self.signal_method(info, error)
1815 self.mocker.replay()
1816 self.shares.emit_share_create_error(share_info, error)
1817
1818 def test_emit_share_answer_response(self):
1819 """Emits ShareAnswerResponse signal."""
1820 share_id = 'id'
1821 answer = 'yes'
1822 error = 'boom'
1823 answer_info = dict(volume_id=share_id, answer=answer, error=error)
1824 self.shares.ShareAnswerResponse = self.signal_method
1825 self.signal_method(answer_info)
1826 self.mocker.replay()
1827 self.shares.emit_share_answer_response(share_id, answer, error)
1828
1829 def test_emit_new_share(self):
1830 """Emits NewShare signal."""
1831 share_id = 'id'
1832 share = 'share'
1833 share_dict = {'share':'id'}
1834 self.shares.syncdaemon_shares.get_volume(share_id)
1835 self.mocker.result(share)
1836 self.get_share_dict(share)
1837 self.mocker.result(share_dict)
1838 self.shares.NewShare = self.signal_method
1839 self.signal_method(share_dict)
1840 self.mocker.replay()
1841 self.shares.emit_new_share(share_id)
1842
1843 def test_emit_share_subscribed(self):
1844 """Emit the ShareSubscribed signal"""
1845 share = 'share'
1846 share_dict = {'share' : 'id'}
1847 self.get_share_dict(share)
1848 self.mocker.result(share_dict)
1849 self.shares.ShareSubscribed = self.signal_method
1850 self.signal_method(share_dict)
1851 self.mocker.replay()
1852 self.shares.emit_share_subscribed(share)
1853
1854 def test_emit_share_subscribe_error(self):
1855 """Emit the ShareSubscribeError signal"""
1856 share_id = 'id'
1857 error = 'error'
1858 self.shares.ShareSubscribeError = self.signal_method
1859 self.signal_method({'id': share_id}, str(error))
1860 self.mocker.replay()
1861 self.shares.emit_share_subscribe_error(share_id, error)
1862
1863 def test_emit_share_unsubscribed(self):
1864 """Emit the ShareUnSubscribed signal"""
1865 share = 'share'
1866 share_dict = {'share':'id'}
1867 self.get_share_dict(share)
1868 self.mocker.result(share_dict)
1869 self.shares.ShareUnSubscribed = self.signal_method
1870 self.signal_method(share_dict)
1871 self.mocker.replay()
1872 self.shares.emit_share_unsubscribed(share)
1873
1874 def test_emit_share_unsubscribe_error(self):
1875 """Emit the ShareUnSubscribeError signal"""
1876 share_id = 'id'
1877 error = 'error'
1878 self.shares.ShareUnSubscribeError = self.signal_method
1879 self.signal_method({'id': share_id}, str(error))
1880 self.mocker.replay()
1881 self.shares.emit_share_unsubscribe_error(share_id, error)
1882
1883
1884class TestFoldersEmitSignals(DBusTwistedTestCase, MockerTestCase):
1885 """Test that the emit method have been correctly implemented."""
1886
1887 @defer.inlineCallbacks
1888 def setUp(self):
1889 """Setup tests."""
1890 yield super(TestFoldersEmitSignals, self).setUp()
1891 self.signal_method = self.mocker.mock()
1892 self.get_udf_dict = self.mocker.replace(
1893 'ubuntuone.syncdaemon.interaction_interfaces.get_udf_dict')
1894
1895 def test_emit_folder_deleted(self):
1896 """Emit the FolderCreated signal"""
1897 folder = 'folder'
1898 udf_dict = {'udf':'id'}
1899 self.get_udf_dict(folder)
1900 self.mocker.result(udf_dict)
1901 self.folders.FolderDeleted = self.signal_method
1902 self.signal_method(udf_dict)
1903 self.mocker.replay()
1904 self.folders.emit_folder_deleted(folder)
1905
1906 def test_emit_folder_delete_error(self):
1907 """Emit the FolderCreateError signal"""
1908 folder = 'folder'
1909 error = 'error'
1910 udf_dict = {'udf':'id'}
1911 self.get_udf_dict(folder)
1912 self.mocker.result(udf_dict)
1913 self.folders.FolderDeleteError = self.signal_method
1914 self.signal_method(udf_dict, str(error))
1915 self.mocker.replay()
1916 self.folders.emit_folder_delete_error(folder, error)
1917
1918 def test_emit_folder_subscribed(self):
1919 """Emit the FolderSubscribed signal"""
1920 folder = 'folder'
1921 udf_dict = {'udf':'id'}
1922 self.get_udf_dict(folder)
1923 self.mocker.result(udf_dict)
1924 self.folders.FolderSubscribed = self.signal_method
1925 self.signal_method(udf_dict)
1926 self.mocker.replay()
1927 self.folders.emit_folder_subscribed(folder)
1928
1929 def test_emit_folder_subscribe_error(self):
1930 """Emit the FolderSubscribeError signal"""
1931 folder_id = 'id'
1932 error = 'error'
1933 self.folders.FolderSubscribeError = self.signal_method
1934 self.signal_method({'id':folder_id}, str(error))
1935 self.mocker.replay()
1936 self.folders.emit_folder_subscribe_error(folder_id, error)
1937
1938 def test_emit_folder_unsubscribed(self):
1939 """Emit the FolderUnSubscribed signal"""
1940 folder = 'folder'
1941 udf_dict = {'udf':'id'}
1942 self.get_udf_dict(folder)
1943 self.mocker.result(udf_dict)
1944 self.folders.FolderUnSubscribed = self.signal_method
1945 self.signal_method(udf_dict)
1946 self.mocker.replay()
1947 self.folders.emit_folder_unsubscribed(folder)
1948
1949 def test_emit_folder_unsubscribe_error(self):
1950 """Emit the FolderUnSubscribeError signal"""
1951 folder_id = 'id'
1952 error = 'error'
1953 self.folders.FolderUnSubscribeError= self.signal_method
1954 self.signal_method({'id':folder_id}, str(error))
1955 self.mocker.replay()
1956 self.folders.emit_folder_unsubscribe_error(folder_id, error)
1957
1958
1959class TestPublicFilesEmitSignals(DBusTwistedTestCase, MockerTestCase):
1960 """Test that the emit method have been correctly implemented."""
1961
1962 @defer.inlineCallbacks
1963 def setUp(self):
1964 """Setup tests."""
1965 yield super(TestPublicFilesEmitSignals, self).setUp()
1966 self.signal_method = self.mocker.mock()
1967 self.public_files.syncdaemon_public_files = self.mocker.mock()
1968 self.bool_str = self.mocker.replace(
1969 'ubuntuone.syncdaemon.interaction_interfaces.bool_str')
1970
1971 def test_emit_public_access_changed(self):
1972 """Emit the PublicAccessChanged signal."""
1973 share_id = 'share_id'
1974 node_id = 'node_id'
1975 path = 'path'
1976 is_public = True
1977 public_url = 'url'
1978 self.public_files.syncdaemon_public_files.get_path(share_id, node_id)
1979 self.mocker.result(path)
1980 self.bool_str(is_public)
1981 self.mocker.result('True')
1982 self.public_files.PublicAccessChanged = self.signal_method
1983 self.signal_method(dict(share_id=share_id, node_id=node_id,
1984 is_public='True', public_url=public_url,
1985 path=path))
1986 self.mocker.replay()
1987 self.public_files.emit_public_access_changed(share_id, node_id,
1988 is_public, public_url)
1989
1990 def test_emit_public_access_change_error(self):
1991 """Emit the PublicAccessChangeError signal."""
1992 share_id = 'share_id'
1993 node_id = 'node_id'
1994 error = 'error'
1995 path = 'path'
1996 self.public_files.syncdaemon_public_files.get_path(share_id, node_id)
1997 self.mocker.result(path)
1998 self.public_files.PublicAccessChangeError = self.signal_method
1999 self.signal_method(dict(share_id=share_id, node_id=node_id, path=path),
2000 error)
2001 self.mocker.replay()
2002 self.public_files.emit_public_access_change_error(share_id, node_id, error)
2003
2004 def test_emit_public_files_list(self):
2005 """Emit the PublicFilesList signal."""
2006 volume_id = 'volume_id'
2007 node_id = 'node_id'
2008 public_url = 'url'
2009 path = 'path'
2010 public_files = [dict(volume_id=volume_id, node_id=node_id,
2011 public_url=public_url)]
2012 files = [dict(volume_id=volume_id, node_id=node_id,
2013 public_url=public_url, path=path)]
2014 self.public_files.syncdaemon_public_files.get_path(volume_id, node_id)
2015 self.mocker.result(path)
2016 self.public_files.PublicFilesList = self.signal_method
2017 self.signal_method(files)
2018 self.mocker.replay()
2019 self.public_files.emit_public_files_list(public_files)
2020
2021 def test_emit_public_files_list_error(self):
2022 """Emit the PublicFilesListError signal."""
2023 error = 'error'
2024 self.public_files.PublicFilesListError = self.signal_method
2025 self.signal_method(error)
2026 self.mocker.replay()
2027 self.public_files.emit_public_files_list_error(error)
2028>>>>>>> MERGE-SOURCE
3442029
=== modified file 'tests/platform/linux/test_notification.py'
--- tests/platform/linux/test_notification.py 2011-10-27 11:39:43 +0000
+++ tests/platform/linux/test_notification.py 2011-11-07 17:17:24 +0000
@@ -22,9 +22,13 @@
22"""22"""
2323
2424
25<<<<<<< TREE
25from mocker import Mocker26from mocker import Mocker
26from twisted.internet import defer27from twisted.internet import defer
27from twisted.trial.unittest import TestCase28from twisted.trial.unittest import TestCase
29=======
30from mocker import MockerTestCase as TestCase
31>>>>>>> MERGE-SOURCE
2832
29from ubuntuone.platform.linux.notification import Notification, ICON_NAME33from ubuntuone.platform.linux.notification import Notification, ICON_NAME
3034
@@ -46,6 +50,7 @@
46class NotificationTestCase(TestCase):50class NotificationTestCase(TestCase):
47 """Test the Messaging API."""51 """Test the Messaging API."""
4852
53<<<<<<< TREE
49 @defer.inlineCallbacks54 @defer.inlineCallbacks
50 def setUp(self):55 def setUp(self):
51 yield super(NotificationTestCase, self).setUp()56 yield super(NotificationTestCase, self).setUp()
@@ -57,6 +62,8 @@
57 self.mocker.restore()62 self.mocker.restore()
58 self.mocker.verify()63 self.mocker.verify()
5964
65=======
66>>>>>>> MERGE-SOURCE
60 def test_send_notification(self):67 def test_send_notification(self):
61 """On notification, pynotify receives the proper calls."""68 """On notification, pynotify receives the proper calls."""
62 mock_notify = self.mocker.replace("pynotify")69 mock_notify = self.mocker.replace("pynotify")
6370
=== modified file 'tests/platform/linux/test_vm.py'
=== modified file 'tests/status/test_aggregator.py'
--- tests/status/test_aggregator.py 2011-10-27 13:47:09 +0000
+++ tests/status/test_aggregator.py 2011-11-07 17:17:24 +0000
@@ -249,8 +249,13 @@
249 @defer.inlineCallbacks249 @defer.inlineCallbacks
250 def setUp(self):250 def setUp(self):
251 """Initialize this test instance."""251 """Initialize this test instance."""
252<<<<<<< TREE
252 yield super(ToggleableNotificationTestCase, self).setUp()253 yield super(ToggleableNotificationTestCase, self).setUp()
253 self.patch(aggregator.notification, "Notification", FakeNotification)254 self.patch(aggregator.notification, "Notification", FakeNotification)
255=======
256 yield super(ToggleableNotificationTestCase, self).setUp()
257 self.patch(aggregator, "Notification", FakeNotification)
258>>>>>>> MERGE-SOURCE
254 self.notification_switch = aggregator.NotificationSwitch()259 self.notification_switch = aggregator.NotificationSwitch()
255 self.toggleable = self.notification_switch.get_notification()260 self.toggleable = self.notification_switch.get_notification()
256261
257262
=== modified file 'tests/syncdaemon/test_action_queue.py'
=== modified file 'tests/syncdaemon/test_fsm.py'
=== modified file 'tests/syncdaemon/test_interaction_interfaces.py'
--- tests/syncdaemon/test_interaction_interfaces.py 2011-11-02 16:51:32 +0000
+++ tests/syncdaemon/test_interaction_interfaces.py 2011-11-07 17:17:24 +0000
@@ -13,6 +13,7 @@
13#13#
14# You should have received a copy of the GNU General Public License along14# You should have received a copy of the GNU General Public License along
15# with this program. If not, see <http://www.gnu.org/licenses/>.15# with this program. If not, see <http://www.gnu.org/licenses/>.
16<<<<<<< TREE
1617
17"""Test the interaction_interfaces module."""18"""Test the interaction_interfaces module."""
1819
@@ -124,7 +125,22 @@
124 kwargs = {}125 kwargs = {}
125126
126 @defer.inlineCallbacks127 @defer.inlineCallbacks
128=======
129"""Test that the interaction_interfaces are correctly called."""
130
131from mocker import MockerTestCase, MATCH
132from twisted.internet import defer
133
134from tests.platform import IPCTestCase
135
136
137class TestStatusIPC(MockerTestCase, IPCTestCase):
138 """Ensure that calls are correctly fowarded."""
139
140 @defer.inlineCallbacks
141>>>>>>> MERGE-SOURCE
127 def setUp(self):142 def setUp(self):
143<<<<<<< TREE
128 self.patch(interaction_interfaces, 'ExternalInterface',144 self.patch(interaction_interfaces, 'ExternalInterface',
129 FakedExternalInterface)145 FakedExternalInterface)
130 yield super(BaseTestCase, self).setUp()146 yield super(BaseTestCase, self).setUp()
@@ -185,6 +201,12 @@
185 """Test the SyncdaemonStatus class."""201 """Test the SyncdaemonStatus class."""
186202
187 sd_class = SyncdaemonStatus203 sd_class = SyncdaemonStatus
204=======
205 """Set up tests."""
206 yield super(TestStatusIPC, self).setUp()
207 self.syncdaemon_status = self.mocker.mock()
208 self.status.syncdaemon_status = self.syncdaemon_status
209>>>>>>> MERGE-SOURCE
188210
189 def test_current_status(self):211 def test_current_status(self):
190 """Test the current_status method."""212 """Test the current_status method."""
@@ -369,6 +391,7 @@
369 self.assertTrue(self.handler.check_warning('deprecated'))391 self.assertTrue(self.handler.check_warning('deprecated'))
370392
371 def test_waiting_content(self):393 def test_waiting_content(self):
394<<<<<<< TREE
372 """Test the waiting_content method."""395 """Test the waiting_content method."""
373 self.action_q.queue.waiting.extend([396 self.action_q.queue.waiting.extend([
374 FakeUpload("share_id", "node_id_b"),397 FakeUpload("share_id", "node_id_b"),
@@ -397,6 +420,128 @@
397 sd_class = SyncdaemonFileSystem420 sd_class = SyncdaemonFileSystem
398421
399 @defer.inlineCallbacks422 @defer.inlineCallbacks
423=======
424 """Test if the method is relayed."""
425 result = []
426 self.syncdaemon_status.waiting_content()
427 self.mocker.result(result)
428 self.mocker.replay()
429 self.assertEqual(result, self.status.waiting_content())
430
431 def test_current_uploads(self):
432 """Test if the method is relayed."""
433 result = 'uploading'
434 self.syncdaemon_status.current_uploads()
435 self.mocker.result(result)
436 self.mocker.replay()
437 self.assertEqual(result, self.status.current_uploads())
438
439
440class TestEventsIPC(MockerTestCase, IPCTestCase):
441 """Ensure that calls are correctly fowarded."""
442
443 @defer.inlineCallbacks
444 def setUp(self):
445 """Set up tests."""
446 yield super(TestEventsIPC, self).setUp()
447 self.events_mock = self.mocker.mock()
448 self.events.events = self.events_mock
449
450 def test_push_event(self):
451 """Test if the method is relayed."""
452 event_name = 'name'
453 args = ('uno', 'dos')
454 self.events_mock.push_event(event_name, args)
455 self.mocker.replay()
456 self.events.push_event(event_name, args)
457
458
459class TestSyncDaemonIPC(MockerTestCase, IPCTestCase):
460 """Ensure that calls are correctly fowarded."""
461
462 @defer.inlineCallbacks
463 def setUp(self):
464 """Set up tests."""
465 yield super(TestSyncDaemonIPC, self).setUp()
466 self.service = self.mocker.mock()
467 self.sync.service = self.service
468
469 def test_connect(self):
470 """Test if the method is relayed."""
471 self.service.connect()
472 self.mocker.replay()
473 self.sync.connect()
474
475 def test_disconnect(self):
476 """Test if the method is relayed."""
477 self.service.disconnect()
478 self.mocker.replay()
479 self.sync.disconnect()
480
481 def test_get_rootdir(self):
482 """Test if the method is relayed."""
483 result = 'root'
484 self.service.get_rootdir()
485 self.mocker.result(result)
486 self.mocker.replay()
487 self.assertEqual(result, self.sync.get_rootdir())
488
489 def test_get_sharesdir(self):
490 """Test if the method is relayed."""
491 result = 'shares'
492 self.service.get_sharesdir()
493 self.mocker.result(result)
494 self.mocker.replay()
495 self.assertEqual(result, self.sync.get_sharesdir())
496
497 def test_get_sharesdir_link(self):
498 """Test if the method is relayed."""
499 result = 'shares'
500 self.service.get_sharesdir_link()
501 self.mocker.result(result)
502 self.mocker.replay()
503 self.assertEqual(result, self.sync.get_sharesdir_link())
504
505 def test_wait_for_nirvana(self):
506 """Test if the method is relayed."""
507 result = 'nirvana'
508 last_event_interval = 'interval'
509 reply_handler = lambda: None
510 error_handler = lambda: None
511 self.service.wait_for_nirvana(last_event_interval, MATCH(callable),
512 MATCH(callable))
513 self.mocker.result(result)
514 self.mocker.replay()
515 self.assertEqual(result, self.sync.wait_for_nirvana(
516 last_event_interval, reply_handler, error_handler))
517
518 def test_quit(self):
519 """Test if the method is relayed."""
520 reply_handler = lambda: None
521 error_handler = lambda: None
522 self.service.quit(MATCH(callable), MATCH(callable))
523 self.mocker.replay()
524 self.sync.quit(reply_handler, error_handler)
525
526 def test_rescan_from_scratch(self):
527 """Test if the method is relayed."""
528 volume_id = 'id'
529 self.service.rescan_from_scratch(volume_id)
530 self.mocker.replay()
531 self.sync.rescan_from_scratch(volume_id)
532
533
534class TestFileSystemIPC(MockerTestCase, IPCTestCase):
535 """Ensure that calls are correctly fowarded."""
536
537 @defer.inlineCallbacks
538 def setUp(self):
539 """Set up tests."""
540 yield super(TestFileSystemIPC, self).setUp()
541 self.syncdaemon_filesystem = self.mocker.mock()
542 self.fs.syncdaemon_filesystem = self.syncdaemon_filesystem
543
544>>>>>>> MERGE-SOURCE
400 def test_get_metadata(self):545 def test_get_metadata(self):
401 """Test the get_metadata method."""546 """Test the get_metadata method."""
402 share = yield self._create_share()547 share = yield self._create_share()
@@ -569,6 +714,7 @@
569 self.assertEqual('synced', result['quick_tree_synced'])714 self.assertEqual('synced', result['quick_tree_synced'])
570715
571 def test_get_dirty_nodes(self):716 def test_get_dirty_nodes(self):
717<<<<<<< TREE
572 """Test the get_dirty_nodes method."""718 """Test the get_dirty_nodes method."""
573 # create some nodes719 # create some nodes
574 path1 = os.path.join(self.root_dir, u'ñoño-1'.encode('utf-8'))720 path1 = os.path.join(self.root_dir, u'ñoño-1'.encode('utf-8'))
@@ -611,6 +757,25 @@
611 self.assertEqual(self._called, ((share_id,), {}))757 self.assertEqual(self._called, ((share_id,), {}))
612758
613 @defer.inlineCallbacks759 @defer.inlineCallbacks
760=======
761 """Test if the method is relayed."""
762 result = 'dirty'
763 self.syncdaemon_filesystem.get_dirty_nodes()
764 self.mocker.result(result)
765 self.mocker.replay()
766 self.assertEqual(result, self.fs.get_dirty_nodes())
767
768class TestSharesIPC(MockerTestCase, IPCTestCase):
769 """Ensure that calls are correctly fowarded."""
770
771 @defer.inlineCallbacks
772 def setUp(self):
773 """Set up tests."""
774 yield super(TestSharesIPC, self).setUp()
775 self.syncdaemon_shares = self.mocker.mock()
776 self.shares.syncdaemon_shares = self.syncdaemon_shares
777
778>>>>>>> MERGE-SOURCE
614 def test_get_shares(self):779 def test_get_shares(self):
615 """Test the get_shares method."""780 """Test the get_shares method."""
616 share = self._create_share(accepted=False)781 share = self._create_share(accepted=False)
@@ -753,6 +918,7 @@
753 self.assertEqual(self._called, ((), {}))918 self.assertEqual(self._called, ((), {}))
754919
755 def test_get_shared(self):920 def test_get_shared(self):
921<<<<<<< TREE
756 """Test the get_shared method."""922 """Test the get_shared method."""
757 a_dir = os.path.join(self.root_dir, "a_dir")923 a_dir = os.path.join(self.root_dir, "a_dir")
758 self.main.fs.create(a_dir, "", is_dir=True)924 self.main.fs.create(a_dir, "", is_dir=True)
@@ -877,6 +1043,34 @@
877 user_config = config.get_user_config()1043 user_config = config.get_user_config()
878 self.assertEqual(user_config.get_throttling_read_limit(), None)1044 self.assertEqual(user_config.get_throttling_read_limit(), None)
879 self.assertEqual(user_config.get_throttling_write_limit(), None)1045 self.assertEqual(user_config.get_throttling_write_limit(), None)
1046=======
1047 """Test if the method is relayed."""
1048 result = 'shared'
1049 self.syncdaemon_shares.get_shared()
1050 self.mocker.result(result)
1051 self.mocker.replay()
1052 self.assertEqual(result, self.shares.get_shared())
1053
1054
1055class TestConfigIPC(MockerTestCase, IPCTestCase):
1056 """Ensure that calls are correctly fowarded."""
1057
1058 @defer.inlineCallbacks
1059 def setUp(self):
1060 """Set up tests."""
1061 yield super(TestConfigIPC, self).setUp()
1062 self.syncdaemon_config = self.mocker.mock()
1063 self.config.syncdaemon_config = self.syncdaemon_config
1064
1065 def test_get_throttling_limits(self):
1066 """Test if the method is relayed."""
1067 reply_handler = lambda: None
1068 error_handler = lambda: None
1069 self.syncdaemon_config.get_throttling_limits(MATCH(callable),
1070 MATCH(callable))
1071 self.mocker.replay()
1072 self.config.get_throttling_limits(reply_handler, error_handler)
1073>>>>>>> MERGE-SOURCE
8801074
881 def test_set_throttling_limits(self):1075 def test_set_throttling_limits(self):
882 """Test the set_throttling_limits method."""1076 """Test the set_throttling_limits method."""
@@ -1015,6 +1209,7 @@
1015 self.assertTrue(config.get_user_config().get_show_all_notifications())1209 self.assertTrue(config.get_user_config().get_show_all_notifications())
10161210
1017 def test_disable_show_all_notifications(self):1211 def test_disable_show_all_notifications(self):
1212<<<<<<< TREE
1018 """Test the disable_show_all_notifications method."""1213 """Test the disable_show_all_notifications method."""
1019 self.sd_obj.disable_show_all_notifications()1214 self.sd_obj.disable_show_all_notifications()
1020 self.assertFalse(config.get_user_config().get_show_all_notifications())1215 self.assertFalse(config.get_user_config().get_show_all_notifications())
@@ -1024,6 +1219,23 @@
1024 """Test the SyncdaemonFolders class."""1219 """Test the SyncdaemonFolders class."""
10251220
1026 sd_class = SyncdaemonFolders1221 sd_class = SyncdaemonFolders
1222=======
1223 """Test if the method is relayed."""
1224 self.syncdaemon_config.disable_show_all_notifications()
1225 self.mocker.replay()
1226 self.config.disable_show_all_notifications()
1227
1228
1229class TestFoldersIPC(MockerTestCase, IPCTestCase):
1230 """Ensure that calls are correctly fowarded."""
1231
1232 @defer.inlineCallbacks
1233 def setUp(self):
1234 """Set up tests."""
1235 yield super(TestFoldersIPC, self).setUp()
1236 self.syncdaemon_folders = self.mocker.mock()
1237 self.folders.syncdaemon_folders = self.syncdaemon_folders
1238>>>>>>> MERGE-SOURCE
10271239
1028 def test_create(self):1240 def test_create(self):
1029 """Test the create method."""1241 """Test the create method."""
@@ -1116,6 +1328,7 @@
1116 self.assertEqual(info, udf_dict)1328 self.assertEqual(info, udf_dict)
11171329
1118 def test_refresh_volumes(self):1330 def test_refresh_volumes(self):
1331<<<<<<< TREE
1119 """Test the refresh_volumes method."""1332 """Test the refresh_volumes method."""
1120 self.patch(self.main.vm, 'refresh_volumes', self._set_called)1333 self.patch(self.main.vm, 'refresh_volumes', self._set_called)
1121 self.sd_obj.refresh_volumes()1334 self.sd_obj.refresh_volumes()
@@ -1131,6 +1344,24 @@
1131 # XXX: change public access is the only class that expects uuid's as1344 # XXX: change public access is the only class that expects uuid's as
1132 # params this may indicate that we need to refactor that class to be1345 # params this may indicate that we need to refactor that class to be
1133 # consistent with the rest of syncdaemon where ID's are always strings1346 # consistent with the rest of syncdaemon where ID's are always strings
1347=======
1348 """Test if the method is relayed."""
1349 self.syncdaemon_folders.refresh_volumes()
1350 self.mocker.replay()
1351 self.folders.refresh_volumes()
1352
1353
1354class TestPublicFilesIPC(MockerTestCase, IPCTestCase):
1355 """Ensure that calls are correctly fowarded."""
1356
1357 @defer.inlineCallbacks
1358 def setUp(self):
1359 """Set up tests."""
1360 yield super(TestPublicFilesIPC, self).setUp()
1361 self.syncdaemon_public_files = self.mocker.mock()
1362 self.public_files.syncdaemon_public_files =\
1363 self.syncdaemon_public_files
1364>>>>>>> MERGE-SOURCE
11341365
1135 def test_change_public_access(self):1366 def test_change_public_access(self):
1136 """Test the change_public_access method."""1367 """Test the change_public_access method."""
11371368
=== modified file 'tests/syncdaemon/test_localrescan.py'
=== modified file 'tests/syncdaemon/test_status_listener.py'
=== modified file 'ubuntuone/syncdaemon/action_queue.py'
=== modified file 'ubuntuone/syncdaemon/filesystem_manager.py'

Subscribers

People subscribed via source and target branches