845
853
receiver = self.bus.add_signal_receiver(lambda: d.callback(True),
846
854
signal_name='ContentQueueChanged')
847
855
self.signal_receivers.add(receiver)
848
self.main.event_q.push('SYS_QUEUE_REMOVED', FakeCommand())
856
self.main.event_q.push('SYS_QUEUE_REMOVED', command=FakeCommand())
859
@defer.inlineCallbacks
851
860
def test_current_downloads(self):
852
861
"""Test Status.current_downloads with fake data in the AQ."""
853
share_path = os.path.join(self.shares_dir, 'share')
854
self.main.vm.add_share(Share(path=share_path, volume_id='share_id'))
855
down_path = os.path.join(share_path, "down_path")
856
self.fs_manager.create(down_path, "share_id")
857
self.fs_manager.set_node_id(down_path, "node_id")
858
self.action_q.downloading[('share_id', 'node_id')] = dict(
859
deflated_size=10, size=100, n_bytes_read=1)
862
fake_download = FakeDownload('share_id', 'down_node_id')
863
fake_download.deflated_size = 10
864
fake_download.n_bytes_read = 1
865
fake_download.path = "down_path"
866
self.action_q.queue.waiting.append(fake_download)
860
868
client = DBusClient(self.bus, '/status', DBUS_IFACE_STATUS_NAME)
861
869
d = defer.Deferred()
862
870
def downloads_handler(result):
863
871
"""Reply handler."""
864
self.assertEquals(1, len(result))
865
self.assertEquals(down_path, str(result[0]['path']))
866
self.assertEquals('10', str(result[0]['deflated_size']))
867
self.assertEquals('1', str(result[0]['n_bytes_read']))
872
self.assertEqual(1, len(result))
873
self.assertEqual("down_path", str(result[0]['path']))
874
self.assertEqual('10', str(result[0]['deflated_size']))
875
self.assertEqual('1', str(result[0]['n_bytes_read']))
870
878
client.call_method('current_downloads',
871
879
reply_handler=downloads_handler,
872
880
error_handler=self.error_handler)
883
@defer.inlineCallbacks
875
884
def test_current_uploads(self):
876
885
"""Test Status.current_uploads with fake data in the AQ."""
877
share_path = os.path.join(self.shares_dir, 'share')
878
self.main.vm.add_share(Share(path=share_path, volume_id='share_id'))
879
up_path = os.path.join(share_path, "up_path")
880
self.fs_manager.create(up_path, "share_id")
881
self.fs_manager.set_node_id(up_path, "node_id")
882
self.action_q.uploading[('share_id', 'node_id')] = dict(
883
deflated_size=100, n_bytes_written=10)
884
client = DBusClient(self.bus, '/status', DBUS_IFACE_STATUS_NAME)
887
def uploads_handler(result):
889
self.assertEquals(1, len(result))
890
self.assertEquals(up_path, str(result[0]['path']))
891
self.assertEquals('100', str(result[0]['deflated_size']))
892
self.assertEquals('10', str(result[0]['n_bytes_written']))
895
client.call_method('current_uploads', reply_handler=uploads_handler,
896
error_handler=self.error_handler)
899
def test_current_uploads_with_marker(self):
900
"""Test Status.current_uploads with fake data in the AQ."""
901
self.action_q.uploading[('', MDMarker('a_marker_uuid'))] = dict(
902
deflated_size=100, n_bytes_written=10)
903
client = DBusClient(self.bus, '/status', DBUS_IFACE_STATUS_NAME)
906
def uploads_handler(result):
908
self.assertEquals(0, len(result))
911
client.call_method('current_uploads', reply_handler=uploads_handler,
912
error_handler=self.error_handler)
886
fake_upload = FakeUpload('share_id', 'node_id')
887
fake_upload.deflated_size = 100
888
fake_upload.n_bytes_written = 10
889
fake_upload.path = "up_path"
890
self.action_q.queue.waiting.append(fake_upload)
892
client = DBusClient(self.bus, '/status', DBUS_IFACE_STATUS_NAME)
895
def uploads_handler(result):
897
self.assertEqual(1, len(result))
898
self.assertEqual("up_path", str(result[0]['path']))
899
self.assertEqual('100', str(result[0]['deflated_size']))
900
self.assertEqual('10', str(result[0]['n_bytes_written']))
903
client.call_method('current_uploads', reply_handler=uploads_handler,
904
error_handler=self.error_handler)
907
@defer.inlineCallbacks
915
908
def test_two_current_downloads(self):
916
909
"""Test Status.current_downloads with fake data in the AQ."""
917
share_path = os.path.join(self.shares_dir, 'share')
918
self.main.vm.add_share(Share(path=share_path, volume_id='share_id'))
919
down_path = os.path.join(share_path, "down_path")
920
self.fs_manager.create(down_path, "share_id")
921
self.fs_manager.set_node_id(down_path, "node_id")
922
self.action_q.downloading[('share_id', 'node_id')] = dict(
923
deflated_size=10, size=100, n_bytes_read=8)
924
share1_path = os.path.join(self.shares_dir, 'share1')
925
self.main.vm.add_share(Share(path=share1_path, volume_id='share_id_1'))
926
down_path_1 = os.path.join(share1_path, "down_path_1")
927
self.fs_manager.create(down_path_1, "share_id_1")
928
self.fs_manager.set_node_id(down_path_1, "node_id_1")
929
self.action_q.downloading[('share_id_1', 'node_id_1')] = dict(
930
deflated_size=10, size=100, n_bytes_read=5)
910
fake_download = FakeDownload('share_id', 'node_id')
911
fake_download.deflated_size = 10
912
fake_download.n_bytes_read = 8
913
fake_download.path = "down_path"
914
self.action_q.queue.waiting.append(fake_download)
916
fake_download = FakeDownload('share_id_1', 'node_id_1')
917
fake_download.deflated_size = 10
918
fake_download.n_bytes_read = 5
919
fake_download.path = "down_path_1"
920
self.action_q.queue.waiting.append(fake_download)
931
922
client = DBusClient(self.bus, '/status', DBUS_IFACE_STATUS_NAME)
932
923
d = defer.Deferred()
933
924
def downloads_handler(result):
934
925
"""Reply handler."""
935
self.assertEquals(2, len(result))
936
self.assertEquals(down_path, str(result[0]['path']))
937
self.assertEquals('10', str(result[0]['deflated_size']))
938
self.assertEquals('8', str(result[0]['n_bytes_read']))
939
self.assertEquals(down_path_1, str(result[1]['path']))
940
self.assertEquals('10', str(result[1]['deflated_size']))
941
self.assertEquals('5', str(result[1]['n_bytes_read']))
926
self.assertEqual(2, len(result))
927
self.assertEqual('down_path', str(result[0]['path']))
928
self.assertEqual('10', str(result[0]['deflated_size']))
929
self.assertEqual('8', str(result[0]['n_bytes_read']))
930
self.assertEqual('down_path_1', str(result[1]['path']))
931
self.assertEqual('10', str(result[1]['deflated_size']))
932
self.assertEqual('5', str(result[1]['n_bytes_read']))
944
935
client.call_method('current_downloads',
945
936
reply_handler=downloads_handler,
946
937
error_handler=self.error_handler)
940
@defer.inlineCallbacks
949
941
def test_two_current_uploads(self):
950
942
"""Test Status.current_uploads with fake data in the AQ."""
951
share_path = os.path.join(self.shares_dir, 'share')
952
self.main.vm.add_share(Share(path=share_path, volume_id='share_id'))
953
up_path = os.path.join(share_path, "up_path")
954
self.fs_manager.create(up_path, "share_id")
955
self.fs_manager.set_node_id(up_path, "node_id")
956
self.action_q.uploading[('share_id', 'node_id')] = dict(
957
deflated_size=100, n_bytes_written=10)
958
share1_path = os.path.join(self.shares_dir, 'share1')
959
self.main.vm.add_share(Share(path=share1_path, volume_id='share_id_1'))
960
up_path_1 = os.path.join(share1_path, "up_path_1")
961
self.fs_manager.create(up_path_1, "share_id_1")
962
self.fs_manager.set_node_id(up_path_1, "node_id_1")
963
self.action_q.uploading[('share_id_1', 'node_id_1')] = dict(
964
deflated_size=80, n_bytes_written=20)
943
fake_upload = FakeUpload('share_id', 'node_id')
944
fake_upload.deflated_size = 100
945
fake_upload.n_bytes_written = 10
946
fake_upload.path = "up_path"
947
self.action_q.queue.waiting.append(fake_upload)
949
fake_upload = FakeUpload('share_id_1', 'node_id_1')
950
fake_upload.deflated_size = 80
951
fake_upload.n_bytes_written = 20
952
fake_upload.path = "up_path_1"
953
self.action_q.queue.waiting.append(fake_upload)
965
955
client = DBusClient(self.bus, '/status', DBUS_IFACE_STATUS_NAME)
966
956
d = defer.Deferred()
968
958
def uploads_handler(result):
969
959
"""Reply handler."""
970
self.assertEquals(2, len(result))
971
self.assertEquals(up_path, str(result[0]['path']))
972
self.assertEquals('100', str(result[0]['deflated_size']))
973
self.assertEquals('10', str(result[0]['n_bytes_written']))
974
self.assertEquals(up_path_1, str(result[1]['path']))
975
self.assertEquals('80', str(result[1]['deflated_size']))
976
self.assertEquals('20', str(result[1]['n_bytes_written']))
960
self.assertEqual(2, len(result))
961
self.assertEqual('up_path', str(result[0]['path']))
962
self.assertEqual('100', str(result[0]['deflated_size']))
963
self.assertEqual('10', str(result[0]['n_bytes_written']))
964
self.assertEqual('up_path_1', str(result[1]['path']))
965
self.assertEqual('80', str(result[1]['deflated_size']))
966
self.assertEqual('20', str(result[1]['n_bytes_written']))
979
969
client.call_method('current_uploads', reply_handler=uploads_handler,
980
970
error_handler=self.error_handler)
973
@defer.inlineCallbacks
983
974
def test_current_downloads_deflated_size_NA(self):
984
975
"""Test Status.current_downloads with fake data in the AQ."""
985
share_path = os.path.join(self.shares_dir, 'share')
986
self.main.vm.add_share(Share(path=share_path, volume_id='share_id'))
987
down_path = os.path.join(share_path, "down_path")
988
self.fs_manager.create(down_path, "share_id")
989
self.fs_manager.set_node_id(down_path, "node_id")
990
self.action_q.downloading[('share_id', 'node_id')] = dict()
976
fake_download = FakeDownload('share_id', 'down_node_id')
977
fake_download.deflated_size = None
978
fake_download.n_bytes_read = 0
979
fake_download.path = "down_path"
980
self.action_q.queue.waiting.append(fake_download)
991
982
client = DBusClient(self.bus, '/status', DBUS_IFACE_STATUS_NAME)
992
983
d = defer.Deferred()
993
984
def downloads_handler(result):
994
985
"""Reply handler."""
995
self.assertEquals(1, len(result))
996
self.assertEquals(down_path, str(result[0]['path']))
986
self.assertEqual(1, len(result))
987
self.assertEqual('down_path', str(result[0]['path']))
997
988
self.assertNotIn('deflated_size', result[0])
998
self.assertEquals('0', str(result[0]['n_bytes_read']))
989
self.assertEqual('0', str(result[0]['n_bytes_read']))
1001
992
client.call_method('current_downloads',
1002
993
reply_handler=downloads_handler,
1003
994
error_handler=self.error_handler)
997
@defer.inlineCallbacks
1006
998
def test_current_uploads_deflated_size_NA(self):
1007
999
"""Test Status.current_uploads with fake data in the AQ."""
1008
share_path = os.path.join(self.shares_dir, 'share')
1009
self.main.vm.add_share(Share(path=share_path, volume_id='share_id'))
1010
up_path = os.path.join(share_path, "up_path")
1011
self.fs_manager.create(up_path, "share_id")
1012
self.fs_manager.set_node_id(up_path, "node_id")
1013
self.action_q.uploading[('share_id', 'node_id')] = dict()
1000
fake_upload = FakeUpload('share_id', 'node_id')
1001
fake_upload.deflated_size = None
1002
fake_upload.n_bytes_written = 0
1003
fake_upload.path = "up_path"
1004
self.action_q.queue.waiting.append(fake_upload)
1014
1006
client = DBusClient(self.bus, '/status', DBUS_IFACE_STATUS_NAME)
1015
1007
d = defer.Deferred()
1017
1009
def uploads_handler(result):
1018
1010
"""Reply handler."""
1019
1011
self.assertEquals(1, len(result))
1020
self.assertEquals(up_path, str(result[0]['path']))
1012
self.assertEquals("up_path", str(result[0]['path']))
1021
1013
self.assertNotIn('deflated_size', result[0])
1022
1014
self.assertEquals('0', str(result[0]['n_bytes_written']))
1023
1015
d.callback(True)
1025
1017
client.call_method('current_uploads', reply_handler=uploads_handler,
1026
1018
error_handler=self.error_handler)
1029
1021
def test_nm_signals(self):
1030
1022
"""Test that NM signals are received and handled properly."""
3202
3301
share_id=share_id, error="I'm broken")
3203
3302
self.patch(self.main.action_q, 'delete_share', delete_share)
3204
3303
def deleted_error_handler(info, error):
3205
"""FolderDeleteError handler."""
3304
"""ShareDeleteError handler."""
3206
3305
self.assertEquals(info['volume_id'], share.volume_id)
3207
3306
self.assertEquals(error, "I'm broken")
3208
3307
d.callback(True)
3209
3308
match = self.bus.add_signal_receiver(deleted_error_handler,
3210
3309
signal_name='ShareDeleteError')
3211
3310
self.signal_receivers.add(match)
3212
client = DBusClient(self.bus, '/shares', DBUS_IFACE_SHARES_NAME)
3213
client.call_method('delete_share', share.volume_id,
3311
self.client.call_method('delete_share', share.volume_id,
3214
3312
reply_handler=lambda *args: None,
3215
3313
error_handler=self.error_handler)
3218
3316
def test_delete_share_from_me_doesnotexist(self):
3219
3317
"""Test failure of Shares.delete_share with a share from_me."""
3220
3318
d = defer.Deferred()
3221
3319
# patch delete_share to fail
3222
3320
def deleted_error_handler(info, error):
3223
"""FolderDeleteError handler."""
3321
"""ShareDeleteError handler."""
3224
3322
self.assertEquals(info['volume_id'], 'missing_share_id')
3225
3323
self.assertEquals(error, "DOES_NOT_EXIST")
3226
3324
d.callback(True)
3227
3325
match = self.bus.add_signal_receiver(deleted_error_handler,
3228
3326
signal_name='ShareDeleteError')
3229
3327
self.signal_receivers.add(match)
3230
client = DBusClient(self.bus, '/shares', DBUS_IFACE_SHARES_NAME)
3231
client.call_method('delete_share', 'missing_share_id',
3328
self.client.call_method('delete_share', 'missing_share_id',
3232
3329
reply_handler=lambda *args: None,
3233
3330
error_handler=self.error_handler)
3333
@defer.inlineCallbacks
3334
def test_subscribe(self):
3335
"""Test for Shares.subscribe and that it fires a dbus signal."""
3336
share = self._create_share(accepted=True, subscribed=False)
3337
yield self.main.vm.add_share(share)
3339
d = defer.Deferred()
3340
match = self.bus.add_signal_receiver(d.callback,
3341
signal_name='ShareSubscribed')
3342
self.signal_receivers.add(match)
3344
match = self.bus.add_signal_receiver(lambda _, error: d.errback(error),
3345
signal_name='ShareSubscribeError')
3346
self.signal_receivers.add(match)
3348
self.client.call_method('subscribe', share.volume_id,
3349
reply_handler=lambda x: None,
3350
error_handler=self.error_handler)
3352
self.assertTrue(bool(info['subscribed']),
3353
"share %r should be subscribed" % share)
3354
yield self.main.vm.share_deleted(share.volume_id)
3356
@defer.inlineCallbacks
3357
def test_subscribe_error(self):
3358
"""Test for Shares.subscribe when there is an error."""
3359
# do not add a share to have an error
3361
d = defer.Deferred()
3363
match = self.bus.add_signal_receiver(lambda sid, _: d.callback(sid),
3364
signal_name='ShareSubscribeError')
3365
self.signal_receivers.add(match)
3367
match = self.bus.add_signal_receiver(d.errback,
3368
signal_name='ShareSubscribed')
3369
self.signal_receivers.add(match)
3371
self.client.call_method('subscribe', 'invalid_id',
3372
reply_handler=lambda x: None,
3373
error_handler=self.error_handler)
3376
@defer.inlineCallbacks
3377
def test_unsubscribe(self):
3378
"""Test for Shares.unsubscribe."""
3379
share = self._create_share(accepted=True, subscribed=True)
3380
yield self.main.vm.add_share(share)
3382
d = defer.Deferred()
3383
match = self.bus.add_signal_receiver(d.callback,
3384
signal_name='ShareUnSubscribed')
3385
self.signal_receivers.add(match)
3387
match = self.bus.add_signal_receiver(lambda _, error: d.errback(error),
3388
signal_name='ShareUnSubscribeError')
3389
self.signal_receivers.add(match)
3391
self.client.call_method('unsubscribe', share.volume_id,
3392
reply_handler=lambda x: None,
3393
error_handler=self.error_handler)
3396
self.assertFalse(info['subscribed'],
3397
"share %r should be subscribed" % share)
3399
self.main.vm.share_deleted(share.volume_id)
3401
@defer.inlineCallbacks
3402
def test_unsubscribe_error(self):
3403
"""Test for Shares.unsubscribe when there is an error."""
3404
# do not add a share to have an error
3406
d = defer.Deferred()
3407
match = self.bus.add_signal_receiver(lambda sid, _: d.callback(sid),
3408
signal_name='ShareUnSubscribeError')
3409
self.signal_receivers.add(match)
3411
match = self.bus.add_signal_receiver(d.errback,
3412
signal_name='ShareUnSubscribed')
3413
self.signal_receivers.add(match)
3415
self.client.call_method('unsubscribe', 'invalid_id',
3416
reply_handler=lambda x: None,
3417
error_handler=self.error_handler)
3237
3421
def test_suite():
3238
3422
"""Collect these tests only on linux."""