diff --git a/repoapi/migrations/0004_auto_20150723_0646.py b/repoapi/migrations/0004_auto_20150723_0646.py new file mode 100644 index 0000000..ca8d300 --- /dev/null +++ b/repoapi/migrations/0004_auto_20150723_0646.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('repoapi', '0003_gerritrepoinfo'), + ] + + operations = [ + migrations.AddField( + model_name='gerritrepoinfo', + name='gerrit_change', + field=models.CharField(default='fake', max_length=50), + preserve_default=False, + ), + migrations.AlterField( + model_name='gerritrepoinfo', + name='param_ppa', + field=models.CharField(max_length=50), + ), + migrations.AlterUniqueTogether( + name='gerritrepoinfo', + unique_together=set([('param_ppa', 'gerrit_change')]), + ), + migrations.RemoveField( + model_name='gerritrepoinfo', + name='count', + ), + ] diff --git a/repoapi/models.py b/repoapi/models.py index 021c9fd..92c90de 100644 --- a/repoapi/models.py +++ b/repoapi/models.py @@ -91,35 +91,36 @@ class JenkinsBuildInfo(models.Model): class GerritRepoInfo(models.Model): - param_ppa = models.CharField(max_length=50, unique=True, null=False) - count = models.IntegerField(default=1) + param_ppa = models.CharField(max_length=50, null=False) + gerrit_change = models.CharField(max_length=50, null=False) + + class Meta: + unique_together = ["param_ppa", "gerrit_change"] + + def __str__(self): + return "%s:%s" % (self.param_ppa, self.gerrit_change) def gerrit_repo_add(instance): gri = GerritRepoInfo.objects - ppa, created = gri.get_or_create(param_ppa=instance.param_ppa) - if not created: - ppa.count = ppa.count + 1 - ppa.save() - logging.info("+1") - else: - logging.info("created") + ppa, created = gri.get_or_create( + param_ppa=instance.param_ppa, + gerrit_change=instance.gerrit_change) + if created: + logging.info("%s created" % ppa) def gerrit_repo_del(instance): gri = GerritRepoInfo.objects try: - ppa = gri.get(param_ppa=instance.param_ppa) - ppa.count = ppa.count - 1 - if ppa.count > 0: - ppa.save() - logger.info("-1") - else: - ppa.delete() - logger.info("removed") - utils.jenkins_remove_ppa(instance.param_ppa) + ppa = gri.get(param_ppa=instance.param_ppa, + gerrit_change=instance.gerrit_change) + ppa.delete() + logger.info("removed %s" % ppa) except GerritRepoInfo.DoesNotExist: pass + if gri.filter(param_ppa=instance.param_ppa).count() == 0: + utils.jenkins_remove_ppa(instance.param_ppa) def gerrit_repo_manage(sender, **kwargs): diff --git a/repoapi/test/test_gerritinfo.py b/repoapi/test/test_gerritinfo.py index 7a0cb44..0e3f75e 100644 --- a/repoapi/test/test_gerritinfo.py +++ b/repoapi/test/test_gerritinfo.py @@ -15,14 +15,14 @@ from django.test import TestCase from repoapi.models import JenkinsBuildInfo, GerritRepoInfo -from mock import patch, Mock +from mock import patch class GerritRepoInfoTestCase(TestCase): - @patch('urllib2.urlopen', autospec=True) - def test_creation(self, Mockclass): - jbi = JenkinsBuildInfo.objects.create( + @patch('repoapi.utils.jenkins_remove_ppa') + def test_creation(self, utils): + JenkinsBuildInfo.objects.create( tag="edc90cd9-37f3-4613-9748-ed05a32031c2", projectname="kamailio", jobname="kamailio-repos", @@ -38,12 +38,14 @@ class GerritRepoInfoTestCase(TestCase): param_distribution="wheezy", param_ppa="gerrit_MT10339_review2054") - gri = GerritRepoInfo.objects.get(param_ppa="gerrit_MT10339_review2054") - self.assertEquals(gri.count, 1) + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 1) + utils.assert_not_called() @patch('repoapi.utils.jenkins_remove_ppa') def test_creation_deletion(self, utils): - jbi = JenkinsBuildInfo.objects.create( + JenkinsBuildInfo.objects.create( tag="edc90cd9-37f3-4613-9748-ed05a32031c2", projectname="kamailio", jobname="kamailio-repos", @@ -59,11 +61,12 @@ class GerritRepoInfoTestCase(TestCase): param_distribution="wheezy", param_ppa="gerrit_MT10339_review2054") - gri = GerritRepoInfo.objects.get( + gri = GerritRepoInfo.objects.filter( param_ppa="gerrit_MT10339_review2054") - self.assertEquals(gri.count, 1) + self.assertEquals(gri.count(), 1) + utils.assert_not_called() - jbi = JenkinsBuildInfo.objects.create( + JenkinsBuildInfo.objects.create( tag="edc90cd9-37f3-4613-9748-ed05a32031c2", projectname="kamailio", jobname="kamailio-repos", @@ -84,9 +87,9 @@ class GerritRepoInfoTestCase(TestCase): self.assertEquals(gri.count(), 0) utils.assert_called_with("gerrit_MT10339_review2054") - @patch('urllib2.urlopen', autospec=True) - def test_no_creation(self, Mockclass): - jbi = JenkinsBuildInfo.objects.create( + @patch('repoapi.utils.jenkins_remove_ppa') + def test_no_creation(self, utils): + JenkinsBuildInfo.objects.create( tag="edc90cd9-37f3-4613-9748-ed05a32031c2", projectname="kamailio", jobname="kamailio-get-code", @@ -105,3 +108,243 @@ class GerritRepoInfoTestCase(TestCase): gri = GerritRepoInfo.objects.filter( param_ppa="gerrit_MT10339_review2054") self.assertEquals(gri.count(), 0) + utils.assert_not_called() + + @patch('repoapi.utils.jenkins_remove_ppa') + def test_creation_review(self, utils): + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="kamailio", + jobname="kamailio-repos", + buildnumber=897, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/", + gerrit_patchset="1", + gerrit_change="2054", + gerrit_eventtype="patchset-created", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 1) + utils.assert_not_called() + + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="kamailio", + jobname="kamailio-repos", + buildnumber=898, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/", + gerrit_patchset="1", + gerrit_change="2054", + gerrit_eventtype="patchset-created", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 1) + utils.assert_not_called() + + @patch('repoapi.utils.jenkins_remove_ppa') + def test_creation_multi_review(self, utils): + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="kamailio", + jobname="kamailio-repos", + buildnumber=897, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/", + gerrit_patchset="1", + gerrit_change="2054", + gerrit_eventtype="patchset-created", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 1) + utils.assert_not_called() + + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="fake", + jobname="fake-repos", + buildnumber=8, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/", + gerrit_patchset="1", + gerrit_change="2", + gerrit_eventtype="patchset-created", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 2) + utils.assert_not_called() + + @patch('repoapi.utils.jenkins_remove_ppa') + def test_creation_multi_review_no_del(self, utils): + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="kamailio", + jobname="kamailio-repos", + buildnumber=897, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/", + gerrit_patchset="1", + gerrit_change="2054", + gerrit_eventtype="patchset-created", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 1) + utils.assert_not_called() + + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="fake", + jobname="fake-repos", + buildnumber=8, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/", + gerrit_patchset="1", + gerrit_change="2", + gerrit_eventtype="patchset-created", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 2) + utils.assert_not_called() + + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="kamailio", + jobname="kamailio-repos", + buildnumber=898, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/", + gerrit_patchset="2", + gerrit_change="2054", + gerrit_eventtype="change-merged", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 1) + utils.assert_not_called() + + @patch('repoapi.utils.jenkins_remove_ppa') + def test_creation_multi_review_del(self, utils): + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="kamailio", + jobname="kamailio-repos", + buildnumber=897, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/", + gerrit_patchset="1", + gerrit_change="2054", + gerrit_eventtype="patchset-created", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 1) + utils.assert_not_called() + + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="fake", + jobname="fake-repos", + buildnumber=8, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/", + gerrit_patchset="1", + gerrit_change="2", + gerrit_eventtype="patchset-created", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 2) + utils.assert_not_called() + + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="kamailio", + jobname="kamailio-repos", + buildnumber=898, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/kamailio-repos/", + gerrit_patchset="2", + gerrit_change="2054", + gerrit_eventtype="change-merged", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 1) + utils.assert_not_called() + + JenkinsBuildInfo.objects.create( + tag="edc90cd9-37f3-4613-9748-ed05a32031c2", + projectname="fake", + jobname="fake-repos", + buildnumber=9, + result="SUCCESS", + job_url="https://jenkins.mgm.sipwise.com/job/fake-repos/", + gerrit_patchset="2", + gerrit_change="2", + gerrit_eventtype="change-merged", + param_tag="none", + param_branch="master", + param_release="none", + param_distribution="wheezy", + param_ppa="gerrit_MT10339_review2054") + + gri = GerritRepoInfo.objects.filter( + param_ppa="gerrit_MT10339_review2054") + self.assertEquals(gri.count(), 0) + utils.assert_called_with("gerrit_MT10339_review2054")