Author: tomaz
Date: Thu Nov 24 02:47:19 2011
New Revision: 1205708

URL: http://svn.apache.org/viewvc?rev=1205708&view=rev
Log:
Fix OpenStack Auth 2.0 fixture. Current one probably was from some pre-release
version, because it doesn't match the docs and the actual API response.

Also update all the tests and fix the tenant id parsing.

Modified:
    libcloud/trunk/libcloud/common/openstack.py
    libcloud/trunk/test/compute/fixtures/openstack/_v2_0__auth.json
    libcloud/trunk/test/compute/test_openstack.py

Modified: libcloud/trunk/libcloud/common/openstack.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/common/openstack.py?rev=1205708&r1=1205707&r2=1205708&view=diff
==============================================================================
--- libcloud/trunk/libcloud/common/openstack.py (original)
+++ libcloud/trunk/libcloud/common/openstack.py Thu Nov 24 02:47:19 2011
@@ -84,7 +84,6 @@ class OpenStackAuthConnection(Connection
         self.auth_version = auth_version
         self.auth_url = auth_url
         self.urls = {}
-        self.tenant = {}
         self.driver = self.parent_conn.driver
 
     def add_default_headers(self, headers):
@@ -190,9 +189,6 @@ class OpenStackAuthConnection(Connection
                 token = access['token']
                 self.auth_token = token['id']
                 self.urls = access['serviceCatalog']
-
-                self.tenant['id'] = token['tenant']['id']
-                self.tenant['name'] = token['tenant']['name']
             except KeyError, e:
                 raise MalformedResponseError('Auth JSON response is missing 
required elements', e)
 
@@ -284,11 +280,14 @@ class OpenStackBaseConnection(Connection
 
             # TODO: Multi-region support
             if self._auth_version == '2.0':
+                self.tenant_ids = {}
+
                 for service in osa.urls:
-                    if service.get('type') == 'compute':
+                    service_type = service['type']
+                    if service_type == 'compute':
                         self.server_url = 
self._get_default_region(service.get('endpoints', []))
 
-                self.tenant = osa.tenant
+                    self.tenant_ids[service_type] = 
service['endpoints'][0]['tenantId']
             elif self._auth_version in ['1.1', '1.0']:
                 self.server_url = 
self._get_default_region(osa.urls.get('cloudServers', []))
                 self.cdn_management_url = 
self._get_default_region(osa.urls.get('cloudFilesCDN', []))

Modified: libcloud/trunk/test/compute/fixtures/openstack/_v2_0__auth.json
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/compute/fixtures/openstack/_v2_0__auth.json?rev=1205708&r1=1205707&r2=1205708&view=diff
==============================================================================
--- libcloud/trunk/test/compute/fixtures/openstack/_v2_0__auth.json (original)
+++ libcloud/trunk/test/compute/fixtures/openstack/_v2_0__auth.json Thu Nov 24 
02:47:19 2011
@@ -1 +1,64 @@
-{"access": {"token": {"expires": "2011-11-08T15:57:43.653263", "id": 
"aaaaaaaaaaaa-bbb-cccccccccccccc", "tenant": {"id": "45", "name": 
"testproj-project"}}, "serviceCatalog": [{"endpoints": [{"adminURL": 
"http://my.fake.hostname:8774/v1.1/slug";, "region": "ORD", "internalURL": ".", 
"publicURL": "http://my.fake.hostname:8774/v1.1/slug"}], "type": "compute", 
"name": "nova"}], "user": {"id": "45", "roles": [{"tenantId": "45", "id": "2", 
"name": "Member"}], "name": "testproj"}}}
+{
+    "access": {
+        "token": {
+            "id": "aaaaaaaaaaaa-bbb-cccccccccccccc",
+            "expires": "2011-11-23T21:00:14.000-06:00"
+        },
+        "serviceCatalog": [
+            {
+                "endpoints": [
+                    {
+                        "region": "ORD",
+                        "tenantId": 
"MossoCloudFS_11111-111111111-1111111111-1111111",
+                        "publicURL": 
"https://cdn2.clouddrive.com/v1/MossoCloudFS_11111-111111111-1111111111-1111111";,
+                        "version": {
+                            "versionInfo": "https://cdn2.clouddrive.com/v1/";,
+                            "versionList": "https://cdn2.clouddrive.com/";,
+                            "versionId": "1"
+                        }
+                    }
+                ],
+                "name": "cloudFilesCDN",
+                "type": "object-store"
+            },
+            {
+                "endpoints": [
+                    {
+                        "region": "ORD",
+                        "tenantId": 
"MossoCloudFS_11111-111111111-1111111111-1111111",
+                        "publicURL": 
"https://storage101.ord1.clouddrive.com/v1/MossoCloudFS_11111-111111111-1111111111-1111111";,
+                        "internalURL": 
"https://snet-storage101.ord1.clouddrive.com/v1/MossoCloudFS_11111-111111111-1111111111-1111111";
+                    }
+                ],
+                "name": "cloudFiles",
+                "type": "object-store"
+            },
+            {
+                "endpoints": [
+                    {
+                        "tenantId": "1337",
+                        "publicURL": 
"https://servers.api.rackspacecloud.com/v1.0/1337";,
+                        "version": {
+                            "versionInfo": 
"https://servers.api.rackspacecloud.com/v1.0/";,
+                            "versionList": 
"https://servers.api.rackspacecloud.com/";,
+                            "versionId": "1.0"
+                        }
+                    }
+                ],
+                "name": "cloudServers",
+                "type": "compute"
+            }
+        ],
+        "user": {
+            "id": "7",
+            "roles": [
+                {
+                    "id": "identity:default",
+                    "description": "Default Role.",
+                    "name": "identity:default"
+                }
+            ],
+            "name": "testuser"
+        }
+    }
+}

Modified: libcloud/trunk/test/compute/test_openstack.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/compute/test_openstack.py?rev=1205708&r1=1205707&r2=1205708&view=diff
==============================================================================
--- libcloud/trunk/test/compute/test_openstack.py (original)
+++ libcloud/trunk/test/compute/test_openstack.py Thu Nov 24 02:47:19 2011
@@ -14,6 +14,7 @@
 # limitations under the License.
 import sys
 import unittest
+import types
 import httplib
 
 from libcloud.common.types import InvalidCredsError, MalformedResponseError
@@ -673,7 +674,7 @@ class OpenStack_1_1_FactoryMethodTests(O
     driver_klass = OpenStack_1_1_NodeDriver
     driver_type = get_driver(Provider.OPENSTACK)
     driver_args = OPENSTACK_PARAMS + ('1.1',)
-
+    driver_kwargs = {'ex_force_auth_version': '1.0'}
 
 class OpenStack_1_1_MockHttp(MockHttpTestCase):
     fixtures = ComputeFileFixtures('openstack_v1.1')
@@ -770,23 +771,56 @@ class OpenStack_1_1_MockHttp(MockHttpTes
         else:
             raise NotImplementedError()
 
+class OpenStack_1_1_Auth_2_0_MockHttp(OpenStack_1_1_MockHttp):
+    fixtures = ComputeFileFixtures('openstack_v1.1')
+    auth_fixtures = OpenStackFixtures()
+    json_content_headers = {'content-type': 'application/json; charset=UTF-8'}
+
+    def __init__(self, *args, **kwargs):
+        super(OpenStack_1_1_Auth_2_0_MockHttp, self).__init__(*args, **kwargs)
+
+        # TODO Figure out why 1.1 tests are using some 1.0 endpoints
+        methods1 = OpenStackMockHttp.__dict__
+        methods2 = OpenStack_1_1_MockHttp.__dict__
+
+        names1 = [m for m in methods1 if m.find('_v1_0') == 0]
+        names2 = [m for m in methods2 if m.find('_v1_1') == 0]
+
+        for name in names1:
+            method = methods1[name]
+            new_name = name.replace('_v1_0_slug_', '_v1_0_1337_')
+            setattr(self, new_name, types.MethodType(method, self,
+                OpenStack_1_1_Auth_2_0_MockHttp))
+
+        for name in names2:
+            method = methods2[name]
+            new_name = name.replace('_v1_1_slug_', '_v1_0_1337_')
+            setattr(self, new_name, types.MethodType(method, self,
+                OpenStack_1_1_Auth_2_0_MockHttp))
+
+
 class OpenStack_1_1_Auth_2_0_Tests(OpenStack_1_1_Tests):
+    driver_args = OPENSTACK_PARAMS + ('1.1',)
     driver_kwargs = {'ex_force_auth_version': '2.0'}
 
     def setUp(self):
-        self.driver_klass.connectionCls.conn_classes = 
(OpenStack_1_1_MockHttp, OpenStack_1_1_MockHttp)
+        self.driver_klass.connectionCls.conn_classes = \
+                (OpenStack_1_1_Auth_2_0_MockHttp, 
OpenStack_1_1_Auth_2_0_MockHttp)
         self.driver_klass.connectionCls.auth_url = 
"https://auth.api.example.com/v2.0/";
         OpenStack_1_1_MockHttp.type = None
         self.driver = self.create_driver()
         clear_pricing_data()
         self.node = self.driver.list_nodes()[1]
 
-        server_url = 'http://my.fake.hostname:8774/v1.1/slug'
+        server_url = 'https://servers.api.rackspacecloud.com/v1.0/1337'
         auth_token = 'aaaaaaaaaaaa-bbb-cccccccccccccc'
+        tenant_compute = '1337'
+        tenant_object_store = 'MossoCloudFS_11111-111111111-1111111111-1111111'
+
         self.assertEqual(self.driver.connection.server_url, server_url)
         self.assertEqual(self.driver.connection.auth_token, auth_token)
-        self.assertEqual(self.driver.connection.tenant, {'id': '45', 'name':
-                                                         'testproj-project'})
+        self.assertEqual(self.driver.connection.tenant_ids,
+              {'compute': tenant_compute, 'object-store': tenant_object_store})
 
 
 


Reply via email to