summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-09-24 21:10:03 +0000
committerGerrit Code Review <review@openstack.org>2013-09-24 21:10:03 +0000
commit37b192dce727cc062256c3dda98198a4886a779c (patch)
tree774a4a1990c9cec64d506b718047366b1efc56f0
parent5aabbce909bb010cbed48f77fe322e4a23d47002 (diff)
parent916eb2c689726d54ddd51c58a22a75b35d7ca3ac (diff)
downloadnova-37b192dce727cc062256c3dda98198a4886a779c.tar.gz
Merge "Adds v3 API samples for limits and simple tenant usage"
-rw-r--r--doc/v3/api_samples/limits/limit-get-resp.json72
-rw-r--r--doc/v3/api_samples/limits/limit-get-resp.xml29
-rw-r--r--doc/v3/api_samples/os-simple-tenant-usage/server-post-req.json16
-rw-r--r--doc/v3/api_samples/os-simple-tenant-usage/server-post-req.xml19
-rw-r--r--doc/v3/api_samples/os-simple-tenant-usage/server-post-resp.json16
-rw-r--r--doc/v3/api_samples/os-simple-tenant-usage/server-post-resp.xml6
-rw-r--r--doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.json27
-rw-r--r--doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.xml26
-rw-r--r--doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.json13
-rw-r--r--doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.xml13
-rw-r--r--nova/tests/integrated/v3/api_samples/limits/limit-get-resp.json.tpl72
-rw-r--r--nova/tests/integrated/v3/api_samples/limits/limit-get-resp.xml.tpl29
-rw-r--r--nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-req.json.tpl16
-rw-r--r--nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-req.xml.tpl19
-rw-r--r--nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-resp.json.tpl16
-rw-r--r--nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-resp.xml.tpl6
-rw-r--r--nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.json.tpl27
-rw-r--r--nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.xml.tpl26
-rw-r--r--nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.json.tpl13
-rw-r--r--nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.xml.tpl13
-rw-r--r--nova/tests/integrated/v3/test_limits.py30
-rw-r--r--nova/tests/integrated/v3/test_simple_tenant_usage.py66
22 files changed, 570 insertions, 0 deletions
diff --git a/doc/v3/api_samples/limits/limit-get-resp.json b/doc/v3/api_samples/limits/limit-get-resp.json
new file mode 100644
index 0000000000..2f9d59086b
--- /dev/null
+++ b/doc/v3/api_samples/limits/limit-get-resp.json
@@ -0,0 +1,72 @@
+{
+ "limits": {
+ "absolute": {
+ "maxImageMeta": 128,
+ "maxPersonality": 5,
+ "maxPersonalitySize": 10240,
+ "maxSecurityGroupRules": 20,
+ "maxSecurityGroups": 10,
+ "maxServerMeta": 128,
+ "maxTotalCores": 20,
+ "maxTotalFloatingIps": 10,
+ "maxTotalInstances": 10,
+ "maxTotalKeypairs": 100,
+ "maxTotalRAMSize": 51200
+ },
+ "rate": [
+ {
+ "limit": [
+ {
+ "next-available": "2013-09-09T13:37:32Z",
+ "remaining": 10,
+ "unit": "MINUTE",
+ "value": 10,
+ "verb": "POST"
+ },
+ {
+ "next-available": "2013-09-09T13:37:32Z",
+ "remaining": 10,
+ "unit": "MINUTE",
+ "value": 10,
+ "verb": "PUT"
+ },
+ {
+ "next-available": "2013-09-09T13:37:32Z",
+ "remaining": 100,
+ "unit": "MINUTE",
+ "value": 100,
+ "verb": "DELETE"
+ }
+ ],
+ "regex": ".*",
+ "uri": "*"
+ },
+ {
+ "limit": [
+ {
+ "next-available": "2013-09-09T13:37:32Z",
+ "remaining": 50,
+ "unit": "DAY",
+ "value": 50,
+ "verb": "POST"
+ }
+ ],
+ "regex": "^/servers",
+ "uri": "*/servers"
+ },
+ {
+ "limit": [
+ {
+ "next-available": "2013-09-09T13:37:32Z",
+ "remaining": 3,
+ "unit": "MINUTE",
+ "value": 3,
+ "verb": "GET"
+ }
+ ],
+ "regex": ".*changes_since.*",
+ "uri": "*changes_since*"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/doc/v3/api_samples/limits/limit-get-resp.xml b/doc/v3/api_samples/limits/limit-get-resp.xml
new file mode 100644
index 0000000000..ab82e59e1d
--- /dev/null
+++ b/doc/v3/api_samples/limits/limit-get-resp.xml
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<limits xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0">
+ <rates>
+ <rate regex=".*" uri="*">
+ <limit next-available="2013-09-09T13:37:32Z" unit="MINUTE" verb="POST" remaining="10" value="10"/>
+ <limit next-available="2013-09-09T13:37:32Z" unit="MINUTE" verb="PUT" remaining="10" value="10"/>
+ <limit next-available="2013-09-09T13:37:32Z" unit="MINUTE" verb="DELETE" remaining="100" value="100"/>
+ </rate>
+ <rate regex="^/servers" uri="*/servers">
+ <limit next-available="2013-09-09T13:37:32Z" unit="DAY" verb="POST" remaining="50" value="50"/>
+ </rate>
+ <rate regex=".*changes_since.*" uri="*changes_since*">
+ <limit next-available="2013-09-09T13:37:32Z" unit="MINUTE" verb="GET" remaining="3" value="3"/>
+ </rate>
+ </rates>
+ <absolute>
+ <limit name="maxServerMeta" value="128"/>
+ <limit name="maxPersonality" value="5"/>
+ <limit name="maxImageMeta" value="128"/>
+ <limit name="maxPersonalitySize" value="10240"/>
+ <limit name="maxSecurityGroupRules" value="20"/>
+ <limit name="maxTotalKeypairs" value="100"/>
+ <limit name="maxSecurityGroups" value="10"/>
+ <limit name="maxTotalCores" value="20"/>
+ <limit name="maxTotalFloatingIps" value="10"/>
+ <limit name="maxTotalInstances" value="10"/>
+ <limit name="maxTotalRAMSize" value="51200"/>
+ </absolute>
+</limits> \ No newline at end of file
diff --git a/doc/v3/api_samples/os-simple-tenant-usage/server-post-req.json b/doc/v3/api_samples/os-simple-tenant-usage/server-post-req.json
new file mode 100644
index 0000000000..d41985a1bc
--- /dev/null
+++ b/doc/v3/api_samples/os-simple-tenant-usage/server-post-req.json
@@ -0,0 +1,16 @@
+{
+ "server" : {
+ "name" : "new-server-test",
+ "image_ref" : "http://openstack.example.com/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b",
+ "flavor_ref" : "http://openstack.example.com/openstack/flavors/1",
+ "metadata" : {
+ "My Server Name" : "Apache1"
+ },
+ "personality" : [
+ {
+ "path" : "/etc/banner.txt",
+ "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA=="
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/doc/v3/api_samples/os-simple-tenant-usage/server-post-req.xml b/doc/v3/api_samples/os-simple-tenant-usage/server-post-req.xml
new file mode 100644
index 0000000000..598839cf6a
--- /dev/null
+++ b/doc/v3/api_samples/os-simple-tenant-usage/server-post-req.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<server xmlns="http://docs.openstack.org/compute/api/v1.1" image_ref="http://openstack.example.com/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b" flavor_ref="http://openstack.example.com/openstack/flavors/1" name="new-server-test">
+ <metadata>
+ <meta key="My Server Name">Apache1</meta>
+ </metadata>
+ <personality>
+ <file path="/etc/banner.txt">
+ ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBp
+ dCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5k
+ IGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVs
+ c2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4g
+ QnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRo
+ ZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlv
+ dSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vy
+ c2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6
+ b25zLiINCg0KLVJpY2hhcmQgQmFjaA==
+ </file>
+ </personality>
+</server> \ No newline at end of file
diff --git a/doc/v3/api_samples/os-simple-tenant-usage/server-post-resp.json b/doc/v3/api_samples/os-simple-tenant-usage/server-post-resp.json
new file mode 100644
index 0000000000..4b5b1ef20c
--- /dev/null
+++ b/doc/v3/api_samples/os-simple-tenant-usage/server-post-resp.json
@@ -0,0 +1,16 @@
+{
+ "server": {
+ "admin_pass": "andqf3WBEYDj",
+ "id": "69eaa1f4-7be0-42d5-934f-320cdc80981d",
+ "links": [
+ {
+ "href": "http://openstack.example.com/v3/servers/69eaa1f4-7be0-42d5-934f-320cdc80981d",
+ "rel": "self"
+ },
+ {
+ "href": "http://openstack.example.com/servers/69eaa1f4-7be0-42d5-934f-320cdc80981d",
+ "rel": "bookmark"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/doc/v3/api_samples/os-simple-tenant-usage/server-post-resp.xml b/doc/v3/api_samples/os-simple-tenant-usage/server-post-resp.xml
new file mode 100644
index 0000000000..6ec4625ac9
--- /dev/null
+++ b/doc/v3/api_samples/os-simple-tenant-usage/server-post-resp.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<server xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" id="f14ff0d3-cebe-4692-9202-71946f4db8e4" admin_pass="wQxFoinL5p2y">
+ <metadata/>
+ <atom:link href="http://openstack.example.com/v3/servers/f14ff0d3-cebe-4692-9202-71946f4db8e4" rel="self"/>
+ <atom:link href="http://openstack.example.com/servers/f14ff0d3-cebe-4692-9202-71946f4db8e4" rel="bookmark"/>
+</server> \ No newline at end of file
diff --git a/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.json b/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.json
new file mode 100644
index 0000000000..d89dcb97d2
--- /dev/null
+++ b/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.json
@@ -0,0 +1,27 @@
+{
+ "tenant_usage": {
+ "server_usages": [
+ {
+ "ended_at": null,
+ "flavor": "m1.tiny",
+ "hours": 1.0,
+ "instance_id": "bf2fbe78-ae1c-4f6b-a68b-390f12b1b983",
+ "local_gb": 1,
+ "memory_mb": 512,
+ "name": "new-server-test",
+ "started_at": "2013-09-09T13:18:28.101337",
+ "state": "active",
+ "tenant_id": "openstack",
+ "uptime": 3600,
+ "vcpus": 1
+ }
+ ],
+ "start": "2013-09-09T13:18:28.101337",
+ "stop": "2013-09-09T14:18:28.101337",
+ "tenant_id": "openstack",
+ "total_hours": 1.0,
+ "total_local_gb_usage": 1.0,
+ "total_memory_mb_usage": 512.0,
+ "total_vcpus_usage": 1.0
+ }
+} \ No newline at end of file
diff --git a/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.xml b/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.xml
new file mode 100644
index 0000000000..5c7dcd9d07
--- /dev/null
+++ b/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.xml
@@ -0,0 +1,26 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<tenant_usage>
+ <tenant_id>openstack</tenant_id>
+ <total_local_gb_usage>1.0</total_local_gb_usage>
+ <total_vcpus_usage>1.0</total_vcpus_usage>
+ <total_memory_mb_usage>512.0</total_memory_mb_usage>
+ <total_hours>1.0</total_hours>
+ <start>2013-09-09 13:18:27.896728</start>
+ <stop>2013-09-09 14:18:27.896728</stop>
+ <server_usages>
+ <server_usage>
+ <instance_id>f14ff0d3-cebe-4692-9202-71946f4db8e4</instance_id>
+ <name>new-server-test</name>
+ <hours>1.0</hours>
+ <memory_mb>512</memory_mb>
+ <local_gb>1</local_gb>
+ <vcpus>1</vcpus>
+ <tenant_id>openstack</tenant_id>
+ <flavor>m1.tiny</flavor>
+ <started_at>2013-09-09 13:18:27.896728</started_at>
+ <ended_at>None</ended_at>
+ <state>active</state>
+ <uptime>3600</uptime>
+ </server_usage>
+ </server_usages>
+</tenant_usage> \ No newline at end of file
diff --git a/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.json b/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.json
new file mode 100644
index 0000000000..133f8ef756
--- /dev/null
+++ b/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.json
@@ -0,0 +1,13 @@
+{
+ "tenant_usages": [
+ {
+ "start": "2013-09-09T13:18:27.898411",
+ "stop": "2013-09-09T14:18:27.898411",
+ "tenant_id": "openstack",
+ "total_hours": 1.0,
+ "total_local_gb_usage": 1.0,
+ "total_memory_mb_usage": 512.0,
+ "total_vcpus_usage": 1.0
+ }
+ ]
+} \ No newline at end of file
diff --git a/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.xml b/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.xml
new file mode 100644
index 0000000000..08365fafe3
--- /dev/null
+++ b/doc/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.xml
@@ -0,0 +1,13 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<tenant_usages>
+ <tenant_usage>
+ <tenant_id>openstack</tenant_id>
+ <total_local_gb_usage>1.0</total_local_gb_usage>
+ <total_vcpus_usage>1.0</total_vcpus_usage>
+ <total_memory_mb_usage>512.0</total_memory_mb_usage>
+ <total_hours>1.0</total_hours>
+ <start>2013-09-09 13:18:27.998271</start>
+ <stop>2013-09-09 14:18:27.998271</stop>
+ <server_usages/>
+ </tenant_usage>
+</tenant_usages> \ No newline at end of file
diff --git a/nova/tests/integrated/v3/api_samples/limits/limit-get-resp.json.tpl b/nova/tests/integrated/v3/api_samples/limits/limit-get-resp.json.tpl
new file mode 100644
index 0000000000..54075582df
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/limits/limit-get-resp.json.tpl
@@ -0,0 +1,72 @@
+{
+ "limits": {
+ "absolute": {
+ "maxImageMeta": 128,
+ "maxPersonality": 5,
+ "maxPersonalitySize": 10240,
+ "maxSecurityGroupRules": 20,
+ "maxSecurityGroups": 10,
+ "maxServerMeta": 128,
+ "maxTotalCores": 20,
+ "maxTotalFloatingIps": 10,
+ "maxTotalInstances": 10,
+ "maxTotalKeypairs": 100,
+ "maxTotalRAMSize": 51200
+ },
+ "rate": [
+ {
+ "limit": [
+ {
+ "next-available": "%(timestamp)s",
+ "remaining": 10,
+ "unit": "MINUTE",
+ "value": 10,
+ "verb": "POST"
+ },
+ {
+ "next-available": "%(timestamp)s",
+ "remaining": 10,
+ "unit": "MINUTE",
+ "value": 10,
+ "verb": "PUT"
+ },
+ {
+ "next-available": "%(timestamp)s",
+ "remaining": 100,
+ "unit": "MINUTE",
+ "value": 100,
+ "verb": "DELETE"
+ }
+ ],
+ "regex": ".*",
+ "uri": "*"
+ },
+ {
+ "limit": [
+ {
+ "next-available": "%(timestamp)s",
+ "remaining": 50,
+ "unit": "DAY",
+ "value": 50,
+ "verb": "POST"
+ }
+ ],
+ "regex": "^/servers",
+ "uri": "*/servers"
+ },
+ {
+ "limit": [
+ {
+ "next-available": "%(timestamp)s",
+ "remaining": 3,
+ "unit": "MINUTE",
+ "value": 3,
+ "verb": "GET"
+ }
+ ],
+ "regex": ".*changes_since.*",
+ "uri": "*changes_since*"
+ }
+ ]
+ }
+}
diff --git a/nova/tests/integrated/v3/api_samples/limits/limit-get-resp.xml.tpl b/nova/tests/integrated/v3/api_samples/limits/limit-get-resp.xml.tpl
new file mode 100644
index 0000000000..9332ab073e
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/limits/limit-get-resp.xml.tpl
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<limits xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/common/api/v1.0">
+ <rates>
+ <rate regex=".*" uri="*">
+ <limit next-available="%(timestamp)s" unit="MINUTE" verb="POST" remaining="10" value="10"/>
+ <limit next-available="%(timestamp)s" unit="MINUTE" verb="PUT" remaining="10" value="10"/>
+ <limit next-available="%(timestamp)s" unit="MINUTE" verb="DELETE" remaining="100" value="100"/>
+ </rate>
+ <rate regex="^/servers" uri="*/servers">
+ <limit next-available="%(timestamp)s" unit="DAY" verb="POST" remaining="50" value="50"/>
+ </rate>
+ <rate regex=".*changes_since.*" uri="*changes_since*">
+ <limit next-available="%(timestamp)s" unit="MINUTE" verb="GET" remaining="3" value="3"/>
+ </rate>
+ </rates>
+ <absolute>
+ <limit name="maxServerMeta" value="128"/>
+ <limit name="maxPersonality" value="5"/>
+ <limit name="maxImageMeta" value="128"/>
+ <limit name="maxPersonalitySize" value="10240"/>
+ <limit name="maxSecurityGroupRules" value="20"/>
+ <limit name="maxTotalKeypairs" value="100"/>
+ <limit name="maxSecurityGroups" value="10"/>
+ <limit name="maxTotalCores" value="20"/>
+ <limit name="maxTotalFloatingIps" value="10"/>
+ <limit name="maxTotalInstances" value="10"/>
+ <limit name="maxTotalRAMSize" value="51200"/>
+ </absolute>
+</limits>
diff --git a/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-req.json.tpl b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-req.json.tpl
new file mode 100644
index 0000000000..1dcb63e3b2
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-req.json.tpl
@@ -0,0 +1,16 @@
+{
+ "server" : {
+ "name" : "new-server-test",
+ "image_ref" : "%(host)s/openstack/images/%(image_id)s",
+ "flavor_ref" : "%(host)s/openstack/flavors/1",
+ "metadata" : {
+ "My Server Name" : "Apache1"
+ },
+ "personality" : [
+ {
+ "path" : "/etc/banner.txt",
+ "contents" : "ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA=="
+ }
+ ]
+ }
+}
diff --git a/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-req.xml.tpl b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-req.xml.tpl
new file mode 100644
index 0000000000..ddb5ea78c4
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-req.xml.tpl
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<server xmlns="http://docs.openstack.org/compute/api/v1.1" image_ref="%(host)s/openstack/images/%(image_id)s" flavor_ref="%(host)s/openstack/flavors/1" name="new-server-test">
+ <metadata>
+ <meta key="My Server Name">Apache1</meta>
+ </metadata>
+ <personality>
+ <file path="/etc/banner.txt">
+ ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBp
+ dCBtb3ZlcyBpbiBqdXN0IHN1Y2ggYSBkaXJlY3Rpb24gYW5k
+ IGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVs
+ c2lvbi4uLnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4g
+ QnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNvbnMgYW5kIHRo
+ ZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlv
+ dSB3aWxsIGtub3csIHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vy
+ c2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhvcml6
+ b25zLiINCg0KLVJpY2hhcmQgQmFjaA==
+ </file>
+ </personality>
+</server>
diff --git a/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-resp.json.tpl b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-resp.json.tpl
new file mode 100644
index 0000000000..6c3100fbec
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-resp.json.tpl
@@ -0,0 +1,16 @@
+{
+ "server": {
+ "admin_pass": "%(password)s",
+ "id": "%(id)s",
+ "links": [
+ {
+ "href": "http://openstack.example.com/v3/servers/%(uuid)s",
+ "rel": "self"
+ },
+ {
+ "href": "http://openstack.example.com/servers/%(uuid)s",
+ "rel": "bookmark"
+ }
+ ]
+ }
+}
diff --git a/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-resp.xml.tpl b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-resp.xml.tpl
new file mode 100644
index 0000000000..3470373e17
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/server-post-resp.xml.tpl
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<server xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" id="%(id)s" admin_pass="%(password)s">
+ <metadata/>
+ <atom:link href="%(host)s/v3/servers/%(uuid)s" rel="self"/>
+ <atom:link href="%(host)s/servers/%(uuid)s" rel="bookmark"/>
+</server>
diff --git a/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.json.tpl b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.json.tpl
new file mode 100644
index 0000000000..a12dd7157f
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.json.tpl
@@ -0,0 +1,27 @@
+{
+ "tenant_usage": {
+ "server_usages": [
+ {
+ "ended_at": null,
+ "flavor": "m1.tiny",
+ "hours": 1.0,
+ "instance_id": "%(uuid)s",
+ "local_gb": 1,
+ "memory_mb": 512,
+ "name": "new-server-test",
+ "started_at": "%(timestamp)s",
+ "state": "active",
+ "tenant_id": "openstack",
+ "uptime": 3600,
+ "vcpus": 1
+ }
+ ],
+ "start": "%(timestamp)s",
+ "stop": "%(timestamp)s",
+ "tenant_id": "openstack",
+ "total_hours": 1.0,
+ "total_local_gb_usage": 1.0,
+ "total_memory_mb_usage": 512.0,
+ "total_vcpus_usage": 1.0
+ }
+}
diff --git a/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.xml.tpl b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.xml.tpl
new file mode 100644
index 0000000000..4a68823079
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get-specific.xml.tpl
@@ -0,0 +1,26 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<tenant_usage>
+ <tenant_id>openstack</tenant_id>
+ <total_local_gb_usage>1.0</total_local_gb_usage>
+ <total_vcpus_usage>1.0</total_vcpus_usage>
+ <total_memory_mb_usage>512.0</total_memory_mb_usage>
+ <total_hours>1.0</total_hours>
+ <start>%(timestamp)s</start>
+ <stop>%(timestamp)s</stop>
+ <server_usages>
+ <server_usage>
+ <instance_id>%(uuid)s</instance_id>
+ <name>new-server-test</name>
+ <hours>1.0</hours>
+ <memory_mb>512</memory_mb>
+ <local_gb>1</local_gb>
+ <vcpus>1</vcpus>
+ <tenant_id>openstack</tenant_id>
+ <flavor>m1.tiny</flavor>
+ <started_at>%(timestamp)s</started_at>
+ <ended_at>None</ended_at>
+ <state>active</state>
+ <uptime>3600</uptime>
+ </server_usage>
+ </server_usages>
+</tenant_usage>
diff --git a/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.json.tpl b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.json.tpl
new file mode 100644
index 0000000000..082e6bc909
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.json.tpl
@@ -0,0 +1,13 @@
+{
+ "tenant_usages": [
+ {
+ "start": "%(timestamp)s",
+ "stop": "%(timestamp)s",
+ "tenant_id": "openstack",
+ "total_hours": 1.0,
+ "total_local_gb_usage": 1.0,
+ "total_memory_mb_usage": 512.0,
+ "total_vcpus_usage": 1.0
+ }
+ ]
+}
diff --git a/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.xml.tpl b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.xml.tpl
new file mode 100644
index 0000000000..4a2833da83
--- /dev/null
+++ b/nova/tests/integrated/v3/api_samples/os-simple-tenant-usage/simple-tenant-usage-get.xml.tpl
@@ -0,0 +1,13 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<tenant_usages>
+ <tenant_usage>
+ <tenant_id>openstack</tenant_id>
+ <total_local_gb_usage>1.0</total_local_gb_usage>
+ <total_vcpus_usage>1.0</total_vcpus_usage>
+ <total_memory_mb_usage>512.0</total_memory_mb_usage>
+ <total_hours>1.0</total_hours>
+ <start>%(timestamp)s</start>
+ <stop>%(timestamp)s</stop>
+ <server_usages/>
+ </tenant_usage>
+</tenant_usages>
diff --git a/nova/tests/integrated/v3/test_limits.py b/nova/tests/integrated/v3/test_limits.py
new file mode 100644
index 0000000000..17f3893f7f
--- /dev/null
+++ b/nova/tests/integrated/v3/test_limits.py
@@ -0,0 +1,30 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+# Copyright 2012 Nebula, Inc.
+# Copyright 2013 IBM Corp.
+#
+# 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.
+
+from nova.tests.integrated.v3 import api_sample_base
+
+
+class LimitsSampleJsonTest(api_sample_base.ApiSampleTestBaseV3):
+ extension_name = "limits"
+
+ def test_limits_get(self):
+ response = self._do_get('limits')
+ subs = self._get_regexes()
+ self._verify_response('limit-get-resp', subs, response, 200)
+
+
+class LimitsSampleXmlTest(LimitsSampleJsonTest):
+ ctype = 'xml'
diff --git a/nova/tests/integrated/v3/test_simple_tenant_usage.py b/nova/tests/integrated/v3/test_simple_tenant_usage.py
new file mode 100644
index 0000000000..cce7f1317b
--- /dev/null
+++ b/nova/tests/integrated/v3/test_simple_tenant_usage.py
@@ -0,0 +1,66 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+# Copyright 2012 Nebula, Inc.
+# Copyright 2013 IBM Corp.
+#
+# 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 datetime
+import urllib
+
+from nova.openstack.common import timeutils
+from nova.tests.integrated.v3 import test_servers
+
+
+class SimpleTenantUsageSampleJsonTest(test_servers.ServersSampleBase):
+ extension_name = "os-simple-tenant-usage"
+
+ def setUp(self):
+ """setUp method for simple tenant usage."""
+ super(SimpleTenantUsageSampleJsonTest, self).setUp()
+
+ started = timeutils.utcnow()
+ now = started + datetime.timedelta(hours=1)
+
+ timeutils.set_time_override(started)
+ self._post_server()
+ timeutils.set_time_override(now)
+
+ self.query = {
+ 'start': str(started),
+ 'end': str(now)
+ }
+
+ def tearDown(self):
+ """tearDown method for simple tenant usage."""
+ super(SimpleTenantUsageSampleJsonTest, self).tearDown()
+ timeutils.clear_time_override()
+
+ def test_get_tenants_usage(self):
+ # Get api sample to get all tenants usage request.
+ response = self._do_get('os-simple-tenant-usage?%s' % (
+ urllib.urlencode(self.query)))
+ subs = self._get_regexes()
+ self._verify_response('simple-tenant-usage-get', subs, response, 200)
+
+ def test_get_tenant_usage_details(self):
+ # Get api sample to get specific tenant usage request.
+ tenant_id = 'openstack'
+ response = self._do_get('os-simple-tenant-usage/%s?%s' % (tenant_id,
+ urllib.urlencode(self.query)))
+ subs = self._get_regexes()
+ self._verify_response('simple-tenant-usage-get-specific', subs,
+ response, 200)
+
+
+class SimpleTenantUsageSampleXmlTest(SimpleTenantUsageSampleJsonTest):
+ ctype = "xml"