1
# Copyright (C) 2009 Duncan McGreggor <duncan@canonical.com>
2
# Licenced under the txaws licence available at /LICENSE in the txaws source.
4
from txaws.credentials import AWSCredentials
5
from txaws.ec2.client import EC2Client
6
from txaws.service import (AWSServiceEndpoint, AWSServiceRegion,
7
EC2_ENDPOINT_EU, EC2_ENDPOINT_US, REGION_EU)
8
from txaws.testing.base import TXAWSTestCase
11
class AWSServiceEndpointTestCase(TXAWSTestCase):
14
self.endpoint = AWSServiceEndpoint(uri="http://my.service/da_endpoint")
16
def test_simple_creation(self):
17
endpoint = AWSServiceEndpoint()
18
self.assertEquals(endpoint.scheme, "http")
19
self.assertEquals(endpoint.host, "")
20
self.assertEquals(endpoint.port, 80)
21
self.assertEquals(endpoint.path, "/")
22
self.assertEquals(endpoint.method, "GET")
24
def test_parse_uri(self):
25
self.assertEquals(self.endpoint.scheme, "http")
26
self.assertEquals(self.endpoint.host, "my.service")
27
self.assertEquals(self.endpoint.port, 80)
28
self.assertEquals(self.endpoint.path, "/da_endpoint")
30
def test_parse_uri_https_and_custom_port(self):
31
endpoint = AWSServiceEndpoint(uri="https://my.service:8080/endpoint")
32
self.assertEquals(endpoint.scheme, "https")
33
self.assertEquals(endpoint.host, "my.service")
34
self.assertEquals(endpoint.port, 8080)
35
self.assertEquals(endpoint.path, "/endpoint")
37
def test_custom_method(self):
38
endpoint = AWSServiceEndpoint(uri="http://service/endpoint",
40
self.assertEquals(endpoint.method, "PUT")
42
def test_get_uri(self):
43
uri = self.endpoint.get_uri()
44
self.assertEquals(uri, "http://my.service/da_endpoint")
46
def test_get_uri_custom_port(self):
47
uri = "https://my.service:8080/endpoint"
48
endpoint = AWSServiceEndpoint(uri=uri)
49
new_uri = endpoint.get_uri()
50
self.assertEquals(new_uri, uri)
52
def test_set_path(self):
53
original_path = self.endpoint.path
54
self.endpoint.set_path("/newpath")
56
self.endpoint.get_uri(),
57
"http://my.service/newpath")
60
class AWSServiceRegionTestCase(TXAWSTestCase):
63
self.creds = AWSCredentials("foo", "bar")
64
self.region = AWSServiceRegion(creds=self.creds)
66
def test_simple_creation(self):
67
self.assertEquals(self.creds, self.region.creds)
68
self.assertEquals(self.region._clients, {})
69
self.assertEquals(self.region.ec2_endpoint.get_uri(), EC2_ENDPOINT_US)
71
def test_creation_with_keys(self):
72
region = AWSServiceRegion(access_key="baz", secret_key="quux")
73
self.assertEquals(region.creds.access_key, "baz")
74
self.assertEquals(region.creds.secret_key, "quux")
76
def test_creation_with_keys_and_creds(self):
77
region = AWSServiceRegion(self.creds, access_key="baz",
79
self.assertEquals(self.creds.access_key, "foo")
80
self.assertEquals(self.creds.secret_key, "bar")
82
def test_creation_with_uri(self):
83
region = AWSServiceRegion(creds=self.creds, uri="http://foo/bar")
84
self.assertEquals(region.ec2_endpoint.get_uri(), "http://foo/bar")
86
def test_creation_with_uri_and_region(self):
87
region = AWSServiceRegion(creds=self.creds, region=REGION_EU,
89
self.assertEquals(region.ec2_endpoint.get_uri(), "http://foo/bar")
91
def test_creation_with_region_override(self):
92
region = AWSServiceRegion(creds=self.creds, region=REGION_EU)
93
self.assertEquals(region.ec2_endpoint.get_uri(), EC2_ENDPOINT_EU)
95
def test_get_client_with_empty_cache(self):
96
key = str(EC2Client) + str(self.creds) + str(self.region.ec2_endpoint)
97
original_client = self.region._clients.get(key)
98
new_client = self.region.get_client(
99
EC2Client, creds=self.creds, endpoint=self.region.ec2_endpoint)
100
self.assertEquals(original_client, None)
101
self.assertTrue(isinstance(new_client, EC2Client))
102
self.assertNotEquals(original_client, new_client)
104
def test_get_client_from_cache(self):
105
client1 = self.region.get_client(
106
EC2Client, creds=self.creds, endpoint=self.region.ec2_endpoint)
107
client2 = self.region.get_client(
108
EC2Client, creds=self.creds, endpoint=self.region.ec2_endpoint)
109
self.assertTrue(isinstance(client1, EC2Client))
110
self.assertTrue(isinstance(client2, EC2Client))
111
self.assertEquals(client1, client2)
113
def test_get_client_from_cache_with_purge(self):
114
client1 = self.region.get_client(
115
EC2Client, creds=self.creds, endpoint=self.region.ec2_endpoint,
117
client2 = self.region.get_client(
118
EC2Client, creds=self.creds, endpoint=self.region.ec2_endpoint,
120
self.assertTrue(isinstance(client1, EC2Client))
121
self.assertTrue(isinstance(client2, EC2Client))
122
self.assertNotEquals(client1, client2)
124
def test_get_ec2_client_from_cache(self):
125
client1 = self.region.get_ec2_client(self.creds)
126
client2 = self.region.get_ec2_client(self.creds)
127
self.assertEquals(self.creds, self.region.creds)
128
self.assertTrue(isinstance(client1, EC2Client))
129
self.assertTrue(isinstance(client2, EC2Client))
130
self.assertEquals(client1, client2)