Exemple #1
0
 def test_get_jobs(self):
     job1_url = 'http://localhost:8080/job/j1'
     job1_name = 'j1'
     job2_url = 'http://localhost:8080/job/j2'
     job2_name = 'j2'
     mock_job1_dataio = MagicMock()
     mock_job1_dataio.get_api_data.return_value = {"name":job1_name}
     mock_job1_dataio.config_xml = "<project></project>"
     mock_job2_dataio = MagicMock()
     mock_job2_dataio.get_api_data.return_value = {"name":job2_name}
     mock_job2_dataio.config_xml = "<project></project>"
     mock_data_io = MagicMock()
     mock_data_io.get_api_data.return_value = {'name':"MyView1", 'jobs':[{'url':job1_url},{'url':job2_url}]}
     def mock_clone(new_url):
         if new_url == job1_url: return mock_job1_dataio
         if new_url == job2_url: return mock_job2_dataio
         self.fail("Unknown source URL provided to clone method: " + new_url)
     mock_data_io.clone.side_effect = mock_clone
         
     v = vView(mock_data_io, None)
     jobs = v.jobs
     
     self.assertEqual(len(jobs), 2, "view should have 2 jobs contained within it")
     self.assertEqual(jobs[0].name, job1_name)
     self.assertEqual(jobs[1].name, job2_name)
Exemple #2
0
    def test_multiple_upstream_jobs_recursive(self):
        
        # job j1 has no upstream dependencies
        upstream_job_name1 = "j1"
        upstream_job_url1 = "http://localhost:8080/job/" + upstream_job_name1
        mock_job1_data_io = MagicMock()
        mock_job1_data_io.get_api_data.return_value = {"name": upstream_job_name1, "upstreamProjects": []}
        mock_job1_data_io.config_xml = "<project></project>"

        # job j1 triggers job j2
        upstream_job_name2 = "j2"
        upstream_job_url2 = "http://localhost:8080/job/" + upstream_job_name2 
        mock_job2_data_io = MagicMock()
        mock_job2_data_io.get_api_data.return_value = {"name": upstream_job_name2, "upstreamProjects": [{"url": upstream_job_url1}]}
        mock_job2_data_io.clone.return_value = mock_job1_data_io
        mock_job2_data_io.config_xml = "<project></project>"

        # job j3 triggers job j2
        upstream_job_name3 = "j3"
        upstream_job_url3 = "http://localhost:8080/job/" + upstream_job_name3
        mock_job3_data_io = MagicMock()
        mock_job3_data_io.get_api_data.return_value = {"name": upstream_job_name3, "upstreamProjects": [{"url": upstream_job_url2}]}
        mock_job3_data_io.clone.return_value = mock_job2_data_io
        mock_job3_data_io.config_xml = "<project></project>"

        # job j2 triggers our main job
        mock_data_io = MagicMock()
        mock_data_io.get_api_data.return_value = {"upstreamProjects": [{"url": upstream_job_url3}]}
        mock_data_io.clone.return_value = mock_job3_data_io
        mock_data_io.config_xml = "<project></project>"

        # code under test 
        j = vJob(mock_data_io, None)
        dependencies = j.all_upstream_jobs
        
        # validation
        self.assertEqual(len(dependencies), 3, "Test job should have three upstream dependencies")
        names = []
        names.append(dependencies[0].name)
        names.append(dependencies[1].name)
        names.append(dependencies[2].name)
        self.assertTrue(upstream_job_name1 in names, "Mock job #1 should be returned as a transient dependency")
        self.assertTrue(upstream_job_name2 in names, "Mock job #2 should be returned as a transient dependency")
        self.assertTrue(upstream_job_name3 in names, "Mock job #3 should be returned as a direct dependency")
Exemple #3
0
 def mock_clone(url):
     mock_dependent_job_data_io = MagicMock()
     if url == upstream_job_url1:
         mock_dependent_job_data_io.get_api_data.return_value = {"name":upstream_job_name1}
     elif url == upstream_job_url2:
         mock_dependent_job_data_io.get_api_data.return_value = {"name":upstream_job_name2}
     else:
         self.fail("unexpected input value given to mock clone function: " + url)
     mock_dependent_job_data_io.config_xml = "<project></project>"
     return mock_dependent_job_data_io
Exemple #4
0
 def test_create_view(self):
     new_view_url = "http://localhost:8080/view/MyView"
     new_view_name = "MyView"
     new_view_dataio = MagicMock()
     new_view_dataio.get_api_data.return_value = {'name':new_view_name}
     new_view_dataio.config_xml = "<hudson.model.ListView/>"
     self.mock_jenkins_data_io.get_api_data.return_value['views'].append({'url':new_view_url,'name':new_view_name})
     self.clone_map[new_view_url] = new_view_dataio
     j = Jenkins(self.mock_jenkins_data_io)
     v = j.create_view(new_view_name, "ListView")
     
     self.assertEqual(v.name, new_view_name)
Exemple #5
0
    def test_create_job(self):
        expected_name = "TestJob"
        jenkins_data_io = MagicMock()

        job_data_io = MagicMock()
        job_data_io.config_xml = "<project></project>"
        job_data_io.get_api_data.return_value = {"name": expected_name}
        jenkins_data_io.clone.return_value = job_data_io

        j = Jenkins(jenkins_data_io)
        job = j.create_job(expected_name, "project")

        self.assertEqual(job.name, expected_name)
Exemple #6
0
    def test_one_upstream_job(self):
        # our job under test depends directly on this one mock job
        upstream_job_name = "j1"
        mock_dependent_job_data_io = MagicMock()
        mock_dependent_job_data_io.get_api_data.return_value = {"name":upstream_job_name}
        mock_dependent_job_data_io.config_xml = "<project></project>"

        mock_data_io = MagicMock()
        mock_data_io.get_api_data.return_value = {"upstreamProjects":[{"url":"http://localhost:8080/job/" + upstream_job_name}]}
        mock_data_io.clone.return_value = mock_dependent_job_data_io
        
        j = vJob (mock_data_io, None)
        dependencies = j.upstream_jobs
        
        self.assertEqual(len(dependencies), 1, "Test job should have one upstream dependency")
        self.assertEqual(dependencies[0].name, upstream_job_name)
Exemple #7
0
    def setUp(self):
        """Configure a mock dataio object which supports a few mock view objects"""
        self.primary_view_name = 'main'
        jenkins_root_url = 'http://localhost:8080/'
        self.primary_view_url = jenkins_root_url + "view/" + self.primary_view_name
        self.view2_name = 'secondView'
        self.view2_url = 'http://localhost:8080/view/secondView'
        
        self.view2_job1_url = 'http://localhost:8080/job/j1'
        self.view2_job1_name = 'j1'
        mock_job1_dataio = MagicMock()
        mock_job1_dataio.get_api_data.return_value = {"name":self.view2_job1_name}
        mock_job1_dataio.config_xml = "<project></project>"

        # io objects used by the two views managed by our mock Jenkins instance
        self.mock_primary_view_data_io = MagicMock()
        self.mock_primary_view_data_io.get_api_data.return_value = {'name':self.primary_view_name}
        # TODO: double check to make sure this is the corrrect view type
        self.mock_primary_view_data_io.config_xml = "<hudson.model.ListView/>"
        self.mock_view2_data_io = MagicMock()
        self.mock_view2_data_io.get_api_data.return_value = {'name':self.view2_name, 'jobs':[{'url':self.view2_job1_url}]}
        self.mock_view2_data_io.clone.side_effect = self.mock_clone
        self.mock_view2_data_io.config_xml = "<hudson.model.ListView/>"

        # mock jenkins instance which exposes 2 views
        self.mock_jenkins_data_io = MagicMock()
        mock_views = []
        mock_views.append({'url':self.view2_url,'name':self.view2_name})
        mock_views.append({'url':jenkins_root_url,'name':self.primary_view_name})
        self.mock_jenkins_data_io.get_api_data.return_value = {'views':mock_views,'primaryView':mock_views[1]}
        self.mock_jenkins_data_io.url = jenkins_root_url
        
        # construct mock 'clone' method such that views created by
        # these unit tests will behave correctly
        self.mock_jenkins_data_io.clone.side_effect = self.mock_clone
        self.clone_map = {}
        self.clone_map[self.primary_view_url] = self.mock_primary_view_data_io
        self.clone_map[self.view2_url] = self.mock_view2_data_io
        self.clone_map[self.view2_job1_url] = mock_job1_dataio