Beispiel #1
0
    def __init__(self,
                 main_workspace="~/.repo",
                 repo_kind='hg',
                 main_source=None):
        self.dvcs = DepotOperations.get_depot_operations(repo_kind)
        try:
            self.main_work_path = os.path.expanduser(main_workspace)
            logger.debug('Main workspace: %s' % self.main_work_path)
            self.main_cache_path = os.path.join(self.main_work_path,
                                                DepotManager.cache_name)
            self.squadron_roster_path = os.path.join(
                self.main_work_path, DepotManager.squadron_roster_name)

            # Create the environment.
            if not os.path.isdir(self.main_work_path):
                os.makedirs(self.main_work_path)

            # Create main cache.
            if not self.dvcs.is_a_depot(self.main_cache_path):
                self.main_cache = self.dvcs.init_depot(self.main_cache_path,
                                                       source=main_source)
            else:
                self.main_cache = Depot(self.main_cache_path, None, self.dvcs)

            self.roster = Roster(self.squadron_roster_path)

        except Exception as e:
            raise CloneProvisionError(e)
 def test_add_limit(self):
     # tests the limit imposed to the creation of clones
     roster = Roster(':memory:', max_clones=1)
     roster.add('/test1', 1, 'test')
     self.assertIn('/test1', roster)
     self.assertRaises(MaxClonesLimitReached, roster.add, '/test2', 1,
                       'test')
    def test_multiple_rosters_persistence(self):
        fd, database_path = tempfile.mkstemp()
        try:
            roster1 = Roster(database_path)
            roster2 = Roster(database_path)
            r1 = clone_mother(task='1', status=Clone.INUSE)
            r2 = clone_mother(task='2')

            roster1['/test1'] = r1

            def assign(roster, x, y):
                roster[x] = y

            self.assertRaises(RosterError, assign, roster2, '/test1', r2)

            roster1['/test2'] = r2
            roster2.reserve_clone('2', 'test2')
            self.assertRaises(RosterError, roster1.reserve_clone, '1', 'test1')
        finally:
            os.remove(database_path)
    def test_free_clone_by_timeout(self):
        timeout = timedelta(seconds=1)
        initial_time = 0.0

        roster = Roster(':memory:', clone_timeout=timeout)
        roster._get_time_ = lambda: initial_time

        r1 = clone_mother(status=Clone.INUSE, task='1')
        r2 = clone_mother(status=Clone.FREE, task='2')
        r3 = clone_mother(status=Clone.INUSE, task='2')
        roster['/test1'] = r1
        roster['/test2'] = r2
        roster['/test3'] = r3

        self.assertListEqual([], roster._get_old_clones_())

        roster._get_time_ = lambda: initial_time + timeout.seconds + 1
        self.assertGreater(len(roster._get_old_clones_()), 0)

        roster._clean_old_clones()
        self.assertListEqual([], roster._get_old_clones_())
 def setUp(self):
     self.roster = Roster(':memory:')