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:')