Esempio n. 1
0
    def test_fetch(self):
        """Test whether a list of builds is returned"""

        self.__configure_http_server()

        # Test fetch builds from jobs list
        jenkins = Jenkins(JENKINS_SERVER_URL)
        builds = [build for build in jenkins.fetch()]
        self.assertEqual(len(builds), 64)

        with open("data/jenkins_build.json") as build_json:
            first_build = json.load(build_json)
            self.assertDictEqual(builds[0]['data'], first_build['data'])

        # Test metadata
        expected = [
            ('69fb6b0fe503c59d075d497e2ff37535ccac94b6', 1458874078.582),
            ('1145170a61c10d1bfc60c3c93c2d800587467b4a', 1458854340.139),
            ('2d3688b4cac6ad22d4c20223216facfcbc8abb5f', 1458842674.184),
            ('77a4b72563a212d0950fc48e81471bd03409ec39', 1458831639.674),
            ('c1110cd988722c124d60f4f234ad1d00ea168286', 1458764722.848),
            ('88bbd95bf4e07792531760f6ac17711f8e3ade90', 1458740779.456),
            ('fa6857e34c5fabd929cad0dd736971a676ed2804', 1458687074.485),
            ('b8d84ea6a2c67c4fccd5cf4473af45909c174731', 1458662464.685),
            ('c4f3c8c773e8e26eb87b7f5e014768b7977f82e3', 1458596193.695)
        ]

        for x in range(len(expected)):
            build = builds[x]
            self.assertEqual(build['origin'], 'http://example.com/ci')
            self.assertEqual(build['uuid'], expected[x][0])
            self.assertEqual(build['updated_on'], expected[x][1])
            self.assertEqual(build['category'], 'build')
            self.assertEqual(build['tag'], 'http://example.com/ci')
Esempio n. 2
0
    def test_fetch_no_job_builds(self):
        """Test whether a warning message is logged when no job builds exist"""

        configure_http_server(builds_job=False)

        # Test fetch builds from jobs list
        jenkins = Jenkins(SERVER_URL)

        with self.assertLogs(logger, level='DEBUG') as cm:
            builds = [build for build in jenkins.fetch()]
            self.assertRegex(
                cm.output[1],
                'DEBUG:perceval.backends.core.jenkins:No builds for job.*')
            self.assertRegex(
                cm.output[2],
                'DEBUG:perceval.backends.core.jenkins:No builds for job.*')

        self.assertEqual(builds, [])

        # Check request params
        expected = {'depth': ['1']}

        req = httpretty.last_request()

        self.assertEqual(req.method, 'GET')
        self.assertRegex(req.path, '/ci/job')
        self.assertDictEqual(req.querystring, expected)
Esempio n. 3
0
    def test_fetch_depth_1_blacklist(self):
        """Test whether blacklisted/wrong builds are not fetched from Jenkins"""

        configure_http_server()

        # Test fetch builds from jobs list
        jenkins = Jenkins(SERVER_URL, blacklist_ids=['apex-build-brahmaputra'])

        with self.assertLogs(logger, level='WARNING') as cm:
            builds = [build for build in jenkins.fetch()]
            self.assertEqual(
                cm.output[0],
                'WARNING:perceval.backends.core.jenkins:Not getting blacklisted job: '
                'apex-build-brahmaputra')
            self.assertEqual(
                cm.output[1],
                'WARNING:perceval.backends.core.jenkins:500 Server Error: '
                'Internal Server Error for url: '
                'http://example.com/ci/job/500-error-job/api/json?depth=1')
            self.assertEqual(
                cm.output[2],
                'WARNING:perceval.backends.core.jenkins:Unable to fetch builds from job '
                'http://example.com/ci/job/500-error-job/; skipping')
            self.assertEqual(
                cm.output[3],
                'WARNING:perceval.backends.core.jenkins:Unable to parse builds from job '
                'http://example.com/ci/job/invalid-json-job/; skipping')

            self.assertEqual(len(builds), 37)
            self.assertEqual(jenkins.summary.total, 40)
            self.assertEqual(jenkins.summary.fetched, 37)
            self.assertEqual(jenkins.summary.skipped, 3)
Esempio n. 4
0
    def test_fetch_blacklist_from_archive(self):
        """Test whether jobs in balcklist are not retrieved from archive"""

        blacklist = [JENKINS_JOB_BUILDS_1]

        configure_http_server()
        self.backend_write_archive = Jenkins(JENKINS_SERVER_URL, blacklist_jobs=blacklist, archive=self.archive)
        self.backend_read_archive = Jenkins(JENKINS_SERVER_URL, blacklist_jobs=blacklist, archive=self.archive)

        with self.assertLogs(logger, level='WARNING') as cm:
            self._test_fetch_from_archive()
            self.assertEqual(cm.output[0], 'WARNING:perceval.backends.core.jenkins:'
                                           'Not getting blacklisted job: apex-build-brahmaputra')
            self.assertEqual(cm.output[1], 'WARNING:perceval.backends.core.jenkins:500 Server Error: '
                                           'Internal Server Error for url: '
                                           'http://example.com/ci/job/500-error-job/api/json?depth=1')
            self.assertEqual(cm.output[2], 'WARNING:perceval.backends.core.jenkins:Unable to fetch builds from job '
                                           'http://example.com/ci/job/500-error-job/; skipping')
            self.assertEqual(cm.output[3], 'WARNING:perceval.backends.core.jenkins:Unable to parse builds from job '
                                           'http://example.com/ci/job/invalid-json-job/; skipping')
            self.assertEqual(cm.output[4], 'WARNING:perceval.backends.core.jenkins:'
                                           'Not getting blacklisted job: apex-build-brahmaputra')
            self.assertEqual(cm.output[5], 'WARNING:perceval.backends.core.jenkins:500 Server Error: '
                                           'Internal Server Error for url: '
                                           'http://example.com/ci/job/500-error-job/api/json?depth=1')
            self.assertEqual(cm.output[6], 'WARNING:perceval.backends.core.jenkins:Unable to fetch builds from job '
                                           'http://example.com/ci/job/500-error-job/; skipping')
            self.assertEqual(cm.output[7], 'WARNING:perceval.backends.core.jenkins:Unable to parse builds from job '
                                           'http://example.com/ci/job/invalid-json-job/; skipping')
Esempio n. 5
0
    def test_fetch_from_empty_cache(self):
        """Test if there are not any builds returned when the cache is empty"""

        cache = Cache(self.tmp_path)
        jenkins = Jenkins(JENKINS_SERVER_URL, cache=cache)
        cached_builds = [build for build in jenkins.fetch_from_cache()]
        self.assertEqual(len(cached_builds), 0)
Esempio n. 6
0
    def test_fetch_from_non_set_cache(self):
        """Test if a error is raised when the cache was not set"""

        jenkins = Jenkins(JENKINS_SERVER_URL)

        with self.assertRaises(CacheError):
            _ = [build for build in jenkins.fetch_from_cache()]
    def test_initialization(self):
        """Test whether attributes are initializated"""

        jenkins = Jenkins(JENKINS_SERVER_URL,
                          tag='test',
                          sleep_time=60,
                          detail_depth=2)

        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.sleep_time, 60)
        self.assertEqual(jenkins.detail_depth, 2)
        self.assertEqual(jenkins.tag, 'test')
        self.assertIsNone(jenkins.client)

        # When tag is empty or None it will be set to
        # the value in url
        jenkins = Jenkins(JENKINS_SERVER_URL)
        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.tag, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.sleep_time, SLEEP_TIME)
        self.assertEqual(jenkins.detail_depth, DETAIL_DEPTH)

        jenkins = Jenkins(JENKINS_SERVER_URL, tag='')
        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.tag, JENKINS_SERVER_URL)
    def test_fetch_depth_2(self):
        """Test whether a list of builds is returned"""

        configure_http_server(depth=2)

        # Test fetch builds from jobs list
        jenkins = Jenkins(JENKINS_SERVER_URL, detail_depth=2)

        with self.assertLogs(logger, level='WARNING') as cm:
            builds = [build for build in jenkins.fetch()]
            self.assertEqual(
                cm.output[0],
                'WARNING:perceval.backends.core.jenkins:500 Server Error: '
                'Internal Server Error for url: '
                'http://example.com/ci/job/500-error-job/api/json?depth=2')
            self.assertEqual(
                cm.output[1],
                'WARNING:perceval.backends.core.jenkins:Unable to fetch builds from job '
                'http://example.com/ci/job/500-error-job/; skipping')
            self.assertEqual(
                cm.output[2],
                'WARNING:perceval.backends.core.jenkins:Unable to parse builds from job '
                'http://example.com/ci/job/invalid-json-job/; skipping')

        self.assertEqual(len(builds), 64)

        with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "data/jenkins/jenkins_build.json")) \
                as build_json:
            first_build = json.load(build_json)
            self.assertDictEqual(builds[0]['data'], first_build['data'])

        # Test metadata
        expected = [
            ('69fb6b0fe503c59d075d497e2ff37535ccac94b6', 1458874078.582),
            ('1145170a61c10d1bfc60c3c93c2d800587467b4a', 1458854340.139),
            ('2d3688b4cac6ad22d4c20223216facfcbc8abb5f', 1458842674.184),
            ('77a4b72563a212d0950fc48e81471bd03409ec39', 1458831639.674),
            ('c1110cd988722c124d60f4f234ad1d00ea168286', 1458764722.848),
            ('88bbd95bf4e07792531760f6ac17711f8e3ade90', 1458740779.456),
            ('fa6857e34c5fabd929cad0dd736971a676ed2804', 1458687074.485),
            ('b8d84ea6a2c67c4fccd5cf4473af45909c174731', 1458662464.685),
            ('c4f3c8c773e8e26eb87b7f5e014768b7977f82e3', 1458596193.695)
        ]

        for x in range(len(expected)):
            build = builds[x]
            self.assertEqual(build['origin'], 'http://example.com/ci')
            self.assertEqual(build['uuid'], expected[x][0])
            self.assertEqual(build['updated_on'], expected[x][1])
            self.assertEqual(build['category'], 'build')
            self.assertEqual(build['tag'], 'http://example.com/ci')

        # Check request params
        expected = {'depth': ['2']}

        req = httpretty.last_request()

        self.assertEqual(req.method, 'GET')
        self.assertRegex(req.path, '/ci/job')
        self.assertDictEqual(req.querystring, expected)
Esempio n. 9
0
    def test_fetch_empty(self):
        """Test whether it works when no jobs are fetched"""

        body = '{"jobs":[]}'
        httpretty.register_uri(httpretty.GET, JOBS_URL, body=body, status=200)

        jenkins = Jenkins(SERVER_URL)
        builds = [build for build in jenkins.fetch()]

        self.assertEqual(len(builds), 0)
Esempio n. 10
0
    def test_initialization(self):
        """Test whether attributes are initializated"""

        jenkins = Jenkins(JENKINS_SERVER_URL,
                          tag='test',
                          sleep_time=60,
                          detail_depth=2)
        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertIsNone(jenkins.user)
        self.assertIsNone(jenkins.api_token)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.sleep_time, 60)
        self.assertEqual(jenkins.detail_depth, 2)
        self.assertEqual(jenkins.tag, 'test')
        self.assertIsNone(jenkins.client)
        self.assertIsNone(jenkins.blacklist_ids)

        # When tag is empty or None it will be set to
        # the value in url
        jenkins = Jenkins(JENKINS_SERVER_URL)
        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.tag, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.sleep_time, SLEEP_TIME)
        self.assertEqual(jenkins.detail_depth, DETAIL_DEPTH)
        self.assertIsNone(jenkins.blacklist_ids)

        jenkins = Jenkins(JENKINS_SERVER_URL, tag='')
        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.tag, JENKINS_SERVER_URL)
        self.assertIsNone(jenkins.blacklist_ids)

        jenkins = Jenkins(JENKINS_SERVER_URL,
                          user=JENKINS_USER,
                          api_token=JENKINS_TOKEN)
        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.tag, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.user, JENKINS_USER)
        self.assertEqual(jenkins.api_token, JENKINS_TOKEN)
        self.assertIsNone(jenkins.blacklist_ids)

        jenkins = Jenkins(JENKINS_SERVER_URL,
                          blacklist_ids=[JENKINS_JOB_BUILDS_1])
        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.tag, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.sleep_time, SLEEP_TIME)
        self.assertEqual(jenkins.detail_depth, DETAIL_DEPTH)
        self.assertListEqual(jenkins.blacklist_ids, [JENKINS_JOB_BUILDS_1])
Esempio n. 11
0
    def test_initialization_error(self):
        """Test whether an exeception is thrown when the user and api_token are not initialized together"""

        with self.assertLogs(logger) as cm:
            with self.assertRaises(BackendError):
                _ = Jenkins(JENKINS_SERVER_URL, user=JENKINS_USER)

            self.assertEqual(cm.output[0], 'ERROR:perceval.backends.core.jenkins:'
                                           'Authentication method requires user and api_token')

        with self.assertLogs(logger) as cm:
            with self.assertRaises(BackendError):
                _ = Jenkins(JENKINS_SERVER_URL, api_token=JENKINS_TOKEN)

            self.assertEqual(cm.output[0], 'ERROR:perceval.backends.core.jenkins:'
                                           'Authentication method requires user and api_token')
Esempio n. 12
0
    def test_fetch_blacklist(self):
        """Test whether jobs in balcklist are not retrieved"""

        blacklist = [JENKINS_JOB_BUILDS_1]

        self.__configure_http_server()

        jenkins = Jenkins(JENKINS_SERVER_URL, blacklist_jobs=blacklist)
        nrequests = len(requests_http)
        builds = [build for build in jenkins.fetch()]

        # No HTTP calls at all must be done for JENKINS_JOB_BUILDS_1
        # Just the first call for all jobs and one for each job,
        # including those jobs that raise errors
        self.assertEqual(len(requests_http) - nrequests, 4)

        # Builds just from JENKINS_JOB_BUILDS_2
        self.assertEqual(len(builds), 32)
Esempio n. 13
0
    def test_initialization(self):
        """Test whether attributes are initializated"""

        jenkins = Jenkins(JENKINS_SERVER_URL, tag='test')

        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.tag, 'test')
        self.assertIsInstance(jenkins.client, JenkinsClient)

        # When tag is empty or None it will be set to
        # the value in url
        jenkins = Jenkins(JENKINS_SERVER_URL)
        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.tag, JENKINS_SERVER_URL)

        jenkins = Jenkins(JENKINS_SERVER_URL, tag='')
        self.assertEqual(jenkins.url, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.origin, JENKINS_SERVER_URL)
        self.assertEqual(jenkins.tag, JENKINS_SERVER_URL)
Esempio n. 14
0
    def test_search_fields(self):
        """Test whether the search_fields is properly set"""

        configure_http_server()

        # Test fetch builds from jobs list
        jenkins = Jenkins(SERVER_URL)

        builds = [build for build in jenkins.fetch()]

        build = builds[0]
        self.assertEqual(jenkins.metadata_id(build['data']),
                         build['search_fields']['item_id'])
        self.assertEqual(build['data']['number'], 107)
        self.assertEqual(build['data']['number'],
                         build['search_fields']['number'])

        build = builds[1]
        self.assertEqual(jenkins.metadata_id(build['data']),
                         build['search_fields']['item_id'])
        self.assertEqual(build['data']['number'], 106)
        self.assertEqual(build['data']['number'],
                         build['search_fields']['number'])

        build = builds[2]
        self.assertEqual(jenkins.metadata_id(build['data']),
                         build['search_fields']['item_id'])
        self.assertEqual(build['data']['number'], 105)
        self.assertEqual(build['data']['number'],
                         build['search_fields']['number'])
Esempio n. 15
0
    def test_fetch_blacklist(self):
        """Test whether jobs in balcklist are not retrieved"""

        blacklist = [JENKINS_JOB_BUILDS_1]

        configure_http_server()

        jenkins = Jenkins(JENKINS_SERVER_URL, blacklist_jobs=blacklist)
        nrequests = len(requests_http)

        with self.assertLogs(logger, level='WARNING') as cm:
            builds = [build for build in jenkins.fetch()]
            self.assertEqual(cm.output[0], 'WARNING:perceval.backends.core.jenkins:'
                                           'Not getting blacklisted job: apex-build-brahmaputra')

        # No HTTP calls at all must be done for JENKINS_JOB_BUILDS_1
        # Just the first call for all jobs and one for each job,
        # including those jobs that raise errors
        self.assertEqual(len(requests_http) - nrequests, 4)

        # Builds just from JENKINS_JOB_BUILDS_2
        self.assertEqual(len(builds), 32)
Esempio n. 16
0
    def test_has_resuming(self):
        """Test if it returns False when has_resuming is called"""

        self.assertEqual(Jenkins.has_resuming(), False)
Esempio n. 17
0
    def test_has_caching(self):
        """Test if it returns True when has_caching is called"""

        self.assertEqual(Jenkins.has_caching(), True)
Esempio n. 18
0
    def test_fetch_from_cache(self):
        """Test whether the cache works"""

        bodies_jobs = read_file('data/jenkins_jobs.json', mode='rb')
        bodies_builds_job = read_file('data/jenkins_job_builds.json')

        def request_callback(method, uri, headers):
            status = 200

            if uri.startswith(JENKINS_JOBS_URL):
                body = bodies_jobs
            elif uri.startswith(JENKINS_JOB_BUILDS_URL_1) or \
                 uri.startswith(JENKINS_JOB_BUILDS_URL_2):
                body = bodies_builds_job
            elif uri.startswith(JENKINS_JOB_BUILDS_URL_500_ERROR):
                status = 500
                body = '500 Internal Server Error'
            else:
                body = '{'

            return (status, headers, body)

        httpretty.register_uri(httpretty.GET,
                               JENKINS_JOBS_URL,
                               responses=[
                                    httpretty.Response(body=request_callback) \
                                    for _ in range(3)
                               ])
        httpretty.register_uri(httpretty.GET,
                               JENKINS_JOB_BUILDS_URL_1,
                               responses=[
                                    httpretty.Response(body=request_callback) \
                                    for _ in range(2)
                               ])
        httpretty.register_uri(httpretty.GET,
                               JENKINS_JOB_BUILDS_URL_2,
                               responses=[
                                    httpretty.Response(body=request_callback) \
                                    for _ in range(2)
                               ])
        httpretty.register_uri(
            httpretty.GET,
            JENKINS_JOB_BUILDS_URL_500_ERROR,
            responses=[httpretty.Response(body=request_callback)])
        httpretty.register_uri(
            httpretty.GET,
            JENKINS_JOB_BUILDS_URL_JSON_ERROR,
            responses=[httpretty.Response(body=request_callback)])

        # First, we fetch the builds from the server, storing them
        # in a cache
        cache = Cache(self.tmp_path)
        jenkins = Jenkins(JENKINS_SERVER_URL, cache=cache)

        builds = [build for build in jenkins.fetch()]

        # Now, we get the builds from the cache.
        # The contents should be the same and there won't be
        # any new request to the server
        cached_builds = [build for build in jenkins.fetch_from_cache()]
        self.assertEqual(len(cached_builds), len(builds))

        with open("data/jenkins_build.json") as build_json:
            first_build = json.load(build_json)
            self.assertDictEqual(cached_builds[0]['data'], first_build['data'])
Esempio n. 19
0
 def setUp(self):
     super().setUp()
     self.backend_write_archive = Jenkins(JENKINS_SERVER_URL,
                                          archive=self.archive)
     self.backend_read_archive = Jenkins(JENKINS_SERVER_URL,
                                         archive=self.archive)
Esempio n. 20
0
 def setUp(self):
     super().setUp()
     self.backend = Jenkins(JENKINS_SERVER_URL, archive=self.archive)