# Copyright (C) 2017 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 . from unittest.mock import call from unittest.mock import patch from django.test import override_settings from django.test import TestCase from build.models import BuildRelease from repoapi.models import JenkinsBuildInfo @override_settings(DEBUG=True, JBI_ALLOWED_HOSTS=["fake.local"]) @patch("repoapi.utils.dlfile") @patch("build.tasks.trigger_build") class JBIManageTest(TestCase): fixtures = [ "test_models", ] release = "release-mr8.1" release_uuid = "dbe569f7-eab6-4532-a6d1-d31fb559648b" def test_jbi_manage_ok_release_job(self, tb, dl): br = BuildRelease.objects.get(uuid=self.release_uuid) self.assertEqual(br.pool_size, 0) 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", ) params = { "project": "data-hal-get-code", "release_uuid": br.uuid, "trigger_release": br.release, "trigger_branch_or_tag": br.branch_or_tag, "trigger_distribution": br.distribution, } tb.assert_called_once_with(**params) br = BuildRelease.objects.get(uuid=self.release_uuid) self.assertEqual(br.pool_size, 1) self.assertEqual(br.triggered_projects, "data-hal") @override_settings(BUILD_POOL=2) def test_jbi_manage_pool(self, tb, dl): br = BuildRelease.objects.get(uuid=self.release_uuid) self.assertEqual(br.pool_size, 0) 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="mr8.1", param_release_uuid=self.release_uuid, buildnumber=1, result="SUCCESS", ) br = BuildRelease.objects.get(id=br.pk) self.assertEqual(br.built_projects, "release-copy-debs-yml") params = { "project": "data-hal-get-code", "release_uuid": br.uuid, "trigger_release": br.release, "trigger_branch_or_tag": br.branch_or_tag, "trigger_distribution": br.distribution, } calls = [call(**params)] params["project"] = "libinewrate-get-code" calls.append(call(**params)) tb.assert_has_calls(calls) br = BuildRelease.objects.get(pk=br.pk) self.assertEqual(br.pool_size, 2) self.assertEqual(br.triggered_projects, "data-hal,libinewrate") @override_settings(BUILD_POOL=2) def test_jbi_manage_pool_building(self, tb, dl): self.test_jbi_manage_pool() br = BuildRelease.objects.get(uuid=self.release_uuid) self.assertEqual(br.pool_size, 2) JenkinsBuildInfo.objects.create( job_url="http://fake.local/job/data-hal-binaries/", projectname="data-hal", jobname="data-hal-binaries", tag="UUIDA", param_release=self.release, param_release_uuid=self.release_uuid, buildnumber=1, result="SUCCESS", ) br = BuildRelease.objects.get(id=br.pk) self.assertEqual(br.pool_size, 2) self.assertEqual(br.triggered_projects, "data-hal,libinewrate") JenkinsBuildInfo.objects.create( job_url="http://fake.local/job/libinewrate-binaries/", projectname="libinewrate", jobname="libinewrate-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.assertEqual(br.pool_size, 2) self.assertEqual(br.triggered_projects, "data-hal,libinewrate") @override_settings(BUILD_POOL=2) def test_jbi_manage_pool_next(self, tb, dl): self.test_jbi_manage_pool() br = BuildRelease.objects.get(uuid=self.release_uuid) self.assertEqual(br.pool_size, 2) JenkinsBuildInfo.objects.create( job_url="http://fake.local/job/data-hal-repos/", projectname="data-hal", jobname="data-hal-repos", 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,data-hal") params = { "project": "libswrate-get-code", "release_uuid": br.uuid, "trigger_release": br.release, "trigger_branch_or_tag": br.branch_or_tag, "trigger_distribution": br.distribution, } tb.assert_called_once_with(**params) self.assertEqual(br.pool_size, 2) self.assertEqual(br.triggered_projects, "libinewrate,libswrate")