|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | + |
| 3 | +""" |
| 4 | + message_media_messages |
| 5 | +
|
| 6 | + This file was automatically generated for MessageMedia by APIMATIC v2.0 ( https://apimatic.io ). |
| 7 | +""" |
| 8 | + |
| 9 | +import hashlib |
| 10 | +import unittest |
| 11 | +from datetime import datetime |
| 12 | +from time import mktime |
| 13 | +from wsgiref.handlers import format_date_time |
| 14 | +from tests.test_util import TestUtility |
| 15 | +from message_media_messages.http.auth.auth_manager import AuthManager |
| 16 | +from message_media_messages.configuration import Configuration |
| 17 | +from message_media_messages.api_helper import APIHelper |
| 18 | +from message_media_messages.models.send_messages_request import SendMessagesRequest |
| 19 | +from message_media_messages.models.message import Message |
| 20 | +from message_media_messages.models.format_enum import FormatEnum |
| 21 | +import urllib3 |
| 22 | + |
| 23 | + |
| 24 | +class AuthManagerTests(unittest.TestCase): |
| 25 | + |
| 26 | + body = SendMessagesRequest() |
| 27 | + body.messages = [] |
| 28 | + body.messages.append(Message()) |
| 29 | + body.messages[0].content = 'My tests message' |
| 30 | + body.messages[0].destination_number = '{}' |
| 31 | + body.messages[0].format = FormatEnum.SMS |
| 32 | + |
| 33 | + _url_path = '/v1/messages' |
| 34 | + _query_builder = Configuration.base_uri |
| 35 | + _query_builder += _url_path |
| 36 | + _query_url = APIHelper.clean_url(_query_builder) |
| 37 | + |
| 38 | + _headers = { |
| 39 | + 'accept': 'application/json', |
| 40 | + 'Content-Type': 'application/json; charset=utf-8', |
| 41 | + } |
| 42 | + |
| 43 | + m = hashlib.md5() |
| 44 | + m.update(bytes(APIHelper.json_serialize(body), 'utf-8')) |
| 45 | + content_hash = m.hexdigest() |
| 46 | + |
| 47 | + now = datetime.now() |
| 48 | + stamp = mktime(now.timetuple()) |
| 49 | + date_header = format_date_time(stamp) |
| 50 | + |
| 51 | + content_signature = "x-Content-MD5: {}\n".format(content_hash) |
| 52 | + get_content_signature = "" |
| 53 | + |
| 54 | + def test_post_request_authorization_header_values_are_appropriate(self): |
| 55 | + date_header, expected_algorithm, expected_username, http, query_url, request_header = self.header_setup() |
| 56 | + body = APIHelper.json_serialize(self.body) |
| 57 | + content_signature = self.content_signature |
| 58 | + expected_header = ' headers="date x-Content-MD5 request-line"' |
| 59 | + expected_signature = TestUtility.create_signature(date_header, content_signature, query_url, 'POST', True) |
| 60 | + |
| 61 | + _request = http.request( |
| 62 | + 'POST', |
| 63 | + query_url, |
| 64 | + body=body, |
| 65 | + headers=request_header |
| 66 | + ) |
| 67 | + |
| 68 | + AuthManager.apply_hmac_auth(_request, query_url, body) |
| 69 | + username, algorithm, header, signature = _request.getheader('Authorization').split(',') |
| 70 | + |
| 71 | + self.assert_cases(algorithm, expected_algorithm, expected_header, expected_signature, expected_username, |
| 72 | + header, signature, username) |
| 73 | + |
| 74 | + def test_md5_content_hash_equivalent_to_body(self): |
| 75 | + http = urllib3.PoolManager() |
| 76 | + body = APIHelper.json_serialize(self.body) |
| 77 | + md5 = self.content_hash |
| 78 | + query_url = self._query_url |
| 79 | + request_header = self._headers |
| 80 | + |
| 81 | + _request = http.request( |
| 82 | + 'POST', |
| 83 | + query_url, |
| 84 | + body=body, |
| 85 | + headers=request_header |
| 86 | + ) |
| 87 | + |
| 88 | + AuthManager.apply_hmac_auth(_request, query_url, body) |
| 89 | + requestMD5 = _request.getheader('x-Content-MD5') |
| 90 | + assert md5 == requestMD5 |
| 91 | + |
| 92 | + def test_get_request_authorization_header_values_are_appropriate(self): |
| 93 | + date_header, expected_algorithm, expected_username, http, query_url, request_header = self.header_setup() |
| 94 | + content_signature = "" |
| 95 | + expected_header = ' headers="date request-line"' |
| 96 | + expected_signature = TestUtility.create_signature(date_header, content_signature, query_url, 'GET', True) |
| 97 | + |
| 98 | + _request = http.request( |
| 99 | + 'GET', |
| 100 | + query_url, |
| 101 | + headers=request_header |
| 102 | + ) |
| 103 | + |
| 104 | + AuthManager.apply_hmac_auth(_request, query_url) |
| 105 | + username, algorithm, header, signature = _request.getheader('Authorization').split(',') |
| 106 | + |
| 107 | + self.assert_cases(algorithm, expected_algorithm, expected_header, expected_signature, expected_username, |
| 108 | + header, signature, username) |
| 109 | + |
| 110 | + def header_setup(self): |
| 111 | + http = urllib3.PoolManager() |
| 112 | + date_header = self.date_header |
| 113 | + request_header = self._headers |
| 114 | + query_url = self._query_url |
| 115 | + expected_username = 'hmac username="{}"' |
| 116 | + expected_algorithm = ' algorithm="hmac-sha1"' |
| 117 | + return date_header, expected_algorithm, expected_username, http, query_url, request_header |
| 118 | + |
| 119 | + def assert_cases(self, algorithm, expected_algorithm, expected_header, expected_signature, expected_username, |
| 120 | + header, signature, username): |
| 121 | + with self.subTest(): |
| 122 | + self.assertEqual(expected_username, username) |
| 123 | + self.assertEqual(expected_header, header) |
| 124 | + self.assertEqual(expected_algorithm, algorithm) |
| 125 | + self.assertEqual(expected_signature, signature) |
0 commit comments