3178
3178
"""Share specific tests."""
3180
3180
@defer.inlineCallbacks
3182
"""Setup the test."""
3183
yield DBusTwistedTestCase.setUp(self)
3184
self.client = DBusClient(self.bus, '/shares', DBUS_IFACE_SHARES_NAME)
3186
def _create_share(self, volume_id=None, node_id=None, access_level='View',
3187
accepted=True, subscribed=False):
3188
"""Create a Share and return it."""
3189
share_path = os.path.join(self.main.shares_dir, 'share')
3190
if volume_id is None:
3191
volume_id = str(uuid.uuid4())
3193
node_id = str(uuid.uuid4())
3194
share = Share(path=share_path, volume_id=volume_id, node_id=node_id,
3195
accepted=accepted, access_level=access_level,
3196
subscribed=subscribed)
3199
@defer.inlineCallbacks
3181
3200
def test_delete_share(self):
3182
3201
"""Test for Shares.delete_share."""
3183
share_path = os.path.join(self.main.shares_dir, 'share')
3184
share = Share(path=share_path, volume_id='share_id',
3185
node_id='node_id', accepted=True)
3202
share = self._create_share(accepted=True)
3186
3203
yield self.main.vm.add_share(share)
3187
3204
d = defer.Deferred()
3188
3205
def delete_volume(volume_id, path):
3205
3222
self.assertRaises(KeyError, self.main.fs.get_by_path, share.path)
3206
3223
self.assertRaises(VolumeDoesNotExist,
3207
3224
self.main.vm.get_volume, share.volume_id)
3208
client = DBusClient(self.bus, '/shares', DBUS_IFACE_SHARES_NAME)
3209
client.call_method('delete_share', share.volume_id,
3225
self.client.call_method('delete_share', share.volume_id,
3210
3226
reply_handler=check_deleted,
3211
3227
error_handler=self.error_handler)
3305
3312
match = self.bus.add_signal_receiver(deleted_error_handler,
3306
3313
signal_name='ShareDeleteError')
3307
3314
self.signal_receivers.add(match)
3308
client = DBusClient(self.bus, '/shares', DBUS_IFACE_SHARES_NAME)
3309
client.call_method('delete_share', 'missing_share_id',
3315
self.client.call_method('delete_share', 'missing_share_id',
3310
3316
reply_handler=lambda *args: None,
3311
3317
error_handler=self.error_handler)
3320
@defer.inlineCallbacks
3321
def test_subscribe(self):
3322
"""Test for Shares.subscribe and that it fires a dbus signal."""
3323
share = self._create_share(accepted=True, subscribed=False)
3324
yield self.main.vm.add_share(share)
3326
d = defer.Deferred()
3327
match = self.bus.add_signal_receiver(d.callback,
3328
signal_name='ShareSubscribed')
3329
self.signal_receivers.add(match)
3331
match = self.bus.add_signal_receiver(lambda _, error: d.errback(error),
3332
signal_name='ShareSubscribeError')
3333
self.signal_receivers.add(match)
3335
self.client.call_method('subscribe', share.volume_id,
3336
reply_handler=lambda x: None,
3337
error_handler=self.error_handler)
3339
self.assertTrue(bool(info['subscribed']),
3340
"share %r should be subscribed" % share)
3341
yield self.main.vm.share_deleted(share.volume_id)
3343
@defer.inlineCallbacks
3344
def test_subscribe_error(self):
3345
"""Test for Shares.subscribe when there is an error."""
3346
# do not add a share to have an error
3348
d = defer.Deferred()
3350
match = self.bus.add_signal_receiver(lambda sid, _: d.callback(sid),
3351
signal_name='ShareSubscribeError')
3352
self.signal_receivers.add(match)
3354
match = self.bus.add_signal_receiver(d.errback,
3355
signal_name='ShareSubscribed')
3356
self.signal_receivers.add(match)
3358
self.client.call_method('subscribe', 'invalid_id',
3359
reply_handler=lambda x: None,
3360
error_handler=self.error_handler)
3363
@defer.inlineCallbacks
3364
def test_unsubscribe(self):
3365
"""Test for Shares.unsubscribe."""
3366
share = self._create_share(accepted=True, subscribed=True)
3367
yield self.main.vm.add_share(share)
3369
d = defer.Deferred()
3370
match = self.bus.add_signal_receiver(d.callback,
3371
signal_name='ShareUnSubscribed')
3372
self.signal_receivers.add(match)
3374
match = self.bus.add_signal_receiver(lambda _, error: d.errback(error),
3375
signal_name='ShareUnSubscribeError')
3376
self.signal_receivers.add(match)
3378
self.client.call_method('unsubscribe', share.volume_id,
3379
reply_handler=lambda x: None,
3380
error_handler=self.error_handler)
3383
self.assertFalse(info['subscribed'],
3384
"share %r should be subscribed" % share)
3386
self.main.vm.share_deleted(share.volume_id)
3388
@defer.inlineCallbacks
3389
def test_unsubscribe_error(self):
3390
"""Test for Shares.unsubscribe when there is an error."""
3391
# do not add a share to have an error
3393
d = defer.Deferred()
3394
match = self.bus.add_signal_receiver(lambda sid, _: d.callback(sid),
3395
signal_name='ShareUnSubscribeError')
3396
self.signal_receivers.add(match)
3398
match = self.bus.add_signal_receiver(d.errback,
3399
signal_name='ShareUnSubscribed')
3400
self.signal_receivers.add(match)
3402
self.client.call_method('unsubscribe', 'invalid_id',
3403
reply_handler=lambda x: None,
3404
error_handler=self.error_handler)
3315
3408
def test_suite():
3316
3409
"""Collect these tests only on linux."""