File: test_token.py

package info (click to toggle)
eumdac 3.0.0-1.1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 716 kB
  • sloc: python: 7,325; makefile: 6
file content (73 lines) | stat: -rw-r--r-- 2,720 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import unittest
import time
from datetime import datetime

from responses import RequestsMock, _ensure_url_default_path

from eumdac.token import AccessToken
from .base import DataServiceTestCase, INTEGRATION_TESTING

import requests


class TestAccessToken(DataServiceTestCase):
    def setUp(self):
        super().setUp()
        self.token = AccessToken(self.credentials)

    def test_str_representation(self):
        self.assertEqual(str(self.token), self.token.access_token)

    @unittest.skipIf(INTEGRATION_TESTING, "Avoid revoking tokens on integration")
    def test_revoke_not_expired(self):
        token_url = self.token.urls.get("token", "token")
        revoke_url = self.token.urls.get("token", "revoke")
        self.token = AccessToken(self.credentials)
        str(self.token)
        # token cached, only 1 request
        str(self.token)
        # revoke token
        self.token._revoke()
        str(self.token)
        str(self.token)
        str(self.token)
        # 1 revoke, 1 token request, then cached
        self.requests_mock.assert_call_count(token_url, 2)
        self.requests_mock.assert_call_count(revoke_url, 1)

    def test_expired_token(self):
        token_url = self.token.urls.get("token", "token")
        revoke_url = self.token.urls.get("token", "revoke")
        self.token = AccessToken(self.credentials, validity=15)
        str(self.token)
        time.sleep(30)
        str(self.token)
        # new token requested at least once
        # (can't know how many times it'll be called, depends on server)
        self._assert_was_called(self.requests_mock, token_url)
        # no revoking
        self.requests_mock.assert_call_count(revoke_url, 0)

    def test_properties(self):
        now = datetime.now()
        access_token = self.token.access_token
        expiration = self.token.expiration
        self.assertIsInstance(access_token, str)
        self.assertIsInstance(expiration, datetime)
        self.assertLessEqual(now, self.token.expiration)

    @unittest.skipIf(INTEGRATION_TESTING, "Check against changing value!")
    def test_auth(self):
        mock_token = "1f29ecb3-5973-35d5-a7e6-ec3348c9c49a"
        self.token._access_token = mock_token
        self.token._expiration = time.time() + 1000
        request = requests.Request("GET", "some-url")
        self.token.auth(request)
        auth_header = request.headers.get("authorization")
        self.assertEqual(auth_header, f"Bearer {mock_token}")

    def _assert_was_called(self, requests_mock: RequestsMock, url: str):
        call_count = len(
            [1 for call in requests_mock.calls if call.request.url == _ensure_url_default_path(url)]
        )
        assert call_count > 0