2528
2529
self.assertTrue(isinstance(share, Shared))
2529
2530
compare_share(share, old_share)
2532
def test_upgrade_5_critical_error(self):
2533
"""Test the migration from version 5 with a critical error."""
2534
# build a fake version 5 state
2535
self._build_layout_version_4()
2536
self.set_md_version('5')
2537
# create some old shares and shared metadata
2538
legacy_shares = LegacyShareFileShelf(self.share_md_dir)
2539
root_share = _Share(path=self.root_dir, share_id='',
2540
access_level='Modify')
2541
legacy_shares[''] = root_share
2542
for idx, name in enumerate(['share'] * 10):
2543
sid = str(uuid.uuid4())
2544
share_name = name + '_' + str(idx)
2545
share = _Share(path=os.path.join(self.shares_dir, share_name),
2546
share_id=sid, name=share_name,
2547
node_id=str(uuid.uuid4()),
2548
other_username='username'+str(idx),
2549
other_visible_name='visible name ' + str(idx))
2551
share.access_level = 'Modify'
2553
share.access_level = 'View'
2554
legacy_shares[sid] = share
2555
# create shared shares
2556
legacy_shared = LegacyShareFileShelf(self.shared_md_dir)
2557
for idx, name in enumerate(['dir'] * 5):
2558
sid = str(uuid.uuid4())
2559
share_name = name + '_' + str(idx)
2560
share = _Share(path=os.path.join(self.root_dir, share_name),
2561
share_id=sid, node_id=str(uuid.uuid4()),
2562
name=share_name, other_username='hola',
2563
other_visible_name='hola')
2565
share.access_level = 'Modify'
2567
share.access_level = 'View'
2568
legacy_shared[sid] = share
2570
# keep a copy of the current shares and shared metadata to check
2571
# the upgrade went ok
2572
legacy_shares = dict(legacy_shares.items())
2573
legacy_shared = dict(legacy_shared.items())
2575
if self.md_version_None:
2576
self.set_md_version('')
2578
old_upgrade_share_to_volume = MetadataUpgrader._upgrade_share_to_volume
2579
def upgrade_share_to_volume(share, shared=False):
2580
raise ValueError('FAIL!')
2581
MetadataUpgrader._upgrade_share_to_volume = upgrade_share_to_volume
2583
self.assertRaises(ValueError, FakeMain, self.root_dir, self.shares_dir,
2584
self.data_dir, self.partials_dir)
2586
MetadataUpgrader._upgrade_share_to_volume = old_upgrade_share_to_volume
2588
shares = LegacyShareFileShelf(self.share_md_dir)
2589
self.assertEquals(len(list(shares.keys())), len(legacy_shares.keys()))
2590
for sid, share in shares.iteritems():
2591
old_share = legacy_shares[sid]
2592
self.assertTrue(isinstance(share, _Share))
2593
self.assertTrue(isinstance(old_share, _Share))
2594
shared = LegacyShareFileShelf(self.shared_md_dir)
2595
self.assertEquals(len(list(shared.keys())), len(legacy_shared.keys()))
2596
for sid, share in shared.iteritems():
2597
old_share = legacy_shared[sid]
2598
self.assertTrue(isinstance(share, _Share))
2599
self.assertTrue(isinstance(old_share, _Share))
2532
2602
class BrokenOldMDVersionUpgradeTests(MetadataOldLayoutTests):
2533
2603
"""MetadataOldLayoutTests with broken .version file."""