class TestEndpoints(object): def __init__(self): self.root_url = 'http://www.example.com' self.xml_str = ('<result success="true" apiversion="13">' '<jobs count="3">' '<job id="3b8a86d5-4fc3-4cc1-95a2-8b51421c2069">' '<name>job_with_args</name>' '<group/>' '<project>API_client_development</project>' '<description/>' '</job>' '<job id="78f491e7-714f-44c6-bddb-8b3b3a961ace">' '<name>test_job_1</name>' '<group/>' '<project>API_client_development</project>' '<description/>' '</job>' '<job id="b07b05b0-0a37-4f88-8a51-4bee77ceefb4">' '<name>test_job_2</name>' '<group/>' '<project>API_client_development</project>' '<description/>' '</job>' '</jobs>' '</result>') self.xml_tree = etree.fromstring(self.xml_str) self.native_result = { 'apiversion': '13', 'jobs': { 'count': 3, 'list': [ { 'description': '', 'group': '', 'id': '3b8a86d5-4fc3-4cc1-95a2-8b51421c2069', 'name': 'job_with_args', 'project': 'API_client_development' }, { 'description': '', 'group': '', 'id': '78f491e7-714f-44c6-bddb-8b3b3a961ace', 'name': 'test_job_1', 'project': 'API_client_development' }, { 'description': '', 'group': '', 'id': 'b07b05b0-0a37-4f88-8a51-4bee77ceefb4', 'name': 'test_job_2', 'project': 'API_client_development' } ] }, 'success': 'true' } self.return_status = 200 def setup(self): self.client = RundeckApiClient('mock_token', self.root_url) # Tests for RundeckApiClient.import_job @patch('pyrundeck.RundeckApiClient.post') def test_import_job_xml(self, mock_post): mock_post.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/jobs/import'.format(self.root_url) status, res = self.client.import_job(native=False, xmlBatch='mock xmlBatch') mock_post.assert_called_once_with(actual_url, {'xmlBatch': 'mock xmlBatch'}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.post') def test_import_job_native(self, mock_post): mock_post.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/jobs/import'.format(self.root_url) status, res = self.client.import_job(xmlBatch='mock xmlBatch') mock_post.assert_called_once_with(actual_url, {'xmlBatch': 'mock xmlBatch'}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result) # Tests for RundeckApiClient.export_jobs @patch('pyrundeck.RundeckApiClient.get') def test_export_jobs_xml(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/jobs/export'.format(self.root_url) status, res = self.client.export_jobs(native=False) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.get') def test_export_jobs_native(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/jobs/export'.format(self.root_url) status, res = self.client.export_jobs() mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result) # Tests for RundeckApiClient.list_jobs @patch('pyrundeck.RundeckApiClient.get') def test_list_jobs_xml(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/jobs'.format(self.root_url) status, res = self.client.list_jobs(native=False, project='mock project arg') mock_get.assert_called_once_with(actual_url, {'project': 'mock project arg'}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.get') def test_list_jobs_native(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/jobs'.format(self.root_url) status, res = self.client.list_jobs(project='mock project arg') mock_get.assert_called_once_with(actual_url, {'project': 'mock project arg'}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result) # Tests for RundeckApiClient.run_job @patch('pyrundeck.RundeckApiClient.get') def test_run_job_xml(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) job_id = 'mock id' actual_url = '{}/api/1/job/{}/run'.format(self.root_url, job_id) status, res = self.client.run_job(native=False, id=job_id) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.get') def test_run_job_native(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) job_id = 'mock id' actual_url = '{}/api/1/job/{}/run'.format(self.root_url, job_id) status, res = self.client.run_job(id=job_id) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result) @raises(RundeckException) def test_run_job_raises_if_no_id(self): self.client.run_job() # Tests for RundeckApiClient.execution_info @patch('pyrundeck.RundeckApiClient.get') def test_execution_info_xml(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) execution_id = 'mock id' actual_url = '{}/api/1/execution/{}'.format(self.root_url, execution_id) status, res = self.client.execution_info(native=False, id=execution_id) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.get') def test_execution_info_native(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) execution_id = 'mock id' actual_url = '{}/api/1/execution/{}'.format(self.root_url, execution_id) status, res = self.client.execution_info(id=execution_id) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result) @raises(RundeckException) def test_execution_info_raises_if_no_id(self): self.client.execution_info() # Tests for RundeckApiClient.delete_job @patch('pyrundeck.RundeckApiClient.delete') def test_delete(self, mock_delete): mock_delete.return_value = (self.return_status, '') job_id = 'mock id' actual_url = '{}/api/1/job/{}'.format(self.root_url, job_id) status, res = self.client.delete_job(id=job_id) mock_delete.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_equal('', res) @raises(RundeckException) def test_delete_raises_if_no_id(self): self.client.delete_job() # Tests for RundeckApiClient.job_executions_info @patch('pyrundeck.RundeckApiClient.get') def test_job_executions_info_xml(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) job_id = 'mock id' actual_url = '{}/api/1/job/{}/executions'.format(self.root_url, job_id) status, res = self.client.job_executions_info(native=False, id=job_id) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.get') def test_job_executions_info_native(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) job_id = 'mock id' actual_url = '{}/api/1/job/{}/executions'.format(self.root_url, job_id) status, res = self.client.job_executions_info(id=job_id) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result) @raises(RundeckException) def test_job_executions_info_raises_if_no_id(self): self.client.job_executions_info() # Tests for RundeckApiClient.running_executions @patch('pyrundeck.RundeckApiClient.post') def test_running_executions_xml(self, mock_post): mock_post.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/executions/running'.format(self.root_url) status, res = self.client.running_executions(native=False) mock_post.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.post') def test_running_executions_native(self, mock_post): mock_post.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/executions/running'.format(self.root_url) status, res = self.client.running_executions() mock_post.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result) # Tests for RundeckApiClient.system_info @patch('pyrundeck.RundeckApiClient.get') def test_system_info_xml(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/system/info'.format(self.root_url) status, res = self.client.system_info(native=False) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.get') def test_system_info_native(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/1/system/info'.format(self.root_url) status, res = self.client.system_info() mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result) # Tests for RundeckApiClient.job_definition @patch('pyrundeck.RundeckApiClient.get') def test_job_definition_xml(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) job_id = 'mock id' actual_url = '{}/api/1/job/{}'.format(self.root_url, job_id) status, res = self.client.job_definition(native=False, id=job_id) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.get') def test_job_definition_native(self, mock_get): mock_get.return_value = (self.return_status, self.xml_tree) job_id = 'mock id' actual_url = '{}/api/1/job/{}'.format(self.root_url, job_id) status, res = self.client.job_definition(id=job_id) mock_get.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result) @raises(RundeckException) def test_job_definition_raises_if_no_id(self): self.client.job_definition() # Tests for RundeckApiClient.bulk_job_delete @patch('pyrundeck.RundeckApiClient.delete') def test_bulk_job_delete_xml(self, mock_delete): mock_delete.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/5/jobs/delete'.format(self.root_url) status, res = self.client.bulk_job_delete(native=False) mock_delete.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_true(element_equality(res, self.xml_tree)) @patch('pyrundeck.RundeckApiClient.delete') def test_bulk_job_delete_native(self, mock_delete): mock_delete.return_value = (self.return_status, self.xml_tree) actual_url = '{}/api/5/jobs/delete'.format(self.root_url) status, res = self.client.bulk_job_delete() mock_delete.assert_called_once_with(actual_url, {}) nt.assert_equal(status, self.return_status) nt.assert_equal(res, self.native_result)