Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aws
GitHub Repository: aws/aws-cli
Path: blob/develop/tests/functional/cloudfront/test_sign.py
1567 views
1
# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
#
3
# Licensed under the Apache License, Version 2.0 (the "License"). You
4
# may not use this file except in compliance with the License. A copy of
5
# the License is located at
6
#
7
# http://aws.amazon.com/apache2.0/
8
#
9
# or in the "license" file accompanying this file. This file is
10
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
# ANY KIND, either express or implied. See the License for the specific
12
# language governing permissions and limitations under the License.
13
from botocore.compat import urlparse, parse_qs
14
15
from awscli.testutils import mock
16
from awscli.testutils import FileCreator
17
from awscli.testutils import BaseAWSPreviewCommandParamsTest as \
18
BaseAWSCommandParamsTest
19
20
21
class TestSign(BaseAWSCommandParamsTest):
22
# A private key only for testing purpose.
23
private_key = '''
24
-----BEGIN RSA PRIVATE KEY-----
25
MIIEowIBAAKCAQEAu6o2+Jc8UINw2P/w2l7A1xXu3emQEZQ9diA3bmog8r9Dg+65
26
fZgAqmuNWPqBivv7j3DGnLUdt8uCIr7PYUbK7wDa6n7U3ryOWtO2ZTc3StiJVcqT
27
sokZ0qxGFtDRafjBuydXtcxh52vVTcHqH33nubyyZIzuhTwfmrIOnUXnLwbMrBBP
28
bg/8mlgQooyo1XbrN1eO4XMs+UgQ9Mqc7KRJRinUJ+KYuCnM8f/nN4RjYdjTcghk
29
xCPEHCeSt2luywWyYmfguWCBS2Mu1q0250wKyNazlgiiTJtAuuSeweb4NKPOJL9X
30
hR6Ce6UuU4WYlli8gvQh3FAV3N3C1Rxo20k28QIDAQABAoIBAQCUEkP5dWrzpCJg
31
NeHWizjg/L9SfT1dgXfVQqo6BqckoeElsjDNdifgT6hhcpbQEO52SWeMsiNWp85w
32
l9mNSYxJdIVGzPgtHt27sJyT1DNebOg/tu0+y4qCfcd3rR/u24YQo4RDP5ZoQN82
33
0TBn1LIIDWk8iS6SFdRh/OgnE8bLhNbK9IfZQFEEJrFkArrn/le/ro2mfJkC/imo
34
QvqKmM0dGBXt5SCDSbUQAzKtEcR/4gf/qSjFe2YAwAvSA05WXMH6szdtx6/H/VbK
35
Uck/WwTHvGObQDFEWmICxPK9AWT0qaFNjlUsi3bjQRdIlYYrXe+6nVMB/Jp1awq7
36
tGBqIcWBAoGBAPtXCNuoQhKXqkjJgteQpB+wFav12XRZgpOciYdeviJrgWydpOOu
37
O9wkiRUctUijRJbUuWCJF7SgYGoT2xTTp/COiOReqs7qXLMuuXCZcPKkMRJj5wmo
38
Uc2AwUV/o3+PNz1NFK+2RgciXplac7qugIyuxIvBKuVFTBlCg0+if/0pAoGBAL8k
39
845wKqOeiawwle/o9lKLGPy1T11GrE6l1A5jRuE1WTVM77jRrb0Hmo0mdfHaf5A0
40
EjXGIX/fjcmQzBrEd78eCUsvI2Bgn6xXwhd4TTyWHGZfoQjFqAGkixuLN1oo2h1g
41
bRreFKfAubFP8MC93z23vnH6tdY2VIA4h5ehUFyJAoGAJqxJrKLDJ+E2TmTTQR/8
42
YPPTIdZ+UyzCrrvTXYTydJFeJLxM9suEYmcswJbePgMBNsQckgIGJ8DVlPzhJN88
43
ZANKhPkcByKAiQGTfwPdITiqZE4C6rV/gMNi+bKeEa6TrVcC69Z8B/T94VLNo9fd
44
58esbmSWmRiEkQ5u7f3u+6ECgYA8+6ANCLJB43nPCu07TpsP+LrvHTWF799XdEa0
45
lG3vuiKNA8/TqmoAziU79VJZ6Dkcm9BXga/8aSmGboD/5UDDI+UZLJ/fxtQKmzEc
46
ZdBWjRnge5AYCV+xrnqHPiJZzIDSMIp+sO3sG2vjKzsHc0x/F1lWagOLpWfORLrV
47
4KyP6QKBgAafeSrfK3LM7idiCBuxckLCgFoHa7uXLUNJRS5iIU+bbZLPj2ozu/tk
48
U0jp7sNk1CyMWI36lR3sujkSyH3lPIXVgrXMuGY3PJRGntN8WlWEsw4VUMGRj3h4
49
5rB+y/UOS+nlEwQ6eOS09GByJDEXOXpcwjFcTr/f7V8mi0jH+gY/
50
-----END RSA PRIVATE KEY-----
51
'''
52
prefix = 'cloudfront sign --key-pair-id my_id --url http://example.com/hi '
53
54
def setUp(self):
55
files = FileCreator()
56
self.private_key_file = files.create_file('foo.pem', self.private_key)
57
self.addCleanup(files.remove_all)
58
super(TestSign, self).setUp()
59
60
def assertDesiredUrl(self, url, base, params):
61
self.assertEqual(len(url.splitlines()), 1, "Expects only 1 line")
62
self.assertTrue(url.startswith(base), "URL mismatch")
63
url = url.strip() # Otherwise the last param contains a trailing CRLF
64
self.assertEqual(parse_qs(urlparse(url).query), params)
65
66
def test_canned_policy(self):
67
cmdline = (
68
self.prefix + '--private-key file://' + self.private_key_file +
69
' --date-less-than 2016-1-1')
70
expected_params = {
71
'Key-Pair-Id': ['my_id'],
72
'Expires': ['1451606400'], 'Signature': [mock.ANY]}
73
self.assertDesiredUrl(
74
self.run_cmd(cmdline)[0], 'http://example.com/hi', expected_params)
75
76
def test_custom_policy(self):
77
cmdline = (
78
self.prefix + '--private-key file://' + self.private_key_file +
79
' --date-less-than 2016-1-1 --ip-address 12.34.56.78')
80
expected_params = {
81
'Key-Pair-Id': ['my_id'],
82
'Policy': [mock.ANY], 'Signature': [mock.ANY]}
83
self.assertDesiredUrl(
84
self.run_cmd(cmdline)[0], 'http://example.com/hi', expected_params)
85
86