diff --git a/repoapi/tasks.py b/repoapi/tasks.py index d57e400..6e3813d 100644 --- a/repoapi/tasks.py +++ b/repoapi/tasks.py @@ -19,6 +19,7 @@ import logging from celery import shared_task from django.conf import settings from .utils import jenkins_get_console, jenkins_get_job, jenkins_get_artifact +from .utils import jenkins_get_env logger = logging.getLogger(__name__) @@ -31,6 +32,7 @@ def jbi_get_artifact(jobname, buildnumber, artifact_info): @shared_task(ignore_result=True) def get_jbi_files(jobname, buildnumber): jenkins_get_console(jobname, buildnumber) + jenkins_get_env(jobname, buildnumber) path = jenkins_get_job(jobname, buildnumber) if jobname in settings.JBI_ARTIFACT_JOBS: with open(path) as data_file: diff --git a/repoapi/test/test_jbi_info.py b/repoapi/test/test_jbi_info.py index 956b52c..7c16023 100644 --- a/repoapi/test/test_jbi_info.py +++ b/repoapi/test/test_jbi_info.py @@ -16,10 +16,11 @@ import os import shutil -from django.test import TestCase +from django.test import TestCase, override_settings from django.conf import settings from repoapi.models import JenkinsBuildInfo from repoapi.utils import JBI_CONSOLE_URL, JBI_JOB_URL, JBI_ARTIFACT_URL +from repoapi.utils import JBI_ENVVARS_URL from mock import patch, call, mock_open @@ -34,6 +35,7 @@ artifacts_json = """{ }""" +@override_settings(CELERY_EAGER_PROPAGATES_EXCEPTIONS=True) class TestJBICelery(TestCase): def get_defaults(self): @@ -65,27 +67,51 @@ class TestJBICelery(TestCase): @patch('repoapi.utils.dlfile') def test_jbi_path_creation(self, dlfile): param = self.get_defaults() + param['jobname'] = 'fake-me' jbi = JenkinsBuildInfo.objects.create(**param) base_path = os.path.join(settings.JBI_BASEDIR, jbi.jobname, str(jbi.buildnumber)) - self.assertTrue( - os.path.exists(settings.JBI_BASEDIR), settings.JBI_BASEDIR) - self.assertTrue(os.path.exists(base_path)) + self.assertTrue(os.path.isdir(base_path), base_path) + + @patch('__builtin__.open', mock_open(read_data=artifacts_json)) + @patch('repoapi.utils.dlfile') + def test_jbi_console(self, dlfile): + param = self.get_defaults() + jbi = JenkinsBuildInfo.objects.create(**param) + base_path = os.path.join(settings.JBI_BASEDIR, + jbi.jobname, str(jbi.buildnumber)) + path = os.path.join(base_path, 'console.txt') url = JBI_CONSOLE_URL.format( settings.JENKINS_URL, jbi.jobname, jbi.buildnumber ) - calls = [call(url, path), ] + dlfile.assert_any_call(url, path) + url = JBI_ARTIFACT_URL.format( + settings.JENKINS_URL, + jbi.jobname, + jbi.buildnumber, + "builddeps.list" + ) + artifact_base_path = os.path.join(base_path, 'artifact') + path = os.path.join(artifact_base_path, 'builddeps.list') + self.assertNotIn(call(url, path), dlfile.call_args_list) + + @patch('__builtin__.open', mock_open(read_data=artifacts_json)) + @patch('repoapi.utils.dlfile') + def test_jbi_jobinfo(self, dlfile): + param = self.get_defaults() + jbi = JenkinsBuildInfo.objects.create(**param) + base_path = os.path.join(settings.JBI_BASEDIR, + jbi.jobname, str(jbi.buildnumber)) url = JBI_JOB_URL.format( settings.JENKINS_URL, jbi.jobname, jbi.buildnumber ) path = os.path.join(base_path, 'job.json') - calls.append(call(url, path)) - dlfile.assert_has_calls(calls) + dlfile.assert_any_call(url, path) url = JBI_ARTIFACT_URL.format( settings.JENKINS_URL, jbi.jobname, @@ -104,9 +130,6 @@ class TestJBICelery(TestCase): jbi = JenkinsBuildInfo.objects.create(**param) base_path = os.path.join(settings.JBI_BASEDIR, jbi.jobname, str(jbi.buildnumber)) - self.assertTrue( - os.path.exists(settings.JBI_BASEDIR), settings.JBI_BASEDIR) - self.assertTrue(os.path.exists(base_path)) url = JBI_ARTIFACT_URL.format( settings.JENKINS_URL, jbi.jobname, @@ -115,5 +138,19 @@ class TestJBICelery(TestCase): ) artifact_base_path = os.path.join(base_path, 'artifact') path = os.path.join(artifact_base_path, 'builddeps.list') - calls = [call(url, path), ] - dlfile.assert_has_calls(calls) + dlfile.assert_any_call(url, path) + + @patch('__builtin__.open', mock_open(read_data=artifacts_json)) + @patch('repoapi.utils.dlfile') + def test_jbi_envVars(self, dlfile): + param = self.get_defaults() + jbi = JenkinsBuildInfo.objects.create(**param) + base_path = os.path.join(settings.JBI_BASEDIR, + jbi.jobname, str(jbi.buildnumber)) + url = JBI_ENVVARS_URL.format( + settings.JENKINS_URL, + jbi.jobname, + jbi.buildnumber + ) + path = os.path.join(base_path, 'envVars.json') + dlfile.assert_any_call(url, path) diff --git a/repoapi/utils.py b/repoapi/utils.py index 2a87aa7..1266d28 100644 --- a/repoapi/utils.py +++ b/repoapi/utils.py @@ -27,6 +27,7 @@ logger = logging.getLogger(__name__) JBI_CONSOLE_URL = "{}/job/{}/{}/consoleText" JBI_JOB_URL = "{}/job/{}/{}/api/json" JBI_ARTIFACT_URL = "{}/job/{}/{}/artifact/{}" +JBI_ENVVARS_URL = "{}/job/{}/{}/injectedEnvVars/api/json" def executeAndReturnOutput(command, env=None): @@ -100,6 +101,17 @@ def jenkins_get_job(jobname, buildnumber): return _jenkins_get(url, base_path, 'job.json') +def jenkins_get_env(jobname, buildnumber): + url = JBI_ENVVARS_URL.format( + settings.JENKINS_URL, + jobname, + buildnumber + ) + base_path = os.path.join(settings.JBI_BASEDIR, + jobname, str(buildnumber)) + return _jenkins_get(url, base_path, 'envVars.json') + + def jenkins_get_artifact(jobname, buildnumber, artifact_info): url = JBI_ARTIFACT_URL.format( settings.JENKINS_URL,