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.

174 lines
5.7 KiB

# Copyright (C) 2015-2022 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 mock_open
from unittest.mock import patch
from django.test import override_settings
from .base import BaseTest
from repoapi.conf import settings
from repoapi.models import JenkinsBuildInfo
FIXTURES_PATH = settings.BASE_DIR.joinpath("repoapi", "fixtures", "jbi_files")
JBI_HOST = "https://%s/job/fake-gerrit/"
ARTIFACTS_JSON = """{
"artifacts": [
{
"displayPath": "builddeps.list",
"fileName": "builddeps.list",
"relativePath": "builddeps.list"
}
]
}"""
class JenkinsBuildInfoTestCase(BaseTest):
def test_creation_no_tag(self):
jbi = JenkinsBuildInfo.objects.create(
projectname="fake",
jobname="fake-get-code",
buildnumber=1,
result="OK",
)
self.assertIsNone(jbi.tag)
def test_empty_tag_with_release(self):
jbi = JenkinsBuildInfo.objects.create(
projectname="fake",
jobname="fake-get-code",
buildnumber=1,
result="OK",
param_release="release-mr4.0",
)
self.assertIsNone(jbi.tag)
@override_settings(JBI_ALLOWED_HOSTS=["jenkins-dev.local"])
def test_job_url_not_allowed(self):
job = JenkinsBuildInfo.objects.create(
projectname="fake",
jobname="fake-get-code",
buildnumber=1,
result="OK",
param_release="release-mr4.0",
)
self.assertFalse(job.is_job_url_allowed())
job.job_url = JBI_HOST % "jenkins.mgm.sipwise.com"
self.assertFalse(job.is_job_url_allowed())
@override_settings(JBI_ALLOWED_HOSTS=[])
def test_job_url_not_allowed_empty(self):
job = JenkinsBuildInfo.objects.create(
projectname="fake",
jobname="fake-get-code",
buildnumber=1,
result="OK",
param_release="release-mr4.0",
)
self.assertFalse(job.is_job_url_allowed())
job.job_url = JBI_HOST % "jenkins.mgm.sipwise.com"
self.assertFalse(job.is_job_url_allowed())
job.job_url = None
self.assertFalse(job.is_job_url_allowed())
@override_settings(
JBI_ALLOWED_HOSTS=["jenkins-dev.local", "jenkins.local"]
)
def test_job_url_allowed(self):
job = JenkinsBuildInfo.objects.create(
projectname="fake",
jobname="fake-get-code",
buildnumber=1,
result="OK",
param_release="release-mr4.0",
)
job.job_url = JBI_HOST % "jenkins-dev.local"
self.assertTrue(job.is_job_url_allowed())
job.job_url = JBI_HOST % "jenkins.local"
self.assertTrue(job.is_job_url_allowed())
def test_creation_no_ppa(self):
jbi = JenkinsBuildInfo.objects.create(
projectname="fake",
jobname="fake-get-code",
buildnumber=1,
result="OK",
)
self.assertIsNone(jbi.param_ppa)
self.assertFalse(jbi.has_ppa)
class JenkinsBuildInfoProperties(BaseTest):
fixtures = ["test_model_queries"]
def setUp(self):
self.jbi = JenkinsBuildInfo.objects.get(id=1)
def test_build_path(self):
self.assertRegex(str(self.jbi.build_path), "^.+/fake-source/1$")
@patch("builtins.open", mock_open(read_data="{}"))
def test_build_info(self):
self.assertEqual(self.jbi.build_info, {})
def test_build_info_ko(self):
self.assertIsNone(self.jbi.build_info)
@patch("builtins.open", mock_open(read_data=ARTIFACTS_JSON))
def test_artifacts(self):
self.assertEqual(self.jbi.artifacts, ["builddeps.list"])
def test_artifacts_ko(self):
self.assertEqual(self.jbi.artifacts, [])
@override_settings(JBI_BASEDIR=FIXTURES_PATH)
class JenkinsBuildInfoSourceProp(BaseTest):
fixtures = ["test_model_queries"]
def setUp(self):
self.jbi = JenkinsBuildInfo.objects.get(id=1)
def tearDown(self, *args, **kwargs):
pass # don't remove FIXTURES_PATH
def test_source_ko(self):
self.assertIsNone(self.jbi.source)
def test_source(self):
params = {
"gerrit_patchset": "44323",
"gerrit_change": "44323",
"gerrit_eventtype": "patchset-created",
"tag": "de13c0b6-2e70-4c9d-b3a5-3a476149d2d1",
"projectname": "lua-ngcp-kamailio",
"git_commit_msg": "TT#95650 mocks/pv: ",
"job_url": "https://fake/job/lua-ngcp-kamailio-repos/",
"buildnumber": 605,
"jobname": "lua-ngcp-kamailio-repos",
"result": "SUCCESS",
"param_tag": "none",
"param_branch": "master",
"param_release": "none",
"param_release_uuid": "",
"param_distribution": "buster",
"param_ppa": "gerrit_vseva_95650",
}
jbi = JenkinsBuildInfo.objects.create(**params)
self.assertEqual(jbi.source, "lua-ngcp-kamailio")
def test_source_already_there(self):
self.jbi._source = "fake"
self.assertEqual(self.jbi.source, "fake")