Пример #1
0
 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())
Пример #2
0
 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())