~rodrigo-moya/ubuntuone-client/share-my-picked-contacts

« back to all changes in this revision

Viewing changes to tests/syncdaemon/test_vm.py

  • Committer: Tarmac
  • Author(s): guillermo.gonzalez at canonical
  • Date: 2010-03-29 20:49:14 UTC
  • mfrom: (445.3.5 safe-md-v5-migration)
  • Revision ID: john.lenton@canonical.com-20100329204914-by1k64lrmnu3wxw0
Backup volume manager metadata before doing the migration to v6 and restore it in case of error.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1819
1819
        for new_key in new_keys:
1820
1820
            self.assertIn(new_key, old_keys)
1821
1821
        # check the old data is still there (in the backup)
1822
 
        backup_shelf = LegacyShareFileShelf(os.path.join(self.vm_data_dir, '0.bkp'))
 
1822
        bkp_dir = os.path.join(os.path.dirname(self.vm_data_dir), '5.bkp', '0.bkp')
 
1823
        backup_shelf = LegacyShareFileShelf(bkp_dir)
1823
1824
        backup_keys = [key for key in backup_shelf.keys()]
1824
1825
        for old_key in old_keys:
1825
1826
            self.assertIn(old_key, backup_keys)
2528
2529
            self.assertTrue(isinstance(share, Shared))
2529
2530
            compare_share(share, old_share)
2530
2531
 
 
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))
 
2550
            if idx % 2:
 
2551
                share.access_level = 'Modify'
 
2552
            else:
 
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')
 
2564
            if idx % 2:
 
2565
                share.access_level = 'Modify'
 
2566
            else:
 
2567
                share.access_level = 'View'
 
2568
            legacy_shared[sid] = share
 
2569
 
 
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())
 
2574
 
 
2575
        if self.md_version_None:
 
2576
            self.set_md_version('')
 
2577
        # upgrade it!
 
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
 
2582
        try:
 
2583
            self.assertRaises(ValueError, FakeMain, self.root_dir, self.shares_dir,
 
2584
                              self.data_dir, self.partials_dir)
 
2585
        finally:
 
2586
            MetadataUpgrader._upgrade_share_to_volume = old_upgrade_share_to_volume
 
2587
 
 
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))
 
2600
 
2531
2601
 
2532
2602
class BrokenOldMDVersionUpgradeTests(MetadataOldLayoutTests):
2533
2603
    """MetadataOldLayoutTests with broken .version file."""