summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYogeshwar Srikrishnan <yoga80@yahoo.com>2011-05-20 17:02:58 -0500
committerYogeshwar Srikrishnan <yoga80@yahoo.com>2011-05-20 17:02:58 -0500
commit8e2713a6496657bcc9db2ebc5b60f08c4576655c (patch)
treeb6327d2862e0db14c51bb0702c267ee6798c05d9
parent7a2081109118e8f9fe910d9408d075cf6184ab59 (diff)
parent4a74b256f903d947258f74a4341fe203b562122c (diff)
Merge remote branch 'khussein/master'
-rw-r--r--README.md4
-rwxr-xr-xbin/keystone-auth2
-rw-r--r--docs/guide/src/docbkx/samples/extension.json2
-rw-r--r--docs/guide/src/docbkx/samples/extension.xml4
-rw-r--r--docs/guide/src/docbkx/samples/extensions.json10
-rw-r--r--docs/guide/src/docbkx/samples/extensions.xml10
-rw-r--r--docs/guide/src/docbkx/samples/identity_fault.json2
-rw-r--r--docs/guide/src/docbkx/samples/identity_fault.xml4
-rw-r--r--docs/guide/src/docbkx/samples/samplerequestheader.json2
-rw-r--r--docs/guide/src/docbkx/samples/version-atom.xml8
-rw-r--r--docs/guide/src/docbkx/samples/version.json4
-rw-r--r--docs/guide/src/docbkx/samples/version.xml4
-rw-r--r--docs/guide/src/docbkx/samples/versions-atom.xml2
-rw-r--r--docs/guide/src/docbkx/xsd/api.xsd2
-rw-r--r--docs/guide/src/docbkx/xsd/fault.xsd38
-rw-r--r--docs/guide/src/docbkx/xsd/tenant.xsd8
-rw-r--r--docs/guide/src/docbkx/xsd/token.xsd16
-rw-r--r--echo/echo_client.py4
-rw-r--r--etc/keystone.conf2
-rwxr-xr-xkeystone/common/wsgi.py2
-rw-r--r--keystone/db/sqlalchemy/api.py15
-rw-r--r--keystone/logic/service.py14
-rw-r--r--keystone/logic/types/auth.py22
-rw-r--r--keystone/logic/types/user.py2
-rwxr-xr-xkeystone/server.py363
-rw-r--r--keystone/utils.py131
-rw-r--r--test/IdentitySOAPUI.xml218
-rw-r--r--test/unit/test_authentication.py104
-rw-r--r--test/unit/test_common.py278
-rw-r--r--test/unit/test_exthandler.py12
-rw-r--r--test/unit/test_groups.py641
-rw-r--r--test/unit/test_keystone.py6
-rw-r--r--test/unit/test_server.py2
-rw-r--r--test/unit/test_tenant_groups.py144
-rw-r--r--test/unit/test_tenants.py62
-rw-r--r--test/unit/test_token.py32
-rw-r--r--test/unit/test_users.py1594
-rw-r--r--test/unit/test_version.py23
38 files changed, 2081 insertions, 1712 deletions
diff --git a/README.md b/README.md
index 4d3141ed..6257536f 100644
--- a/README.md
+++ b/README.md
@@ -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>&lt;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>&lt;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">
&lt;include schemaLocation="token.xsd"/>
&lt;include schemaLocation="tenant.xsd"/>
&lt;include schemaLocation="fault.xsd"/>
-&lt;/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">
+&lt;/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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;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">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request>&lt;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">&lt;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">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request>&lt;v1:tenant enabled="true" xmlns:v1="http://docs.openstack.org/identity/api/v2.0">
&lt;v1:description>New Description&lt;/v1:description>
&lt;/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">&lt;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">&lt;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">&lt;xml-fragment/></con:setting></con:settings><con:endpoint>http://localhost:8080</con:endpoint><con:request>&lt;v1:tenant
enabled="true" id="my_new_tenant"
xmlns:v1="http://docs.openstack.org/identity/api/v2.0">&lt;v1:description>This
is a description of my tenant. Thank you very
much.&lt;/v1:description>&lt;/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">&lt;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">&lt;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