class test_build(unittest.TestCase): DATA = { 'actions': [{ 'causes': [{ 'shortDescription': 'Started by an SCM change' }] }, {}, { 'buildsByBranchName': { 'origin/HEAD': { 'buildNumber': 2, 'buildResult': None, 'revision': { 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'branch': [{ 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/HEAD' }, { 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/master' }] } }, 'origin/master': { 'buildNumber': 2, 'buildResult': None, 'revision': { 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'branch': [{ 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/HEAD' }, { 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/master' }] } }, 'origin/python_3_compatibility': { 'buildNumber': 1, 'buildResult': None, 'revision': { 'SHA1': 'c9d1c96bc926ff63a5209c51b3ed537e62ea50e6', 'branch': [{ 'SHA1': 'c9d1c96bc926ff63a5209c51b3ed537e62ea50e6', 'name': 'origin/python_3_compatibility' }] } }, 'origin/unstable': { 'buildNumber': 3, 'buildResult': None, 'revision': { 'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'branch': [{ 'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'name': 'origin/unstable' }] } } }, 'lastBuiltRevision': { 'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'branch': [{ 'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'name': 'origin/unstable' }] }, 'remoteUrls': ['https://github.com/salimfadhley/jenkinsapi.git'], 'scmName': '' }, {}, {}], 'artifacts': [], 'building': False, 'builtOn': '', 'changeSet': { 'items': [], 'kind': 'git' }, 'culprits': [], 'description': None, 'duration': 1051, 'estimatedDuration': 2260, 'executor': None, 'fullDisplayName': 'git_yssrtigfds #3', 'id': '2013-06-30_01-54-35', 'keepLog': False, 'number': 3, 'result': 'SUCCESS', 'timestamp': 1372553675652, 'url': 'http://*****:*****@mock.patch.object(Build, '_poll') def setUp(self, _poll): _poll.return_value = self.DATA self.j = mock.MagicMock() # Job self.j.name = 'FooJob' self.b = Build('http://', 97, self.j) def test_git_scm(self): """ Can we extract git build revision data from a build object? """ try: self.assertIsInstance(self.b.get_revision(), basestring) except NameError: # Python3 self.assertIsInstance(self.b.get_revision(), str) self.assertEquals(self.b.get_revision(), '7def9ed6e92580f37d00e4980c36c4d36e68f702') def test_git_revision_branch(self): """ Can we extract git build branch from a build object? """ self.assertIsInstance(self.b.get_revision_branch(), list) self.assertEquals(len(self.b.get_revision_branch()), 1) self.assertIsInstance(self.b.get_revision_branch()[0], dict) self.assertEquals(self.b.get_revision_branch()[0]['SHA1'], '7def9ed6e92580f37d00e4980c36c4d36e68f702') self.assertEquals(self.b.get_revision_branch()[0]['name'], 'origin/unstable')
class test_build(unittest.TestCase): DATA = { 'actions': [{'causes': [{'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******'}]}, None, {'causes': []}], 'artifacts': [], 'building': False, 'builtOn': '', 'changeSet': {'items': [], 'kind': None}, 'culprits': [], 'description': None, "duration": 5782, 'estimatedDuration': 106, 'executor': None, "fingerprint": [{"fileName": "BuildId.json", "hash": "e3850a45ab64aa34c1aa66e30c1a8977", "original": {"name": "ArtifactGenerateJob", "number": 469}, "timestamp": 1380270162488, "usage": [{"name": "SingleJob", "ranges": {"ranges": [{"end": 567, "start": 566}]}}, {"name": "MultipleJobs", "ranges": {"ranges": [{"end": 150, "start": 139}]}}] }], 'fullDisplayName': 'foo #1', 'id': '2013-05-31_23-15-40', 'keepLog': False, 'number': 1, 'result': 'SUCCESS', 'timestamp': 1370042140000, 'url': 'http://*****:*****@mock.patch.object(Build, '_poll') def setUp(self, _poll): _poll.return_value = self.DATA self.j = mock.MagicMock() # Job self.j.name = 'FooJob' self.b = Build('http://', 97, self.j) def test_timestamp(self): self.assertIsInstance(self.b.get_timestamp(), datetime.datetime) expected = pytz.utc.localize( datetime.datetime(2013, 5, 31, 23, 15, 40)) self.assertEqual(self.b.get_timestamp(), expected) def testName(self): with self.assertRaises(AttributeError): self.b.id() self.assertEquals(self.b.name, 'foo #1') def test_duration(self): expected = datetime.timedelta(milliseconds=5782) self.assertEquals(self.b.get_duration(), expected) self.assertEquals(self.b.get_duration().seconds, 5) self.assertEquals(self.b.get_duration().microseconds, 782000) self.assertEquals(str(self.b.get_duration()), '0:00:05.782000') def test_get_causes(self): self.assertEquals(self.b.get_causes(), [{'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******'}]) @mock.patch.object(Build, 'get_data') def test_build_depth(self, get_data_mock): build = Build('http://halob:8080/job/foo/98', 98, self.j, depth=0) get_data_mock.assert_called_with('http://halob:8080/job/foo/98/api/python?depth=0') def test_get_revision_no_scm(self): """ with no scm, get_revision should return None """ self.assertEqual(self.b.get_revision(), None)
class test_build(unittest.TestCase): DATA = { "actions": [ {"causes": [{"shortDescription": "Started by an SCM change"}]}, {}, { "buildsByBranchName": { "origin/HEAD": { "buildNumber": 2, "buildResult": None, "revision": { "SHA1": "d2a5d435fa2df3bff572bd06e43c86544749c5d2", "branch": [ {"SHA1": "d2a5d435fa2df3bff572bd06e43c86544749c5d2", "name": "origin/HEAD"}, {"SHA1": "d2a5d435fa2df3bff572bd06e43c86544749c5d2", "name": "origin/master"}, ], }, }, "origin/master": { "buildNumber": 2, "buildResult": None, "revision": { "SHA1": "d2a5d435fa2df3bff572bd06e43c86544749c5d2", "branch": [ {"SHA1": "d2a5d435fa2df3bff572bd06e43c86544749c5d2", "name": "origin/HEAD"}, {"SHA1": "d2a5d435fa2df3bff572bd06e43c86544749c5d2", "name": "origin/master"}, ], }, }, "origin/python_3_compatibility": { "buildNumber": 1, "buildResult": None, "revision": { "SHA1": "c9d1c96bc926ff63a5209c51b3ed537e62ea50e6", "branch": [ { "SHA1": "c9d1c96bc926ff63a5209c51b3ed537e62ea50e6", "name": "origin/python_3_compatibility", } ], }, }, "origin/unstable": { "buildNumber": 3, "buildResult": None, "revision": { "SHA1": "7def9ed6e92580f37d00e4980c36c4d36e68f702", "branch": [{"SHA1": "7def9ed6e92580f37d00e4980c36c4d36e68f702", "name": "origin/unstable"}], }, }, }, "lastBuiltRevision": { "SHA1": "7def9ed6e92580f37d00e4980c36c4d36e68f702", "branch": [{"SHA1": "7def9ed6e92580f37d00e4980c36c4d36e68f702", "name": "origin/unstable"}], }, "remoteUrls": ["https://github.com/salimfadhley/jenkinsapi.git"], "scmName": "", }, {}, {}, ], "artifacts": [], "building": False, "builtOn": "", "changeSet": {"items": [], "kind": "git"}, "culprits": [], "description": None, "duration": 1051, "estimatedDuration": 2260, "executor": None, "fullDisplayName": "git_yssrtigfds #3", "id": "2013-06-30_01-54-35", "keepLog": False, "number": 3, "result": "SUCCESS", "timestamp": 1372553675652, "url": "http://*****:*****@mock.patch.object(Build, "_poll") def setUp(self, _poll): _poll.return_value = self.DATA self.j = mock.MagicMock() # Job self.j.name = "FooJob" self.b = Build("http://", 97, self.j) def test_git_scm(self): """ Can we extract git build revision data from a build object? """ self.assertIsInstance(self.b.get_revision(), basestring) self.assertEquals(self.b.get_revision(), "7def9ed6e92580f37d00e4980c36c4d36e68f702")
class test_build(unittest.TestCase): DATA = { 'actions': [ { 'causes': [{'shortDescription': 'Started by an SCM change'}] }, {}, { 'buildsByBranchName': { 'origin/HEAD': { 'buildNumber': 2, 'buildResult': None, 'revision': { 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'branch': [ {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/HEAD'}, {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/master'} ] } }, 'origin/master': { 'buildNumber': 2, 'buildResult': None, 'revision': { 'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'branch': [ {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/HEAD'}, {'SHA1': 'd2a5d435fa2df3bff572bd06e43c86544749c5d2', 'name': 'origin/master'} ] } }, 'origin/python_3_compatibility': { 'buildNumber': 1, 'buildResult': None, 'revision': { 'SHA1': 'c9d1c96bc926ff63a5209c51b3ed537e62ea50e6', 'branch': [ {'SHA1': 'c9d1c96bc926ff63a5209c51b3ed537e62ea50e6', 'name': 'origin/python_3_compatibility'} ] } }, 'origin/unstable': { 'buildNumber': 3, 'buildResult': None, 'revision': { 'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'branch': [ {'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'name': 'origin/unstable'} ] } } }, 'lastBuiltRevision': { 'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'branch': [ {'SHA1': '7def9ed6e92580f37d00e4980c36c4d36e68f702', 'name': 'origin/unstable'} ] }, 'remoteUrls': ['https://github.com/salimfadhley/jenkinsapi.git'], 'scmName': '' }, {}, {} ], 'artifacts': [], 'building': False, 'builtOn': '', 'changeSet': {'items': [], 'kind': 'git'}, 'culprits': [], 'description': None, 'duration': 1051, 'estimatedDuration': 2260, 'executor': None, 'fullDisplayName': 'git_yssrtigfds #3', 'id': '2013-06-30_01-54-35', 'keepLog': False, 'number': 3, 'result': 'SUCCESS', 'timestamp': 1372553675652, 'url': 'http://*****:*****@mock.patch.object(Build, '_poll') def setUp(self, _poll): _poll.return_value = self.DATA self.j = mock.MagicMock() # Job self.j.name = 'FooJob' self.b = Build('http://', 97, self.j) def test_git_scm(self): """ Can we extract git build revision data from a build object? """ try: self.assertIsInstance(self.b.get_revision(), basestring) except NameError: # Python3 self.assertIsInstance(self.b.get_revision(), str) self.assertEquals(self.b.get_revision(), '7def9ed6e92580f37d00e4980c36c4d36e68f702') def test_git_revision_branch(self): """ Can we extract git build branch from a build object? """ self.assertIsInstance(self.b.get_revision_branch(), list) self.assertEquals(len(self.b.get_revision_branch()), 1) self.assertIsInstance(self.b.get_revision_branch()[0], dict) self.assertEquals(self.b.get_revision_branch()[0]['SHA1'], '7def9ed6e92580f37d00e4980c36c4d36e68f702') self.assertEquals(self.b.get_revision_branch()[0]['name'], 'origin/unstable')
class test_build(unittest.TestCase): DATA = { 'actions': [{ 'causes': [{ 'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******' }] }, None, { 'causes': [] }], 'artifacts': [], 'building': False, 'builtOn': '', 'changeSet': { 'items': [], 'kind': None }, 'culprits': [], 'description': None, "duration": 5782, 'estimatedDuration': 106, 'executor': None, "fingerprint": [{ "fileName": "BuildId.json", "hash": "e3850a45ab64aa34c1aa66e30c1a8977", "original": { "name": "ArtifactGenerateJob", "number": 469 }, "timestamp": 1380270162488, "usage": [{ "name": "SingleJob", "ranges": { "ranges": [{ "end": 567, "start": 566 }] } }, { "name": "MultipleJobs", "ranges": { "ranges": [{ "end": 150, "start": 139 }] } }] }], 'fullDisplayName': 'foo #1', 'id': '2013-05-31_23-15-40', 'keepLog': False, 'number': 1, 'result': 'SUCCESS', 'timestamp': 1370042140000, 'url': 'http://*****:*****@mock.patch.object(Build, '_poll') def setUp(self, _poll): _poll.return_value = self.DATA self.j = mock.MagicMock() # Job self.j.name = 'FooJob' self.b = Build('http://', 97, self.j) def test_timestamp(self): self.assertIsInstance(self.b.get_timestamp(), datetime.datetime) expected = pytz.utc.localize(datetime.datetime(2013, 5, 31, 23, 15, 40)) self.assertEqual(self.b.get_timestamp(), expected) def testName(self): with self.assertRaises(AttributeError): self.b.id() self.assertEquals(self.b.name, 'foo #1') def test_duration(self): expected = datetime.timedelta(milliseconds=5782) self.assertEquals(self.b.get_duration(), expected) self.assertEquals(self.b.get_duration().seconds, 5) self.assertEquals(self.b.get_duration().microseconds, 782000) self.assertEquals(str(self.b.get_duration()), '0:00:05.782000') def test_get_causes(self): self.assertEquals(self.b.get_causes(), [{ 'shortDescription': 'Started by user anonymous', 'userId': None, 'userName': '******' }]) @mock.patch.object(Build, 'get_data') def test_build_depth(self, get_data_mock): Build('http://*****:*****@mock.patch.object(Build, '__init__') def test_get_matrix_runs(self, build_init_mock): build_init_mock.return_value = None for build in self.b.get_matrix_runs(): continue build_init_mock.assert_called_once_with( 'http//localhost:8080/job/foo/SHARD_NUM=1/1/', 1, self.j)
class test_build(unittest.TestCase): DATA = { "actions": [ {"causes": [{"shortDescription": "Started by user anonymous", "userId": None, "userName": "******"}]}, None, {"causes": []}, ], "artifacts": [], "building": False, "builtOn": "", "changeSet": {"items": [], "kind": None}, "culprits": [], "description": None, "duration": 5782, "estimatedDuration": 106, "executor": None, "fingerprint": [ { "fileName": "BuildId.json", "hash": "e3850a45ab64aa34c1aa66e30c1a8977", "original": {"name": "ArtifactGenerateJob", "number": 469}, "timestamp": 1380270162488, "usage": [ {"name": "SingleJob", "ranges": {"ranges": [{"end": 567, "start": 566}]}}, {"name": "MultipleJobs", "ranges": {"ranges": [{"end": 150, "start": 139}]}}, ], } ], "fullDisplayName": "foo #1", "id": "2013-05-31_23-15-40", "keepLog": False, "number": 1, "result": "SUCCESS", "timestamp": 1370042140000, "url": "http://*****:*****@mock.patch.object(Build, "_poll") def setUp(self, _poll): _poll.return_value = self.DATA self.j = mock.MagicMock() # Job self.j.name = "FooJob" self.b = Build("http://", 97, self.j) def test_timestamp(self): self.assertIsInstance(self.b.get_timestamp(), datetime.datetime) expected = pytz.utc.localize(datetime.datetime(2013, 5, 31, 23, 15, 40)) self.assertEqual(self.b.get_timestamp(), expected) def testName(self): with self.assertRaises(AttributeError): self.b.id() self.assertEquals(self.b.name, "foo #1") def test_duration(self): expected = datetime.timedelta(milliseconds=5782) self.assertEquals(self.b.get_duration(), expected) self.assertEquals(self.b.get_duration().seconds, 5) self.assertEquals(self.b.get_duration().microseconds, 782000) self.assertEquals(str(self.b.get_duration()), "0:00:05.782000") def test_get_causes(self): self.assertEquals( self.b.get_causes(), [{"shortDescription": "Started by user anonymous", "userId": None, "userName": "******"}], ) @mock.patch.object(Build, "get_data") def test_build_depth(self, get_data_mock): Build("http://*****:*****@mock.patch.object(Build, "__init__") def test_get_matrix_runs(self, build_init_mock): build_init_mock.return_value = None for build in self.b.get_matrix_runs(): continue build_init_mock.assert_called_once_with("http//localhost:8080/job/foo/SHARD_NUM=1/1/", 1, self.j)