mirror of https://github.com/sipwise/repoapi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
442 lines
16 KiB
442 lines
16 KiB
# Copyright (C) 2017-2020 The Sipwise Team - http://sipwise.com
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify it
|
|
# under the terms of the GNU General Public License as published by the Free
|
|
# Software Foundation, either version 3 of the License, or (at your option)
|
|
# any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
# more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
from unittest.mock import MagicMock
|
|
from unittest.mock import patch
|
|
|
|
from django.test import override_settings
|
|
|
|
from build.models import BuildRelease
|
|
from repoapi.models import JenkinsBuildInfo
|
|
from repoapi.test.base import BaseTest
|
|
|
|
|
|
@override_settings(JBI_ALLOWED_HOSTS=["fake.local"])
|
|
@patch("repoapi.utils.dlfile")
|
|
class BuildReleaseManagerTestCase(BaseTest):
|
|
fixtures = ["test_models", "test_models_jbi"]
|
|
release = "release-mr8.1"
|
|
release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559649b"
|
|
|
|
def test_create_trunk(self, dlf):
|
|
br = BuildRelease.objects.create_build_release("AAA", "trunk")
|
|
self.assertEqual(br.release, "trunk")
|
|
self.assertEqual(br.distribution, "buster")
|
|
self.assertIsNone(br.tag)
|
|
self.assertEqual(br.branch, "master")
|
|
self.assertNotEqual(len(br.projects), 0)
|
|
self.assertIn("sipwise-base", br.projects)
|
|
|
|
def test_release_jobs(self, dlf):
|
|
jobs = BuildRelease.objects.release_jobs(self.release_uuid)
|
|
self.assertListEqual(list(jobs.all()), ["release-copy-debs-yml"])
|
|
|
|
def test_release_jobs_uuids(self, dlf):
|
|
uuids = BuildRelease.objects.release_jobs_uuids(
|
|
self.release_uuid, "release-copy-debs-yml"
|
|
)
|
|
self.assertListEqual(
|
|
list(uuids.values("tag")),
|
|
[
|
|
{"tag": "3cc6063e-6627-48b6-9dff-92e693547f62"},
|
|
{"tag": "3cc6063e-6627-48b6-9dff-92e693547f59"},
|
|
],
|
|
)
|
|
|
|
def test_releases_with_builds(self, dlf):
|
|
self.assertListEqual(
|
|
list(BuildRelease.objects.releases_with_builds()), ["mr8.1"]
|
|
)
|
|
|
|
def test_last_update(self, dlf):
|
|
br = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
job = JenkinsBuildInfo.objects.get(id=4)
|
|
self.assertEqual(br.last_update, job.date)
|
|
|
|
|
|
class BuildReleaseTestCase(BaseTest):
|
|
fixtures = [
|
|
"test_models",
|
|
]
|
|
release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559649b"
|
|
|
|
def test_distribution(self):
|
|
build = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
self.assertEqual(build.distribution, "buster")
|
|
|
|
def test_projects_list(self):
|
|
build = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
self.assertCountEqual(
|
|
build.projects_list,
|
|
["kamailio", "lua-ngcp-kamailio", "ngcp-panel"],
|
|
)
|
|
|
|
def test_built_projects_list(self):
|
|
build = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
self.assertCountEqual(
|
|
build.built_projects_list, ["kamailio", "lua-ngcp-kamailio"],
|
|
)
|
|
|
|
def test_queued_projects_list(self):
|
|
build = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
self.assertCountEqual(
|
|
build.queued_projects_list, ["ngcp-panel"],
|
|
)
|
|
|
|
def test_config(self):
|
|
build = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
config = build.config
|
|
self.assertIsNotNone(config)
|
|
self.assertIs(config, build.config)
|
|
|
|
def test_branch_or_tag_trunk(self):
|
|
build = BuildRelease.objects.create_build_release("AAA", "trunk")
|
|
self.assertEqual(build.branch_or_tag, "branch/master")
|
|
|
|
def test_branch_or_tag_mrXX(self):
|
|
build = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
self.assertEqual(build.branch_or_tag, "branch/mr8.1")
|
|
|
|
def test_branch_or_tag_mrXXX(self):
|
|
build = BuildRelease.objects.create_build_release("AAA", "mr7.5.2")
|
|
self.assertEqual(build.branch_or_tag, "tag/mr7.5.2.1")
|
|
|
|
def test_build_deps(self):
|
|
build_deps = [
|
|
[
|
|
"data-hal",
|
|
"libinewrate",
|
|
"libswrate",
|
|
"libtcap",
|
|
"sipwise-base",
|
|
"check-tools",
|
|
],
|
|
["ngcp-schema"],
|
|
]
|
|
build = BuildRelease.objects.create_build_release("AAA", "trunk")
|
|
self.assertListEqual(build.build_deps, build_deps)
|
|
|
|
|
|
class BuildReleaseStepsTest(BaseTest):
|
|
fixtures = [
|
|
"test_models",
|
|
]
|
|
release = "release-mr8.1"
|
|
release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559648b"
|
|
|
|
def setUp(self):
|
|
self.br = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
self.br.pool_size = 1
|
|
self.jbi = MagicMock()
|
|
self.jbi.result = "SUCCESS"
|
|
|
|
def test_done_empty(self):
|
|
self.assertIsNone(self.br.built_projects)
|
|
self.assertFalse(self.br.done)
|
|
|
|
def test_append_built_fist(self):
|
|
self.br.built_projects = "release-copy-debs-yml"
|
|
self.jbi.projectname = "data-hal"
|
|
self.jbi.jobname = "data-hal-repos"
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertEqual(
|
|
self.br.built_projects, "release-copy-debs-yml,data-hal"
|
|
)
|
|
self.assertEqual(self.br.pool_size, 0)
|
|
self.assertFalse(self.br.done)
|
|
|
|
def test_append_built_empty(self):
|
|
self.jbi.projectname = "data-hal"
|
|
self.jbi.jobname = "data-hal-repos"
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.built_projects, "data-hal")
|
|
self.assertEqual(self.br.pool_size, 0)
|
|
self.assertFalse(self.br.done)
|
|
|
|
def test_append_built(self):
|
|
self.br.built_projects = "data-hal"
|
|
self.jbi.projectname = "libinewrate"
|
|
self.jbi.jobname = "libinewrate-repos"
|
|
self.br.pool_size = 2
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.built_projects, "data-hal,libinewrate")
|
|
self.assertEqual(self.br.pool_size, 1)
|
|
self.assertFalse(self.br.done)
|
|
|
|
def test_append_built_dup(self):
|
|
self.br.built_projects = "data-hal"
|
|
self.jbi.projectname = "data-hal"
|
|
self.jbi.jobname = "data-hal-repos"
|
|
self.assertFalse(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.built_projects, "data-hal")
|
|
self.assertEqual(self.br.pool_size, 1)
|
|
|
|
def test_append_built_release_job(self):
|
|
self.jbi.projectname = "release-copy-debs-yml"
|
|
self.jbi.jobname = "release-copy-debs-yml"
|
|
self.br.pool_size = 0
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.built_projects, self.jbi.jobname)
|
|
self.assertEqual(self.br.pool_size, 0)
|
|
|
|
def test_append_built_fail_empty(self):
|
|
self.jbi.projectname = "data-hal"
|
|
self.jbi.jobname = "data-hal-repos"
|
|
self.jbi.result = "FAILURE"
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertIsNone(self.br.built_projects)
|
|
self.assertEqual(self.br.failed_projects, "data-hal")
|
|
self.assertEqual(self.br.pool_size, 0)
|
|
self.assertFalse(self.br.done)
|
|
|
|
def test_append_built_fail(self):
|
|
self.br.built_projects = "data-hal"
|
|
self.jbi.projectname = "libinewrate"
|
|
self.jbi.jobname = "libinewrate-repos"
|
|
self.jbi.result = "FAILURE"
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.built_projects, "data-hal")
|
|
self.assertEqual(self.br.failed_projects, "libinewrate")
|
|
self.assertEqual(self.br.pool_size, 0)
|
|
|
|
def test_append_built_fail_dup(self):
|
|
self.br.built_projects = "data-hal"
|
|
self.br.failed_projects = "libinewrate"
|
|
self.jbi.projectname = "libinewrate"
|
|
self.jbi.jobname = "libinewrate-repos"
|
|
self.jbi.result = "FAILURE"
|
|
self.assertFalse(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.built_projects, "data-hal")
|
|
self.assertEqual(self.br.failed_projects, "libinewrate")
|
|
self.assertEqual(self.br.pool_size, 1)
|
|
|
|
def test_append_built_fail_piuparts(self):
|
|
self.br.built_projects = "data-hal,libinewrate"
|
|
self.jbi.projectname = "libinewrate"
|
|
self.jbi.jobname = "libinewrate-piuparts"
|
|
self.jbi.result = "FAILURE"
|
|
self.assertFalse(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.built_projects, "data-hal,libinewrate")
|
|
self.assertIsNone(self.br.failed_projects)
|
|
self.assertEqual(self.br.pool_size, 1)
|
|
|
|
def test_append_built_release_job_fail(self):
|
|
self.jbi.projectname = "release-copy-debs-yml"
|
|
self.jbi.jobname = "release-copy-debs-yml"
|
|
self.jbi.result = "FAILURE"
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertIsNone(self.br.built_projects)
|
|
self.assertEqual(self.br.failed_projects, "release-copy-debs-yml")
|
|
self.assertEqual(self.br.pool_size, 0)
|
|
|
|
def test_next_empty_fail(self):
|
|
self.br.failed_projects = "release-copy-debs-yml"
|
|
self.assertIsNone(self.br.next)
|
|
|
|
def test_next_empty(self):
|
|
self.assertEqual(self.br.next, "data-hal")
|
|
|
|
def test_next_build_deps(self):
|
|
build_deps = [
|
|
[
|
|
"data-hal",
|
|
"libinewrate",
|
|
"libswrate",
|
|
"libtcap",
|
|
"sipwise-base",
|
|
"check-tools",
|
|
],
|
|
["ngcp-schema"],
|
|
]
|
|
self.assertEqual(len(self.br.config.build_deps.keys()), 7)
|
|
i = 1
|
|
for prj in build_deps[0]:
|
|
self.jbi.projectname = prj
|
|
self.jbi.jobname = "{}-repos".format(prj)
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
_next = self.br.next
|
|
try:
|
|
self.assertEqual(_next, build_deps[0][i])
|
|
i += 1
|
|
except IndexError:
|
|
self.assertEqual(_next, "ngcp-schema")
|
|
self.jbi.projectname = "ngcp-schema"
|
|
self.jbi.jobname = "ngcp-schema-repos"
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.next, "asterisk-voicemail")
|
|
self.assertFalse(self.br.done)
|
|
|
|
def test_next_build_deps_stop(self):
|
|
build_deps = [
|
|
"data-hal",
|
|
"libinewrate",
|
|
"libswrate",
|
|
"libtcap",
|
|
"sipwise-base",
|
|
"check-tools",
|
|
]
|
|
i = 1
|
|
self.jbi.projectname = "release-copy-debs-yml"
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
for prj in build_deps:
|
|
self.jbi.projectname = prj
|
|
self.assertTrue(self.br.append_triggered(prj))
|
|
_next = self.br.next
|
|
try:
|
|
self.assertEqual(_next, build_deps[i])
|
|
i += 1
|
|
except IndexError:
|
|
self.assertIsNone(_next)
|
|
self.assertFalse(self.br.done)
|
|
|
|
def test_next_last(self):
|
|
pl = self.br.projects_list[:-1]
|
|
pl.insert(0, "release-copy-debs-yml")
|
|
self.br.built_projects = ",".join(pl)
|
|
self.assertTrue(
|
|
self.br.built_projects.startswith("release-copy-debs-yml,")
|
|
)
|
|
last_projectname = self.br.projects_list[-2]
|
|
self.assertTrue(
|
|
self.br.built_projects.endswith(",{}".format(last_projectname))
|
|
)
|
|
self.jbi.projectname = self.br.projects_list[-1]
|
|
self.jbi.jobname = "{}-repos".format(self.jbi.projectname)
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertIsNone(self.br.next)
|
|
self.assertTrue(self.br.done)
|
|
|
|
def test_next_stop(self):
|
|
self.br.built_projects = "release-copy-debs-yml,{}".format(
|
|
self.br.projects
|
|
)
|
|
self.assertIsNone(self.br.next)
|
|
|
|
|
|
@override_settings(JBI_ALLOWED_HOSTS=["fake.local"])
|
|
@patch("repoapi.utils.dlfile")
|
|
@patch("build.models.build_resume")
|
|
class JBIManageTest(BaseTest):
|
|
fixtures = [
|
|
"test_models",
|
|
]
|
|
release = "release-mr8.1"
|
|
release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559648b"
|
|
|
|
def test_jbi_manage_ko(self, build_resume, dl):
|
|
JenkinsBuildInfo.objects.create(
|
|
job_url="http://fake.local/job/release-copy-debs-yml/",
|
|
projectname="release-copy-debs-yml",
|
|
jobname="release-copy-debs-yml",
|
|
param_tag="UUIDA",
|
|
param_release="mr8.2",
|
|
param_release_uuid="UUID_mr8.2",
|
|
buildnumber=1,
|
|
result="SUCCESS",
|
|
)
|
|
build_resume.delay.assert_not_called()
|
|
|
|
def test_jbi_manage_ko_url(self, build_resume, dl):
|
|
JenkinsBuildInfo.objects.create(
|
|
job_url="http://other.local/job/release-copy-debs-yml/",
|
|
projectname="release-copy-debs-yml",
|
|
jobname="release-copy-debs-yml",
|
|
param_tag="UUIDA",
|
|
param_release=self.release,
|
|
param_release_uuid=self.release_uuid,
|
|
buildnumber=1,
|
|
result="SUCCESS",
|
|
)
|
|
build_resume.delay.assert_not_called()
|
|
|
|
def test_jbi_manage_ok_release_job(self, build_resume, dl):
|
|
br = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
self.assertEqual(br.pool_size, 0)
|
|
job = JenkinsBuildInfo.objects.create(
|
|
job_url="http://fake.local/job/release-copy-debs-yml/",
|
|
projectname="release-copy-debs-yml",
|
|
jobname="release-copy-debs-yml",
|
|
tag="UUIDA",
|
|
param_release=self.release,
|
|
param_release_uuid=self.release_uuid,
|
|
buildnumber=1,
|
|
result="SUCCESS",
|
|
)
|
|
br = BuildRelease.objects.get(pk=br.pk)
|
|
self.assertEqual(br.built_projects, "release-copy-debs-yml")
|
|
build_resume.delay.assert_called_once_with(br.pk)
|
|
self.assertEqual(br.last_update, job.date)
|
|
|
|
def test_jbi_manage_skip(self, build_resume, dl):
|
|
br = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
br.pool_size = 1
|
|
br.triggered_projects = "kamailio"
|
|
br.save()
|
|
JenkinsBuildInfo.objects.create(
|
|
job_url="http://fake.local/job/kamailio-binaries/",
|
|
projectname="kamailio",
|
|
jobname="kamailio-binaries",
|
|
tag="UUIDA",
|
|
param_release=self.release,
|
|
param_release_uuid=self.release_uuid,
|
|
buildnumber=1,
|
|
result="SUCCESS",
|
|
)
|
|
br = BuildRelease.objects.get(pk=br.pk)
|
|
self.assertIsNone(br.built_projects)
|
|
build_resume.delay.assert_not_called()
|
|
self.assertEqual(br.pool_size, 1)
|
|
self.assertEqual(br.triggered_projects, "kamailio")
|
|
|
|
|
|
class BRManageTest(BaseTest):
|
|
@patch("build.tasks.trigger_copy_deps")
|
|
@patch("build.models.build_resume")
|
|
def test_br_manage(self, build_resume, trigger_copy_deps):
|
|
br = BuildRelease.objects.create_build_release("UUID_mr8.1", "mr8.1")
|
|
build_resume.delay.assert_not_called()
|
|
trigger_copy_deps.assert_called_once_with(
|
|
internal=True, release=br.release, release_uuid=br.uuid
|
|
)
|
|
|
|
|
|
class BuildReleaseRetriggerTest(BaseTest):
|
|
fixtures = [
|
|
"test_models",
|
|
]
|
|
release = "release-mr8.1"
|
|
release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559648b"
|
|
|
|
def setUp(self):
|
|
self.br = BuildRelease.objects.get(uuid=self.release_uuid)
|
|
self.jbi = MagicMock()
|
|
self.jbi.result = "SUCCESS"
|
|
|
|
def test_append_built_empty(self):
|
|
self.br.failed_projects = "data-hal"
|
|
self.jbi.projectname = "data-hal"
|
|
self.jbi.jobname = "data-hal-repos"
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.built_projects, "data-hal")
|
|
self.assertIsNone(self.br.failed_projects)
|
|
|
|
def test_append_built(self):
|
|
self.br.built_projects = "data-hal"
|
|
self.br.failed_projects = "libinewrate"
|
|
self.jbi.projectname = "libinewrate"
|
|
self.jbi.jobname = "libinewrate-repos"
|
|
self.assertTrue(self.br.append_built(self.jbi))
|
|
self.assertEqual(self.br.built_projects, "data-hal,libinewrate")
|
|
self.assertIsNone(self.br.failed_projects)
|