diff options
| author | Yogeshwar Srikrishnan <yoga80@yahoo.com> | 2011-05-20 17:02:58 -0500 |
|---|---|---|
| committer | Yogeshwar Srikrishnan <yoga80@yahoo.com> | 2011-05-20 17:02:58 -0500 |
| commit | 8e2713a6496657bcc9db2ebc5b60f08c4576655c (patch) | |
| tree | b6327d2862e0db14c51bb0702c267ee6798c05d9 | |
| parent | 7a2081109118e8f9fe910d9408d075cf6184ab59 (diff) | |
| parent | 4a74b256f903d947258f74a4341fe203b562122c (diff) | |
Merge remote branch 'khussein/master'
38 files changed, 2081 insertions, 1712 deletions
@@ -120,11 +120,11 @@ After starting keystone a keystone.db sqlite database should be created in the k Add test data to the database: - $ sqlite3 bin/keystone.sqlite < test/test_setup.sql + $ sqlite3 bin/keystone.db < test/test_setup.sql To clean the test database - $ sqlite3 bin/keystone.sqlite < test/kill.sql + $ sqlite3 bin/keystone.db < test/kill.sql To run client demo (with all auth middleware running locally on sample service): diff --git a/bin/keystone-auth b/bin/keystone-auth index eae99ec9..8dc71aaa 100755 --- a/bin/keystone-auth +++ b/bin/keystone-auth @@ -60,6 +60,8 @@ if __name__ == '__main__': conf, app = config.load_paste_app('server', options, args) server = wsgi.Server() server.start(app, int(conf['bind_port']), conf['bind_host']) + print "Server listening on %s:%s" % (conf['bind_host'], + conf['bind_port']) server.wait() except RuntimeError, e: sys.exit("ERROR: %s" % e) diff --git a/docs/guide/src/docbkx/samples/extension.json b/docs/guide/src/docbkx/samples/extension.json index 68233e90..9efaa422 100644 --- a/docs/guide/src/docbkx/samples/extension.json +++ b/docs/guide/src/docbkx/samples/extension.json @@ -9,7 +9,7 @@ { "rel" : "describedby", "type" : "application/pdf", - "href" : "http://docs.rackspacecloud.com/idm/api/ext/identity-meta-20111201.pdf" + "href" : "http://docs.rackspacecloud.com/identity/api/ext/identity-meta-20111201.pdf" }, { "rel" : "describedby", diff --git a/docs/guide/src/docbkx/samples/extension.xml b/docs/guide/src/docbkx/samples/extension.xml index d0dbffe9..056d7e96 100644 --- a/docs/guide/src/docbkx/samples/extension.xml +++ b/docs/guide/src/docbkx/samples/extension.xml @@ -13,10 +13,10 @@ <atom:link rel="describedby" type="application/pdf" - href="http://docs.rackspacecloud.com/idm/api/ext/idm-meta-20111201.pdf"/> + href="http://docs.rackspacecloud.com/identity/api/ext/identity-meta-20111201.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" - href="http://docs.rackspacecloud.com/idm/api/ext/idm-meta.wadl"/> + href="http://docs.rackspacecloud.com/identity/api/ext/identity-meta.wadl"/> </extension> diff --git a/docs/guide/src/docbkx/samples/extensions.json b/docs/guide/src/docbkx/samples/extensions.json index 8b594526..553c892e 100644 --- a/docs/guide/src/docbkx/samples/extensions.json +++ b/docs/guide/src/docbkx/samples/extensions.json @@ -3,7 +3,7 @@ "values" : [ { "name" : "Reset Password Extension", - "namespace" : "http://docs.rackspacecloud.com/idm/api/ext/rpe/v1.0", + "namespace" : "http://docs.rackspacecloud.com/identity/api/ext/rpe/v1.0", "alias" : "RS-RPE", "updated" : "2011-01-22T13:25:27-06:00", "description" : "Adds the capability to reset a user's password. The user is emailed when the password has been reset.", @@ -11,12 +11,12 @@ { "rel" : "describedby", "type" : "application/pdf", - "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-rpe-20111111.pdf" + "href" : "http://docs.rackspacecloud.com/identity/api/ext/identity-rpe-20111111.pdf" }, { "rel" : "describedby", "type" : "application/vnd.sun.wadl+xml", - "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-rpe.wadl" + "href" : "http://docs.rackspacecloud.com/identity/api/ext/identity-rpe.wadl" } ] }, @@ -30,12 +30,12 @@ { "rel" : "describedby", "type" : "application/pdf", - "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-meta-20111201.pdf" + "href" : "http://docs.rackspacecloud.com/identity/api/ext/identity-meta-20111201.pdf" }, { "rel" : "describedby", "type" : "application/vnd.sun.wadl+xml", - "href" : "http://docs.rackspacecloud.com/idm/api/ext/idm-meta.wadl" + "href" : "http://docs.rackspacecloud.com/identity/api/ext/identity-meta.wadl" } ] } diff --git a/docs/guide/src/docbkx/samples/extensions.xml b/docs/guide/src/docbkx/samples/extensions.xml index f0a9a49d..c11b06d7 100644 --- a/docs/guide/src/docbkx/samples/extensions.xml +++ b/docs/guide/src/docbkx/samples/extensions.xml @@ -4,7 +4,7 @@ xmlns:atom="http://www.w3.org/2005/Atom"> <extension name="Reset Password Extension" - namespace="http://docs.rackspacecloud.com/idm/api/ext/rpe/v1.0" + namespace="http://docs.rackspacecloud.com/identity/api/ext/rpe/v1.0" alias="RS-RPE" updated="2011-01-22T13:25:27-06:00"> @@ -15,10 +15,10 @@ <atom:link rel="describedby" type="application/pdf" - href="http://docs.rackspacecloud.com/idm/api/ext/idm-rpe-20111111.pdf"/> + href="http://docs.rackspacecloud.com/identity/api/ext/identity-rpe-20111111.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" - href="http://docs.rackspacecloud.com/idm/api/ext/idm-rpe.wadl"/> + href="http://docs.rackspacecloud.com/identity/api/ext/identity-rpe.wadl"/> </extension> <extension name="User Metadata Extension" @@ -31,9 +31,9 @@ <atom:link rel="describedby" type="application/pdf" - href="http://docs.rackspacecloud.com/idm/api/ext/idm-meta-20111201.pdf"/> + href="http://docs.rackspacecloud.com/identity/api/ext/identity-meta-20111201.pdf"/> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" - href="http://docs.rackspacecloud.com/idm/api/ext/idm-meta.wadl"/> + href="http://docs.rackspacecloud.com/identity/api/ext/identity-meta.wadl"/> </extension> </extensions> diff --git a/docs/guide/src/docbkx/samples/identity_fault.json b/docs/guide/src/docbkx/samples/identity_fault.json index 84e3908e..d61feff4 100644 --- a/docs/guide/src/docbkx/samples/identity_fault.json +++ b/docs/guide/src/docbkx/samples/identity_fault.json @@ -1,4 +1,4 @@ -{"idmFault": +{"identityFault": { "message": "Fault", "details": "Error Details...", diff --git a/docs/guide/src/docbkx/samples/identity_fault.xml b/docs/guide/src/docbkx/samples/identity_fault.xml index 0592d948..6787af21 100644 --- a/docs/guide/src/docbkx/samples/identity_fault.xml +++ b/docs/guide/src/docbkx/samples/identity_fault.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<idmFault xmlns="http://docs.openstack.org/identity/api/v2.0" +<identityFault xmlns="http://docs.openstack.org/identity/api/v2.0" code="500"> <message>Fault</message> <details>Error Details...</details> -</idmFault> +</identityFault> diff --git a/docs/guide/src/docbkx/samples/samplerequestheader.json b/docs/guide/src/docbkx/samples/samplerequestheader.json index 7db2a40f..32a3a798 100644 --- a/docs/guide/src/docbkx/samples/samplerequestheader.json +++ b/docs/guide/src/docbkx/samples/samplerequestheader.json @@ -1,4 +1,4 @@ -POST /v1.0/token HTTP/1.1 +POST /v2.0/token HTTP/1.1 Host: identity.api.rackspace.com Content-Type: application/json Accept: application/xml
\ No newline at end of file diff --git a/docs/guide/src/docbkx/samples/version-atom.xml b/docs/guide/src/docbkx/samples/version-atom.xml index 13ac3b0b..519ab203 100644 --- a/docs/guide/src/docbkx/samples/version-atom.xml +++ b/docs/guide/src/docbkx/samples/version-atom.xml @@ -7,13 +7,13 @@ <link rel="self" href="http://identity.api.openstack.org/v2.0/"/> <entry> <id>http://identity.api.openstack.org/v2.0/</id> - <title type="text">Version v1.0</title> + <title type="text">Version v2.0</title> <updated>2011-01-21T11:33:21-06:00</updated> <link rel="self" href="http://identity.api.openstack.org/v2.0/"/> <link rel="describedby" type="application/pdf" - href="http://docs.rackspacecloud.com/identity/api/v2.0/idm-devguide-20110125.pdf"/> + href="http://docs.openstack.org/identity/api/v2.0/identity-devguide-20110125.pdf"/> <link rel="describedby" type="application/vnd.sun.wadl+xml" - href="http://docs.rackspacecloud.com/identity/api/v2.0/application.wadl"/> - <content type="text">Version v1.0 CURRENT (2011-01-21T11:33:21-06:00)</content> + href="http://docs.openstack.org/identity/api/v2.0/application.wadl"/> + <content type="text">Version v2.0 CURRENT (2011-01-21T11:33:21-06:00)</content> </entry> </feed> diff --git a/docs/guide/src/docbkx/samples/version.json b/docs/guide/src/docbkx/samples/version.json index 60953de0..fce09386 100644 --- a/docs/guide/src/docbkx/samples/version.json +++ b/docs/guide/src/docbkx/samples/version.json @@ -1,6 +1,6 @@ { "version" : { - "id" : "v1.0", + "id" : "v2.0", "status" : "CURRENT", "updated" : "2011-01-21T11:33:21-06:00", "links": [ @@ -11,7 +11,7 @@ { "rel" : "describedby", "type" : "application/pdf", - "href" : "http://docs.rackspacecloud.com/identity/api/v2.0/idm-devguide-20110125.pdf" + "href" : "http://docs.rackspacecloud.com/identity/api/v2.0/identity-devguide-20110125.pdf" }, { "rel" : "describedby", diff --git a/docs/guide/src/docbkx/samples/version.xml b/docs/guide/src/docbkx/samples/version.xml index 08eac21e..0e884504 100644 --- a/docs/guide/src/docbkx/samples/version.xml +++ b/docs/guide/src/docbkx/samples/version.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <version xmlns="http://docs.openstack.org/common/api/v1.0" xmlns:atom="http://www.w3.org/2005/Atom" - id="v1.0" status="CURRENT" updated="2011-01-21T11:33:21-06:00"> + id="v2.0" status="CURRENT" updated="2011-01-21T11:33:21-06:00"> <media-types> <media-type base="application/xml" @@ -15,7 +15,7 @@ <atom:link rel="describedby" type="application/pdf" - href="http://docs.rackspacecloud.com/identity/api/v2.0/idm-devguide-20110125.pdf" /> + href="http://docs.rackspacecloud.com/identity/api/v2.0/identity-devguide-20110125.pdf" /> <atom:link rel="describedby" type="application/vnd.sun.wadl+xml" diff --git a/docs/guide/src/docbkx/samples/versions-atom.xml b/docs/guide/src/docbkx/samples/versions-atom.xml index d9fcade7..55c27318 100644 --- a/docs/guide/src/docbkx/samples/versions-atom.xml +++ b/docs/guide/src/docbkx/samples/versions-atom.xml @@ -13,7 +13,7 @@ <content type="text">Version v1.1 CURRENT (2010-12-12T18:30:02.25Z)</content> </entry> <entry> - <id>http://identity.api.openstack.org/v2.0/</id> + <id>http://identity.api.openstack.org/v1.0/</id> <title type="text">Version v1.0</title> <updated>2009-10-09T11:30:00Z</updated> <link rel="self" href="http://identity.api.openstack.org/v2.0/"/> diff --git a/docs/guide/src/docbkx/xsd/api.xsd b/docs/guide/src/docbkx/xsd/api.xsd index cedb4026..d4603c2e 100644 --- a/docs/guide/src/docbkx/xsd/api.xsd +++ b/docs/guide/src/docbkx/xsd/api.xsd @@ -4,7 +4,7 @@ elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:idm="http://docs.openstack.org/identity/api/v2.0" + xmlns:identity="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://docs.openstack.org/identity/api/v2.0" > diff --git a/docs/guide/src/docbkx/xsd/fault.xsd b/docs/guide/src/docbkx/xsd/fault.xsd index c37c0419..6725e3a4 100644 --- a/docs/guide/src/docbkx/xsd/fault.xsd +++ b/docs/guide/src/docbkx/xsd/fault.xsd @@ -4,23 +4,23 @@ elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:idm="http://docs.openstack.org/identity/api/v2.0" + xmlns:identity="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://docs.openstack.org/identity/api/v2.0" > <!-- Fault Elements --> - <element name="idmFault" type="idm:IDMFault"/> - <element name="serviceUnavailable" type="idm:ServiceUnavailableFault"/> - <element name="badRequest" type="idm:BadRequestFault"/> - <element name="unauthorized" type="idm:UnauthorizedFault"/> - <element name="overLimit" type="idm:OverLimitFault"/> - <element name="userDisabled" type="idm:UserDisabledFault"/> - <element name="forbidden" type="idm:ForbiddenFault"/> - <element name="itemNotFound" type="idm:ItemNotFoundFault"/> - <element name="tenantConflict" type="idm:TenantConflictFault"/> + <element name="identityFault" type="identity:IdentityFault"/> + <element name="serviceUnavailable" type="identity:ServiceUnavailableFault"/> + <element name="badRequest" type="identity:BadRequestFault"/> + <element name="unauthorized" type="identity:UnauthorizedFault"/> + <element name="overLimit" type="identity:OverLimitFault"/> + <element name="userDisabled" type="identity:UserDisabledFault"/> + <element name="forbidden" type="identity:ForbiddenFault"/> + <element name="itemNotFound" type="identity:ItemNotFoundFault"/> + <element name="tenantConflict" type="identity:TenantConflictFault"/> <!-- Fault Types --> - <complexType name="IDMFault"> + <complexType name="IdentityFault"> <sequence> <element name="message" type="xsd:string"> <annotation> @@ -66,56 +66,56 @@ <complexType name="ServiceUnavailableFault"> <complexContent> - <extension base="idm:IDMFault"> + <extension base="identity:IdentityFault"> </extension> </complexContent> </complexType> <complexType name="BadRequestFault"> <complexContent> - <extension base="idm:IDMFault"> + <extension base="identity:IdentityFault"> </extension> </complexContent> </complexType> <complexType name="UnauthorizedFault"> <complexContent> - <extension base="idm:IDMFault"> + <extension base="identity:IdentityFault"> </extension> </complexContent> </complexType> <complexType name="UserDisabledFault"> <complexContent> - <extension base="idm:IDMFault"> + <extension base="identity:IdentityFault"> </extension> </complexContent> </complexType> <complexType name="ForbiddenFault"> <complexContent> - <extension base="idm:IDMFault"> + <extension base="identity:IdentityFault"> </extension> </complexContent> </complexType> <complexType name="ItemNotFoundFault"> <complexContent> - <extension base="idm:IDMFault"> + <extension base="identity:IdentityFault"> </extension> </complexContent> </complexType> <complexType name="TenantConflictFault"> <complexContent> - <extension base="idm:IDMFault"> + <extension base="identity:IdentityFault"> </extension> </complexContent> </complexType> <complexType name="OverLimitFault"> <complexContent> - <extension base="idm:IDMFault"> + <extension base="identity:IdentityFault"> <attribute name="retryAt" type="xsd:dateTime" use="optional"> <annotation> <xsd:documentation diff --git a/docs/guide/src/docbkx/xsd/tenant.xsd b/docs/guide/src/docbkx/xsd/tenant.xsd index 400ded28..26ef15fe 100644 --- a/docs/guide/src/docbkx/xsd/tenant.xsd +++ b/docs/guide/src/docbkx/xsd/tenant.xsd @@ -4,7 +4,7 @@ elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:idm="http://docs.openstack.org/identity/api/v2.0" + xmlns:identity="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns:atom="http://www.w3.org/2005/Atom" @@ -15,13 +15,13 @@ schemaLocation="atom/atom.xsd" /> <!-- Elements --> - <element name="tenant" type="idm:Tenant" /> - <element name="tenants" type="idm:Tenants" /> + <element name="tenant" type="identity:Tenant" /> + <element name="tenants" type="identity:Tenants" /> <!-- Complex Types --> <complexType name="Tenants"> <sequence> - <element name="tenant" type="idm:Tenant" maxOccurs="1000"/> + <element name="tenant" type="identity:Tenant" maxOccurs="1000"/> <element vc:minVersion="1.1" ref="atom:link" minOccurs="0" maxOccurs="unbounded" /> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" /> </sequence> diff --git a/docs/guide/src/docbkx/xsd/token.xsd b/docs/guide/src/docbkx/xsd/token.xsd index de95da4c..888bbebf 100644 --- a/docs/guide/src/docbkx/xsd/token.xsd +++ b/docs/guide/src/docbkx/xsd/token.xsd @@ -4,19 +4,19 @@ elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:idm="http://docs.openstack.org/identity/api/v2.0" + xmlns:identity="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://docs.openstack.org/identity/api/v2.0" > <!-- Elements --> - <element name="passwordCredentials" type="idm:PasswordCredentials"/> - <element name="auth" type="idm:AuthData"/> + <element name="passwordCredentials" type="identity:PasswordCredentials"/> + <element name="auth" type="identity:AuthData"/> <!-- Complex Types --> <complexType name="Credentials" abstract="true" /> <complexType name="PasswordCredentials"> <complexContent> - <extension base="idm:Credentials"> + <extension base="identity:Credentials"> <sequence> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" /> </sequence> @@ -30,8 +30,8 @@ <complexType name="AuthData"> <sequence> - <element name="token" type="idm:Token"/> - <element name="user" type="idm:User"/> + <element name="token" type="identity:Token"/> + <element name="user" type="identity:User"/> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" /> </sequence> <anyAttribute namespace="##other" processContents="lax"/> @@ -48,7 +48,7 @@ <complexType name="User"> <sequence> - <element name="groups" type="idm:Groups" /> + <element name="groups" type="identity:Groups" /> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" /> </sequence> <attribute name="tenantId" type="xsd:string"/> @@ -58,7 +58,7 @@ <complexType name="Groups"> <sequence> - <element name="group" type="idm:Group" maxOccurs="1000"/> + <element name="group" type="identity:Group" maxOccurs="1000"/> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" /> </sequence> <anyAttribute namespace="##other" processContents="lax"/> diff --git a/echo/echo_client.py b/echo/echo_client.py index aaa49aa2..a70d2a4a 100644 --- a/echo/echo_client.py +++ b/echo/echo_client.py @@ -26,7 +26,7 @@ def get_auth_token(username, password, tenant): headers = {"Content-type": "application/json", "Accept": "text/json"} params = {"passwordCredentials": {"username": username, "password": password, - "tenantId": "1"}} + "tenantId": tenant}} conn = httplib.HTTPConnection("localhost:8080") conn.request("POST", "/v2.0/token", json.dumps(params), headers=headers) response = conn.getresponse() @@ -68,7 +68,7 @@ if __name__ == '__main__': # Call the keystone service to get a token # NOTE: assumes the test_setup.sql script has loaded this user print "\033[91mTrying with valid test credentials...\033[0m" - auth = get_auth_token("joeuser", "secrete", "1") + auth = get_auth_token("joeuser", "secrete", "1234") obj = json.loads(auth) token = obj["auth"]["token"]["id"] print "Token obtained:", token diff --git a/etc/keystone.conf b/etc/keystone.conf index 79a6b4d4..117b3eca 100644 --- a/etc/keystone.conf +++ b/etc/keystone.conf @@ -3,7 +3,7 @@ verbose = True # Show debugging output in logs (sets DEBUG log level output) -debug = False +debug = True [app:server] paste.app_factory = keystone.server:app_factory diff --git a/keystone/common/wsgi.py b/keystone/common/wsgi.py index d9cab6dc..32de27c9 100755 --- a/keystone/common/wsgi.py +++ b/keystone/common/wsgi.py @@ -176,7 +176,7 @@ class Router(object): # Pointing to an arbitrary WSGI app. You can specify the # {path_info:.*} parameter so the target app can be handed just that # section of the URL. - mapper.connect(None, "/v1.0/{path_info:.*}", controller=BlogApp()) + mapper.connect(None, "/v2.0/{path_info:.*}", controller=BlogApp()) """ self.map = mapper self._router = routes.middleware.RoutesMiddleware(self._dispatch, diff --git a/keystone/db/sqlalchemy/api.py b/keystone/db/sqlalchemy/api.py index edbeb309..e479a4aa 100644 --- a/keystone/db/sqlalchemy/api.py +++ b/keystone/db/sqlalchemy/api.py @@ -330,6 +330,13 @@ def user_get(id, session=None): return result +def user_get_email(email, session=None): + if not session: + session = get_session() + result = session.query(models.User).filter_by(email=email).first() + return result + + def user_groups(id, session=None): if not session: session = get_session() @@ -548,14 +555,6 @@ def user_get_update(id, session=None): result = session.query(models.User).filter_by(id=id).first() return result - -def user_get_email(email, session=None): - if not session: - session = get_session() - result = session.query(models.User).filter_by(email=email).first() - return result - - def users_get_by_tenant_get_page(tenant_id, marker, limit, session=None): if not session: session = get_session() diff --git a/keystone/logic/service.py b/keystone/logic/service.py index 8f2836c4..8c833df3 100644 --- a/keystone/logic/service.py +++ b/keystone/logic/service.py @@ -18,12 +18,12 @@ from datetime import timedelta import uuid import keystone.logic.types.auth as auth -import keystone.logic.types.tenant as tenants import keystone.logic.types.atom as atom -import keystone.logic.types.fault as fault -import keystone.logic.types.user as users import keystone.db.sqlalchemy.api as db_api import keystone.db.sqlalchemy.models as db_models +import keystone.logic.types.fault as fault +import keystone.logic.types.tenant as tenants +import keystone.logic.types.user as users class IdentityService(object): @@ -63,8 +63,10 @@ class IdentityService(object): raise fault.IdentityFault("Strange: user %s is not associated " "with a tenant!" % duser.id) user = db_api.user_get_by_tenant(duser.id, credentials.tenant_id) - if not credentials.tenant_id and user: - raise fault.IdentityFault("Error: user %s is not associated " + + if not credentials.tenant_id or not user: + raise fault.ForbiddenFault("Error: user %s is " + "not associated " "with a tenant! %s" % (duser.id, credentials.tenant_id)) dtoken.tenant_id = credentials.tenant_id @@ -400,7 +402,6 @@ class IdentityService(object): # # User Operations # - def create_user(self, admin_token, tenant_id, user): self.__validate_token(admin_token) @@ -438,6 +439,7 @@ class IdentityService(object): return user + def get_tenant_users(self, admin_token, tenant_id, marker, limit, url): self.__validate_token(admin_token) diff --git a/keystone/logic/types/auth.py b/keystone/logic/types/auth.py index 9bb0b9ee..c822ea8c 100644 --- a/keystone/logic/types/auth.py +++ b/keystone/logic/types/auth.py @@ -13,17 +13,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -from datetime import datetime - from abc import ABCMeta +from datetime import datetime import json from lxml import etree import keystone.logic.types.fault as fault + class PasswordCredentials(object): - "Credentials based on username, password, and (optional) tenant_id." + """Credentials based on username, password, and (optional) tenant_id. + To handle multiple token for a user depending on tenants, + tenant_id is mandatory. + """ def __init__(self, username, password, tenant_id): self.username = username @@ -46,6 +49,12 @@ class PasswordCredentials(object): if password == None: raise fault.BadRequestFault("Expecting a password") tenant_id = root.get("tenantId") + + #--for multi-token handling-- + if tenant_id == None: + raise fault.BadRequestFault("Expecting tenant") + # ---- + return PasswordCredentials(username, password, tenant_id) except etree.LxmlError as e: raise fault.BadRequestFault("Cannot parse password credentials", @@ -67,7 +76,10 @@ class PasswordCredentials(object): if "tenantId" in cred: tenant_id = cred["tenantId"] else: - tenant_id = None + #--for multi-token handling-- + if tenant_id == None: + raise fault.BadRequestFault("Expecting a tenant") + # --- return PasswordCredentials(username, password, tenant_id) except (ValueError, TypeError) as e: raise fault.BadRequestFault("Cannot parse password credentials", @@ -122,7 +134,7 @@ class AuthData(object): token.set("id", self.token.token_id) user = etree.Element("user", username=self.user.username, - tenantId=self.user.tenant_id) + tenantId=str(self.user.tenant_id)) groups = etree.Element("groups") for group in self.user.groups.values: g = etree.Element("group", diff --git a/keystone/logic/types/user.py b/keystone/logic/types/user.py index 6d2658d1..6f6e619e 100644 --- a/keystone/logic/types/user.py +++ b/keystone/logic/types/user.py @@ -14,10 +14,10 @@ # limitations under the License. import json -import keystone.logic.types.fault as fault from lxml import etree import string +import keystone.logic.types.fault as fault class User(object): diff --git a/keystone/server.py b/keystone/server.py index 34a604c1..91526c9a 100755 --- a/keystone/server.py +++ b/keystone/server.py @@ -35,16 +35,11 @@ HTTP_AUTHORIZATION : basic auth password used to validate the connection HTTP_X_AUTHORIZATION: the client identity being passed in """ -import functools -import httplib -import json import logging import os import routes import sys from webob import Response -from webob import Request -from webob import descriptors from webob.exc import (HTTPNotFound, HTTPConflict, HTTPBadRequest) @@ -56,15 +51,14 @@ if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'keystone', '__init__.py')): sys.path.insert(0, POSSIBLE_TOPDIR) -from queryext import exthandler from keystone.common import wsgi from keystone.db.sqlalchemy import api as db_api import keystone.logic.service as serv import keystone.logic.types.tenant as tenants import keystone.logic.types.auth as auth -import keystone.logic.types.fault as fault import keystone.logic.types.user as users import keystone.common.template as template +import keystone.utils as utils logger = logging.getLogger('keystone.server') @@ -74,102 +68,6 @@ VERSION_DATE = "2011-04-23T00:00:00Z" service = serv.IdentityService() -# -# General Functions for the server.py use -# -def is_xml_response(req): - if not "Accept" in req.headers: - return False - accept = req.headers['Accept'] - return accept == "application/xml" or req.content_type == "application/xml" - - -def get_app_root(): - return os.path.abspath(os.path.dirname(__file__)) - - -def get_auth_token(req): - auth_token = None - if "X-Auth-Token" in req.headers: - auth_token = req.headers["X-Auth-Token"] - return auth_token - - -def wrap_error(func): - - @functools.wraps(func) - def check_error(*args, **kwargs): - try: - return func(*args, **kwargs) - except Exception as err: - if isinstance(err, fault.IdentityFault): - return send_error(err.code, kwargs['req'], err) - else: - logging.exception(err) - return send_error(500, kwargs['req'], - fault.IdentityFault("Unhandled error", str(err))) - return check_error - - -def get_normalized_request_content(model, req): - """Initialize a model from json/xml contents of request body""" - - if req.content_type == "application/xml": - ret = model.from_xml(req.body) - elif req.content_type == "application/json": - ret = model.from_json(req.body) - else: - raise fault.IdentityFault("I don't understand the content type ", code=415) - return ret - - -def send_error(code, req, result): - content = None - resp = Response() - - resp.headers['content-type'] = None - resp.status = code - - if result: - - if is_xml_response(req): - - content = result.to_xml() - resp.headers['content-type'] = "application/xml" - else: - - content = result.to_json() - resp.headers['content-type'] = "application/json" - - resp.content_type_params = {'charset': 'UTF-8'} - resp.unicode_body = content.decode('UTF-8') - - return resp - - -def send_result(code, req, result): - content = None - resp = Response() - resp.headers['content-type'] = None - resp.status = code - if code > 399: - return resp - - if result: - - if is_xml_response(req): - content = result.to_xml() - resp.headers['content-type'] = "application/xml" - else: - content = result.to_json() - resp.headers['content-type'] = "application/json" - - resp.content_type_params = {'charset': 'UTF-8'} - resp.unicode_body = content.decode('UTF-8') - - return resp - - class StaticFilesController(wsgi.Controller): """ Static Files Controller - @@ -179,32 +77,32 @@ class StaticFilesController(wsgi.Controller): def __init__(self, options): self.options = options - @wrap_error + @utils.wrap_error def get_pdf_contract(self, req): resp = Response() - return template.static_file(resp, req, "content/identiitydevguide.pdf", - root=get_app_root(), + return template.static_file(resp, req, "content/identitydevguide.pdf", + root=utils.get_app_root(), mimetype="application/pdf") - @wrap_error + @utils.wrap_error def get_wadl_contract(self, req): resp = Response() return template.static_file(resp, req, "identity.wadl", - root=get_app_root(), + root=utils.get_app_root(), mimetype="application/vnd.sun.wadl+xml") - @wrap_error + @utils.wrap_error def get_xsd_contract(self, req, xsd): resp = Response() return template.static_file(resp, req, "/xsd/" + xsd, - root=get_app_root(), + root=utils.get_app_root(), mimetype="application/xml") - @wrap_error + @utils.wrap_error def get_xsd_atom_contract(self, req, xsd): resp = Response() return template.static_file(resp, req, "/xsd/atom/" + xsd, - root=get_app_root(), + root=utils.get_app_root(), mimetype="application/xml") @@ -217,12 +115,12 @@ class VersionController(wsgi.Controller): def __init__(self, options): self.options = options - @wrap_error + @utils.wrap_error def get_version_info(self, req): resp = Response() resp.charset = 'UTF-8' - if is_xml_response(req): + if utils.is_xml_response(req): resp_file = os.path.join(POSSIBLE_TOPDIR, "keystone/content/version.xml.tpl") resp.content_type = "application/xml" @@ -250,28 +148,29 @@ class AuthController(wsgi.Controller): self.options = options self.request = None - @wrap_error + @utils.wrap_error def authenticate(self, req): self.request = req - creds = get_normalized_request_content(auth.PasswordCredentials, req) - return send_result(200, req, service.authenticate(creds)) + creds = utils.get_normalized_request_content(auth.PasswordCredentials, + req) + return utils.send_result(200, req, service.authenticate(creds)) - @wrap_error + @utils.wrap_error def validate_token(self, req, token_id): belongs_to = None if "belongsTo" in req.GET: belongs_to = req.GET["belongsTo"] - rval = service.validate_token(get_auth_token(req), + rval = service.validate_token(utils.get_auth_token(req), token_id, belongs_to) - return send_result(200, req, rval) + return utils.send_result(200, req, rval) - @wrap_error + @utils.wrap_error def delete_token(self, req, token_id): - return send_result(204, req, - service.revoke_token(get_auth_token(req), token_id)) + return utils.send_result(204, req, + service.revoke_token(utils.get_auth_token(req), token_id)) class TenantController(wsgi.Controller): @@ -283,13 +182,13 @@ class TenantController(wsgi.Controller): def __init__(self, options): self.options = options - @wrap_error + @utils.wrap_error def create_tenant(self, req): - tenant = get_normalized_request_content(tenants.Tenant, req) - return send_result(201, req, - service.create_tenant(get_auth_token(req), tenant)) + tenant = utils.get_normalized_request_content(tenants.Tenant, req) + return utils.send_result(201, req, + service.create_tenant(utils.get_auth_token(req), tenant)) - @wrap_error + @utils.wrap_error def get_tenants(self, req): marker = None if "marker" in req.GET: @@ -305,33 +204,35 @@ class TenantController(wsgi.Controller): req.environ.get("SERVER_PORT"), req.environ['PATH_INFO']) - tenants = service.get_tenants(get_auth_token(req), marker, limit, url) - return send_result(200, req, tenants) + tenants = service.get_tenants(utils.get_auth_token(req), marker, + limit, url) + return utils.send_result(200, req, tenants) - @wrap_error + @utils.wrap_error def get_tenant(self, req, tenant_id): - tenant = service.get_tenant(get_auth_token(req), tenant_id) - return send_result(200, req, tenant) + tenant = service.get_tenant(utils.get_auth_token(req), tenant_id) + return utils.send_result(200, req, tenant) - @wrap_error + @utils.wrap_error def update_tenant(self, req, tenant_id): - tenant = get_normalized_request_content(tenants.Tenant, req) - rval = service.update_tenant(get_auth_token(req), tenant_id, tenant) - return send_result(200, req, rval) + tenant = utils.get_normalized_request_content(tenants.Tenant, req) + rval = service.update_tenant(utils.get_auth_token(req), tenant_id, + tenant) + return utils.send_result(200, req, rval) - @wrap_error + @utils.wrap_error def delete_tenant(self, req, tenant_id): - rval = service.delete_tenant(get_auth_token(req), tenant_id) - return send_result(204, req, rval) + rval = service.delete_tenant(utils.get_auth_token(req), tenant_id) + return utils.send_result(204, req, rval) - @wrap_error + @utils.wrap_error def create_tenant_group(self, req, tenant_id): - group = get_normalized_request_content(tenants.Group, req) - return send_result(201, req, - service.create_tenant_group(get_auth_token(req), + group = utils.get_normalized_request_content(tenants.Group, req) + return utils.send_result(201, req, + service.create_tenant_group(utils.get_auth_token(req), tenant_id, group)) - @wrap_error + @utils.wrap_error def get_tenant_groups(self, req, tenant_id): marker = None if "marker" in req.GET: @@ -347,34 +248,34 @@ class TenantController(wsgi.Controller): req.environ.get("SERVER_PORT"), req.environ['PATH_INFO']) - groups = service.get_tenant_groups(get_auth_token(req), + groups = service.get_tenant_groups(utils.get_auth_token(req), tenant_id, marker, limit, url) - return send_result(200, req, groups) + return utils.send_result(200, req, groups) - @wrap_error + @utils.wrap_error def get_tenant_group(self, req, tenant_id, group_id): - tenant = service.get_tenant_group(get_auth_token(req), tenant_id, + tenant = service.get_tenant_group(utils.get_auth_token(req), tenant_id, group_id) - return send_result(200, req, tenant) + return utils.send_result(200, req, tenant) - @wrap_error + @utils.wrap_error def update_tenant_group(self, req, tenant_id, group_id): - group = get_normalized_request_content(tenants.Group, req) - rval = service.update_tenant_group(get_auth_token(req), + group = utils.get_normalized_request_content(tenants.Group, req) + rval = service.update_tenant_group(utils.get_auth_token(req), tenant_id, group_id, group) - return send_result(200, req, rval) + return utils.send_result(200, req, rval) - @wrap_error + @utils.wrap_error def delete_tenant_group(self, req, tenant_id, group_id): - rval = service.delete_tenant_group(get_auth_token(req), tenant_id, - group_id) - return send_result(204, req, rval) + rval = service.delete_tenant_group(utils.get_auth_token(req), + tenant_id, group_id) + return utils.send_result(204, req, rval) - @wrap_error + @utils.wrap_error def get_users_tenant_group(self, req, tenant_id, group_id): marker = None if "marker" in req.GET: - marker = request.GET["marker"] + marker = req.GET["marker"] if "limit" in req.GET: limit = req.GET["limit"] @@ -386,20 +287,21 @@ class TenantController(wsgi.Controller): req.environ.get("SERVER_PORT"), req.environ['PATH_INFO']) - users = service.get_users_tenant_group(get_auth_token(req), tenant_id, - group_id, marker, limit, url) - return send_result(200, req, users) + users = service.get_users_tenant_group(utils.get_auth_token(req), + tenant_id, group_id, marker, + limit, url) + return utils.send_result(200, req, users) - @wrap_error + @utils.wrap_error def add_user_tenant_group(self, req, tenant_id, group_id, user_id): - return send_result(201, req, service.add_user_tenant_group(\ - get_auth_token(req), tenant_id, group_id, + return utils.send_result(201, req, service.add_user_tenant_group(\ + utils.get_auth_token(req), tenant_id, group_id, user_id)) - @wrap_error + @utils.wrap_error def delete_user_tenant_group(self, req, tenant_id, group_id, user_id): - return send_result(204, req, service.delete_user_tenant_group(\ - get_auth_token(req), tenant_id, group_id, + return utils.send_result(204, req, service.delete_user_tenant_group(\ + utils.get_auth_token(req), tenant_id, group_id, user_id)) @@ -412,14 +314,14 @@ class UserController(wsgi.Controller): def __init__(self, options): self.options = options - @wrap_error + @utils.wrap_error def create_user(self, req, tenant_id): - user = get_normalized_request_content(users.User, req) - return send_result(201, req, - service.create_user(get_auth_token(req), \ + user = utils.get_normalized_request_content(users.User, req) + return utils.send_result(201, req, + service.create_user(utils.get_auth_token(req), \ tenant_id, user)) - @wrap_error + @utils.wrap_error def get_tenant_users(self, req, tenant_id): marker = None if "marker" in req.GET: @@ -432,11 +334,11 @@ class UserController(wsgi.Controller): req.environ.get("SERVER_NAME"), req.environ.get("SERVER_PORT"), req.environ['PATH_INFO']) - users = service.get_tenant_users(get_auth_token(req), \ + users = service.get_tenant_users(utils.get_auth_token(req), \ tenant_id, marker, limit, url) - return send_result(200, req, users) + return utils.send_result(200, req, users) - @wrap_error + @utils.wrap_error def get_user_groups(self, req, tenant_id, user_id): marker = None if "marker" in req.GET: @@ -451,40 +353,47 @@ class UserController(wsgi.Controller): req.environ.get("SERVER_PORT"), req.environ['PATH_INFO']) - groups = service.get_user_groups(get_auth_token(req), + groups = service.get_user_groups(utils.get_auth_token(req), tenant_id, user_id, marker, limit, url) - return send_result(200, req, groups) + return utils.send_result(200, req, groups) - @wrap_error + @utils.wrap_error def get_user(self, req, tenant_id, user_id): - user = service.get_user(get_auth_token(req), tenant_id, user_id) - return send_result(200, req, user) + user = service.get_user(utils.get_auth_token(req), tenant_id, user_id) + return utils.send_result(200, req, user) - @wrap_error + @utils.wrap_error def update_user(self, req, user_id, tenant_id): - user = get_normalized_request_content(users.User_Update, req) - rval = service.update_user(get_auth_token(req), + user = utils.get_normalized_request_content(users.User_Update, req) + rval = service.update_user(utils.get_auth_token(req), user_id, user, tenant_id) - return send_result(200, req, rval) + return utils.send_result(200, req, rval) - @wrap_error + @utils.wrap_error def delete_user(self, req, user_id, tenant_id): - rval = service.delete_user(get_auth_token(req), user_id, tenant_id) - return send_result(204, req, rval) + rval = service.delete_user(utils.get_auth_token(req), user_id, + tenant_id) + return utils.send_result(204, req, rval) - @wrap_error + @utils.wrap_error def set_user_password(self, req, user_id, tenant_id): - user = get_normalized_request_content(users.User_Update, req) - rval = service.set_user_password(get_auth_token(req), user_id, user, - tenant_id) - return send_result(200, req, rval) + user = utils.get_normalized_request_content(users.User_Update, req) + rval = service.set_user_password(utils.get_auth_token(req), user_id, + user, tenant_id) + return utils.send_result(200, req, rval) - @wrap_error + @utils.wrap_error def set_user_enabled(self, req, user_id, tenant_id): - user = get_normalized_request_content(users.User_Update, req) - rval = service.enable_disable_user(get_auth_token(req), user_id, user, - tenant_id) - return send_result(200, req, rval) + user = utils.get_normalized_request_content(users.User_Update, req) + rval = service.enable_disable_user(utils.get_auth_token(req), user_id, + user, tenant_id) + return utils.send_result(200, req, rval) + + @utils.wrap_error + def add_user_tenant(self, req, user_id, tenant_id): + rval = service.add_user_tenant(utils.get_auth_token(req), user_id, + tenant_id) + return utils.send_result(200, req, rval) class GroupsController(wsgi.Controller): @@ -496,14 +405,14 @@ class GroupsController(wsgi.Controller): def __init__(self, options): self.options = options - @wrap_error + @utils.wrap_error def create_group(self, req): - group = get_normalized_request_content(tenants.GlobalGroup, req) - return send_result(201, req, - service.create_global_group(get_auth_token(req), + group = utils.get_normalized_request_content(tenants.GlobalGroup, req) + return utils.send_result(201, req, + service.create_global_group(utils.get_auth_token(req), group)) - @wrap_error + @utils.wrap_error def get_groups(self, req): marker = None if "marker" in req.GET: @@ -518,29 +427,29 @@ class GroupsController(wsgi.Controller): req.environ.get("SERVER_NAME"), req.environ.get("SERVER_PORT"), req.environ['PATH_INFO']) - groups = service.get_global_groups(get_auth_token(req), + groups = service.get_global_groups(utils.get_auth_token(req), marker, limit, url) - return send_result(200, req, groups) + return utils.send_result(200, req, groups) - @wrap_error + @utils.wrap_error def get_group(self, req, group_id): - tenant = service.get_global_group(get_auth_token(req), group_id) - return send_result(200, req, tenant) + tenant = service.get_global_group(utils.get_auth_token(req), group_id) + return utils.send_result(200, req, tenant) - @wrap_error + @utils.wrap_error def update_group(self, req, group_id): - group = get_normalized_request_content(tenants.GlobalGroup, req) - rval = service.update_global_group(get_auth_token(req), + group = utils.get_normalized_request_content(tenants.GlobalGroup, req) + rval = service.update_global_group(utils.get_auth_token(req), group_id, group) - return send_result(200, req, rval) + return utils.send_result(200, req, rval) - @wrap_error + @utils.wrap_error def delete_group(self, req, group_id): - rval = service.delete_global_group(get_auth_token(req), group_id) - return send_result(204, req, rval) + rval = service.delete_global_group(utils.get_auth_token(req), group_id) + return utils.send_result(204, req, rval) - @wrap_error + @utils.wrap_error def get_users_global_group(self, req, group_id): marker = None @@ -557,21 +466,21 @@ class GroupsController(wsgi.Controller): req.environ.get("SERVER_PORT"), req.environ['PATH_INFO']) - users = service.get_users_global_group(get_auth_token(req), + users = service.get_users_global_group(utils.get_auth_token(req), group_id, marker, limit, url) - return send_result(200, req, users) + return utils.send_result(200, req, users) - @wrap_error + @utils.wrap_error def add_user_global_group(self, req, group_id, user_id): - return send_result(201, req, service.add_user_global_group(\ - get_auth_token(req), group_id, user_id)) + return utils.send_result(201, req, service.add_user_global_group(\ + utils.get_auth_token(req), group_id, user_id)) - @wrap_error + @utils.wrap_error def delete_user_global_group(self, req, group_id, user_id): - return send_result(204, req, service.delete_user_global_group(\ - get_auth_token(req), group_id, user_id)) + return utils.send_result(204, req, service.delete_user_global_group(\ + utils.get_auth_token(req), group_id, user_id)) class KeystoneAPI(wsgi.Router): @@ -676,6 +585,10 @@ class KeystoneAPI(wsgi.Router): controller=user_controller, action="set_user_password", conditions=dict(method=["PUT"])) + mapper.connect("/v1.0/tenants/{tenant_id}/users/{user_id}/add", + controller=user_controller, + action="add_user_tenant", + conditions=dict(method=["PUT"])) # Test this, test failed mapper.connect("/v2.0/tenants/{tenant_id}/users/{user_id}/enabled", diff --git a/keystone/utils.py b/keystone/utils.py new file mode 100644 index 00000000..df480e31 --- /dev/null +++ b/keystone/utils.py @@ -0,0 +1,131 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2010-2011 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import functools +import httplib +import json +import logging +import os +import routes +import sys +from webob import Response +from webob import Request +from webob import descriptors +from webob.exc import (HTTPNotFound, + HTTPConflict, + HTTPBadRequest) + +POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]), + os.pardir, + os.pardir)) +if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'keystone', '__init__.py')): + sys.path.insert(0, POSSIBLE_TOPDIR) + +from queryext import exthandler +import keystone.logic.types.fault as fault + + +def is_xml_response(req): + if not "Accept" in req.headers: + return False + return req.content_type == "application/xml" + + +def get_app_root(): + return os.path.abspath(os.path.dirname(__file__)) + + +def get_auth_token(req): + auth_token = None + if "X-Auth-Token" in req.headers: + auth_token = req.headers["X-Auth-Token"] + return auth_token + + +def wrap_error(func): + + @functools.wraps(func) + def check_error(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception as err: + if isinstance(err, fault.IdentityFault): + return send_error(err.code, kwargs['req'], err) + else: + logging.exception(err) + return send_error(500, kwargs['req'], + fault.IdentityFault("Unhandled error", str(err))) + return check_error + + +def get_normalized_request_content(model, req): + """Initialize a model from json/xml contents of request body""" + + if req.content_type == "application/xml": + ret = model.from_xml(req.body) + elif req.content_type == "application/json": + ret = model.from_json(req.body) + else: + raise fault.IDMFault("I don't understand the content type ", code=415) + return ret + + +def send_error(code, req, result): + content = None + resp = Response() + + resp.headers['content-type'] = None + resp.status = code + + if result: + + if is_xml_response(req): + + content = result.to_xml() + resp.headers['content-type'] = "application/xml" + else: + + content = result.to_json() + resp.headers['content-type'] = "application/json" + + resp.content_type_params = {'charset': 'UTF-8'} + resp.unicode_body = content.decode('UTF-8') + + return resp + + +def send_result(code, req, result): + content = None + resp = Response() + resp.headers['content-type'] = None + resp.status = code + if code > 399: + return resp + + if result: + + if is_xml_response(req): + content = result.to_xml() + resp.headers['content-type'] = "application/xml" + else: + content = result.to_json() + resp.headers['content-type'] = "application/json" + + resp.content_type_params = {'charset': 'UTF-8'} + resp.unicode_body = content.decode('UTF-8') + + return resp diff --git a/test/IdentitySOAPUI.xml b/test/IdentitySOAPUI.xml index 86795a38..d5832df8 100644 --- a/test/IdentitySOAPUI.xml +++ b/test/IdentitySOAPUI.xml @@ -28,7 +28,7 @@ <con:entry key="Save After" value="false"/> <con:entry key="Add Settings" value="false"/> <con:entry key="Endpoint" value=""/> -</xml-fragment>]]></con:setting></con:settings><con:interface xsi:type="con:RestService" wadlVersion="http://wadl.dev.java.net/2009/02" name="Keystone" type="rest" basePath="" definitionUrl="file:/Users/jorgew/projects/keystone/keystone/identity.wadl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:settings/><con:definitionCache type="TEXT" rootPart="file:/Users/jorgew/projects/keystone/keystone/identity.wadl"><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/identity.wadl</con:url><con:content><![CDATA[<application xsi:schemaLocation="http://docs.openstack.org/identity/api/v2.0 xsd/api.xsd http://docs.openstack.org/common/api/v1.0 xsd/api-common.xsd " xmlns="http://wadl.dev.java.net/2009/02" xmlns:idm="http://docs.openstack.org/identity/api/v2.0" xmlns:capi="http://docs.openstack.org/common/api/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +</xml-fragment>]]></con:setting></con:settings><con:interface xsi:type="con:RestService" wadlVersion="http://wadl.dev.java.net/2009/02" name="Keystone" type="rest" basePath="" definitionUrl="file:/Users/jorgew/projects/keystone/keystone/identity.wadl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:settings/><con:definitionCache type="TEXT" rootPart="file:/Users/jorgew/projects/keystone/keystone/identity.wadl"><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/identity.wadl</con:url><con:content><![CDATA[<application xsi:schemaLocation="http://docs.openstack.org/identity/api/v2.0 xsd/api.xsd http://docs.openstack.org/common/api/v1.0 xsd/api-common.xsd " xmlns="http://wadl.dev.java.net/2009/02" xmlns:identity="http://docs.openstack.org/identity/api/v2.0" xmlns:capi="http://docs.openstack.org/common/api/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <grammars> <include href="xsd/api.xsd"/> <include href="xsd/api-common.xsd"/> @@ -73,13 +73,13 @@ <representation mediaType="application/json"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="400 500 503"> <representation mediaType="application/json"/> @@ -91,16 +91,16 @@ <representation mediaType="application/json"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="404"> - <representation mediaType="application/xml" element="idm:itemNotFound"/> + <representation mediaType="application/xml" element="identity:itemNotFound"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="400 404 500 503"> <representation mediaType="application/json"/> @@ -113,13 +113,13 @@ <representation mediaType="application/json"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="400 500 503"> <representation mediaType="application/json"/> @@ -128,27 +128,27 @@ <!--Token Operations--> <method name="POST" id="authenticate"> <request> - <representation mediaType="application/xml" element="idm:passwordCredentials"/> + <representation mediaType="application/xml" element="identity:passwordCredentials"/> <representation mediaType="application/json"/> </request> <response status="200 203"> - <representation mediaType="application/xml" element="idm:auth"/> + <representation mediaType="application/xml" element="identity:auth"/> <representation mediaType="application/json"/> </response> <response status="401"> - <representation mediaType="application/xml" element="idm:unauthorized"/> + <representation mediaType="application/xml" element="identity:unauthorized"/> </response> <response status="403"> - <representation mediaType="application/xml" element="idm:userDisabled"/> + <representation mediaType="application/xml" element="identity:userDisabled"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="401 403 400 500 503"> <representation mediaType="application/json"/> @@ -159,27 +159,27 @@ <param name="belongsTo" style="query" required="false" type="xsd:string"/> </request> <response status="200 203"> - <representation mediaType="application/xml" element="idm:auth"/> + <representation mediaType="application/xml" element="identity:auth"/> <representation mediaType="application/json"/> </response> <response status="401"> - <representation mediaType="application/xml" element="idm:unauthorized"/> + <representation mediaType="application/xml" element="identity:unauthorized"/> </response> <response status="403"> - <representation mediaType="application/xml" element="idm:forbidden"/> - <representation mediaType="application/xml" element="idm:userDisabled"/> + <representation mediaType="application/xml" element="identity:forbidden"/> + <representation mediaType="application/xml" element="identity:userDisabled"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="404"> - <representation mediaType="application/xml" element="idm:itemNotFound"/> + <representation mediaType="application/xml" element="identity:itemNotFound"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="400 401 403 404 500 503"> <representation mediaType="application/json"/> @@ -188,22 +188,22 @@ <method name="DELETE" id="revokeToken"> <response status="204"/> <response status="401"> - <representation mediaType="application/xml" element="idm:unauthorized"/> + <representation mediaType="application/xml" element="identity:unauthorized"/> </response> <response status="403"> - <representation mediaType="application/xml" element="idm:forbidden"/> + <representation mediaType="application/xml" element="identity:forbidden"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="404"> - <representation mediaType="application/xml" element="idm:itemNotFound"/> + <representation mediaType="application/xml" element="identity:itemNotFound"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="400 401 403 404 500 503"> <representation mediaType="application/json"/> @@ -216,26 +216,26 @@ <param name="limit" style="query" required="false" type="xsd:int"/> </request> <response status="200 203"> - <representation mediaType="application/xml" element="idm:tenants"/> + <representation mediaType="application/xml" element="identity:tenants"/> <representation mediaType="application/json"/> </response> <response status="401"> - <representation mediaType="application/xml" element="idm:unauthorized"/> + <representation mediaType="application/xml" element="identity:unauthorized"/> </response> <response status="403"> - <representation mediaType="application/xml" element="idm:forbidden"/> + <representation mediaType="application/xml" element="identity:forbidden"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="404"> - <representation mediaType="application/xml" element="idm:itemNotFound"/> + <representation mediaType="application/xml" element="identity:itemNotFound"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="400 401 403 404 500 503"> <representation mediaType="application/json"/> @@ -243,30 +243,30 @@ </method> <method name="POST" id="createTenant"> <request> - <representation mediaType="application/xml" element="idm:tenant"/> + <representation mediaType="application/xml" element="identity:tenant"/> <representation mediaType="application/json"/> </request> <response status="201"> - <representation mediaType="application/xml" element="idm:tenant"/> + <representation mediaType="application/xml" element="identity:tenant"/> <representation mediaType="application/json"/> </response> <response status="401"> - <representation mediaType="application/xml" element="idm:unauthorized"/> + <representation mediaType="application/xml" element="identity:unauthorized"/> </response> <response status="403"> - <representation mediaType="application/xml" element="idm:forbidden"/> + <representation mediaType="application/xml" element="identity:forbidden"/> </response> <response status="409"> - <representation mediaType="application/xml" element="idm:tenantConflict"/> + <representation mediaType="application/xml" element="identity:tenantConflict"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="401 403 400 409 500 503"> <representation mediaType="application/json"/> @@ -274,26 +274,26 @@ </method> <method name="GET" id="getTenant"> <response status="200 203"> - <representation mediaType="application/xml" element="idm:tenant"/> + <representation mediaType="application/xml" element="identity:tenant"/> <representation mediaType="application/json"/> </response> <response status="401"> - <representation mediaType="application/xml" element="idm:unauthorized"/> + <representation mediaType="application/xml" element="identity:unauthorized"/> </response> <response status="403"> - <representation mediaType="application/xml" element="idm:forbidden"/> + <representation mediaType="application/xml" element="identity:forbidden"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="404"> - <representation mediaType="application/xml" element="idm:itemNotFound"/> + <representation mediaType="application/xml" element="identity:itemNotFound"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="400 401 403 404 500 503"> <representation mediaType="application/json"/> @@ -301,30 +301,30 @@ </method> <method name="PUT" id="updateTenant"> <request> - <representation mediaType="application/xml" element="idm:tenant"/> + <representation mediaType="application/xml" element="identity:tenant"/> <representation mediaType="application/json"/> </request> <response status="200"> - <representation mediaType="application/xml" element="idm:tenant"/> + <representation mediaType="application/xml" element="identity:tenant"/> <representation mediaType="application/json"/> </response> <response status="401"> - <representation mediaType="application/xml" element="idm:unauthorized"/> + <representation mediaType="application/xml" element="identity:unauthorized"/> </response> <response status="403"> - <representation mediaType="application/xml" element="idm:forbidden"/> + <representation mediaType="application/xml" element="identity:forbidden"/> </response> <response status="404"> - <representation mediaType="application/xml" element="idm:itemNotFound"/> + <representation mediaType="application/xml" element="identity:itemNotFound"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="401 403 404 400 500 503"> <representation mediaType="application/json"/> @@ -333,40 +333,40 @@ <method name="DELETE" id="deleteTenant"> <response status="204"/> <response status="401"> - <representation mediaType="application/xml" element="idm:unauthorized"/> + <representation mediaType="application/xml" element="identity:unauthorized"/> </response> <response status="403"> - <representation mediaType="application/xml" element="idm:forbidden"/> + <representation mediaType="application/xml" element="identity:forbidden"/> </response> <response status="400"> - <representation mediaType="application/xml" element="idm:badRequest"/> + <representation mediaType="application/xml" element="identity:badRequest"/> </response> <response status="404"> - <representation mediaType="application/xml" element="idm:itemNotFound"/> + <representation mediaType="application/xml" element="identity:itemNotFound"/> </response> <response status="500"> - <representation mediaType="application/xml" element="idm:idmFault"/> + <representation mediaType="application/xml" element="identity:identityFault"/> </response> <response status="503"> - <representation mediaType="application/xml" element="idm:serviceUnavailable"/> + <representation mediaType="application/xml" element="identity:serviceUnavailable"/> </response> <response status="400 401 403 404 500 503"> <representation mediaType="application/json"/> </response> </method> -</application>]]></con:content><con:type>http://wadl.dev.java.net/2009/02</con:type></con:part><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/xsd/api.xsd</con:url><con:content><schema elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://docs.openstack.org/identity/api/v2.0" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:idm="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +</application>]]></con:content><con:type>http://wadl.dev.java.net/2009/02</con:type></con:part><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/xsd/api.xsd</con:url><con:content><schema elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://docs.openstack.org/identity/api/v2.0" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:identity="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <include schemaLocation="token.xsd"/> <include schemaLocation="tenant.xsd"/> <include schemaLocation="fault.xsd"/> -</schema></con:content><con:type>http://www.w3.org/2001/XMLSchema</con:type></con:part><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/xsd/token.xsd</con:url><con:content><![CDATA[<schema elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://docs.openstack.org/identity/api/v2.0" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:idm="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +</schema></con:content><con:type>http://www.w3.org/2001/XMLSchema</con:type></con:part><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/xsd/token.xsd</con:url><con:content><![CDATA[<schema elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://docs.openstack.org/identity/api/v2.0" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:identity="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!--Elements--> - <element name="passwordCredentials" type="idm:PasswordCredentials"/> - <element name="auth" type="idm:AuthData"/> + <element name="passwordCredentials" type="identity:PasswordCredentials"/> + <element name="auth" type="identity:AuthData"/> <!--Complex Types--> <complexType name="Credentials" abstract="true"/> <complexType name="PasswordCredentials"> <complexContent> - <extension base="idm:Credentials"> + <extension base="identity:Credentials"> <sequence> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </sequence> @@ -379,8 +379,8 @@ </complexType> <complexType name="AuthData"> <sequence> - <element name="token" type="idm:Token"/> - <element name="user" type="idm:User"/> + <element name="token" type="identity:Token"/> + <element name="user" type="identity:User"/> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </sequence> <anyAttribute namespace="##other" processContents="lax"/> @@ -395,7 +395,7 @@ </complexType> <complexType name="User"> <sequence> - <element name="groups" type="idm:Groups"/> + <element name="groups" type="identity:Groups"/> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </sequence> <attribute name="tenantId" type="xsd:string"/> @@ -404,7 +404,7 @@ </complexType> <complexType name="Groups"> <sequence> - <element name="group" type="idm:Group" maxOccurs="1000"/> + <element name="group" type="identity:Group" maxOccurs="1000"/> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </sequence> <anyAttribute namespace="##other" processContents="lax"/> @@ -414,16 +414,16 @@ <attribute name="tenantId" type="xsd:string" use="optional"/> <anyAttribute namespace="##other" processContents="lax"/> </complexType> -</schema>]]></con:content><con:type>http://www.w3.org/2001/XMLSchema</con:type></con:part><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/xsd/tenant.xsd</con:url><con:content><![CDATA[<schema elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://docs.openstack.org/identity/api/v2.0" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:idm="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns:atom="http://www.w3.org/2005/Atom"> +</schema>]]></con:content><con:type>http://www.w3.org/2001/XMLSchema</con:type></con:part><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/xsd/tenant.xsd</con:url><con:content><![CDATA[<schema elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://docs.openstack.org/identity/api/v2.0" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:identity="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns:atom="http://www.w3.org/2005/Atom"> <!--Import ATOM specific schema definitions--> <import vc:minVersion="1.1" namespace="http://www.w3.org/2005/Atom" schemaLocation="./atom/atom.xsd"/> <!--Elements--> - <element name="tenant" type="idm:Tenant"/> - <element name="tenants" type="idm:Tenants"/> + <element name="tenant" type="identity:Tenant"/> + <element name="tenants" type="identity:Tenants"/> <!--Complex Types--> <complexType name="Tenants"> <sequence> - <element name="tenant" type="idm:Tenant" maxOccurs="1000"/> + <element name="tenant" type="identity:Tenant" maxOccurs="1000"/> <element vc:minVersion="1.1" ref="atom:link" minOccurs="0" maxOccurs="unbounded"/> <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </sequence> @@ -780,19 +780,19 @@ </div> </xs:documentation> </xs:annotation> -</xs:schema>]]></con:content><con:type>http://www.w3.org/2001/XMLSchema</con:type></con:part><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/xsd/fault.xsd</con:url><con:content><![CDATA[<schema elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://docs.openstack.org/identity/api/v2.0" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:idm="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> +</xs:schema>]]></con:content><con:type>http://www.w3.org/2001/XMLSchema</con:type></con:part><con:part><con:url>file:/Users/jorgew/projects/keystone/keystone/xsd/fault.xsd</con:url><con:content><![CDATA[<schema elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://docs.openstack.org/identity/api/v2.0" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:identity="http://docs.openstack.org/identity/api/v2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!--Fault Elements--> - <element name="idmFault" type="idm:IDMFault"/> - <element name="serviceUnavailable" type="idm:ServiceUnavailableFault"/> - <element name="badRequest" type="idm:BadRequestFault"/> - <element name="unauthorized" type="idm:UnauthorizedFault"/> - <element name="overLimit" type="idm:OverLimitFault"/> - <element name="userDisabled" type="idm:UserDisabledFault"/> - <element name="forbidden" type="idm:ForbiddenFault"/> - <element name="itemNotFound" type="idm:ItemNotFoundFault"/> - <element name="tenantConflict" type="idm:TenantConflictFault"/> + <element name="identityFault" type="identity:IdentityFault"/> + <element name="serviceUnavailable" type="identity:ServiceUnavailableFault"/> + <element name="badRequest" type="identity:BadRequestFault"/> + <element name="unauthorized" type="identity:UnauthorizedFault"/> + <element name="overLimit" type="identity:OverLimitFault"/> + <element name="userDisabled" type="identity:UserDisabledFault"/> + <element name="forbidden" type="identity:ForbiddenFault"/> + <element name="itemNotFound" type="identity:ItemNotFoundFault"/> + <element name="tenantConflict" type="identity:TenantConflictFault"/> <!--Fault Types--> - <complexType name="IDMFault"> + <complexType name="IdentityFault"> <sequence> <element name="message" type="xsd:string"> <annotation> @@ -825,42 +825,42 @@ </complexType> <complexType name="ServiceUnavailableFault"> <complexContent> - <extension base="idm:IDMFault"></extension> + <extension base="identity:IdentityFault"></extension> </complexContent> </complexType> <complexType name="BadRequestFault"> <complexContent> - <extension base="idm:IDMFault"></extension> + <extension base="identity:IdentityFault"></extension> </complexContent> </complexType> <complexType name="UnauthorizedFault"> <complexContent> - <extension base="idm:IDMFault"></extension> + <extension base="identity:IdentityFault"></extension> </complexContent> </complexType> <complexType name="UserDisabledFault"> <complexContent> - <extension base="idm:IDMFault"></extension> + <extension base="identity:IdentityFault"></extension> </complexContent> </complexType> <complexType name="ForbiddenFault"> <complexContent> - <extension base="idm:IDMFault"></extension> + <extension base="identity:IdentityFault"></extension> </complexContent> </complexType> <complexType name="ItemNotFoundFault"> <complexContent> - <extension base="idm:IDMFault"></extension> + <extension base="identity:IdentityFault"></extension> </complexContent> </complexType> <complexType name="TenantConflictFault"> <complexContent> - <extension base="idm:IDMFault"></extension> + <extension base="identity:IdentityFault"></extension> </complexContent> </complexType> <complexType name="OverLimitFault"> <complexContent> - <extension base="idm:IDMFault"> + <extension base="identity:IdentityFault"> <attribute name="retryAt" type="xsd:dateTime" use="optional"> <annotation> <xsd:documentation xml:lang="EN" xmlns="http://www.w3.org/1999/xhtml" xmlns:xs="http://www.w3.org/2001/XMLSchema"> @@ -1094,47 +1094,47 @@ </xs:attribute> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:complexType> -</xs:schema>]]></con:content><con:type>http://www.w3.org/2001/XMLSchema</con:type></con:part></con:definitionCache><con:endpoints><con:endpoint>http://localhost:8080</con:endpoint></con:endpoints><con:resource name="v1.0" path="v1.0"><con:settings/><con:parameters/><con:resource name="extensions" path="extensions"><con:settings/><con:parameters/><con:resource name="{alias}" path="{alias}"><con:settings/><con:parameters><con:parameter><con:name>alias</con:name><con:value xsi:nil="true"/><con:style>TEMPLATE</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter></con:parameters><con:method name="GET - getExtension" method="GET"><con:settings/><con:parameters/><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/common/api/v1.0">v1:extension</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 404 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters><entry key="alias" value="RAX-TEST" xmlns="http://eviware.com/soapui/config"/></con:parameters></con:request></con:method></con:resource><con:method name="GET - getExtensions" method="GET"><con:settings/><con:parameters/><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/common/api/v1.0">v1:extensions</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method></con:resource><con:resource name="token" path="token"><con:settings/><con:parameters/><con:resource name="{tokenId}" path="{tokenId}"><con:settings/><con:parameters><con:parameter required="true"><con:name>X-Auth-Token</con:name><con:value xsi:nil="true"/><con:style>HEADER</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter><con:parameter><con:name>tokenId</con:name><con:value xsi:nil="true"/><con:style>TEMPLATE</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter></con:parameters><con:method name="GET - validateToken" method="GET"><con:settings/><con:parameters><con:parameter><con:name>belongsTo</con:name><con:value xsi:nil="true"/><con:style>QUERY</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter></con:parameters><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:auth</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:userDisabled</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 401 403 404 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters> +</xs:schema>]]></con:content><con:type>http://www.w3.org/2001/XMLSchema</con:type></con:part></con:definitionCache><con:endpoints><con:endpoint>http://localhost:8080</con:endpoint></con:endpoints><con:resource name="v1.0" path="v1.0"><con:settings/><con:parameters/><con:resource name="extensions" path="extensions"><con:settings/><con:parameters/><con:resource name="{alias}" path="{alias}"><con:settings/><con:parameters><con:parameter><con:name>alias</con:name><con:value xsi:nil="true"/><con:style>TEMPLATE</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter></con:parameters><con:method name="GET - getExtension" method="GET"><con:settings/><con:parameters/><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/common/api/v1.0">v1:extension</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 404 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters><entry key="alias" value="RAX-TEST" xmlns="http://eviware.com/soapui/config"/></con:parameters></con:request></con:method></con:resource><con:method name="GET - getExtensions" method="GET"><con:settings/><con:parameters/><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/common/api/v1.0">v1:extensions</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method></con:resource><con:resource name="token" path="token"><con:settings/><con:parameters/><con:resource name="{tokenId}" path="{tokenId}"><con:settings/><con:parameters><con:parameter required="true"><con:name>X-Auth-Token</con:name><con:value xsi:nil="true"/><con:style>HEADER</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter><con:parameter><con:name>tokenId</con:name><con:value xsi:nil="true"/><con:style>TEMPLATE</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter></con:parameters><con:method name="GET - validateToken" method="GET"><con:settings/><con:parameters><con:parameter><con:name>belongsTo</con:name><con:value xsi:nil="true"/><con:style>QUERY</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter></con:parameters><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:auth</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:userDisabled</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 401 403 404 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters> <con:entry key="tokenId" value="887665443383838"/> <con:entry key="X-Auth-Token" value="999888777666"/> <con:entry key="belongsTo" value="1234"/> -</con:parameters></con:request></con:method><con:method name="DELETE - revokeToken" method="DELETE"><con:settings/><con:parameters/><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 401 403 404 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters> +</con:parameters></con:request></con:method><con:method name="DELETE - revokeToken" method="DELETE"><con:settings/><con:parameters/><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 401 403 404 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters> <con:entry key="tokenId" value="3u37737"/> <con:entry key="X-Auth-Token" value="3838737726"/> </con:parameters></con:request></con:method></con:resource><con:method name="POST - authenticate" method="POST"><con:settings/><con:parameters/><con:representation type="REQUEST" id=""><con:mediaType>application/xml</con:mediaType><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:passwordCredentials</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="REQUEST" id=""><con:mediaType>application/json</con:mediaType><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:auth</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 -203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:userDisabled</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>401 +203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:userDisabled</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>401 403 400 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" postQueryString="false" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request><passwordCredentials password="secrete" username="joeuser" xmlns="http://docs.openstack.org/identity/api/v2.0"/></con:request><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method></con:resource><con:resource name="tenants" path="tenants"><con:settings/><con:parameters><con:parameter required="true"><con:name>X-Auth-Token</con:name><con:value xsi:nil="true"/><con:style>HEADER</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter></con:parameters><con:resource name="{tenantId}" path="{tenantId}"><con:settings/><con:parameters><con:parameter><con:name>tenantId</con:name><con:value xsi:nil="true"/><con:style>TEMPLATE</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter></con:parameters><con:method name="GET - getTenant" method="GET"><con:settings/><con:parameters/><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:tenant</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 -203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 +203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 401 403 404 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters> <con:entry key="tenantId" value="1234"/> <con:entry key="X-Auth-Token" value="999888777666"/> -</con:parameters></con:request></con:method><con:method name="PUT - updateTenant" method="PUT"><con:settings/><con:parameters/><con:representation type="REQUEST" id=""><con:mediaType>application/xml</con:mediaType><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:tenant</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="REQUEST" id=""><con:mediaType>application/json</con:mediaType><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:tenant</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>401 +</con:parameters></con:request></con:method><con:method name="PUT - updateTenant" method="PUT"><con:settings/><con:parameters/><con:representation type="REQUEST" id=""><con:mediaType>application/xml</con:mediaType><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:tenant</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="REQUEST" id=""><con:mediaType>application/json</con:mediaType><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:tenant</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>401 403 404 400 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" postQueryString="false"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request><v1:tenant enabled="true" xmlns:v1="http://docs.openstack.org/identity/api/v2.0"> <v1:description>New Description</v1:description> </v1:tenant></con:request><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters> <con:entry key="tenantId" value="1234"/> <con:entry key="X-Auth-Token" value="999888777666"/> -</con:parameters></con:request></con:method><con:method name="DELETE - deleteTenant" method="DELETE"><con:settings/><con:parameters/><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 +</con:parameters></con:request></con:method><con:method name="DELETE - deleteTenant" method="DELETE"><con:settings/><con:parameters/><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 401 403 404 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Accept" value="application/xml" xmlns="http://eviware.com/soapui/config"/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters> <con:entry key="tenantId" value="0000"/> <con:entry key="X-Auth-Token" value="999888777666"/> </con:parameters></con:request></con:method></con:resource><con:method name="GET - getTenants" method="GET"><con:settings/><con:parameters><con:parameter><con:name>marker</con:name><con:value xsi:nil="true"/><con:style>QUERY</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type><con:default xsi:nil="true"/></con:parameter><con:parameter><con:name>limit</con:name><con:value xsi:nil="true"/><con:style>QUERY</con:style><con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:int</con:type><con:default xsi:nil="true"/></con:parameter></con:parameters><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:tenants</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 -203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 +203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>404</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:itemNotFound</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 401 403 404 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters><entry key="X-Auth-Token" value="999888777666" xmlns="http://eviware.com/soapui/config"/></con:parameters></con:request></con:method><con:method name="POST - createTenant" method="POST"><con:settings/><con:parameters/><con:representation type="REQUEST" id=""><con:mediaType>application/xml</con:mediaType><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:tenant</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="REQUEST" id=""><con:mediaType>application/json</con:mediaType><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>201</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:tenant</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>201</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>401</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:unauthorized</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>403</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:forbidden</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType> <con:status>409</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:tenantConflict</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType> -<con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>401 +<con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>401 403 400 409 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" postQueryString="false" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request><v1:tenant enabled="true" id="my_new_tenant" xmlns:v1="http://docs.openstack.org/identity/api/v2.0"><v1:description>This is a description of my tenant. Thank you very much.</v1:description></v1:tenant></con:request><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters><entry key="X-Auth-Token" value="999888777666" xmlns="http://eviware.com/soapui/config"/></con:parameters></con:request></con:method></con:resource><con:method name="GET - getVersionInfo" method="GET"><con:settings/><con:parameters/><con:representation type="RESPONSE" id=""><con:mediaType>application/xml</con:mediaType><con:status>200 203</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/common/api/v1.0">v1:version</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="RESPONSE" id=""><con:mediaType>application/json</con:mediaType><con:status>200 -203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:idmFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 +203</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>400</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:badRequest</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>500</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:identityFault</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/xml</con:mediaType><con:status>503</con:status><con:params/><con:element xmlns:v1="http://docs.openstack.org/identity/api/v2.0">v1:serviceUnavailable</con:element><con:description xsi:nil="true"/></con:representation><con:representation type="FAULT" id=""><con:mediaType>application/json</con:mediaType><con:status>400 500 503</con:status><con:params/><con:element xsi:nil="true"/><con:description xsi:nil="true"/></con:representation><con:request name="Request 1" mediaType="application/xml" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters/></con:request></con:method></con:resource></con:interface><con:testSuite name="Keystone Tests"><con:settings/><con:runType>SEQUENTIAL</con:runType><con:testCase failOnError="true" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="Admin Credential Check" searchProperties="true" id="29b2fa4b-e1c3-49c4-a7e6-334724e74bb9"><con:settings/><con:testStep type="restrequest" name="GET - validateToken - Valid Token"><con:settings/><con:config service="Keystone" resourcePath="/v1.0/token/{tokenId}" methodName="GET - validateToken" xsi:type="con:RestRequestStep" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><con:restRequest name="GET - validateToken - Valid Token" mediaType="application/xml" accept="application/xml"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request/><con:assertion type="Simple Contains"><con:configuration><token>auth</token><ignoreCase>false</ignoreCase><useRegEx>false</useRegEx></con:configuration></con:assertion><con:assertion type="Simple Contains"><con:configuration><token>token</token><ignoreCase>false</ignoreCase><useRegEx>false</useRegEx></con:configuration></con:assertion><con:assertion type="Simple Contains"><con:configuration><token>user</token><ignoreCase>false</ignoreCase><useRegEx>false</useRegEx></con:configuration></con:assertion><con:assertion type="Schema Compliance"><con:configuration><definition/></con:configuration></con:assertion><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:parameters> <con:entry key="tokenId" value="887665443383838"/> <con:entry key="X-Auth-Token" value="999888777666"/> diff --git a/test/unit/test_authentication.py b/test/unit/test_authentication.py index b1ee112e..a6531473 100644 --- a/test/unit/test_authentication.py +++ b/test/unit/test_authentication.py @@ -1,3 +1,23 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2010-2011 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import httplib2 +import json +from lxml import etree import os import sys # Need to access identity module @@ -5,34 +25,32 @@ sys.path.append(os.path.abspath(os.path.join(os.path.abspath(__file__), '..', '..', '..', '..', 'keystone'))) import unittest from webtest import TestApp -import httplib2 -import json -from lxml import etree import test_common as utils -class authentication_test(unittest.TestCase): +class AuthenticationTest(unittest.TestCase): def setUp(self): self.tenant = utils.get_tenant() - self.token = utils.get_token('joeuser', 'secrete', 'token') - self.user = utils.get_user() + self.token = utils.get_token('joeuser', 'secrete', self.tenant, + 'token') + #self.user = utils.get_user() self.userdisabled = utils.get_userdisabled() self.auth_token = utils.get_auth_token() - self.exp_auth_token = utils.get_exp_auth_token() - self.disabled_token = utils.get_disabled_token() + #self.exp_auth_token = utils.get_exp_auth_token() + #self.disabled_token = utils.get_disabled_token() def tearDown(self): utils.delete_token(self.token, self.auth_token) def test_a_authorize(self): - resp, content = utils.get_token('joeuser', 'secrete', '') + resp, content = utils.get_token('joeuser', 'secrete', self.tenant) self.assertEqual(200, int(resp['status'])) self.assertEqual('application/json', utils.content_type(resp)) def test_a_authorize_xml(self): - resp, content = utils.get_token_xml('joeuser', 'secrete', '', + resp, content = utils.get_token_xml('joeuser', 'secrete', self.tenant) self.assertEqual(200, int(resp['status'])) self.assertEqual('application/xml', utils.content_type(resp)) @@ -40,10 +58,12 @@ class authentication_test(unittest.TestCase): def test_a_authorize_user_disabled(self): header = httplib2.Http(".cache") url = '%stoken' % utils.URL - body = {"passwordCredentials": {"username": "disabled", - "password": "secrete"}} + body = {"passwordCredentials": {"username": self.userdisabled, + "password": "secrete", + "tenantId": self.tenant}} resp, content = header.request(url, "POST", body=json.dumps(body), headers={"Content-Type": "application/json"}) + content = json.loads(content) if int(resp['status']) == 500: self.fail('Identity Fault') @@ -58,11 +78,12 @@ class authentication_test(unittest.TestCase): body = '<?xml version="1.0" encoding="UTF-8"?> \ <passwordCredentials \ xmlns="http://docs.openstack.org/identity/api/v2.0" \ - password="secrete" username="disabled" \ - />' + password="secrete" username="%s" \ + tenantId="%s"/>' % (self.userdisabled, self.tenant) resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/xml", "ACCEPT": "application/xml"}) + content = etree.fromstring(content) if int(resp['status']) == 500: self.fail('Identity Fault') @@ -75,7 +96,8 @@ class authentication_test(unittest.TestCase): header = httplib2.Http(".cache") url = '%stoken' % utils.URL body = {"passwordCredentials": {"username-w": "disabled", - "password": "secrete"}} + "password": "secrete", + "tenantId": self.tenant}} resp, content = header.request(url, "POST", body=json.dumps(body), headers={"Content-Type": "application/json"}) content = json.loads(content) @@ -93,7 +115,7 @@ class authentication_test(unittest.TestCase): <passwordCredentials \ xmlns="http://docs.openstack.org/identity/api/v2.0" \ password="secrete" username-w="disabled" \ - />' + tenantId="%s"/>' % self.tenant resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/xml", "ACCEPT": "application/xml"}) @@ -105,5 +127,55 @@ class authentication_test(unittest.TestCase): self.assertEqual(400, int(resp['status'])) self.assertEqual('application/xml', utils.content_type(resp)) + +class MultiToken(unittest.TestCase): + + def setUp(self): + self.auth_token = utils.get_auth_token() + self.userdisabled = utils.get_userdisabled() + resp1, content1 = utils.create_tenant('test_tenant1', self.auth_token) + #create tenant2 + resp2, content2 = utils.create_tenant('test_tenant2', self.auth_token) + #create user1 with tenant1 + resp3, content3 = utils.create_user('test_tenant1', 'test_user1', + self.auth_token) + resp3, content3 = utils.create_user('test_tenant1', 'test_user2', + self.auth_token) + #add user1 to tenant2 + resp4, content4 = utils.add_user_json('test_tenant2', 'test_user1', + self.auth_token) + #self.exp_auth_token = utils.get_exp_auth_token() + #self.disabled_token = utils.get_disabled_token() + + def tearDown(self): + utils.delete_user('test_tenant1', 'test_user1', self.auth_token) + utils.delete_user('test_tenant1', 'test_user2', self.auth_token) + utils.delete_user('test_tenant2', 'test_user1', self.auth_token) + utils.delete_tenant('test_tenant1', self.auth_token) + utils.delete_tenant('test_tenant2', self.auth_token) + + """ INVALID TEST - we're changing how we delegate access to second tenant + def test_multi_token(self): + #get token for user1 with tenant1 + token1 = utils.get_token('test_user1', 'secrete', 'test_tenant1',\ + 'token') + #get token for user 1 with tenant2 + token2 = utils.get_token('test_user1', 'secrete', 'test_tenant2',\ + 'token') + #test result :: both token should be different + self.assertNotEqual(token1, None) + self.assertNotEqual(token2, None) + self.assertNotEqual(token1, token2) + + resp = utils.delete_token(token1, self.auth_token) + resp = utils.delete_token(token2, self.auth_token) + """ + + def test_unassigned_user(self): + resp, content = utils.get_token('test_user2', 'secrete', \ + 'test_tenant2') + + self.assertEqual(403, int(resp['status'])) + if __name__ == '__main__': unittest.main() diff --git a/test/unit/test_common.py b/test/unit/test_common.py index 47838310..07c46f50 100644 --- a/test/unit/test_common.py +++ b/test/unit/test_common.py @@ -1,21 +1,38 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2010-2011 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import httplib2 +import json +from lxml import etree import os import sys -# Need to access identity module sys.path.append(os.path.abspath(os.path.join(os.path.abspath(__file__), '..', '..', '..', '..', 'keystone'))) import unittest -from webtest import TestApp -import httplib2 -import json -from lxml import etree + URL = 'http://localhost:8080/v2.0/' -def get_token(user, pswd, kind='', tenant_id=None): +def get_token(user, pswd, tenant_id, kind=''): header = httplib2.Http(".cache") url = '%stoken' % URL + # to test multi token, removing below code if not tenant_id: body = {"passwordCredentials": {"username": user, "password": pswd}} @@ -23,17 +40,22 @@ def get_token(user, pswd, kind='', tenant_id=None): body = {"passwordCredentials": {"username": user, "password": pswd, "tenantId": tenant_id}} - + resp, content = header.request(url, "POST", body=json.dumps(body), headers={"Content-Type": "application/json"}) - content = json.loads(content) - token = str(content['auth']['token']['id']) + + if int(resp['status']) == 200: + content = json.loads(content) + token = str(content['auth']['token']['id']) + else: + token = None if kind == 'token': return token else: return (resp, content) + def delete_token(token, auth_token): header = httplib2.Http(".cache") url = '%stoken/%s' % (URL, token) @@ -74,7 +96,7 @@ def delete_tenant(tenantid, auth_token): resp, content = header.request(url, "DELETE", body='{}', headers={"Content-Type": "application/json", "X-Auth-Token": auth_token}) - return (resp, content) + return resp def delete_tenant_group(groupid, tenantid, auth_token): @@ -93,6 +115,7 @@ def create_global_group(groupid, auth_token): body = {"group": {"id": groupid, "description": "A description ..."}} resp, content = header.request(url, "POST", body=json.dumps(body), + headers={"Content-Type": "application/json", "X-Auth-Token": auth_token}) return (resp, content) @@ -131,10 +154,11 @@ def delete_global_group_xml(groupid, auth_token): return (resp, content) -def get_token_xml(user, pswd, type='', tenant_id=None): +def get_token_xml(user, pswd, tenant_id, type=''): header = httplib2.Http(".cache") url = '%stoken' % URL - if tenant_id: + # to test multi token, removing below code + """if tenant_id: body = '<?xml version="1.0" encoding="UTF-8"?> \ <passwordCredentials \ xmlns="http://docs.openstack.org/identity/api/v2.0" \ @@ -144,14 +168,24 @@ def get_token_xml(user, pswd, type='', tenant_id=None): body = '<?xml version="1.0" encoding="UTF-8"?> \ <passwordCredentials \ xmlns="http://docs.openstack.org/identity/api/v2.0" \ - password="%s" username="%s" /> ' % (pswd, user) + password="%s" username="%s" /> ' % (pswd, user)""" + # adding code ie., body + body = '<?xml version="1.0" encoding="UTF-8"?> \ + <passwordCredentials \ + xmlns="http://docs.openstack.org/identity/api/v2.0" \ + password="%s" username="%s" \ + tenantId="%s"/> ' % (pswd, user, tenant_id) resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/xml", "ACCEPT": "application/xml"}) - dom = etree.fromstring(content) - root = dom.find("{http://docs.openstack.org/identity/api/v2.0}token") - token_root = root.attrib - token = str(token_root['id']) + if int(resp['status']) == 200: + dom = etree.fromstring(content) + root = dom.find("{http://docs.openstack.org/identity/api/v2.0}token") + token_root = root.attrib + token = str(token_root['id']) + else: + token = None + if type == 'token': return token else: @@ -205,7 +239,8 @@ def delete_tenant_xml(tenantid, auth_token): headers={"Content-Type": "application/xml", "X-Auth-Token": auth_token, "ACCEPT": "application/xml"}) - return (resp, content) + + return resp def delete_tenant_group_xml(groupid, tenantid, auth_token): @@ -218,13 +253,17 @@ def delete_tenant_group_xml(groupid, tenantid, auth_token): return (resp, content) -def create_user(tenantid, userid, auth_token): +def create_user(tenantid, userid, auth_token, email=None): header = httplib2.Http(".cache") url = '%stenants/%s/users' % (URL, tenantid) + if email is not None: + email_id = email + else: + email_id = "%s@rackspace.com" % userid body = {"user": {"password": "secrete", "id": userid, "tenantId": tenantid, - "email": "%s@rackspace.com" % userid, + "email": "%s" % email_id, "enabled": True}} resp, content = header.request(url, "POST", body=json.dumps(body), headers={"Content-Type": "application/json", @@ -235,22 +274,24 @@ def create_user(tenantid, userid, auth_token): def delete_user(tenant, userid, auth_token): header = httplib2.Http(".cache") url = '%stenants/%s/users/%s' % (URL, tenant, userid) - resp, content = header.request(url, "DELETE", body='{}', headers={"Content-Type": "application/json", "X-Auth-Token": auth_token}) - - return (resp, content) + return resp -def create_user_xml(tenantid, userid, auth_token): +def create_user_xml(tenantid, userid, auth_token, email=None): header = httplib2.Http(".cache") url = '%stenants/%s/users' % (URL, tenantid) + if email is not None: + email_id = email + else: + email_id = userid body = '<?xml version="1.0" encoding="UTF-8"?> \ <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - email="joetest@rackspace.com" \ + email="%s" \ tenantId="%s" id="%s" \ - enabled="true" password="secrete"/>' % (tenantid, userid) + enabled="true" password="secrete"/>' % (email_id, tenantid, userid) resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/xml", "X-Auth-Token": auth_token, @@ -258,6 +299,16 @@ def create_user_xml(tenantid, userid, auth_token): return (resp, content) +"""def delete_user(tenant, userid, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s' % (URL, tenant, userid) + + resp, content = h.request(url, "DELETE", body='{}', + headers={"Content-Type": "application/json", + "X-Auth-Token": auth_token}) + return resp""" + + def delete_user_xml(tenantid, userid, auth_token): header = httplib2.Http(".cache") url = '%stenants/%s/users/%s' % (URL, tenantid, userid) @@ -265,6 +316,176 @@ def delete_user_xml(tenantid, userid, auth_token): headers={"Content-Type": "application/xml", "X-Auth-Token": auth_token, "ACCEPT": "application/xml"}) + return resp + +def add_user_json(tenantid, userid, auth_token): + header = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/add' % (URL, tenantid, userid) + resp, content = header.request(url, "PUT", body='{}', + headers={"Content-Type": "application/json", + "X-Auth-Token": auth_token}) + return (resp, content) + +def add_user_xml(tenantid, userid, auth_token): + header = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/add' % (URL, tenantid, userid) + resp, content = header.request(url, "PUT", body='{}', + headers={"Content-Type": "application/xml", + "X-Auth-Token": auth_token, + "ACCEPT": "application/xml"}) + return (resp, content) + +def add_user_json(tenantid, userid, auth_token): + header = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/add' % (URL, tenantid, userid) + resp, content = header.request(url, "PUT", body='{}', + headers={"Content-Type": "application/json", + "X-Auth-Token": auth_token}) + return (resp, content) + + +def add_user_xml(tenantid, userid, auth_token): + header = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/add' % (URL, tenantid, userid) + resp, content = header.request(url, "PUT", body='{}', + headers={"Content-Type": "application/xml", + "X-Auth-Token": auth_token, + "ACCEPT": "application/xml"}) + return (resp, content) + + +def user_update_json(tenant_id, user_id, auth_token, email=None): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s' % (URL, tenant_id, user_id) + if email is None: + new_email = "updatedjoeuser@rackspace.com" + else: + new_email = email + data = '{"user": { "email": "%s"}}' % (new_email) + resp, content = h.request(url, "PUT", body=data, + headers={"Content-Type": "application/json", + "X-Auth-Token": auth_token}) + return (resp, content) + + +def user_update_xml(tenant_id, user_id, auth_token, email=None): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s' % (URL, tenant_id, user_id) + if email is None: + new_email = "updatedjoeuser@rackspace.com" + else: + new_email = email + data = '<?xml version="1.0" encoding="UTF-8"?> \ + <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ + email="%s" />' % (new_email) + resp, content = h.request(url, "PUT", body=data, + headers={"Content-Type": "application/xml", + "X-Auth-Token": auth_token, + "ACCEPT": "application/xml"}) + return (resp, content) + + +def user_get_json(tenant_id, user_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s' % (URL, tenant_id, user_id) + #test for Content-Type = application/json + resp, content = h.request(url, "GET", body='{}', + headers={"Content-Type": "application/json", + "X-Auth-Token": auth_token}) + return (resp, content) + + +def user_password_json(tenant_id, user_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/password' % (URL, tenant_id, user_id) + data = '{"user": { "password": "p@ssword"}}' + resp, content = h.request(url, "PUT", body=data, + headers={"Content-Type": "application/json", + "X-Auth-Token": auth_token}) + return (resp, content) + + +def user_password_xml(tenant_id, user_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/password' % (URL, tenant_id, user_id) + data = '<?xml version="1.0" encoding="UTF-8"?> \ + <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ + password="p@ssword" />' + resp, content = h.request(url, "PUT", body=data, + headers={"Content-Type": "application/xml", + "X-Auth-Token": auth_token, + "ACCEPT": "application/xml"}) + return (resp, content) + + +def user_enabled_json(tenant_id, user_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/enabled' % (URL, tenant_id, user_id) + data = {"user": {"enabled": True}} + resp, content = h.request(url, "PUT", body=json.dumps(data), + headers={"Content-Type": "application/json", + "X-Auth-Token": auth_token}) + return (resp, content) + + +def user_enabled_xml(tenant_id, user_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/enabled' % (URL, tenant_id, user_id) + data = '<?xml version="1.0" encoding="UTF-8"?> \ + <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ + enabled="true" />' + resp, content = h.request(url, "PUT", body=data, + headers={"Content-Type": "application/xml", + "X-Auth-Token": auth_token, + "ACCEPT": "application/xml"}) + return (resp, content) + + +def user_get_xml(tenant_id, user_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s' % (URL, tenant_id, user_id) + resp, content = h.request(url, "GET", body='{}', + headers={"Content-Type": "application/xml", + "X-Auth-Token": auth_token, + "ACCEPT": "application/xml"}) + return (resp, content) + + +def users_get_json(tenant_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users' % (URL, tenant_id) + resp, content = h.request(url, "GET", body='{}', + headers={"Content-Type": "application/json", + "X-Auth-Token": auth_token}) + return (resp, content) + + +def users_get_xml(tenant_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users' % (URL, tenant_id) + resp, content = h.request(url, "GET", body='{}', + headers={"Content-Type": "application/xml", + "X-Auth-Token": auth_token, + "ACCEPT": "application/xml"}) + return (resp, content) + + +def users_group_get_json(tenant_id, user_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/groups' % (URL, tenant_id, user_id) + resp, content = h.request(url, "GET", body='{}', + headers={"Content-Type": "application/json", + "X-Auth-Token": auth_token}) + return (resp, content) + + +def users_group_get_xml(tenant_id, user_id, auth_token): + h = httplib2.Http(".cache") + url = '%stenants/%s/users/%s/groups' % (URL, tenant_id, user_id) + resp, content = h.request(url, "GET", body='{}', + headers={"Content-Type": "application/xml", + "X-Auth-Token": auth_token, + "ACCEPT": "application/xml"}) return (resp, content) @@ -411,6 +632,10 @@ def get_tenant(): return '1234' +def get_another_tenant(): + return '4321' + + def get_user(): return 'test_user' @@ -457,7 +682,6 @@ def handle_user_resp(self, content, respvalue, resptype): content = etree.fromstring(content) self.tenant = content.get("tenantId") self.id = content.get("id") - if respvalue == 500: self.fail('Identity Fault') elif respvalue == 503: diff --git a/test/unit/test_exthandler.py b/test/unit/test_exthandler.py index 4d09c148..5d41aeac 100644 --- a/test/unit/test_exthandler.py +++ b/test/unit/test_exthandler.py @@ -26,22 +26,22 @@ class UrlExtensionFilterTest(unittest.TestCase): self.filter = UrlExtensionFilter(MockWsgiApp(), {}) def test_xml_extension(self): - env = {'PATH_INFO': '/v1.0/someresource.xml'} + env = {'PATH_INFO': '/v2.0/someresource.xml'} self.filter(env, _start_response) - self.assertEqual('/v1.0/someresource', env['PATH_INFO']) + self.assertEqual('/v2.0/someresource', env['PATH_INFO']) self.assertEqual('application/xml', env['HTTP_ACCEPT']) def test_json_extension(self): - env = {'PATH_INFO': '/v1.0/someresource.json'} + env = {'PATH_INFO': '/v2.0/someresource.json'} self.filter(env, _start_response) - self.assertEqual('/v1.0/someresource', env['PATH_INFO']) + self.assertEqual('/v2.0/someresource', env['PATH_INFO']) self.assertEqual('application/json', env['HTTP_ACCEPT']) def test_extension_overrides_header(self): - env = {'PATH_INFO': '/v1.0/someresource.json', + env = {'PATH_INFO': '/v2.0/someresource.json', 'HTTP_ACCEPT': 'application/xml'} self.filter(env, _start_response) - self.assertEqual('/v1.0/someresource', env['PATH_INFO']) + self.assertEqual('/v2.0/someresource', env['PATH_INFO']) self.assertEqual('application/json', env['HTTP_ACCEPT']) diff --git a/test/unit/test_groups.py b/test/unit/test_groups.py index 419536d0..333f419b 100644 --- a/test/unit/test_groups.py +++ b/test/unit/test_groups.py @@ -1,25 +1,41 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2010-2011 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import httplib2 +import json +from lxml import etree import os import sys -# Need to access identity module sys.path.append(os.path.abspath(os.path.join(os.path.abspath(__file__), '..', '..', '..', '..', 'keystone'))) import unittest from webtest import TestApp -import httplib2 -import json -from lxml import etree import test_common as utils + ## ## Global Group Tests ## -class global_group_test(unittest.TestCase): +class GlobalGroupTest(unittest.TestCase): def setUp(self): - self.token = utils.get_token('joeuser', 'secrete', 'token') self.globaltenant = utils.get_global_tenant() self.user = utils.get_user() self.userdisabled = utils.get_userdisabled() @@ -27,73 +43,77 @@ class global_group_test(unittest.TestCase): self.exp_auth_token = utils.get_exp_auth_token() self.disabled_token = utils.get_disabled_token() self.global_group = 'test_global_group_add' + utils.create_tenant(self.globaltenant, str(self.auth_token)) + utils.create_user(self.globaltenant, self.user, self.auth_token) + utils.add_user_json(self.globaltenant, self.user, self.auth_token) + self.token = utils.get_token(self.user, 'secrete', self.globaltenant, + 'token') def tearDown(self): - resp, content = utils.delete_global_group(self.global_group, - self.auth_token) - resp, content = utils.delete_tenant(self.globaltenant, self.auth_token) + utils.delete_user(self.globaltenant, self.user, str(self.auth_token)) + utils.delete_global_group(self.global_group, self.auth_token) + utils.delete_tenant(self.globaltenant, self.auth_token) -class create_global_group_test(global_group_test): +class CreateGlobalGroupTest(GlobalGroupTest): def test_global_group_create(self): - respG, contentG = utils.delete_global_group(self.global_group, - str(self.auth_token)) - respG, contentG = utils.create_global_group(self.global_group, + utils.delete_global_group(self.global_group, str(self.auth_token)) + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) - if int(respG['status']) == 500: - self.fail('Identity Fault') - elif int(respG['status']) == 503: + if int(resp_new['status']) == 500: + self.fail('IDM fault') + elif int(resp_new['status']) == 503: self.fail('Service Not Available') - if int(respG['status']) not in (200, 201): - self.fail('Failed due to %d' % int(respG['status'])) + if int(resp_new['status']) not in (200, 201): + self.fail('Failed due to %d' % int(resp_new['status'])) def test_global_group_create_xml(self): - respG, contentG = utils.delete_global_group_xml(self.global_group, - str(self.auth_token)) - respG, contentG = utils.create_global_group_xml(self.global_group, + utils.delete_global_group_xml(self.global_group, str(self.auth_token)) + resp_new, content_new = utils.create_global_group_xml(\ + self.global_group, str(self.auth_token)) - if int(respG['status']) == 500: - self.fail('Identity Fault') - elif int(respG['status']) == 503: + if int(resp_new['status']) == 500: + self.fail('IDM fault') + elif int(resp_new['status']) == 503: self.fail('Service Not Available') - if int(respG['status']) not in (200, 201): - self.fail('Failed due to %d' % int(respG['status'])) + if int(resp_new['status']) not in (200, 201): + self.fail('Failed due to %d' % int(resp_new['status'])) def test_global_group_create_again(self): - respG, contentG = utils.create_global_group(self.global_group, - str(self.auth_token)) - respG, contentG = utils.create_global_group(self.global_group, + utils.create_global_group(self.global_group, str(self.auth_token)) + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) - if int(respG['status']) == 500: - self.fail('Identity Fault') - elif int(respG['status']) == 503: + if int(resp_new['status']) == 500: + self.fail('IDM fault') + elif int(resp_new['status']) == 503: self.fail('Service Not Available') - self.assertEqual(409, int(respG['status'])) + self.assertEqual(409, int(resp_new['status'])) def test_global_group_create_again_xml(self): - respG, contentG = utils.create_global_group_xml(self.global_group, - str(self.auth_token)) - respG, contentG = utils.create_global_group_xml(self.global_group, - str(self.auth_token)) - contentG = etree.fromstring(contentG) - if int(respG['status']) == 500: - self.fail('Identity Fault') - elif int(respG['status']) == 503: + utils.create_global_group_xml(self.global_group, str(self.auth_token)) + resp_new, content_new = utils.create_global_group_xml(\ + self.global_group, + str(self.auth_token)) + content_new = etree.fromstring(content_new) + if int(resp_new['status']) == 500: + self.fail('IDM fault') + elif int(resp_new['status']) == 503: self.fail('Service Not Available') - self.assertEqual(409, int(respG['status'])) + self.assertEqual(409, int(resp_new['status'])) def test_global_group_create_unauthorized_token(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group_xml(self.global_group, - str(self.auth_token)) + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group_xml(\ + self.global_group, + str(self.auth_token)) url = '%sgroups' % (utils.URL) body = {"group": {"id": self.global_group, "description": "A description ..."}} - resp, content = h.request(url, "POST", body=json.dumps(body), + resp, content = header.request(url, "POST", body=json.dumps(body), headers={"Content-Type": "application/json", "X-Auth-Token": self.token}) if int(resp['status']) == 500: @@ -103,14 +123,14 @@ class create_global_group_test(global_group_test): self.assertEqual(401, int(resp['status'])) def test_global_group_create_unauthorized_token_xml(self): - h = httplib2.Http(".cache") + header = httplib2.Http(".cache") url = '%sgroups' % (utils.URL) body = '<?xml version="1.0" encoding="UTF-8"?> \ <group xmlns="http://docs.openstack.org/identity/api/v2.0" \ id="%s"> \ <description>A description...</description> \ </group>' % self.global_group - resp, content = h.request(url, "POST", body=body, + resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/xml", "X-Auth-Token": self.token, "ACCEPT": "application/xml"}) @@ -121,11 +141,11 @@ class create_global_group_test(global_group_test): self.assertEqual(401, int(resp['status'])) def test_global_group_create_expired_token(self): - h = httplib2.Http(".cache") + header = httplib2.Http(".cache") url = '%sgroups' % (utils.URL) body = {"group": {"id": self.global_group, "description": "A description ..."}} - resp, content = h.request(url, "POST", body=json.dumps(body), + resp, content = header.request(url, "POST", body=json.dumps(body), headers={"Content-Type": "application/json", "X-Auth-Token": \ self.exp_auth_token}) @@ -136,13 +156,13 @@ class create_global_group_test(global_group_test): self.assertEqual(403, int(resp['status'])) def test_global_group_create_expired_token_xml(self): - h = httplib2.Http(".cache") + header = httplib2.Http(".cache") url = '%sgroups' % (utils.URL) body = '<?xml version="1.0" encoding="UTF-8"?> \ <group xmlns="http://docs.openstack.org/identity/api/v2.0" \ id="%s"><description>A description...</description> \ </group>' % self.globaltenant - resp, content = h.request(url, "POST", body=body, + resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/xml", "X-Auth-Token": self.exp_auth_token, "ACCEPT": "application/xml"}) @@ -153,11 +173,11 @@ class create_global_group_test(global_group_test): self.assertEqual(403, int(resp['status'])) def test_global_group_create_missing_token(self): - h = httplib2.Http(".cache") + header = httplib2.Http(".cache") url = '%sgroups' % (utils.URL) body = {"group": {"id": self.global_group, "description": "A description ..."}} - resp, content = h.request(url, "POST", body=json.dumps(body), + resp, content = header.request(url, "POST", body=json.dumps(body), headers={"Content-Type": "application/json"}) if int(resp['status']) == 500: self.fail('Identity Fault') @@ -166,13 +186,13 @@ class create_global_group_test(global_group_test): self.assertEqual(401, int(resp['status'])) def test_global_group_create_missing_token_xml(self): - h = httplib2.Http(".cache") + header = httplib2.Http(".cache") url = '%sgroups' % (utils.URL) body = '<?xml version="1.0" encoding="UTF-8"?> \ <group xmlns="http://docs.openstack.org/identity/api/v2.0" \ id="%s"><description>A description...</description> \ </group>' % self.global_group - resp, content = h.request(url, "POST", body=body, + resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/xml", "ACCEPT": "application/xml"}) if int(resp['status']) == 500: @@ -182,11 +202,11 @@ class create_global_group_test(global_group_test): self.assertEqual(401, int(resp['status'])) def test_global_group_create_disabled_token(self): - h = httplib2.Http(".cache") + header = httplib2.Http(".cache") url = '%sgroups' % (utils.URL) body = '{"group": { "id": "%s", \ "description": "A description ..." } }' % self.global_group - resp, content = h.request(url, "POST", body=body, + resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/json", "X-Auth-Token": \ self.disabled_token}) @@ -197,13 +217,13 @@ class create_global_group_test(global_group_test): self.assertEqual(403, int(resp['status'])) def test_global_group_create_disabled_token_xml(self): - h = httplib2.Http(".cache") + header = httplib2.Http(".cache") url = '%sgroups' % (utils.URL) body = '<?xml version="1.0" encoding="UTF-8"?> \ <group xmlns="http://docs.openstack.org/identity/api/v2.0" \ id="%s"><description>A description...</description> \ </group>' % self.global_group - resp, content = h.request(url, "POST", body=body, + resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/xml", "X-Auth-Token": self.disabled_token, "ACCEPT": "application/xml"}) @@ -214,11 +234,11 @@ class create_global_group_test(global_group_test): self.assertEqual(403, int(resp['status'])) def test_global_group_create_invalid_token(self): - h = httplib2.Http(".cache") + header = httplib2.Http(".cache") url = '%sgroups' % (utils.URL) body = '{"group": { "id": "%s", \ "description": "A description ..." } }' % self.globaltenant - resp, content = h.request(url, "POST", body=body, + resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/json", "X-Auth-Token": 'nonexsitingtoken'}) if int(resp['status']) == 500: @@ -228,13 +248,13 @@ class create_global_group_test(global_group_test): self.assertEqual(404, int(resp['status'])) def test_global_group_create_invalid_token_xml(self): - h = httplib2.Http(".cache") + header = httplib2.Http(".cache") url = '%sgroups' % (utils.URL) body = '<?xml version="1.0" encoding="UTF-8"?> \ <group xmlns="http://docs.openstack.org/identity/api/v2.0" \ id="%s"><description>A description...</description> \ </group>' % self.global_group - resp, content = h.request(url, "POST", body=body, + resp, content = header.request(url, "POST", body=body, headers={"Content-Type": "application/xml", "X-Auth-Token": 'nonexsitingtoken', "ACCEPT": "application/xml"}) @@ -245,17 +265,16 @@ class create_global_group_test(global_group_test): self.assertEqual(404, int(resp['status'])) -class get_global_groups_test(global_group_test): +class GetGlobalGroupsTest(GlobalGroupTest): def test_get_global_groups(self): - h = httplib2.Http(".cache") - respG, contentG = utils.delete_global_group(self.global_group, - str(self.auth_token)) - respG, contentG = utils.create_global_group(self.global_group, + header = httplib2.Http(".cache") + utils.delete_global_group(self.global_group, str(self.auth_token)) + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) url = '%sgroups' % (utils.URL) - resp, content = h.request(url, "GET", body='{}', + resp, content = header.request(url, "GET", body='{}', headers={"Content-Type": "application/json", "X-Auth-Token": self.auth_token}) if int(resp['status']) == 500: @@ -265,11 +284,10 @@ class get_global_groups_test(global_group_test): self.assertEqual(200, int(resp['status'])) def test_get_global_groups_xml(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group_xml(self.global_group, - str(self.auth_token)) + header = httplib2.Http(".cache") + utils.create_global_group_xml(self.global_group, str(self.auth_token)) url = '%sgroups' % (utils.URL) - resp, content = h.request(url, "GET", body='', + resp, content = header.request(url, "GET", body='', headers={"Content-Type": "application/xml", "X-Auth-Token": self.auth_token, "ACCEPT": "application/xml"}) @@ -280,12 +298,12 @@ class get_global_groups_test(global_group_test): self.assertEqual(200, int(resp['status'])) def test_get_global_groups_unauthorized_token(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group(self.global_group, + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) url = '%sgroups' % (utils.URL) #test for Content-Type = application/json - resp, content = h.request(url, "GET", body='{}', + resp, content = header.request(url, "GET", body='{}', headers={"Content-Type": "application/json", "X-Auth-Token": self.token}) if int(resp['status']) == 500: @@ -295,12 +313,13 @@ class get_global_groups_test(global_group_test): self.assertEqual(401, int(resp['status'])) def test_get_global_groups_unauthorized_token_xml(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group_xml(self.global_group, - str(self.auth_token)) + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group_xml(\ + self.global_group, + str(self.auth_token)) url = '%sgroups' % (utils.URL) #test for Content-Type = application/json - resp, content = h.request(url, "GET", body='', + resp, content = header.request(url, "GET", body='', headers={"Content-Type": "application/xml", "X-Auth-Token": self.token, "ACCEPT": "application/xml"}) @@ -311,12 +330,12 @@ class get_global_groups_test(global_group_test): self.assertEqual(401, int(resp['status'])) def test_get_global_groups_exp_token(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group(self.global_group, + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) url = '%sgroups' % (utils.URL) #test for Content-Type = application/json - resp, content = h.request(url, "GET", body='{}', + resp, content = header.request(url, "GET", body='{}', headers={"Content-Type": "application/json", "X-Auth-Token": \ self.exp_auth_token}) @@ -327,12 +346,13 @@ class get_global_groups_test(global_group_test): self.assertEqual(403, int(resp['status'])) def test_get_global_groups_exp_token_xml(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group_xml(self.global_group, - str(self.auth_token)) + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group_xml(\ + self.global_group, + str(self.auth_token)) url = '%sgroups' % (utils.URL) #test for Content-Type = application/json - resp, content = h.request(url, "GET", body='', + resp, content = header.request(url, "GET", body='', headers={"Content-Type": "application/xml", "X-Auth-Token": self.exp_auth_token, "ACCEPT": "application/xml"}) @@ -343,15 +363,15 @@ class get_global_groups_test(global_group_test): self.assertEqual(403, int(resp['status'])) -class get_global_group_test(global_group_test): +class GetGlobalGroupTest(GlobalGroupTest): def test_get_global_group(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group(self.global_group, + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) url = '%sgroups/%s' % (utils.URL, self.global_group) #test for Content-Type = application/json - resp, content = h.request(url, "GET", body='{}', + resp, content = header.request(url, "GET", body='{}', headers={"Content-Type": "application/json", "X-Auth-Token": self.auth_token}) if int(resp['status']) == 500: @@ -361,12 +381,13 @@ class get_global_group_test(global_group_test): self.assertEqual(200, int(resp['status'])) def test_get_global_group_xml(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group_xml(self.global_group, - str(self.auth_token)) + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group_xml(\ + self.global_group, + str(self.auth_token)) url = '%sgroups/%s' % (utils.URL, self.global_group) #test for Content-Type = application/json - resp, content = h.request(url, "GET", body='', + resp, content = header.request(url, "GET", body='', headers={"Content-Type": "application/xml", "X-Auth-Token": self.auth_token, "ACCEPT": "application/xml"}) @@ -377,12 +398,12 @@ class get_global_group_test(global_group_test): self.assertEqual(200, int(resp['status'])) def test_get_global_group_bad(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group(self.global_group, + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) url = '%sgroups/%s' % (utils.URL, 'global_group_bad') #test for Content-Type = application/json - resp, content = h.request(url, "GET", body='', + resp, content = header.request(url, "GET", body='', headers={"Content-Type": "application/json", "X-Auth-Token": self.auth_token}) if int(resp['status']) == 500: @@ -392,12 +413,13 @@ class get_global_group_test(global_group_test): self.assertEqual(404, int(resp['status'])) def test_get_global_group_bad_xml(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group_xml(self.global_group, - str(self.auth_token)) + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group_xml(\ + self.global_group, + str(self.auth_token)) url = '%sgroups/%s' % (utils.URL, 'global_group_bad') #test for Content-Type = application/json - resp, content = h.request(url, "GET", body='', + resp, content = header.request(url, "GET", body='', headers={"Content-Type": "application/xml", "X-Auth-Token": self.auth_token, "ACCEPT": "application/xml"}) @@ -408,14 +430,14 @@ class get_global_group_test(global_group_test): self.assertEqual(404, int(resp['status'])) -class update_global_groups_test(global_group_test): +class UpdateGlobalGroupsTest(GlobalGroupTest): def test_update_global_group(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group(self.global_group, + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) url = '%sgroups/%s' % (utils.URL, self.global_group) - resp, content = h.request(url, "PUT", body='{"group":{\ + resp, content = header.request(url, "PUT", body='{"group":{\ "id" : "%s","description" :\ "A New description of the group..."}}' % self.global_group, headers={"Content-Type": "application/json", @@ -431,8 +453,8 @@ class update_global_groups_test(global_group_test): str(body['group']['description'])) def test_update_global_group_xml(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group(self.global_group, + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) url = '%sgroups/%s' % (utils.URL, self.global_group) @@ -441,7 +463,7 @@ class update_global_groups_test(global_group_test): id="%s"><description>A NEW description...</description> \ </group>' % (self.global_group) #test for Content-Type = application/json - resp, content = h.request(url, "PUT", body=data, + resp, content = header.request(url, "PUT", body=data, headers={"Content-Type": "application/xml", "X-Auth-Token": self.auth_token, "ACCEPT": "application/xml"}) @@ -457,15 +479,15 @@ class update_global_groups_test(global_group_test): self.assertEqual('A NEW description...', desc.text) def test_update_global_group_bad(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group(self.global_group, + header = httplib2.Http(".cache") + resp_new, content_new = utils.create_global_group(self.global_group, str(self.auth_token)) url = '%sgroups/%s' % (utils.URL, self.global_group) data = '{"group": { "description_bad": "A NEW description...", \ "id":"%s" }}'\ % (self.global_group) #test for Content-Type = application/json - resp, content = h.request(url, "PUT", body=data, + resp, content = header.request(url, "PUT", body=data, headers={"Content-Type": "application/json", "X-Auth-Token": self.auth_token}) if int(resp['status']) == 500: @@ -475,16 +497,15 @@ class update_global_groups_test(global_group_test): self.assertEqual(400, int(resp['status'])) def test_update_global_group_bad_xml(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group_xml(self.global_group, - str(self.auth_token)) + header = httplib2.Http(".cache") + utils.create_global_group_xml(self.global_group, str(self.auth_token)) url = '%sgroups/%s' % (utils.URL, self.global_group) data = '<?xml version="1.0" encoding="UTF-8"?> \ <group xmlns="http://docs.openstack.org/identity/api/v2.0" \ id="%s"><description_bad>A NEW description...</description> \ </group>' % (self.global_group) #test for Content-Type = application/json - resp, content = h.request(url, "PUT", body=data, + resp, content = header.request(url, "PUT", body=data, headers={"Content-Type": "application/xml", "X-Auth-Token": self.auth_token, "ACCEPT": "application/xml"}) @@ -496,22 +517,20 @@ class update_global_groups_test(global_group_test): self.assertEqual(400, int(resp['status'])) def test_update_global_group_not_found(self): - h = httplib2.Http(".cache") - respG, contentG = utils.create_global_group(self.global_group, - str(self.auth_token)) + header = httplib2.Http(".cache") + utils.create_global_group(self.global_group, str(self.auth_token)) url = '%sgroups/NonexistingID' % (utils.URL) data = '{"group": { "description": "A NEW description...", \ "id":"NonexistingID"}}' #test for Content-Type = application/json - resp, content = h.request(url, "GET", body=data, + resp, content = header.request(url, "GET", body=data, headers={"Content-Type": "application/json", "X-Auth-Token": self.auth_token}) self.assertEqual(404, int(resp['status'])) def test_update_global_group_not_found_xml(self): - h = httplib2.Http(".cache") - resp, content = utils.create_tenant_xml(self.globaltenant, - str(self.auth_token)) + header = httplib2.Http(".cache") + utils.create_tenant_xml(self.globaltenant, str(self.auth_token)) url = '%sgroups/NonexistingID' % (utils.URL) data = '<?xml version="1.0" encoding="UTF-8"?> \ <group xmlns="http://docs.openstack.org/identity/api/v2.0" \ @@ -519,7 +538,7 @@ class update_global_groups_test(global_group_test): <description_bad>A NEW description...</description> \ </group>' #test for Content-Type = application/json - resp, content = h.request(url, "GET", body=data, + resp, content = header.request(url, "GET", body=data, headers={"Content-Type": "application/xml", "X-Auth-Token": self.auth_token, "ACCEPT": "application/xml"}) @@ -530,7 +549,7 @@ class update_global_groups_test(global_group_test): self.assertEqual(404, int(resp['status'])) -class delete_global_group_test(global_group_test): +class DeleteGlobalGroupTest(GlobalGroupTest): def test_delete_global_group_not_found(self): resp, content = utils.delete_global_group("test_global_group_1", @@ -543,61 +562,60 @@ class delete_global_group_test(global_group_test): self.assertEqual(404, int(resp['status'])) def test_delete_global_group(self): - resp, content = utils.create_tenant(self.globaltenant, - str(self.auth_token)) - respG, contentG = utils.create_tenant_group('test_global_group_delete', - self.globaltenant, - str(self.auth_token)) - respG, contentG = utils.delete_global_group('test_global_group_delete', - str(self.auth_token)) - resp, content = utils.delete_tenant(self.globaltenant, - str(self.auth_token)) - self.assertEqual(204, int(respG['status'])) + utils.create_tenant(self.globaltenant, str(self.auth_token)) + utils.create_tenant_group('test_global_group_delete', + self.globaltenant, str(self.auth_token)) + resp_new, content_new = utils.delete_global_group(\ + 'test_global_group_delete', + str(self.auth_token)) + resp = utils.delete_tenant(self.globaltenant, str(self.auth_token)) + self.assertEqual(204, int(resp_new['status'])) def test_delete_global_group_xml(self): - resp, content = utils.create_tenant_xml(self.globaltenant, - str(self.auth_token)) - respG, contentG = utils.create_tenant_group_xml(\ - 'test_global_group_delete', - self.globaltenant, - str(self.auth_token)) - respG, contentG = utils.delete_global_group_xml(\ + + utils.create_tenant_xml(self.globaltenant, str(self.auth_token)) + + utils.create_tenant_group_xml('test_global_group_delete', + self.globaltenant, str(self.auth_token)) + + resp_new, content_new = utils.delete_global_group_xml(\ 'test_global_group_delete', str(self.auth_token)) - resp, content = utils.delete_tenant_xml(self.globaltenant, - str(self.auth_token)) - self.assertEqual(204, int(resp['status'])) + + utils.delete_tenant_xml(self.globaltenant, str(self.auth_token)) + + self.assertEqual(204, int(resp_new['status'])) -class add_user_global_group_test(unittest.TestCase): +class AddUserGlobalGroupTest(unittest.TestCase): def setUp(self): - self.token = utils.get_token('joeuser', 'secrete', 'token') self.tenant = utils.get_global_tenant() + self.auth_token = utils.get_auth_token() self.user = utils.get_user() self.userdisabled = utils.get_userdisabled() - self.auth_token = utils.get_auth_token() self.exp_auth_token = utils.get_exp_auth_token() self.disabled_token = utils.get_disabled_token() self.global_group = 'test_global_group' + utils.create_tenant(self.tenant, str(self.auth_token)) + utils.create_user(self.tenant, self.user, self.auth_token) + utils.add_user_json(self.tenant, self.user, self.auth_token) + self.token = utils.get_token(self.user, 'secrete', self.tenant, + 'token') def tearDown(self): - respG, contentG = utils.delete_user_global_group(self.global_group, - self.user, - str(self.auth_token)) + utils.delete_user_global_group(self.global_group, self.user, + str(self.auth_token)) - respG, contentG = utils.delete_user(self.tenant, self.user, - str(self.auth_token)) - resp, content = utils.delete_global_group(self.global_group, - self.auth_token) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, self.auth_token) + utils.delete_global_group(self.global_group, self.auth_token) def test_add_user_global_group(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp_new, content_new = utils.add_user_global_group(self.global_group, self.user, str(self.auth_token)) @@ -605,16 +623,15 @@ class add_user_global_group_test(unittest.TestCase): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - if int(respG['status']) not in (200, 201): - self.fail('Failed due to %d' % int(respG['status'])) + if int(resp_new['status']) not in (200, 201): + self.fail('Failed due to %d' % int(resp_new['status'])) def test_add_user_global_group_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group_xml(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp_new, content_new = utils.add_user_global_group_xml(\ + self.global_group, self.user, str(self.auth_token)) @@ -622,19 +639,16 @@ class add_user_global_group_test(unittest.TestCase): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - if int(respG['status']) not in (200, 201): - self.fail('Failed due to %d' % int(respG['status'])) + if int(resp_new['status']) not in (200, 201): + self.fail('Failed due to %d' % int(resp_new['status'])) def test_add_user_global_group_conflict(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.add_user_global_group(self.global_group, self.user, str(self.auth_token)) @@ -642,18 +656,16 @@ class add_user_global_group_test(unittest.TestCase): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(409, int(respG['status'])) + self.assertEqual(409, int(resp_new['status'])) def test_add_user_global_group_conflict_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group_xml(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group_xml(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group_xml(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.add_user_global_group_xml(\ + self.global_group, self.user, str(self.auth_token)) @@ -661,31 +673,29 @@ class add_user_global_group_test(unittest.TestCase): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(409, int(respG['status'])) + self.assertEqual(409, int(resp_new['status'])) def test_add_user_global_group_unauthorized(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, + + utils.create_user(self.tenant, self.user, str(self.auth_token)) + + resp_new, content_new = utils.add_user_global_group(self.global_group, self.user, str(self.token)) - if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(401, int(respG['status'])) + self.assertEqual(401, int(resp_new['status'])) def test_add_user_global_group_unauthorized_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group_xml(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp_new, content_new = utils.add_user_global_group_xml(\ + self.global_group, self.user, str(self.token)) @@ -693,15 +703,14 @@ class add_user_global_group_test(unittest.TestCase): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(401, int(respG['status'])) + self.assertEqual(401, int(resp_new['status'])) def test_add_user_global_group_forbidden(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp_new, content_new = utils.add_user_global_group(\ + self.global_group, self.user, str(self.disabled_token)) @@ -709,28 +718,26 @@ class add_user_global_group_test(unittest.TestCase): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(403, int(respG['status'])) + self.assertEqual(403, int(resp_new['status'])) def test_add_user_global_group_forbidden_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group_xml(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp_new, content_new = utils.add_user_global_group_xml(\ + self.global_group, self.user, str(self.disabled_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(403, int(respG['status'])) + self.assertEqual(403, int(resp_new['status'])) -class get_users_tenant_group_test(unittest.TestCase): +class GetUsersTenantGroupTest(unittest.TestCase): def setUp(self): - self.token = utils.get_token('joeuser', 'secrete', 'token') self.tenant = utils.get_global_tenant() self.user = utils.get_user() self.userdisabled = utils.get_userdisabled() @@ -738,164 +745,148 @@ class get_users_tenant_group_test(unittest.TestCase): self.exp_auth_token = utils.get_exp_auth_token() self.disabled_token = utils.get_disabled_token() self.global_group = 'test_global_group' + utils.create_tenant(self.tenant, str(self.auth_token)) + utils.create_user(self.tenant, self.user, self.auth_token) + utils.add_user_json(self.tenant, self.user, self.auth_token) + self.token = utils.get_token(self.user, 'secrete', self.tenant, + 'token') def tearDown(self): - respG, contentG = utils.delete_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - - respG, contentG = utils.delete_user(self.tenant, self.user, - str(self.auth_token)) - resp, content = utils.delete_global_group(self.global_group, - self.auth_token) + utils.delete_user_global_group(self.global_group, self.user, + str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_global_group(self.global_group, self.auth_token) def test_get_users_global_group(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.get_user_global_group(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.get_user_global_group(\ + self.global_group, str(self.auth_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(200, int(respG['status'])) + self.assertEqual(200, int(resp_new['status'])) def test_get_users_global_group_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group_xml(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.get_user_global_group_xml(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group_xml(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.get_user_global_group_xml(\ + self.global_group, str(self.auth_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(200, int(respG['status'])) + self.assertEqual(200, int(resp_new['status'])) def test_get_users_global_group_unauthorized(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) - respG, contentG = utils.get_user_global_group(self.global_group, + resp_new, content_new = utils.get_user_global_group(\ + self.global_group, str(self.token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(401, int(respG['status'])) + self.assertEqual(401, int(resp_new['status'])) def test_get_users_global_group_unauthorized_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.get_user_global_group_xml(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.get_user_global_group_xml(\ + self.global_group, str(self.token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(401, int(respG['status'])) + self.assertEqual(401, int(resp_new['status'])) def test_get_users_global_group_forbidden(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.get_user_global_group(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.get_user_global_group(\ + self.global_group, str(self.disabled_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(403, int(respG['status'])) + self.assertEqual(403, int(resp_new['status'])) def test_get_users_global_group_forbidden_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.get_user_global_group_xml(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.get_user_global_group_xml(\ + self.global_group, str(self.disabled_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(403, int(respG['status'])) + self.assertEqual(403, int(resp_new['status'])) def test_get_users_global_group_expired(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.get_user_global_group(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.get_user_global_group(\ + self.global_group, str(self.exp_auth_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(403, int(respG['status'])) + self.assertEqual(403, int(resp_new['status'])) def test_get_users_global_group_expired_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.get_user_global_group_xml(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.get_user_global_group_xml(\ + self.global_group, str(self.exp_auth_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(403, int(respG['status'])) + self.assertEqual(403, int(resp_new['status'])) -class delete_users_global_group_test(unittest.TestCase): +class DeleteUsersGlobalGroupTest(unittest.TestCase): def setUp(self): - self.token = utils.get_token('joeuser', 'secrete', 'token') self.tenant = utils.get_global_tenant() self.user = utils.get_user() self.userdisabled = utils.get_userdisabled() @@ -903,28 +894,28 @@ class delete_users_global_group_test(unittest.TestCase): self.exp_auth_token = utils.get_exp_auth_token() self.disabled_token = utils.get_disabled_token() self.global_group = 'test_global_group' + utils.create_tenant(self.tenant, str(self.auth_token)) + utils.create_user(self.tenant, self.user, self.auth_token) + utils.add_user_json(self.tenant, self.user, self.auth_token) + self.token = utils.get_token(self.user, 'secrete', self.tenant, + 'token') def tearDown(self): - respG, contentG = utils.delete_user_global_group(self.global_group, - self.user, - str(self.auth_token)) + utils.delete_user_global_group(self.global_group, self.user, + str(self.auth_token)) - respG, contentG = utils.delete_user(self.tenant, self.user, - str(self.auth_token)) - resp, content = utils.delete_global_group(self.global_group, - self.auth_token) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_global_group(self.global_group, self.auth_token) def test_delete_user_global_group(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) - respG, contentG = utils.delete_user_global_group(self.global_group, + resp_new, content_new = utils.delete_user_global_group(\ + self.global_group, self.user, str(self.auth_token)) @@ -932,68 +923,58 @@ class delete_users_global_group_test(unittest.TestCase): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(204, int(respG['status'])) + self.assertEqual(204, int(resp_new['status'])) def test_delete_user_global_group_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.delete_user_global_group_xml(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.delete_user_global_group_xml(\ + self.global_group, self.user, str(self.auth_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(204, int(respG['status'])) + self.assertEqual(204, int(resp_new['status'])) def test_delete_user_global_group_notfound(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.disabled_token)) + utils.delete_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.delete_user_global_group( + self.global_group, self.user, - str(self.disabled_token)) - respG, contentG = utils.delete_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.delete_user_global_group(self.global_group, - self.user, - str(self.auth_token)) + str(self.auth_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(404, int(respG['status'])) + self.assertEqual(404, int(resp_new['status'])) def test_delete_user_global_group_notfound_xml(self): - h = httplib2.Http(".cache") resp, content = utils.create_global_group(self.global_group, str(self.auth_token)) - respG, contentG = utils.create_user(self.tenant, self.user, - str(self.auth_token)) - respG, contentG = utils.add_user_global_group(self.global_group, - self.user, - str(self.disabled_token)) - respG, contentG = utils.delete_user_global_group(self.global_group, - self.user, - str(self.auth_token)) - respG, contentG = utils.delete_user_global_group_xml(self.global_group, - self.user, - str(self.auth_token)) - if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - self.assertEqual(404, int(respG['status'])) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + utils.add_user_global_group(self.global_group, self.user, + str(self.disabled_token)) + utils.delete_user_global_group(self.global_group, self.user, + str(self.auth_token)) + resp_new, content_new = utils.delete_user_global_group_xml(\ + self.global_group, self.user, + str(self.auth_token)) + self.assertEqual(404, int(resp_new['status'])) if __name__ == '__main__': unittest.main() diff --git a/test/unit/test_keystone.py b/test/unit/test_keystone.py index 9a6fe4df..3b17d9b2 100644 --- a/test/unit/test_keystone.py +++ b/test/unit/test_keystone.py @@ -1,12 +1,14 @@ import logging +from lxml import etree import os import unittest -from lxml import etree + MODULE_EXTENSIONS = set('.py'.split()) TEST_FILES = ['test_authentication.py', 'test_keystone.py', 'test_tenants.py', - 'test_common.py', 'test_users.py','test_tenant_groups.py', + 'test_common.py', 'test_users.py', 'test_tenant_groups.py', 'test_token.py', 'test_version.py', 'test_groups.py'] + def unit_test_extractor(tup, path, filenames): """Pull ``unittest.TestSuite``s from modules in path if the path represents a valid Python package. Accumulate diff --git a/test/unit/test_server.py b/test/unit/test_server.py index a6b98892..294b1e54 100644 --- a/test/unit/test_server.py +++ b/test/unit/test_server.py @@ -65,7 +65,7 @@ class TestServer(unittest.TestCase): self.assertTrue(server.get_auth_token(self.request),"Test Token") def test_get_normalized_request_content_exception(self): - self.assertRaises(fault.IDMFault,server.get_normalized_request_content,None,self.request) + self.assertRaises(fault.IdentityFault,server.get_normalized_request_content,None,self.request) def test_get_normalized_request_content_xml(self): self.request.environ["CONTENT_TYPE"]="application/xml" diff --git a/test/unit/test_tenant_groups.py b/test/unit/test_tenant_groups.py index d6b7ed20..54d9a585 100644 --- a/test/unit/test_tenant_groups.py +++ b/test/unit/test_tenant_groups.py @@ -1,20 +1,35 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2010-2011 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import httplib2 +import json +from lxml import etree import os import sys -# Need to access identity module sys.path.append(os.path.abspath(os.path.join(os.path.abspath(__file__), '..', '..', '..', '..', 'keystone'))) import unittest -import httplib2 -import json -from lxml import etree import test_common as util -class tenant_group_test(unittest.TestCase): +class TenantGroupTest(unittest.TestCase): def setUp(self): - self.token = util.get_token('joeuser', 'secrete', 'token') self.tenant = util.get_tenant() self.user = util.get_user() self.userdisabled = util.get_userdisabled() @@ -22,24 +37,31 @@ class tenant_group_test(unittest.TestCase): self.exp_auth_token = util.get_exp_auth_token() self.disabled_token = util.get_disabled_token() self.tenant_group = 'test_tenant_group_add' + util.create_tenant(self.tenant, str(self.auth_token)) + util.create_user(self.tenant, self.user, self.auth_token) + util.add_user_json(self.tenant, self.user, self.auth_token) + self.token = util.get_token(self.user, 'secrete', self.tenant, + 'token') def tearDown(self): - resp, content = util.delete_tenant_group(self.tenant_group, + util.delete_tenant_group(self.tenant_group, self.tenant, self.auth_token) - resp, content = util.delete_tenant(self.tenant, self.auth_token) + util.delete_user(self.tenant, self.user, + str(self.auth_token)) + util.delete_tenant(self.tenant, self.auth_token) -class create_tenant_group_test(tenant_group_test): +class CreateTenantGroupTest(TenantGroupTest): def test_tenant_group_create(self): - resp, content = util.delete_tenant(self.tenant, str(self.auth_token)) + resp = util.delete_tenant(self.tenant, str(self.auth_token)) if int(resp['status']) == 500: self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant(self.tenant, str(self.auth_token)) + util.create_tenant(self.tenant, str(self.auth_token)) resp, content = util.delete_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) @@ -51,7 +73,7 @@ class create_tenant_group_test(tenant_group_test): self.fail('Failed due to %d' % int(resp['status'])) def test_tenant_group_create_xml(self): - resp, content = util.delete_tenant_xml(self.tenant, + resp = util.delete_tenant_xml(self.tenant, str(self.auth_token)) resp, content = util.create_tenant_xml(self.tenant, str(self.auth_token)) @@ -312,7 +334,7 @@ class create_tenant_group_test(tenant_group_test): self.assertEqual(404, int(resp['status'])) -class get_tenant_groups_test(tenant_group_test): +class GetTenantGroupsTest(TenantGroupTest): def test_get_tenant_groups(self): header = httplib2.Http(".cache") @@ -423,7 +445,7 @@ class get_tenant_groups_test(tenant_group_test): self.assertEqual(403, int(resp['status'])) -class get_tenant_group_test(tenant_group_test): +class GetTenantGroupTest(TenantGroupTest): def test_get_tenant_group(self): header = httplib2.Http(".cache") @@ -539,7 +561,7 @@ class get_tenant_group_test(tenant_group_test): self.assertEqual(404, int(resp['status'])) -class update_tenant_group_test(tenant_group_test): +class UpdateTenantGroupTest(TenantGroupTest): def test_update_tenant_group(self): header = httplib2.Http(".cache") @@ -572,7 +594,7 @@ class update_tenant_group_test(tenant_group_test): def test_update_tenant_group_xml(self): header = httplib2.Http(".cache") - resp, content = util.delete_tenant(self.tenant, str(self.auth_token)) + util.delete_tenant(self.tenant, str(self.auth_token)) resp, content = util.create_tenant(self.tenant, str(self.auth_token)) @@ -705,7 +727,7 @@ class update_tenant_group_test(tenant_group_test): self.assertEqual(404, int(resp['status'])) -class delete_tenant_group_test(tenant_group_test): +class DeleteTenantGroupTest(TenantGroupTest): def test_delete_tenant_group_not_found(self): resp, content = util.delete_tenant_group("test_tenant_delete111", @@ -728,7 +750,7 @@ class delete_tenant_group_test(tenant_group_test): resp, content = util.delete_tenant_group('test_tenant_group_delete', "test_tenant_delete", str(self.auth_token)) - resp, content = util.delete_tenant("test_tenant_delete", + resp = util.delete_tenant("test_tenant_delete", str(self.auth_token)) self.assertEqual(204, int(resp['status'])) @@ -741,15 +763,14 @@ class delete_tenant_group_test(tenant_group_test): resp, content = util.delete_tenant_group('test_tenant_group_delete', "test_tenant_delete", str(self.auth_token)) - resp, content = util.delete_tenant_xml("test_tenant_delete", + resp = util.delete_tenant_xml("test_tenant_delete", str(self.auth_token)) self.assertEqual(204, int(resp['status'])) -class add_user_tenant_group_test(tenant_group_test): +class AddUserTenantGroupTest(TenantGroupTest): def setUp(self): - self.token = util.get_token('joeuser', 'secrete', 'token') self.tenant = 'test_tenant' self.user = util.get_user() self.userdisabled = util.get_userdisabled() @@ -757,6 +778,11 @@ class add_user_tenant_group_test(tenant_group_test): self.exp_auth_token = util.get_exp_auth_token() self.disabled_token = util.get_disabled_token() self.tenant_group = 'test_tenant_group_add' + util.create_tenant(self.tenant, str(self.auth_token)) + util.create_user(self.tenant, self.user, self.auth_token) + util.add_user_json(self.tenant, self.user, self.auth_token) + self.token = util.get_token(self.user, 'secrete', self.tenant, + 'token') def tearDown(self): resp, content = util.delete_user_tenant_group(self.tenant, @@ -764,12 +790,12 @@ class add_user_tenant_group_test(tenant_group_test): self.user, str(self.auth_token)) - resp, content = util.delete_user(self.tenant, self.user, + resp = util.delete_user(self.tenant, self.user, str(self.auth_token)) resp, content = util.delete_tenant_group(self.tenant_group, self.tenant, self.auth_token) - resp, content = util.delete_tenant(self.tenant, self.auth_token) + resp = util.delete_tenant(self.tenant, self.auth_token) def test_add_user_tenant_group(self): resp, content = util.create_tenant(self.tenant, str(self.auth_token)) @@ -928,10 +954,9 @@ class add_user_tenant_group_test(tenant_group_test): self.assertEqual(403, int(resp['status'])) -class get_users_tenant_group_test(tenant_group_test): +class GetUsersTenantGroupTest(TenantGroupTest): def setUp(self): - self.token = util.get_token('joeuser', 'secrete', 'token') self.tenant = 'test_tenant' self.user = util.get_user() self.userdisabled = util.get_userdisabled() @@ -939,6 +964,11 @@ class get_users_tenant_group_test(tenant_group_test): self.exp_auth_token = util.get_exp_auth_token() self.disabled_token = util.get_disabled_token() self.tenant_group = 'test_tenant_group_add' + util.create_tenant(self.tenant, str(self.auth_token)) + util.create_user(self.tenant, self.user, self.auth_token) + util.add_user_json(self.tenant, self.user, self.auth_token) + self.token = util.get_token(self.user, 'secrete', self.tenant, + 'token') def tearDown(self): resp, content = util.delete_user_tenant_group(self.tenant, @@ -946,12 +976,12 @@ class get_users_tenant_group_test(tenant_group_test): self.user, str(self.auth_token)) - resp, content = util.delete_user(self.tenant, self.user, + resp = util.delete_user(self.tenant, self.user, str(self.auth_token)) resp, content = util.delete_tenant_group(self.tenant_group, self.tenant, self.auth_token) - resp, content = util.delete_tenant(self.tenant, self.auth_token) + util.delete_tenant(self.tenant, self.auth_token) def test_get_users_tenant_group(self): resp, content = util.create_tenant(self.tenant, str(self.auth_token)) @@ -963,9 +993,9 @@ class get_users_tenant_group_test(tenant_group_test): self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group(self.tenant, + util.add_user_tenant_group(self.tenant, self.tenant_group, self.user, str(self.auth_token)) @@ -981,12 +1011,12 @@ class get_users_tenant_group_test(tenant_group_test): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant_group(self.tenant_group, + util.create_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group_xml(self.tenant, + util.add_user_tenant_group_xml(self.tenant, self.tenant_group, self.user, str(self.auth_token)) @@ -1002,13 +1032,13 @@ class get_users_tenant_group_test(tenant_group_test): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant_group(self.tenant_group, + util.create_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group(self.tenant, + util.add_user_tenant_group(self.tenant, self.tenant_group, self.user, self.auth_token) @@ -1025,13 +1055,13 @@ class get_users_tenant_group_test(tenant_group_test): elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant_group(self.tenant_group, + util.create_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group(self.tenant, + util.add_user_tenant_group(self.tenant, self.tenant_group, self.user, self.auth_token) resp, content = util.get_user_tenant_group_xml(self.tenant, @@ -1045,13 +1075,13 @@ class get_users_tenant_group_test(tenant_group_test): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant_group(self.tenant_group, + util.create_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group(self.tenant, + util.add_user_tenant_group(self.tenant, self.tenant_group, self.user, self.auth_token) resp, content = util.get_user_tenant_group(self.tenant, @@ -1066,13 +1096,13 @@ class get_users_tenant_group_test(tenant_group_test): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant_group(self.tenant_group, + util.create_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group(self.tenant, + util.add_user_tenant_group(self.tenant, self.tenant_group, self.user, self.auth_token) resp, content = util.get_user_tenant_group_xml(self.tenant, @@ -1087,13 +1117,13 @@ class get_users_tenant_group_test(tenant_group_test): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant_group(self.tenant_group, + util.create_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group(self.tenant, + util.add_user_tenant_group(self.tenant, self.tenant_group, self.user, self.auth_token) resp, content = util.get_user_tenant_group(self.tenant, @@ -1107,13 +1137,13 @@ class get_users_tenant_group_test(tenant_group_test): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant_group(self.tenant_group, + util.create_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group(self.tenant, + util.add_user_tenant_group(self.tenant, self.tenant_group, self.user, self.auth_token) resp, content = util.get_user_tenant_group_xml(self.tenant, @@ -1123,7 +1153,7 @@ class get_users_tenant_group_test(tenant_group_test): self.assertEqual(403, int(resp['status'])) -class delete_users_tenant_group_test(tenant_group_test): +class DeleteUsersTenantGroupTest(TenantGroupTest): def test_delete_user_tenant_group(self): resp, content = util.create_tenant(self.tenant, str(self.auth_token)) @@ -1131,12 +1161,12 @@ class delete_users_tenant_group_test(tenant_group_test): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant_group(self.tenant_group, + util.create_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group(self.tenant, + util.add_user_tenant_group(self.tenant, self.tenant_group, self.user, str(self.auth_token)) @@ -1153,12 +1183,12 @@ class delete_users_tenant_group_test(tenant_group_test): self.fail('Identity Fault') elif int(resp['status']) == 503: self.fail('Service Not Available') - resp, content = util.create_tenant_group(self.tenant_group, + util.create_tenant_group(self.tenant_group, self.tenant, str(self.auth_token)) - resp, content = util.create_user(self.tenant, self.user, + util.create_user(self.tenant, self.user, str(self.auth_token)) - resp, content = util.add_user_tenant_group_xml(self.tenant, + util.add_user_tenant_group_xml(self.tenant, self.tenant_group, self.user, str(self.auth_token)) diff --git a/test/unit/test_tenants.py b/test/unit/test_tenants.py index 1e5254ef..ec2a2569 100644 --- a/test/unit/test_tenants.py +++ b/test/unit/test_tenants.py @@ -1,34 +1,57 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2010-2011 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import httplib2 +import json +from lxml import etree import os import sys -# Need to access identity module sys.path.append(os.path.abspath(os.path.join(os.path.abspath(__file__), '..', '..', '..', '..', 'keystone'))) import unittest -import httplib2 -import json -from lxml import etree + import test_common as utils -class tenant_test(unittest.TestCase): +class TenantTest(unittest.TestCase): def setUp(self): - self.token = utils.get_token('joeuser', 'secrete', 'token') self.tenant = 'test_tenant' + self.auth_token = utils.get_auth_token() self.user = utils.get_user() self.userdisabled = utils.get_userdisabled() - self.auth_token = utils.get_auth_token() self.exp_auth_token = utils.get_exp_auth_token() self.disabled_token = utils.get_disabled_token() + utils.create_tenant(self.tenant, str(self.auth_token)) + utils.create_user(self.tenant, self.user, self.auth_token) + utils.add_user_json(self.tenant, self.user, self.auth_token) + self.token = utils.get_token(self.user, 'secrete', self.tenant, + 'token') def tearDown(self): - resp, content = utils.delete_tenant(self.tenant, self.auth_token) + utils.delete_user(self.tenant, self.user, self.auth_token) + utils.delete_tenant(self.tenant, self.auth_token) -class create_tenant_test(tenant_test): +class CreateTenantTest(TenantTest): def test_tenant_create(self): - resp, content = utils.delete_tenant(self.tenant, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, self.auth_token) + utils.delete_tenant(self.tenant, str(self.auth_token)) resp, content = utils.create_tenant(self.tenant, str(self.auth_token)) if int(resp['status']) == 500: self.fail('Identity Fault') @@ -40,7 +63,8 @@ class create_tenant_test(tenant_test): self.fail('Failed due to %d' % int(resp['status'])) def test_tenant_create_xml(self): - resp, content = utils.delete_tenant_xml(self.tenant, + utils.delete_user(self.tenant, self.user, self.auth_token) + utils.delete_tenant_xml(self.tenant, str(self.auth_token)) resp, content = utils.create_tenant_xml(self.tenant, str(self.auth_token)) @@ -302,7 +326,7 @@ class create_tenant_test(tenant_test): self.assertEqual(404, int(resp['status'])) -class get_tenants_test(tenant_test): +class GetTenantsTest(TenantTest): def test_get_tenants(self): header = httplib2.Http(".cache") @@ -392,7 +416,7 @@ class get_tenants_test(tenant_test): self.assertEqual(403, int(resp['status'])) -class get_tenant_test(tenant_test): +class GetTenantTest(TenantTest): def test_get_tenant(self): header = httplib2.Http(".cache") @@ -482,7 +506,7 @@ class get_tenant_test(tenant_test): self.assertEqual(404, int(resp['status'])) -class update_tenant_test(tenant_test): +class UpdateTenantTest(TenantTest): def test_update_tenant(self): header = httplib2.Http(".cache") @@ -603,33 +627,33 @@ class update_tenant_test(tenant_test): self.assertEqual(404, int(resp['status'])) -class delete_tenant_test(tenant_test): +class DeleteTenantTest(TenantTest): def test_delete_tenant_not_found(self): #resp,content=utils.create_tenant("test_tenant_delete", # str(self.auth_token)) - resp, content = utils.delete_tenant("test_tenant_delete111", + resp = utils.delete_tenant("test_tenant_delete111", str(self.auth_token)) self.assertEqual(404, int(resp['status'])) def test_delete_tenant_not_found_xml(self): #resp,content=utils.create_tenant("test_tenant_delete", # str(self.auth_token)) - resp, content = utils.delete_tenant_xml("test_tenant_delete111", + resp = utils.delete_tenant_xml("test_tenant_delete111", str(self.auth_token)) self.assertEqual(404, int(resp['status'])) def test_delete_tenant(self): resp, content = utils.create_tenant("test_tenant_delete", str(self.auth_token)) - resp, content = utils.delete_tenant("test_tenant_delete", + resp = utils.delete_tenant("test_tenant_delete", str(self.auth_token)) self.assertEqual(204, int(resp['status'])) def test_delete_tenant_xml(self): resp, content = utils.create_tenant_xml("test_tenant_delete", str(self.auth_token)) - resp, content = utils.delete_tenant_xml("test_tenant_delete", + resp = utils.delete_tenant_xml("test_tenant_delete", str(self.auth_token)) self.assertEqual(204, int(resp['status'])) diff --git a/test/unit/test_token.py b/test/unit/test_token.py index c8b384a5..16818b4f 100644 --- a/test/unit/test_token.py +++ b/test/unit/test_token.py @@ -1,23 +1,41 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2010-2011 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import httplib2 import os import sys -# Need to access identity module sys.path.append(os.path.abspath(os.path.join(os.path.abspath(__file__), '..', '..', '..', '..', 'keystone'))) import unittest -import httplib2 + import test_common as utils -class validate_token(unittest.TestCase): +class ValidateToken(unittest.TestCase): def setUp(self): - self.token = utils.get_token('joeuser', 'secrete', 'token') self.tenant = utils.get_tenant() - self.user = utils.get_user() - self.userdisabled = utils.get_userdisabled() + self.token = utils.get_token('joeuser', 'secrete', self.tenant, + 'token') + #self.user = utils.get_user() + #self.userdisabled = utils.get_userdisabled() self.auth_token = utils.get_auth_token() self.exp_auth_token = utils.get_exp_auth_token() - self.disabled_token = utils.get_disabled_token() + #self.disabled_token = utils.get_disabled_token() def tearDown(self): utils.delete_token(self.token, self.auth_token) diff --git a/test/unit/test_users.py b/test/unit/test_users.py index 0de24603..21811a3c 100644 --- a/test/unit/test_users.py +++ b/test/unit/test_users.py @@ -1,363 +1,359 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2010-2011 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import httplib2 +import json +from lxml import etree import os import sys -# Need to access identity module sys.path.append(os.path.abspath(os.path.join(os.path.abspath(__file__), '..', '..', '..', '..', 'keystone'))) import unittest -from webtest import TestApp -import httplib2 -import json -from lxml import etree - -from test_common import URL, get_token, get_tenant, get_user -from test_common import get_userdisabled, get_auth_token -from test_common import get_exp_auth_token, get_disabled_token -from test_common import delete_token, content_type, get_token_xml -from test_common import get_password, get_email, get_none_token -from test_common import get_non_existing_token, delete_user, delete_user_xml -from test_common import create_user, create_user_xml, handle_user_resp +import test_common as utils +from test_common import URL -class user_test(unittest.TestCase): +class UserTest(unittest.TestCase): def setUp(self): - self.token = get_token('joeuser', 'secrete', 'token') - self.tenant = get_tenant() - self.password = get_password() - self.email = get_email() - self.user = get_user() - self.userdisabled = get_userdisabled() - self.auth_token = get_auth_token() - self.exp_auth_token = get_exp_auth_token() - self.disabled_token = get_disabled_token() - self.missing_token = get_none_token() - self.invalid_token = get_non_existing_token() + self.tenant = utils.get_tenant() + self.password = utils.get_password() + self.email = utils.get_email() + self.user = utils.get_user() + self.userdisabled = utils.get_userdisabled() + self.auth_token = utils.get_auth_token() + self.exp_auth_token = utils.get_exp_auth_token() + self.disabled_token = utils.get_disabled_token() + self.missing_token = utils.get_none_token() + self.invalid_token = utils.get_non_existing_token() + utils.create_tenant(self.tenant, str(self.auth_token)) + utils.add_user_json(self.tenant, self.user, self.auth_token) + self.token = utils.get_token(self.user, 'secrete', self.tenant, + 'token') def tearDown(self): - - resp, content = delete_user(self.tenant, self.user, - str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) -class create_user_test(user_test): +class CreateUserTest(UserTest): def test_a_user_create_json(self): - resp, content = create_user(self.tenant, self.user, - str(self.auth_token)) + + resp = utils.delete_user(self.tenant, self.user, str(self.auth_token)) + + resp, content = utils.create_user(self.tenant, 'test_user1', + str(self.auth_token)) + self.user = 'test_user1' resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(201, resp_val) def test_a_user_create_xml(self): - resp, content = delete_user_xml(self.tenant, self.user, - str(self.auth_token)) - resp, content = create_user_xml(self.tenant, self.user, - str(self.auth_token)) + utils.delete_user_xml(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.create_user_xml(self.tenant, 'test_user1', + str(self.auth_token)) + self.user = 'test_user1' resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) - + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(201, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_create_json_disabled_tenant(self): - resp, content = create_user('0000', self.user, - str(self.auth_token)) + resp, content = utils.create_user('0000', self.user, + str(self.auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) def test_a_user_create_json_disabled_tenant_xml(self): - resp, content = create_user_xml('0000', self.user, - str(self.auth_token)) + resp, content = utils.create_user_xml('0000', self.user, + str(self.auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_a_user_again_json(self): - resp, content = create_user(self.tenant, self.user, + def test_a_user_create_again_json(self): + resp, content = utils.create_user(self.tenant, self.user, str(self.auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) - resp, content = create_user(self.tenant, self.user, + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) + resp, content = utils.create_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(409, int(resp['status'])) - def test_a_user_again_xml(self): - resp, content = create_user_xml(self.tenant, self.user, + def test_a_user_create_again_xml(self): + utils.create_user_xml(self.tenant, self.user, str(self.auth_token)) - resp, content = create_user_xml(self.tenant, self.user, + resp, content = utils.create_user_xml(self.tenant, self.user, str(self.auth_token)) content = etree.fromstring(content) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) + self.assertEqual(409, int(resp['status'])) + self.assertEqual('application/xml', utils.content_type(resp)) + + def test_a_user_create_email_conflict(self): + utils.create_user(self.tenant, self.user, str(self.auth_token), + self.email) + resp, content = utils.create_user(self.tenant, self.user, + str(self.auth_token), + self.email) self.assertEqual(409, int(resp['status'])) - self.assertEqual('application/xml', content_type(resp)) + + def test_a_user_create_email_conflict_xml(self): + utils.create_user_xml(self.tenant, + self.user, + str(self.auth_token), + self.email) + resp, content = utils.create_user_xml(self.tenant, self.user, + str(self.auth_token), + self.email) + content = etree.fromstring(content) + resp_val = int(resp['status']) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) + self.assertEqual(409, int(resp['status'])) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_create_expired_token(self): - resp, content = create_user(self.tenant, self.user, + resp, content = utils.create_user(self.tenant, self.user, str(self.exp_auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, int(resp['status'])) def test_a_user_create_expired_token_xml(self): - resp, content = create_user_xml(self.tenant, self.user, - str(self.exp_auth_token)) + resp, content = utils.create_user_xml(self.tenant, self.user, + str(self.exp_auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, int(resp['status'])) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_create_disabled_token(self): - resp, content = create_user(self.tenant, self.user, + resp, content = utils.create_user(self.tenant, self.user, str(self.disabled_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, int(resp['status'])) def test_a_user_create_disabled_token_xml(self): - resp, content = create_user_xml(self.tenant, self.user, - str(self.disabled_token)) + resp, content = utils.create_user_xml(self.tenant, self.user, + str(self.disabled_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, int(resp['status'])) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_create_missing_token(self): - resp, content = create_user(self.tenant, self.user, + resp, content = utils.create_user(self.tenant, self.user, str(self.missing_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(401, int(resp['status'])) def test_a_user_create_missing_token_xml(self): - resp, content = create_user_xml(self.tenant, self.user, - str(self.missing_token)) + resp, content = utils.create_user_xml(self.tenant, self.user, + str(self.missing_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(401, int(resp['status'])) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_create_invalid_token(self): - resp, content = create_user(self.tenant, self.user, + resp, content = utils.create_user(self.tenant, self.user, str(self.invalid_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(404, int(resp['status'])) def test_a_user_create_invalid_token_xml(self): - resp, content = create_user_xml(self.tenant, self.user, + resp, content = utils.create_user_xml(self.tenant, self.user, str(self.invalid_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(404, int(resp['status'])) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) -class get_user_test(user_test): +class GetUserTest(UserTest): - def test_a_user_get_json(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_a_user_get(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_json(self.tenant, self.user, + str(self.auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(200, resp_val) def test_a_user_get_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_xml(self.tenant, self.user, + str(self.auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(200, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_get_expired_token(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.exp_auth_token}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_json(self.tenant, self.user, + str(self.exp_auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) def test_a_user_get_expired_token_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.exp_auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_xml(self.tenant, self.user, + str(self.exp_auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_get_disabled_token(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.disabled_token}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_json(self.tenant, + self.user, + str(self.disabled_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) def test_a_user_get_disabled_token_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.disabled_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_xml(self.tenant, + self.user, + str(self.disabled_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_get_missing_token(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.missing_token}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_json(self.tenant, + self.user, + str(self.missing_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(401, resp_val) def test_a_user_get_missing_token_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.missing_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_xml(self.tenant, self.user, + str(self.missing_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(401, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_get_invalid_token(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.invalid_token}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_json(self.tenant, self.user, + str(self.invalid_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(404, resp_val) def test_a_user_get_invalid_token_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.invalid_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_xml(self.tenant, self.user, + str(self.invalid_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(404, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_get_disabled_user(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, - self.userdisabled) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_json(self.tenant, + self.userdisabled, + str(self.auth_token)) resp_val = int(resp['status']) - - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) def test_a_user_get_disabled_user_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.userdisabled) - - resp, content = header.request(url, "GET", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_xml(self.tenant, self.userdisabled, + str(self.auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_get_disabled_tenant(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, '0000', self.userdisabled) - - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_json('0000', self.user, + str(self.auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) def test_a_user_get_disabled_tenant_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, '0000', self.userdisabled) - #test for Content-Type = application/json - resp, content = header.request(url, "GET", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_get_xml('0000', self.user, + str(self.auth_token)) resp_val = int(resp['status']) - handle_user_resp(self, content, resp_val, content_type(resp)) + utils.handle_user_resp(self, content, resp_val, + utils.content_type(resp)) self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', + utils.content_type(resp)) -class delete_user_test(user_test): +class DeleteUserTest(UserTest): - def test_a_user_delete_json(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "DELETE", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_a_user_delete(self): + utils.create_user(self.tenant, self.user, + str(self.auth_token)) + resp = utils.delete_user(self.tenant, self.user, + str(self.auth_token)) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -366,14 +362,10 @@ class delete_user_test(user_test): self.assertEqual(204, resp_val) def test_a_user_delete_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user_xml(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - resp, content = header.request(url, "DELETE", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, + str(self.auth_token)) + resp = utils.delete_user_xml(self.tenant, self.user, + str(self.auth_token)) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -382,14 +374,10 @@ class delete_user_test(user_test): self.assertEqual(204, resp_val) def test_a_user_delete_expired_token(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "DELETE", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.exp_auth_token}) + utils.create_user(self.tenant, self.user, + str(self.auth_token)) + resp = utils.delete_user(self.tenant, self.user, + str(self.exp_auth_token)) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -398,32 +386,23 @@ class delete_user_test(user_test): self.assertEqual(403, resp_val) def test_a_user_delete_expired_token_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, + utils.create_user(self.tenant, self.user, str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "DELETE", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.exp_auth_token, - "ACCEPT": "application/xml"}) + resp = utils.delete_user_xml(self.tenant, self.user, + str(self.exp_auth_token)) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_delete_missing_token(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, + utils.create_user(self.tenant, self.user, str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "DELETE", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.missing_token}) + resp = utils.delete_user(self.tenant, self.user, + str(self.missing_token)) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -432,32 +411,23 @@ class delete_user_test(user_test): self.assertEqual(401, resp_val) def test_a_user_delete_missing_token_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, + utils.create_user(self.tenant, self.user, str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "DELETE", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.missing_token, - "ACCEPT": "application/xml"}) + resp = utils.delete_user_xml(self.tenant, self.user, + str(self.missing_token)) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(401, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_delete_invalid_token(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, + utils.create_user(self.tenant, self.user, str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "DELETE", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.invalid_token}) + resp = utils.delete_user(self.tenant, self.user, + str(self.invalid_token)) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -466,32 +436,24 @@ class delete_user_test(user_test): self.assertEqual(404, resp_val) def test_a_user_delete_invalid_token_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.user, self.tenant, + utils.create_user(self.tenant, self.user, str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - #test for Content-Type = application/json - resp, content = header.request(url, "DELETE", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.invalid_token, - "ACCEPT": "application/xml"}) + resp = utils.delete_user_xml(self.tenant, self.user, + str(self.invalid_token)) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(404, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_a_user_delete_disabled_tenant(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, '0000', self.userdisabled) - #test for Content-Type = application/json - resp, content = header.request(url, "DELETE", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + utils.create_user(self.tenant, self.user, + str(self.auth_token)) + resp = utils.delete_user("0000", self.user, + str(self.auth_token)) resp_val = int(resp['status']) - if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: @@ -499,31 +461,23 @@ class delete_user_test(user_test): self.assertEqual(403, resp_val) def test_a_user_delete_disabled_tenant_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, '0000', self.userdisabled) - #test for Content-Type = application/json - resp, content = header.request(url, "DELETE", body='', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, + str(self.auth_token)) + resp = utils.delete_user_xml("0000", self.user, + str(self.auth_token)) resp_val = int(resp['status']) - if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) -class get_users_test(user_test): +class GetUsersTest(UserTest): - def test_users_get_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_users_get(self): + resp, content = utils.users_get_json(self.tenant, self.auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -532,26 +486,17 @@ class get_users_test(user_test): self.assertEqual(200, resp_val) def test_users_get_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_get_xml(self.tenant, self.auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(200, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_get_expired_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.exp_auth_token}) + def test_users_get_expired_token(self): + resp, content = utils.users_get_json(self.tenant, self.exp_auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -560,26 +505,17 @@ class get_users_test(user_test): self.assertEqual(403, resp_val) def test_users_get_expired_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.exp_auth_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_get_xml(self.tenant, self.exp_auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_get_disabled_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.disabled_token}) + def test_users_get_disabled_token(self): + resp, content = utils.users_get_json(self.tenant, self.disabled_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -588,26 +524,17 @@ class get_users_test(user_test): self.assertEqual(403, resp_val) def test_users_get_disabled_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.disabled_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_get_xml(self.tenant, self.disabled_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_get_missing_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.missing_token}) + def test_users_get_missing_token(self): + resp, content = utils.users_get_json(self.tenant, self.missing_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -616,26 +543,17 @@ class get_users_test(user_test): self.assertEqual(401, resp_val) def test_users_get_missing_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.missing_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_get_xml(self.tenant, self.missing_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(401, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_get_invalid_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.invalid_token}) + def test_users_get_invalid_token(self): + resp, content = utils.users_get_json(self.tenant, self.invalid_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -644,58 +562,41 @@ class get_users_test(user_test): self.assertEqual(404, resp_val) def test_users_get_invalid_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, self.tenant) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.invalid_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_get_xml(self.tenant, self.invalid_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(404, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_get_disabled_tenant_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, "0000") - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_users_get_disabled_tenant(self): + resp, content = utils.users_get_json('0000', self.auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - self.assertEqual(403, resp_val) def test_users_get_disabled_tenant_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users' % (URL, "0000") - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_get_xml('0000', self.auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) -class get_users_group_test(user_test): +class GetUsersGroupTest(UserTest): - def test_users_group_get_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_users_group_get(self): + resp, content = utils.users_group_get_json(self.tenant, + self.user, + self.auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -704,26 +605,21 @@ class get_users_group_test(user_test): self.assertEqual(200, resp_val) def test_users_group_get_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_group_get_xml(self.tenant, + self.user, + self.auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(200, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_group_get_expired_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.exp_auth_token}) + def test_users_group_get_expired_token(self): + resp, content = utils.users_group_get_json(self.tenant, + self.user, + self.exp_auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -732,26 +628,21 @@ class get_users_group_test(user_test): self.assertEqual(403, resp_val) def test_users_group_get_expired_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.exp_auth_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_group_get_xml(self.tenant, + self.user, + self.exp_auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_group_get_disabled_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.disabled_token}) + def test_users_group_get_disabled_token(self): + resp, content = utils.users_group_get_json(self.tenant, + self.user, + self.disabled_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -760,26 +651,21 @@ class get_users_group_test(user_test): self.assertEqual(403, resp_val) def test_users_group_get_disabled_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.disabled_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_group_get_xml(self.tenant, + self.user, + self.disabled_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_group_get_missing_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.missing_token}) + def test_users_group_get_missing_token(self): + resp, content = utils.users_group_get_json(self.tenant, + self.user, + self.missing_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -788,26 +674,21 @@ class get_users_group_test(user_test): self.assertEqual(401, resp_val) def test_users_group_get_missing_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.missing_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_group_get_xml(self.tenant, + self.user, + self.missing_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(401, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_group_get_invalid_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.invalid_token}) + def test_users_group_get_invalid_token(self): + resp, content = utils.users_group_get_json(self.tenant, + self.user, + self.invalid_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') @@ -816,106 +697,79 @@ class get_users_group_test(user_test): self.assertEqual(404, resp_val) def test_users_group_get_invalid_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, self.tenant, self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.invalid_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_group_get_xml(self.tenant, + self.user, + self.invalid_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(404, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_users_group_get_disabled_tenant_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, "0000", self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_users_group_get_disabled_tenant(self): + resp, content = utils.users_group_get_json('0000', + self.user, + self.auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - self.assertEqual(403, resp_val) def test_users_group_get_disabled_tenant_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/groups' % (URL, "0000", self.user) - resp, content = header.request(url, "GET", body='{}', - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + resp, content = utils.users_group_get_xml('0000', + self.user, + self.auth_token) resp_val = int(resp['status']) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) -class update_user_test(user_test): +class UpdateUserTest(UserTest): - def test_user_update_json(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.tenant, self.user, - str(self.auth_token)) - - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - - data = '{"user": { "email": "updatedjoeuser@rackspace.com"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_user_update(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_json(self.tenant, self.user, + self.auth_token) resp_val = int(resp['status']) - content = json.loads(content) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(200, resp_val) - self.assertEqual('updatedjoeuser@rackspace.com', \ - content['user']['email']) + self.assertEqual('updatedjoeuser@rackspace.com', + content['user']['email']) def test_user_update_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user_xml(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - email="updatedjoeuser@rackspace.com" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_xml(self.tenant, self.user, + self.auth_token) resp_val = int(resp['status']) - content = etree.fromstring(content) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(200, resp_val) - self.assertEqual('updatedjoeuser@rackspace.com', content.get("email")) - self.assertEqual('application/xml', content_type(resp)) - - def test_user_update_user_disabled_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.userdisabled) - data = '{"user": { "email": "updatedjoeuser@rackspace.com"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + self.assertEqual('updatedjoeuser@rackspace.com', + content.get("email")) + self.assertEqual('application/xml', utils.content_type(resp)) + + def test_user_update_user_disabled(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_json(self.tenant, + self.userdisabled, + self.auth_token) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -925,15 +779,10 @@ class update_user_test(user_test): self.assertEqual(403, resp_val) def test_user_update_user_disabled_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.userdisabled) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - email="updatedjoeuser@rackspace.com" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_xml(self.tenant, + self.userdisabled, + self.auth_token) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -941,17 +790,14 @@ class update_user_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_update_email_conflict_json(self): - header = httplib2.Http(".cache") - resp, content = create_user_xml(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '{"user": { "email": "joe@rackspace.com"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_user_update_email_conflict(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_json(self.tenant, + self.user, + self.auth_token, + "joe@rackspace.com") resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -961,17 +807,11 @@ class update_user_test(user_test): self.assertEqual(409, resp_val) def test_user_update_email_conflict_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user_xml(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - email="joe@rackspace.com" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_xml(self.tenant, + self.user, + self.auth_token, + "joe@rackspace.com") resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -979,15 +819,15 @@ class update_user_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(409, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_user_update_bad_request_json(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.tenant, self.user, + h = httplib2.Http(".cache") + resp, content = utils.create_user(self.tenant, self.user, str(self.auth_token)) url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) data = '{"user_bad": { "bad": "updatedjoeuser@rackspace.com"}}' - resp, content = header.request(url, "PUT", body=data, + resp, content = h.request(url, "PUT", body=data, headers={"Content-Type": "application/json", "X-Auth-Token": self.auth_token}) resp_val = int(resp['status']) @@ -996,18 +836,18 @@ class update_user_test(user_test): self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(400, resp_val) def test_user_update_bad_request_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user_xml(self.tenant, self.user, + h = httplib2.Http(".cache") + resp, content = utils.create_user_xml(self.tenant, self.user, str(self.auth_token)) url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) data = '<?xml version="1.0" encoding="UTF-8"?> \ user xmlns="http://docs.openstack.org/identity/api/v2.0" \ email="updatedjoeuser@rackspace.com" />' - resp, content = header.request(url, "PUT", body=data, + resp, content = h.request(url, "PUT", body=data, headers={"Content-Type": "application/xml", "X-Auth-Token": self.auth_token, "ACCEPT": "application/xml"}) @@ -1017,17 +857,15 @@ class update_user_test(user_test): self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(400, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_update_expired_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '{"user": { "email": "updatedjoeuser@rackspace.com"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.exp_auth_token}) + def test_user_update_expired_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_json(self.tenant, + self.user, + self.exp_auth_token) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1037,15 +875,10 @@ class update_user_test(user_test): self.assertEqual(403, resp_val) def test_user_update_expired_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - email="updatedjoeuser@rackspace.com" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.exp_auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_xml(self.tenant, + self.user, + self.exp_auth_token) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1053,15 +886,13 @@ class update_user_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_update_disabled_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '{"user": { "email": "updatedjoeuser@rackspace.com"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.disabled_token}) + def test_user_update_disabled_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_json(self.tenant, + self.user, + self.disabled_token) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1071,15 +902,10 @@ class update_user_test(user_test): self.assertEqual(403, resp_val) def test_user_update_disabled_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - email="updatedjoeuser@rackspace.com" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.disabled_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_xml(self.tenant, + self.user, + self.disabled_token) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1087,18 +913,14 @@ class update_user_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) - - def test_user_update_invalid_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) + self.assertEqual('application/xml', utils.content_type(resp)) - data = '{"user": { "email": "updatedjoeuser@rackspace.com"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.invalid_token}) + def test_user_update_invalid_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_json(self.tenant, + self.user, + self.invalid_token) resp_val = int(resp['status']) - content = json.loads(content) if resp_val == 500: self.fail('Identity Fault') @@ -1107,15 +929,10 @@ class update_user_test(user_test): self.assertEqual(404, resp_val) def test_user_update_invalid_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - email="updatedjoeuser@rackspace.com" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.invalid_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_xml(self.tenant, + self.user, + self.invalid_token) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1123,15 +940,13 @@ class update_user_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(404, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_update_missing_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '{"user": { "email": "updatedjoeuser@rackspace.com"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.missing_token}) + def test_user_update_missing_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_json(self.tenant, + self.user, + self.missing_token) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1141,15 +956,10 @@ class update_user_test(user_test): self.assertEqual(401, resp_val) def test_user_update_missing_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - email="updatedjoeuser@rackspace.com" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.missing_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_update_xml(self.tenant, + self.user, + self.missing_token) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1157,61 +967,47 @@ class update_user_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(401, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) -class set_password_test(user_test): +class SetPasswordTest(UserTest): - def test_user_password_json(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '{"user": { "password": "p@ssword"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_user_password(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_json(self.tenant, + self.user, + str(self.auth_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(200, resp_val) self.assertEqual('p@ssword', content['user']['password']) def test_user_password_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user_xml(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - password="p@ssword" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_xml(self.tenant, + self.user, + str(self.auth_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(200, resp_val) self.assertEqual('p@ssword', content.get("password")) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_password_user_disabled_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' \ - % (URL, self.tenant, self.userdisabled) - data = '{"user": { "password": "p@ssword"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_user_password_user_disabled(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_json(self.tenant, + self.userdisabled, + str(self.auth_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1221,15 +1017,10 @@ class set_password_test(user_test): self.assertEqual(403, resp_val) def test_user_password_user_disabled_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s' % (URL, self.tenant, self.userdisabled) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - password="p@ssword" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_xml(self.tenant, + self.userdisabled, + str(self.auth_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1237,15 +1028,15 @@ class set_password_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_user_password_bad_request_json(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.tenant, self.user, + h = httplib2.Http(".cache") + utils.create_user(self.tenant, self.user, str(self.auth_token)) url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) data = '{"user_bad": { "password": "p@ssword"}}' - resp, content = header.request(url, "PUT", body=data, + resp, content = h.request(url, "PUT", body=data, headers={"Content-Type": "application/json", "X-Auth-Token": self.auth_token}) resp_val = int(resp['status']) @@ -1254,18 +1045,17 @@ class set_password_test(user_test): self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(400, resp_val) def test_user_password_bad_request_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user_xml(self.tenant, self.user, - str(self.auth_token)) + h = httplib2.Http(".cache") + utils.create_user_xml(self.tenant, self.user, str(self.auth_token)) url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) data = '<?xml version="1.0" encoding="UTF-8"?> \ user xmlns="http://docs.openstack.org/identity/api/v2.0" \ password="p@ssword" />' - resp, content = header.request(url, "PUT", body=data, + resp, content = h.request(url, "PUT", body=data, headers={"Content-Type": "application/xml", "X-Auth-Token": self.auth_token, "ACCEPT": "application/xml"}) @@ -1275,17 +1065,15 @@ class set_password_test(user_test): self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(400, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_password_expired_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '{"user": { "password": "p@ssword"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.exp_auth_token}) + def test_user_password_expired_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_json(self.tenant, + self.user, + str(self.exp_auth_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1295,15 +1083,10 @@ class set_password_test(user_test): self.assertEqual(403, resp_val) def test_user_password_expired_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - password="p@ssword" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.exp_auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_xml(self.tenant, + self.user, + str(self.exp_auth_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1311,15 +1094,13 @@ class set_password_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_password_disabled_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '{"user": { "password": "p@ssword"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.disabled_token}) + def test_user_password_disabled_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_json(self.tenant, + self.user, + str(self.disabled_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1329,15 +1110,10 @@ class set_password_test(user_test): self.assertEqual(403, resp_val) def test_user_password_disabled_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - password="p@ssword" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.disabled_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_xml(self.tenant, + self.user, + str(self.disabled_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1345,15 +1121,15 @@ class set_password_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_password_invalid_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '{"user": { "password": "p@ssword"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.invalid_token}) + def test_user_password_invalid_token(self): + utils.create_user(self.tenant, + self.user, + str(self.auth_token)) + resp, content = utils.user_password_json(self.tenant, + self.user, + str(self.invalid_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1363,15 +1139,10 @@ class set_password_test(user_test): self.assertEqual(404, resp_val) def test_user_password_invalid_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - password="p@ssword" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.invalid_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_xml(self.tenant, + self.user, + str(self.invalid_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1379,15 +1150,13 @@ class set_password_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(404, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_password_missing_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '{"user": { "password": "p@ssword"}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.missing_token}) + def test_user_password_missing_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_json(self.tenant, + self.user, + str(self.missing_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1397,15 +1166,10 @@ class set_password_test(user_test): self.assertEqual(401, resp_val) def test_user_password_missing_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - password="p@ssword" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.missing_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_password_xml(self.tenant, + self.user, + str(self.missing_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1413,61 +1177,49 @@ class set_password_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(401, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) -class set_enabled_test(user_test): +class SetEnabledTest(UserTest): - def test_user_enabled_json(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) - data = {"user": {"enabled": True}} - resp, content = header.request(url, "PUT", body=json.dumps(data), - headers={"Content-Type": "application/json", - "X-Auth-Token": self.auth_token}) + def test_user_enabled(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_json(self.tenant, + self.user, + str(self.auth_token)) resp_val = int(resp['status']) - content = json.loads(content) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(200, resp_val) self.assertEqual(True, content['user']['enabled']) def test_user_enabled_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user_xml(self.tenant, self.user, - str(self.auth_token)) - url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - enabled="true" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_xml(self.tenant, + self.user, + str(self.auth_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(200, resp_val) self.assertEqual('true', content.get("enabled")) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) def test_user_enabled_bad_request_json(self): - header = httplib2.Http(".cache") - resp, content = create_user(self.tenant, self.user, + h = httplib2.Http(".cache") + utils.create_user(self.tenant, self.user, str(self.auth_token)) url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) data = '{"user_bad": { "enabled": true}}' - resp, content = header.request(url, "PUT", body=data, + resp, content = h.request(url, "PUT", body=data, headers={"Content-Type": "application/json", "X-Auth-Token": self.auth_token}) resp_val = int(resp['status']) @@ -1476,18 +1228,18 @@ class set_enabled_test(user_test): self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(400, resp_val) def test_user_enabled_bad_request_xml(self): - header = httplib2.Http(".cache") - resp, content = create_user_xml(self.tenant, self.user, + h = httplib2.Http(".cache") + utils.create_user_xml(self.tenant, self.user, str(self.auth_token)) url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) data = '<?xml version="1.0" encoding="UTF-8"?> \ user xmlns="http://docs.openstack.org/identity/api/v2.0" \ enabled="true" />' - resp, content = header.request(url, "PUT", body=data, + resp, content = h.request(url, "PUT", body=data, headers={"Content-Type": "application/xml", "X-Auth-Token": self.auth_token, "ACCEPT": "application/xml"}) @@ -1497,17 +1249,42 @@ class set_enabled_test(user_test): self.fail('Identity Fault') elif resp_val == 503: self.fail('Service Not Available') - delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_user(self.tenant, self.user, str(self.auth_token)) self.assertEqual(400, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_enabled_expired_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) - data = '{"user": { "enabled": true}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.exp_auth_token}) + def test_user_enabled_disabled_tenant(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_json('0000', + self.user, + str(self.auth_token)) + resp_val = int(resp['status']) + content = json.loads(content) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(403, resp_val) + + def test_user_enabled_disabled_tenant_xml(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_xml('0000', + self.user, + str(self.auth_token)) + resp_val = int(resp['status']) + content = etree.fromstring(content) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(403, resp_val) + self.assertEqual('application/xml', utils.content_type(resp)) + + def test_user_enabled_expired_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_json(self.tenant, + self.user, + str(self.exp_auth_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1517,15 +1294,10 @@ class set_enabled_test(user_test): self.assertEqual(403, resp_val) def test_user_enabled_expired_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - enabled="true" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.exp_auth_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_xml(self.tenant, + self.user, + str(self.exp_auth_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1533,15 +1305,13 @@ class set_enabled_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_enabled_disabled_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) - data = '{"user": { "enabled": true}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.disabled_token}) + def test_user_enabled_disabled_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_json(self.tenant, + self.user, + str(self.disabled_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1551,15 +1321,10 @@ class set_enabled_test(user_test): self.assertEqual(403, resp_val) def test_user_enabled_disabled_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - enabled="true" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.disabled_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_xml(self.tenant, + self.user, + str(self.disabled_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1567,15 +1332,13 @@ class set_enabled_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(403, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_enabled_invalid_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) - data = '{"user": { "enabled": true}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.invalid_token}) + def test_user_enabled_invalid_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_json(self.tenant, + self.user, + str(self.invalid_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1585,15 +1348,10 @@ class set_enabled_test(user_test): self.assertEqual(404, resp_val) def test_user_enabled_invalid_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - enabled="true" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml",\ - "X-Auth-Token": self.invalid_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_xml(self.tenant, + self.user, + str(self.invalid_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1601,15 +1359,13 @@ class set_enabled_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(404, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) - def test_user_enabled_missing_token_json(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/enabled' % (URL, self.tenant, self.user) - data = '{"user": { "enabled": true}}' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/json", - "X-Auth-Token": self.missing_token}) + def test_user_enabled_missing_token(self): + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_json(self.tenant, + self.user, + str(self.missing_token)) resp_val = int(resp['status']) content = json.loads(content) if resp_val == 500: @@ -1619,15 +1375,10 @@ class set_enabled_test(user_test): self.assertEqual(401, resp_val) def test_user_enabled_missing_token_xml(self): - header = httplib2.Http(".cache") - url = '%stenants/%s/users/%s/password' % (URL, self.tenant, self.user) - data = '<?xml version="1.0" encoding="UTF-8"?> \ - <user xmlns="http://docs.openstack.org/identity/api/v2.0" \ - enabled="true" />' - resp, content = header.request(url, "PUT", body=data, - headers={"Content-Type": "application/xml", - "X-Auth-Token": self.missing_token, - "ACCEPT": "application/xml"}) + utils.create_user(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.user_enabled_xml(self.tenant, + self.user, + str(self.missing_token)) resp_val = int(resp['status']) content = etree.fromstring(content) if resp_val == 500: @@ -1635,7 +1386,198 @@ class set_enabled_test(user_test): elif resp_val == 503: self.fail('Service Not Available') self.assertEqual(401, resp_val) - self.assertEqual('application/xml', content_type(resp)) + self.assertEqual('application/xml', utils.content_type(resp)) + + +class AddUserTest(UserTest): + + def setUp(self): + self.token = utils.get_token('joeuser', 'secrete', '1234') + self.tenant = utils.get_another_tenant() + self.password = utils.get_password() + self.email = utils.get_email() + self.user = 'joeuser' + self.userdisabled = utils.get_userdisabled() + self.auth_token = utils.get_auth_token() + self.exp_auth_token = utils.get_exp_auth_token() + self.disabled_token = utils.get_disabled_token() + self.missing_token = utils.get_none_token() + self.invalid_token = utils.get_non_existing_token() + + def tearDown(self): + utils.delete_user(self.tenant, self.user, str(self.auth_token)) + utils.delete_tenant(self.tenant, str(self.auth_token)) + + def test_add_user_tenant(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_json(self.tenant, + self.user, + str(self.auth_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(200, resp_val) + + def test_add_user_tenant_xml(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_xml(self.tenant, + self.user, + str(self.auth_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(200, resp_val) + + def test_add_user_tenant_conflict(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + utils.add_user_json(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.add_user_json(self.tenant, + self.user, + str(self.auth_token)) + + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(409, resp_val) + + def test_add_user_tenant_conflict_xml(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + utils.add_user_xml(self.tenant, self.user, str(self.auth_token)) + resp, content = utils.add_user_xml(self.tenant, + self.user, + str(self.auth_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(409, resp_val) + + def test_add_user_tenant_expired_token(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_json(self.tenant, + self.user, + str(self.exp_auth_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(403, resp_val) + + def test_add_user_tenant_expired_token_xml(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_xml(self.tenant, + self.user, + str(self.exp_auth_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(403, resp_val) + + def test_add_user_tenant_disabled_token(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_json(self.tenant, + self.user, + str(self.disabled_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(403, resp_val) + + def test_add_user_tenant_disabled_token_xml(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_xml(self.tenant, + self.user, + str(self.disabled_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(403, resp_val) + + def test_add_user_tenant_invalid_token(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_json(self.tenant, + self.user, + str(self.invalid_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(404, resp_val) + + def test_add_user_tenant_invalid_token_xml(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_xml(self.tenant, + self.user, + str(self.invalid_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(404, resp_val) + + def test_add_user_tenant_missing_token(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_json(self.tenant, + self.user, + str(self.missing_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(401, resp_val) + + def test_add_user_tenant_missing_token_xml(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_xml(self.tenant, + self.user, + str(self.missing_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(401, resp_val) + + def test_add_user_tenant_disabled_tenant(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_json('0000', + self.user, + str(self.auth_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(403, resp_val) + + def test_add_user_tenant_disabled_tenant_xml(self): + utils.create_tenant(self.tenant, str(self.auth_token)) + resp, content = utils.add_user_xml('0000', + self.user, + str(self.auth_token)) + resp_val = int(resp['status']) + if resp_val == 500: + self.fail('Identity Fault') + elif resp_val == 503: + self.fail('Service Not Available') + self.assertEqual(403, resp_val) if __name__ == '__main__': unittest.main() diff --git a/test/unit/test_version.py b/test/unit/test_version.py index 76b013ab..3e98935e 100644 --- a/test/unit/test_version.py +++ b/test/unit/test_version.py @@ -1,14 +1,31 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# Copyright (c) 2010-2011 OpenStack, LLC. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import httplib2 import os import sys -# Need to access identity module sys.path.append(os.path.abspath(os.path.join(os.path.abspath(__file__), '..', '..', '..', '..', 'keystone'))) import unittest -import httplib2 + import test_common as utils -class version_test(unittest.TestCase): +class VersionTest(unittest.TestCase): #Given _a_ to make inherited test cases in an order. #here to call below method will call as last test case |
