Example #1
0
    def test_initialization(self):
        """Test initialization for GitLab server"""

        setup_http_server(GITLAB_URL_PROJECT,
                          GITLAB_ISSUES_URL,
                          rate_limit_headers={'RateLimit-Remaining': '20'})

        client = GitLabClient("fdroid", "fdroiddata", "your-token")
        self.assertEqual(client.owner, "fdroid")
        self.assertEqual(client.repository, "fdroiddata")
        self.assertEqual(client.token, "your-token")
        self.assertEqual(client.sleep_for_rate, False)
        self.assertEqual(client.base_url, GITLAB_API_URL)
        self.assertEqual(client.min_rate_to_sleep, GitLabClient.MIN_RATE_LIMIT)
        self.assertEqual(client.sleep_time, GitLabClient.DEFAULT_SLEEP_TIME)
        self.assertEqual(client.max_retries, GitLabClient.MAX_RETRIES)
        self.assertEqual(client.rate_limit, 20)
        self.assertEqual(client.rate_limit_reset_ts, None)

        client = GitLabClient("fdroid",
                              "fdroiddata",
                              "your-token",
                              sleep_for_rate=True,
                              min_rate_to_sleep=100,
                              max_retries=10,
                              sleep_time=100)

        self.assertEqual(client.sleep_for_rate, True)
        self.assertEqual(client.base_url, GITLAB_API_URL)
        self.assertEqual(client.min_rate_to_sleep, 100)
        self.assertEqual(client.sleep_time, 100)
        self.assertEqual(client.max_retries, 10)
Example #2
0
    def test_issues_from_date(self):
        """Test issues API call with from date parameter"""

        setup_http_server(GITLAB_URL_PROJECT,
                          GITLAB_ISSUES_URL,
                          rate_limit_headers={'RateLimit-Remaining': '20'})

        page_1 = read_file('data/gitlab/issue_page_1')
        page_2 = read_file('data/gitlab/issue_page_2')

        from_date = datetime.datetime(2017, 1, 1)
        client = GitLabClient("fdroid", "fdroiddata", "your-token")

        raw_issues = [issues for issues in client.issues(from_date)]

        self.assertEqual(len(raw_issues), 2)
        self.assertNotEqual(raw_issues[0], json.dumps(json.loads(page_1)))
        self.assertEqual(raw_issues[1], json.dumps(json.loads(page_2)))

        # Check requests
        expected = {
            'state': ['all'],
            'sort': ['asc'],
            'order_by': ['updated_at'],
            'page': ['2']
        }

        self.assertDictEqual(httpretty.last_request().querystring, expected)
        self.assertEqual(httpretty.last_request().headers["PRIVATE-TOKEN"],
                         "your-token")
    def test_note_emojis(self):
        """Test note_emojis API call"""

        setup_http_server(GITLAB_URL_PROJECT, GITLAB_ISSUES_URL,
                          rate_limit_headers={'RateLimit-Remaining': '20'})

        client = GitLabClient("fdroid", "fdroiddata", "your-token")
        raw_emojis = next(client.note_emojis(1, 2))
        emojis = json.loads(raw_emojis)

        self.assertEqual(len(emojis), 0)
    def test_calculate_time_to_reset(self):
        """Test whether the time to reset is zero if the sleep time is negative"""

        httpretty.register_uri(httpretty.GET,
                               GITLAB_URL_PROJECT,
                               body='',
                               status=200,
                               forcing_headers={
                                   'RateLimit-Remaining': '20',
                                   'RateLimit-Reset': int(datetime_utcnow().replace(microsecond=0).timestamp())
                               })

        client = GitLabClient("fdroid", "fdroiddata", "your-token")
        time_to_reset = client.calculate_time_to_reset()

        self.assertEqual(time_to_reset, 0)
Example #5
0
    def test_issues_empty(self):
        """Test when issue is empty API call"""

        httpretty.register_uri(httpretty.GET,
                               GITLAB_URL_PROJECT,
                               body='',
                               status=200)

        httpretty.register_uri(httpretty.GET,
                               GITLAB_ISSUES_URL,
                               body="[]",
                               status=200)

        client = GitLabClient("fdroid", "fdroiddata", "aaa")

        raw_issues = [issues for issues in client.issues()]

        self.assertEqual(raw_issues[0], "[]")

        self.assertEqual(httpretty.last_request().headers["PRIVATE-TOKEN"],
                         "aaa")
    def test_sanitize_for_archive(self):
        """Test whether the sanitize method works properly"""

        url = "http://example.com"
        headers = {'PRIVATE-TOKEN': 'ABCDEF'}
        payload = {}

        s_url, s_headers, s_payload = GitLabClient.sanitize_for_archive(url, copy.deepcopy(headers), payload)
        headers.pop('PRIVATE-TOKEN')

        self.assertEqual(url, s_url)
        self.assertEqual(headers, s_headers)
        self.assertEqual(payload, s_payload)
    def test_http_wrong_status(self):
        """Test if a error is raised when the http status was not 200"""

        httpretty.register_uri(httpretty.GET,
                               GITLAB_URL_PROJECT,
                               body='',
                               status=200,
                               forcing_headers={
                                   'RateLimit-Remaining': '20',
                                   'RateLimit-Reset': '15'
                               })

        httpretty.register_uri(httpretty.GET,
                               GITLAB_ISSUES_URL,
                               body="",
                               status=500
                               )

        client = GitLabClient("fdroid", "fdroiddata", "your-token", sleep_time=1)

        with self.assertRaises(requests.exceptions.HTTPError):
            _ = [issues for issues in client.issues()]
Example #8
0
    def test_sleep_for_rate(self):
        """Test whether a RateLimit error is thrown when the sleep for rate parameter is false"""

        wait = 2
        reset = int(time.time() + wait)

        httpretty.register_uri(httpretty.GET,
                               GITLAB_URL_PROJECT,
                               body='',
                               status=200,
                               forcing_headers={
                                   'RateLimit-Remaining': '20',
                                   'RateLimit-Reset': reset
                               })

        httpretty.register_uri(
            httpretty.GET,
            GITLAB_ISSUES_URL,
            body='[]',
            status=200,
            forcing_headers={
                'RateLimit-Remaining':
                '0',
                'RateLimit-Reset':
                reset,
                'Link':
                '<' + GITLAB_ISSUES_URL + '/?&page=2>; rel="next", <' +
                GITLAB_ISSUES_URL + '/?&page=3>; rel="last"'
            })

        httpretty.register_uri(httpretty.GET,
                               GITLAB_ISSUES_URL + '/?&page=2',
                               body='[]',
                               status=200,
                               forcing_headers={
                                   'X-RateLimit-Remaining': '20',
                                   'X-RateLimit-Reset': reset
                               })

        client = GitLabClient("fdroid",
                              "fdroiddata",
                              "your-token",
                              sleep_for_rate=True)

        issues = [issues for issues in client.issues()]
        after = int(time.time())

        self.assertTrue(reset >= after)
        self.assertEqual(len(issues), 2)

        client = GitLabClient("fdroid", "fdroiddata", "your-token")

        with self.assertRaises(RateLimitError):
            _ = [issues for issues in client.issues()]
    def test_initialization_entreprise(self):
        """Test initialization for GitLab entreprise server"""

        setup_http_server(GITLAB_ENTERPRISE_URL_PROJECT, GITLAB_ENTERPRISE_ISSUES_URL)

        client = GitLabClient("am", "test", None, base_url=GITLAB_ENTERPRISE_URL)

        self.assertEqual(client.owner, "am")
        self.assertEqual(client.repository, "test")
        self.assertEqual(client.token, None)
        self.assertEqual(client.sleep_for_rate, False)
        self.assertEqual(client.base_url, GITLAB_ENTERPRISE_API_URL)
        self.assertEqual(client.min_rate_to_sleep, GitLabClient.MIN_RATE_LIMIT)
        self.assertEqual(client.sleep_time, GitLabClient.DEFAULT_SLEEP_TIME)
        self.assertEqual(client.max_retries, GitLabClient.MAX_RETRIES)
        self.assertEqual(client.rate_limit, None)
        self.assertEqual(client.rate_limit_reset_ts, None)