def test_multiple_schedulers(self): p = self.project self.assertFalse(p.has_scheduler) b = Builder(project = p, name="test builder") b.save() # create cron scheduler cr = CronScheduler(project=p, name="cron") cr.save() self.assertEqual(1, p.scheduler_set.count()) self.assertEqual(unicode(cr), "cron") self.assertFalse(p.has_scheduler) # scheduler has no assigned builder cr.builders.add(b) self.assertTrue(p.has_scheduler) # create change scheduler ch = ChangeScheduler(project=p, name="change") ch.save() self.assertEqual(2, p.scheduler_set.count()) self.assertEqual(unicode(ch), "change") # check that they can be downcasted properly expect = [_("cron scheduler"), _("change scheduler")] for i,s in enumerate(p.scheduler_set.all()): # calling method on parent class should raise exception self.assertRaises(NotImplementedError, s.get_config_type) self.assertRaises(NotImplementedError, s.get_config_class) self.assertRaises(NotImplementedError, s.get_config_args) # should work with .cast() self.assertEqual(expect[i], s.cast().get_config_type())
def test_name_uniqueness(self): """ Ensure that a project cannot have multiple notifiers with the same name """ p = self.project cr = CronScheduler(project=p, name="cron1") cr.save() ch = ChangeScheduler(project=p, name="cron1") self.assertRaises(IntegrityError, ch.save) self.assertEqual(ch.id, None) # the same name can be used in a different project p2 = Project(name="another p", owner=self.user) p2.save() ch.project = p2 ch.save() self.assertNotEqual(ch.id, None)
def test_simple_creation(self): """ Basic Change based scheduler """ sched = ChangeScheduler(project = self.project, name = "change") sched.save() self.assertNotEqual(sched.id, None) self.assertEqual(unicode(sched), "change") self.assertEqual(sched.cast().get_config_type(), _("change scheduler")) # add builders builders = ["builder1", "builder2", "builder3"] for bname in builders: b = Builder(project=self.project, name=bname) b.save() sched.builders.add(b) self.assertEqual(sched.builders.count(), len(builders)) args = sched.cast().get_config_args() # check default arguments self.assertEqual(args.get("name", None), "change") self.assertEqual(args.get("treeStableTimer", None), settings.DEFAULT_TREE_STABLE_TIMER * 60) # check builderName bn = args.get("builderNames", []) self.assertEqual(len(bn), len(builders)) for i,b in enumerate(builders): self.assertEqual(bn[i], b) # try instantiating buildbot config object self.assert_valid_buildbot_config(sched.cast().get_config_class(), args) # check filter class self.assertEqual(sched.cast().get_filter_class(), None) self.assertEqual(sched.cast().get_filter_args(), None) # Check that the resulting config string is sensible self.assert_config_string_executable(sched.cast()) self.assertEqual(None, sched.get_filter_str())
def test_with_repos_filter(self): """ Change scheduler which affects only a specific repository """ sched = ChangeScheduler(project = self.project, name = "change") sched.save() self.assertNotEqual(sched.id, None) repo = GitRepository(project = self.project, name = "gitrepo", url = "http://some.git.repo/project.git", ) repo.save() self.assertNotEqual(repo.id, None) sched.limit_to_repository.add(repo) repo2 = SVNRepository(project = self.project, name = "svnrepo", url = "http://some.host/svn/project", ) repo2.save() self.assertNotEqual(repo2.id, None) sched.limit_to_repository.add(repo2) # check filter class self.assertNotEqual(sched.cast().get_filter_class(), None) self.assertNotEqual(sched.cast().get_filter_args(), None) args = sched.cast().get_filter_args() repolist = args.get("repository", []) self.assertEqual(len(repolist), 2) self.assertEqual(repolist[0], "http://some.git.repo/project.git") self.assertEqual(repolist[1], "http://some.host/svn/project") # try instantiating buildbot config object self.assert_valid_buildbot_config(sched.cast().get_filter_class(), args) # Check that the resulting config string is sensible self.assert_config_string_executable(sched.cast())