From: Kieron Briggs Date: Fri, 30 Aug 2013 03:51:36 +0000 (+1000) Subject: Add Build.get_matrix_runs() X-Git-Tag: v0.2.23~100^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2e76ad2749face237c85829f5e6561468e236ce7;p=tools%2Fpython-jenkinsapi.git Add Build.get_matrix_runs() Add a method to get the individual sub-builds for a matrix build. --- diff --git a/jenkinsapi/build.py b/jenkinsapi/build.py index fa5c3ae..f7670ac 100644 --- a/jenkinsapi/build.py +++ b/jenkinsapi/build.py @@ -211,6 +211,16 @@ class Build(JenkinsBase): except (IndexError, KeyError): return None + def get_matrix_runs(self): + """ + For a matrix job, get the individual builds for each + matrix configuration + :return: Generator of Build + """ + if "runs" in self._data: + for rinfo in self._data["runs"]: + yield Build(rinfo["url"], rinfo["number"], self.job) + def is_running( self ): """ Return a bool if running. diff --git a/jenkinsapi_tests/systests/job_configs.py b/jenkinsapi_tests/systests/job_configs.py index 53de906..55daf99 100644 --- a/jenkinsapi_tests/systests/job_configs.py +++ b/jenkinsapi_tests/systests/job_configs.py @@ -156,3 +156,36 @@ gzip < out.txt > out.gz """.strip() + +MATRIX_JOB = """ + + + + + false + + + true + false + false + false + + false + + + foo + + one + two + three + + + + + + ping -c 10 localhost + + + + +""".strip() diff --git a/jenkinsapi_tests/systests/test_jenkins_matrix.py b/jenkinsapi_tests/systests/test_jenkins_matrix.py new file mode 100644 index 0000000..3219909 --- /dev/null +++ b/jenkinsapi_tests/systests/test_jenkins_matrix.py @@ -0,0 +1,39 @@ +''' +System tests for `jenkinsapi.jenkins` module. +''' +import os +import re +import time +import gzip +import shutil +import tempfile +import unittest + +from jenkinsapi_tests.systests.base import BaseSystemTest +from jenkinsapi_tests.systests.job_configs import MATRIX_JOB +from jenkinsapi_tests.test_utils.random_strings import random_string + + +class TestPingerJob(BaseSystemTest): + + def test_invoke_job(self): + job_name = 'create_%s' % random_string() + job = self.jenkins.create_job(job_name, MATRIX_JOB) + job.invoke(block=True) + + b = job.get_last_build() + + while b.is_running(): + time.sleep(1) + + s = set() + for r in b.get_matrix_runs(): + self.assertEquals(r.get_number(), b.get_number()) + self.assertEquals(r.get_upstream_build(), b) + m = re.search(u'\xbb (.*) #\\d+$', r.name) + self.assertIsNotNone(m) + s.add(m.group(1)) + self.assertEqual(s, {'one','two','three'}) + +if __name__ == '__main__': + unittest.main()