summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-01-13 19:19:46 +0000
committerGerrit Code Review <review@openstack.org>2012-01-13 19:19:46 +0000
commit6c898e6abf44caa176790e9cd4505aeed145397c (patch)
tree4d9cbc1ef13d8d208284417f333e36482bdd8c26 /nova/tests
parent485328e48fc7dff1ce2ebfd262c442d8f993688b (diff)
parent60ff2e3b72b5a3c9200f8fc47aac01cdb610bdcf (diff)
Merge "Implements blueprint separate-nova-volumeapi"
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/api/openstack/compute/__init__.py (renamed from nova/tests/api/openstack/v2/__init__.py)0
-rw-r--r--nova/tests/api/openstack/compute/contrib/__init__.py (renamed from nova/tests/api/openstack/v2/contrib/__init__.py)0
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_accounts.py (renamed from nova/tests/api/openstack/v2/contrib/test_accounts.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_admin_actions.py (renamed from nova/tests/api/openstack/v2/contrib/test_admin_actions.py)6
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_cloudpipe.py (renamed from nova/tests/api/openstack/v2/contrib/test_cloudpipe.py)8
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_console_output.py (renamed from nova/tests/api/openstack/v2/contrib/test_console_output.py)0
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_createserverext.py (renamed from nova/tests/api/openstack/v2/contrib/test_createserverext.py)0
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_deferred_delete.py (renamed from nova/tests/api/openstack/v2/contrib/test_deferred_delete.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_disk_config.py (renamed from nova/tests/api/openstack/v2/contrib/test_disk_config.py)6
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_extendedstatus.py (renamed from nova/tests/api/openstack/v2/contrib/test_extendedstatus.py)0
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_flavors_extra_specs.py (renamed from nova/tests/api/openstack/v2/contrib/test_flavors_extra_specs.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_floating_ip_dns.py (renamed from nova/tests/api/openstack/v2/contrib/test_floating_ip_dns.py)4
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_floating_ip_pools.py (renamed from nova/tests/api/openstack/v2/contrib/test_floating_ip_pools.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_floating_ips.py (renamed from nova/tests/api/openstack/v2/contrib/test_floating_ips.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_hosts.py (renamed from nova/tests/api/openstack/v2/contrib/test_hosts.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_keypairs.py (renamed from nova/tests/api/openstack/v2/contrib/test_keypairs.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_multinic_xs.py (renamed from nova/tests/api/openstack/v2/contrib/test_multinic_xs.py)0
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_networks.py (renamed from nova/tests/api/openstack/v2/contrib/test_networks.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_quotas.py (renamed from nova/tests/api/openstack/v2/contrib/test_quotas.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_rescue.py (renamed from nova/tests/api/openstack/v2/contrib/test_rescue.py)0
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_security_groups.py (renamed from nova/tests/api/openstack/v2/contrib/test_security_groups.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_server_action_list.py (renamed from nova/tests/api/openstack/v2/contrib/test_server_action_list.py)8
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_server_diagnostics.py (renamed from nova/tests/api/openstack/v2/contrib/test_server_diagnostics.py)8
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_simple_tenant_usage.py (renamed from nova/tests/api/openstack/v2/contrib/test_simple_tenant_usage.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_snapshots.py (renamed from nova/tests/api/openstack/v2/contrib/test_snapshots.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_users.py (renamed from nova/tests/api/openstack/v2/contrib/test_users.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_virtual_interfaces.py (renamed from nova/tests/api/openstack/v2/contrib/test_virtual_interfaces.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_volume_types.py (renamed from nova/tests/api/openstack/v2/contrib/test_volume_types.py)4
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_volume_types_extra_specs.py (renamed from nova/tests/api/openstack/v2/contrib/test_volume_types_extra_specs.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_volumes.py (renamed from nova/tests/api/openstack/v2/contrib/test_volumes.py)2
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_vsa.py (renamed from nova/tests/api/openstack/v2/contrib/test_vsa.py)5
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_zones.py (renamed from nova/tests/api/openstack/v2/contrib/test_zones.py)2
-rw-r--r--nova/tests/api/openstack/compute/extensions/__init__.py (renamed from nova/tests/api/openstack/v2/extensions/__init__.py)0
-rw-r--r--nova/tests/api/openstack/compute/extensions/foxinsocks.py (renamed from nova/tests/api/openstack/v2/extensions/foxinsocks.py)2
-rw-r--r--nova/tests/api/openstack/compute/test_api.py (renamed from nova/tests/api/openstack/v2/test_api.py)7
-rw-r--r--nova/tests/api/openstack/compute/test_auth.py (renamed from nova/tests/api/openstack/v2/test_auth.py)23
-rw-r--r--nova/tests/api/openstack/compute/test_consoles.py (renamed from nova/tests/api/openstack/v2/test_consoles.py)2
-rw-r--r--nova/tests/api/openstack/compute/test_extensions.py (renamed from nova/tests/api/openstack/v2/test_extensions.py)109
-rw-r--r--nova/tests/api/openstack/compute/test_flavors.py (renamed from nova/tests/api/openstack/v2/test_flavors.py)2
-rw-r--r--nova/tests/api/openstack/compute/test_image_metadata.py (renamed from nova/tests/api/openstack/v2/test_image_metadata.py)2
-rw-r--r--nova/tests/api/openstack/compute/test_images.py (renamed from nova/tests/api/openstack/v2/test_images.py)4
-rw-r--r--nova/tests/api/openstack/compute/test_limits.py (renamed from nova/tests/api/openstack/v2/test_limits.py)4
-rw-r--r--nova/tests/api/openstack/compute/test_server_actions.py (renamed from nova/tests/api/openstack/v2/test_server_actions.py)2
-rw-r--r--nova/tests/api/openstack/compute/test_server_metadata.py (renamed from nova/tests/api/openstack/v2/test_server_metadata.py)2
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py (renamed from nova/tests/api/openstack/v2/test_servers.py)13
-rw-r--r--nova/tests/api/openstack/compute/test_urlmap.py (renamed from nova/tests/api/openstack/v2/test_urlmap.py)2
-rw-r--r--nova/tests/api/openstack/compute/test_versions.py (renamed from nova/tests/api/openstack/v2/test_versions.py)4
-rw-r--r--nova/tests/api/openstack/fakes.py32
-rw-r--r--nova/tests/api/openstack/volume/__init__.py16
-rw-r--r--nova/tests/api/openstack/volume/test_snapshots.py299
-rw-r--r--nova/tests/api/openstack/volume/test_types.py166
-rw-r--r--nova/tests/api/openstack/volume/test_volumes.py179
-rw-r--r--nova/tests/integrated/api/client.py8
-rw-r--r--nova/tests/integrated/integrated_helpers.py10
-rw-r--r--nova/tests/integrated/test_extensions.py9
-rw-r--r--nova/tests/integrated/test_volumes.py158
56 files changed, 836 insertions, 302 deletions
diff --git a/nova/tests/api/openstack/v2/__init__.py b/nova/tests/api/openstack/compute/__init__.py
index 00fcfbb00..00fcfbb00 100644
--- a/nova/tests/api/openstack/v2/__init__.py
+++ b/nova/tests/api/openstack/compute/__init__.py
diff --git a/nova/tests/api/openstack/v2/contrib/__init__.py b/nova/tests/api/openstack/compute/contrib/__init__.py
index 848908a95..848908a95 100644
--- a/nova/tests/api/openstack/v2/contrib/__init__.py
+++ b/nova/tests/api/openstack/compute/contrib/__init__.py
diff --git a/nova/tests/api/openstack/v2/contrib/test_accounts.py b/nova/tests/api/openstack/compute/contrib/test_accounts.py
index f799853dc..dbf0e2600 100644
--- a/nova/tests/api/openstack/v2/contrib/test_accounts.py
+++ b/nova/tests/api/openstack/compute/contrib/test_accounts.py
@@ -20,7 +20,7 @@ from lxml import etree
import webob
from nova import test
-from nova.api.openstack.v2.contrib import accounts
+from nova.api.openstack.compute.contrib import accounts
from nova.auth.manager import User
from nova.tests.api.openstack import fakes
diff --git a/nova/tests/api/openstack/v2/contrib/test_admin_actions.py b/nova/tests/api/openstack/compute/contrib/test_admin_actions.py
index e3c5e6b08..f8a5d1103 100644
--- a/nova/tests/api/openstack/v2/contrib/test_admin_actions.py
+++ b/nova/tests/api/openstack/compute/contrib/test_admin_actions.py
@@ -17,8 +17,8 @@ import json
import webob
-from nova.api.openstack import v2
-from nova.api.openstack.v2 import extensions
+from nova.api.openstack import compute as compute_api
+from nova.api.openstack.compute import extensions
from nova.api.openstack import wsgi
from nova import compute
from nova import exception
@@ -123,7 +123,7 @@ class CreateBackupTests(test.TestCase):
self.backup_stubs = fakes.stub_out_compute_api_backup(self.stubs)
self.flags(allow_admin_api=True)
- router = v2.APIRouter()
+ router = compute_api.APIRouter()
ext_middleware = extensions.ExtensionMiddleware(router)
self.app = wsgi.LazySerializationMiddleware(ext_middleware)
diff --git a/nova/tests/api/openstack/v2/contrib/test_cloudpipe.py b/nova/tests/api/openstack/compute/contrib/test_cloudpipe.py
index b2a5d308a..7c8a8b09f 100644
--- a/nova/tests/api/openstack/v2/contrib/test_cloudpipe.py
+++ b/nova/tests/api/openstack/compute/contrib/test_cloudpipe.py
@@ -20,9 +20,9 @@ import webob
from lxml import etree
from nova.api import auth
-from nova.api.openstack import v2
-from nova.api.openstack.v2 import wsgi
-from nova.api.openstack.v2.contrib import cloudpipe
+from nova.api.openstack import compute
+from nova.api.openstack.compute import wsgi
+from nova.api.openstack.compute.contrib import cloudpipe
from nova.auth import manager
from nova.cloudpipe import pipelib
from nova import context
@@ -112,7 +112,7 @@ class CloudpipeTest(test.TestCase):
super(CloudpipeTest, self).setUp()
self.flags(allow_admin_api=True)
self.app = fakes.wsgi_app()
- inner_app = v2.APIRouter()
+ inner_app = compute.APIRouter()
self.context = context.RequestContext('fake', 'fake', is_admin=True)
self.app = auth.InjectContext(self.context, inner_app)
route = inner_app.map.match('/1234/os-cloudpipe')
diff --git a/nova/tests/api/openstack/v2/contrib/test_console_output.py b/nova/tests/api/openstack/compute/contrib/test_console_output.py
index ad22ff4cf..ad22ff4cf 100644
--- a/nova/tests/api/openstack/v2/contrib/test_console_output.py
+++ b/nova/tests/api/openstack/compute/contrib/test_console_output.py
diff --git a/nova/tests/api/openstack/v2/contrib/test_createserverext.py b/nova/tests/api/openstack/compute/contrib/test_createserverext.py
index 2393780a2..2393780a2 100644
--- a/nova/tests/api/openstack/v2/contrib/test_createserverext.py
+++ b/nova/tests/api/openstack/compute/contrib/test_createserverext.py
diff --git a/nova/tests/api/openstack/v2/contrib/test_deferred_delete.py b/nova/tests/api/openstack/compute/contrib/test_deferred_delete.py
index 222e62577..4addcf5c8 100644
--- a/nova/tests/api/openstack/v2/contrib/test_deferred_delete.py
+++ b/nova/tests/api/openstack/compute/contrib/test_deferred_delete.py
@@ -18,7 +18,7 @@
import mox
import webob
-from nova.api.openstack.v2.contrib import deferred_delete
+from nova.api.openstack.compute.contrib import deferred_delete
from nova import compute
from nova import exception
from nova import test
diff --git a/nova/tests/api/openstack/v2/contrib/test_disk_config.py b/nova/tests/api/openstack/compute/contrib/test_disk_config.py
index 95cfd3747..bd995fd3d 100644
--- a/nova/tests/api/openstack/v2/contrib/test_disk_config.py
+++ b/nova/tests/api/openstack/compute/contrib/test_disk_config.py
@@ -17,8 +17,8 @@
import datetime
-from nova.api.openstack import v2
-from nova.api.openstack.v2 import extensions
+from nova.api.openstack import compute
+from nova.api.openstack.compute import extensions
from nova.api.openstack import wsgi
import nova.db.api
from nova import flags
@@ -117,7 +117,7 @@ class DiskConfigTestCase(test.TestCase):
self.stubs.Set(nova.db, 'instance_create', fake_instance_create)
- app = v2.APIRouter()
+ app = compute.APIRouter()
app = extensions.ExtensionMiddleware(app)
app = wsgi.LazySerializationMiddleware(app)
self.app = app
diff --git a/nova/tests/api/openstack/v2/contrib/test_extendedstatus.py b/nova/tests/api/openstack/compute/contrib/test_extendedstatus.py
index dc7f0cefa..dc7f0cefa 100644
--- a/nova/tests/api/openstack/v2/contrib/test_extendedstatus.py
+++ b/nova/tests/api/openstack/compute/contrib/test_extendedstatus.py
diff --git a/nova/tests/api/openstack/v2/contrib/test_flavors_extra_specs.py b/nova/tests/api/openstack/compute/contrib/test_flavors_extra_specs.py
index add8c627d..94aac9621 100644
--- a/nova/tests/api/openstack/v2/contrib/test_flavors_extra_specs.py
+++ b/nova/tests/api/openstack/compute/contrib/test_flavors_extra_specs.py
@@ -18,7 +18,7 @@
import webob
from nova.api.openstack import wsgi
-from nova.api.openstack.v2.contrib import flavorextraspecs
+from nova.api.openstack.compute.contrib import flavorextraspecs
from nova import test
from nova.tests.api.openstack import fakes
import nova.wsgi
diff --git a/nova/tests/api/openstack/v2/contrib/test_floating_ip_dns.py b/nova/tests/api/openstack/compute/contrib/test_floating_ip_dns.py
index 58fdb4788..3107e50c4 100644
--- a/nova/tests/api/openstack/v2/contrib/test_floating_ip_dns.py
+++ b/nova/tests/api/openstack/compute/contrib/test_floating_ip_dns.py
@@ -19,8 +19,8 @@ from lxml import etree
import webob
import urllib
-from nova.api.openstack.v2.contrib import floating_ips
-from nova.api.openstack.v2.contrib import floating_ip_dns
+from nova.api.openstack.compute.contrib import floating_ips
+from nova.api.openstack.compute.contrib import floating_ip_dns
from nova import context
from nova import db
from nova import network
diff --git a/nova/tests/api/openstack/v2/contrib/test_floating_ip_pools.py b/nova/tests/api/openstack/compute/contrib/test_floating_ip_pools.py
index d061f9af3..ffe84a1ba 100644
--- a/nova/tests/api/openstack/v2/contrib/test_floating_ip_pools.py
+++ b/nova/tests/api/openstack/compute/contrib/test_floating_ip_pools.py
@@ -15,7 +15,7 @@
from lxml import etree
-from nova.api.openstack.v2.contrib import floating_ip_pools
+from nova.api.openstack.compute.contrib import floating_ip_pools
from nova import context
from nova import network
from nova import test
diff --git a/nova/tests/api/openstack/v2/contrib/test_floating_ips.py b/nova/tests/api/openstack/compute/contrib/test_floating_ips.py
index dae58aa14..fe5444419 100644
--- a/nova/tests/api/openstack/v2/contrib/test_floating_ips.py
+++ b/nova/tests/api/openstack/compute/contrib/test_floating_ips.py
@@ -17,7 +17,7 @@
from lxml import etree
import webob
-from nova.api.openstack.v2.contrib import floating_ips
+from nova.api.openstack.compute.contrib import floating_ips
from nova import context
from nova import db
from nova import network
diff --git a/nova/tests/api/openstack/v2/contrib/test_hosts.py b/nova/tests/api/openstack/compute/contrib/test_hosts.py
index a954890ba..e6a91477e 100644
--- a/nova/tests/api/openstack/v2/contrib/test_hosts.py
+++ b/nova/tests/api/openstack/compute/contrib/test_hosts.py
@@ -21,7 +21,7 @@ from nova import exception
from nova import flags
from nova import log as logging
from nova import test
-from nova.api.openstack.v2.contrib import hosts as os_hosts
+from nova.api.openstack.compute.contrib import hosts as os_hosts
from nova.scheduler import api as scheduler_api
diff --git a/nova/tests/api/openstack/v2/contrib/test_keypairs.py b/nova/tests/api/openstack/compute/contrib/test_keypairs.py
index 6ecd3a86c..4c252e176 100644
--- a/nova/tests/api/openstack/v2/contrib/test_keypairs.py
+++ b/nova/tests/api/openstack/compute/contrib/test_keypairs.py
@@ -19,7 +19,7 @@ import webob
from lxml import etree
from nova.api.openstack import wsgi
-from nova.api.openstack.v2.contrib import keypairs
+from nova.api.openstack.compute.contrib import keypairs
from nova import context
from nova import db
from nova import test
diff --git a/nova/tests/api/openstack/v2/contrib/test_multinic_xs.py b/nova/tests/api/openstack/compute/contrib/test_multinic_xs.py
index 0d9b6e3ce..0d9b6e3ce 100644
--- a/nova/tests/api/openstack/v2/contrib/test_multinic_xs.py
+++ b/nova/tests/api/openstack/compute/contrib/test_multinic_xs.py
diff --git a/nova/tests/api/openstack/v2/contrib/test_networks.py b/nova/tests/api/openstack/compute/contrib/test_networks.py
index 04bd82e2c..0eefca652 100644
--- a/nova/tests/api/openstack/v2/contrib/test_networks.py
+++ b/nova/tests/api/openstack/compute/contrib/test_networks.py
@@ -18,7 +18,7 @@ import copy
import webob
-from nova.api.openstack.v2.contrib import networks
+from nova.api.openstack.compute.contrib import networks
from nova import context
from nova import exception
from nova import test
diff --git a/nova/tests/api/openstack/v2/contrib/test_quotas.py b/nova/tests/api/openstack/compute/contrib/test_quotas.py
index 9bcfc7ded..29b01e117 100644
--- a/nova/tests/api/openstack/v2/contrib/test_quotas.py
+++ b/nova/tests/api/openstack/compute/contrib/test_quotas.py
@@ -19,7 +19,7 @@ import webob
from lxml import etree
from nova.api.openstack import wsgi
-from nova.api.openstack.v2.contrib import quotas
+from nova.api.openstack.compute.contrib import quotas
from nova import context
from nova import test
from nova.tests.api.openstack import fakes
diff --git a/nova/tests/api/openstack/v2/contrib/test_rescue.py b/nova/tests/api/openstack/compute/contrib/test_rescue.py
index 9a3706173..9a3706173 100644
--- a/nova/tests/api/openstack/v2/contrib/test_rescue.py
+++ b/nova/tests/api/openstack/compute/contrib/test_rescue.py
diff --git a/nova/tests/api/openstack/v2/contrib/test_security_groups.py b/nova/tests/api/openstack/compute/contrib/test_security_groups.py
index 7848ef9bb..e4ea99f40 100644
--- a/nova/tests/api/openstack/v2/contrib/test_security_groups.py
+++ b/nova/tests/api/openstack/compute/contrib/test_security_groups.py
@@ -20,7 +20,7 @@ from lxml import etree
import mox
import webob
-from nova.api.openstack.v2.contrib import security_groups
+from nova.api.openstack.compute.contrib import security_groups
from nova.api.openstack import wsgi
import nova.db
from nova import exception
diff --git a/nova/tests/api/openstack/v2/contrib/test_server_action_list.py b/nova/tests/api/openstack/compute/contrib/test_server_action_list.py
index d943376b3..aa5a7275c 100644
--- a/nova/tests/api/openstack/v2/contrib/test_server_action_list.py
+++ b/nova/tests/api/openstack/compute/contrib/test_server_action_list.py
@@ -19,9 +19,9 @@ import unittest
from lxml import etree
-from nova.api.openstack import v2
-from nova.api.openstack.v2.contrib import server_action_list
-from nova.api.openstack.v2 import extensions
+from nova.api.openstack import compute
+from nova.api.openstack.compute import extensions
+from nova.api.openstack.compute.contrib import server_action_list
from nova.api.openstack import wsgi
import nova.compute
from nova import test
@@ -53,7 +53,7 @@ class ServerActionsTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get', fake_instance_get)
self.compute_api = nova.compute.API()
- self.router = v2.APIRouter()
+ self.router = compute.APIRouter()
ext_middleware = extensions.ExtensionMiddleware(self.router)
self.app = wsgi.LazySerializationMiddleware(ext_middleware)
diff --git a/nova/tests/api/openstack/v2/contrib/test_server_diagnostics.py b/nova/tests/api/openstack/compute/contrib/test_server_diagnostics.py
index 2e2850f32..69aabdc26 100644
--- a/nova/tests/api/openstack/v2/contrib/test_server_diagnostics.py
+++ b/nova/tests/api/openstack/compute/contrib/test_server_diagnostics.py
@@ -18,9 +18,9 @@ import unittest
from lxml import etree
-from nova.api.openstack import v2
-from nova.api.openstack.v2.contrib import server_diagnostics
-from nova.api.openstack.v2 import extensions
+from nova.api.openstack import compute
+from nova.api.openstack.compute import extensions
+from nova.api.openstack.compute.contrib import server_diagnostics
from nova.api.openstack import wsgi
import nova.compute
from nova import test
@@ -47,7 +47,7 @@ class ServerDiagnosticsTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get', fake_instance_get)
self.compute_api = nova.compute.API()
- self.router = v2.APIRouter()
+ self.router = compute.APIRouter()
ext_middleware = extensions.ExtensionMiddleware(self.router)
self.app = wsgi.LazySerializationMiddleware(ext_middleware)
diff --git a/nova/tests/api/openstack/v2/contrib/test_simple_tenant_usage.py b/nova/tests/api/openstack/compute/contrib/test_simple_tenant_usage.py
index 7a1f2b35c..3ff12bf3a 100644
--- a/nova/tests/api/openstack/v2/contrib/test_simple_tenant_usage.py
+++ b/nova/tests/api/openstack/compute/contrib/test_simple_tenant_usage.py
@@ -21,7 +21,7 @@ import json
from lxml import etree
import webob
-from nova.api.openstack.v2.contrib import simple_tenant_usage
+from nova.api.openstack.compute.contrib import simple_tenant_usage
from nova.compute import api
from nova import context
from nova import flags
diff --git a/nova/tests/api/openstack/v2/contrib/test_snapshots.py b/nova/tests/api/openstack/compute/contrib/test_snapshots.py
index 5b585db82..69784e516 100644
--- a/nova/tests/api/openstack/v2/contrib/test_snapshots.py
+++ b/nova/tests/api/openstack/compute/contrib/test_snapshots.py
@@ -20,7 +20,7 @@ import stubout
from lxml import etree
import webob
-from nova.api.openstack.v2.contrib import volumes
+from nova.api.openstack.compute.contrib import volumes
from nova import context
from nova import exception
from nova import flags
diff --git a/nova/tests/api/openstack/v2/contrib/test_users.py b/nova/tests/api/openstack/compute/contrib/test_users.py
index ace243f58..5895f4f66 100644
--- a/nova/tests/api/openstack/v2/contrib/test_users.py
+++ b/nova/tests/api/openstack/compute/contrib/test_users.py
@@ -15,7 +15,7 @@
from lxml import etree
-from nova.api.openstack.v2.contrib import users
+from nova.api.openstack.compute.contrib import users
from nova.auth.manager import User, Project
from nova import test
from nova.tests.api.openstack import fakes
diff --git a/nova/tests/api/openstack/v2/contrib/test_virtual_interfaces.py b/nova/tests/api/openstack/compute/contrib/test_virtual_interfaces.py
index 3530e68fd..d9f41f07b 100644
--- a/nova/tests/api/openstack/v2/contrib/test_virtual_interfaces.py
+++ b/nova/tests/api/openstack/compute/contrib/test_virtual_interfaces.py
@@ -18,7 +18,7 @@ import json
from lxml import etree
import webob
-from nova.api.openstack.v2.contrib import virtual_interfaces
+from nova.api.openstack.compute.contrib import virtual_interfaces
from nova.api.openstack import wsgi
from nova import network
from nova import test
diff --git a/nova/tests/api/openstack/v2/contrib/test_volume_types.py b/nova/tests/api/openstack/compute/contrib/test_volume_types.py
index de3cf86e1..fdd2214e3 100644
--- a/nova/tests/api/openstack/v2/contrib/test_volume_types.py
+++ b/nova/tests/api/openstack/compute/contrib/test_volume_types.py
@@ -16,7 +16,7 @@
from lxml import etree
import webob
-from nova.api.openstack.v2.contrib import volumetypes
+from nova.api.openstack.compute.contrib import volumetypes
from nova import exception
from nova import test
from nova import log as logging
@@ -24,7 +24,7 @@ from nova.volume import volume_types
from nova.tests.api.openstack import fakes
-LOG = logging.getLogger('nova.tests.api.openstack.v2.contrib.'
+LOG = logging.getLogger('nova.tests.api.openstack.compute.contrib.'
'test_volume_types')
last_param = {}
diff --git a/nova/tests/api/openstack/v2/contrib/test_volume_types_extra_specs.py b/nova/tests/api/openstack/compute/contrib/test_volume_types_extra_specs.py
index 81e57cee9..e9c4034f0 100644
--- a/nova/tests/api/openstack/v2/contrib/test_volume_types_extra_specs.py
+++ b/nova/tests/api/openstack/compute/contrib/test_volume_types_extra_specs.py
@@ -20,7 +20,7 @@
from lxml import etree
import webob
-from nova.api.openstack.v2.contrib import volumetypes
+from nova.api.openstack.compute.contrib import volumetypes
from nova import test
from nova.tests.api.openstack import fakes
import nova.wsgi
diff --git a/nova/tests/api/openstack/v2/contrib/test_volumes.py b/nova/tests/api/openstack/compute/contrib/test_volumes.py
index a5585bd64..f32f4d867 100644
--- a/nova/tests/api/openstack/v2/contrib/test_volumes.py
+++ b/nova/tests/api/openstack/compute/contrib/test_volumes.py
@@ -20,7 +20,7 @@ from lxml import etree
import webob
import nova
-from nova.api.openstack.v2.contrib import volumes
+from nova.api.openstack.compute.contrib import volumes
from nova.compute import instance_types
from nova import flags
from nova import test
diff --git a/nova/tests/api/openstack/v2/contrib/test_vsa.py b/nova/tests/api/openstack/compute/contrib/test_vsa.py
index fa5127db6..e19aeedba 100644
--- a/nova/tests/api/openstack/v2/contrib/test_vsa.py
+++ b/nova/tests/api/openstack/compute/contrib/test_vsa.py
@@ -20,7 +20,8 @@ from lxml import etree
import stubout
import webob
-from nova.api.openstack.v2.contrib import virtual_storage_arrays as vsa_ext
+from nova.api.openstack.compute.contrib\
+ import virtual_storage_arrays as vsa_ext
from nova import context
import nova.db
from nova import exception
@@ -34,7 +35,7 @@ from nova import vsa
FLAGS = flags.FLAGS
-LOG = logging.getLogger('nova.tests.api.openstack.v2.contrib.test_vsa')
+LOG = logging.getLogger('nova.tests.api.openstack.compute.contrib.test_vsa')
last_param = {}
diff --git a/nova/tests/api/openstack/v2/contrib/test_zones.py b/nova/tests/api/openstack/compute/contrib/test_zones.py
index a44a7c82e..e23ea85e6 100644
--- a/nova/tests/api/openstack/v2/contrib/test_zones.py
+++ b/nova/tests/api/openstack/compute/contrib/test_zones.py
@@ -18,7 +18,7 @@ import json
from lxml import etree
-from nova.api.openstack.v2.contrib import zones
+from nova.api.openstack.compute.contrib import zones
from nova.api.openstack import xmlutil
from nova import crypto
import nova.db
diff --git a/nova/tests/api/openstack/v2/extensions/__init__.py b/nova/tests/api/openstack/compute/extensions/__init__.py
index 848908a95..848908a95 100644
--- a/nova/tests/api/openstack/v2/extensions/__init__.py
+++ b/nova/tests/api/openstack/compute/extensions/__init__.py
diff --git a/nova/tests/api/openstack/v2/extensions/foxinsocks.py b/nova/tests/api/openstack/compute/extensions/foxinsocks.py
index ba1508668..302fe7ddf 100644
--- a/nova/tests/api/openstack/v2/extensions/foxinsocks.py
+++ b/nova/tests/api/openstack/compute/extensions/foxinsocks.py
@@ -17,7 +17,7 @@
import webob.exc
-from nova.api.openstack.v2 import extensions
+from nova.api.openstack import extensions
class FoxInSocksController(object):
diff --git a/nova/tests/api/openstack/v2/test_api.py b/nova/tests/api/openstack/compute/test_api.py
index d09bb0cfa..15768ff33 100644
--- a/nova/tests/api/openstack/v2/test_api.py
+++ b/nova/tests/api/openstack/compute/test_api.py
@@ -23,8 +23,9 @@ import webob.dec
from webob import Request
from nova import test
-from nova.api.openstack import v2
-from nova.api.openstack.v2 import wsgi
+from nova.api import openstack as openstack_api
+from nova.api.openstack import compute
+from nova.api.openstack.compute import wsgi
from nova.tests.api.openstack import fakes
@@ -32,7 +33,7 @@ class APITest(test.TestCase):
def _wsgi_app(self, inner_app):
# simpler version of the app than fakes.wsgi_app
- return v2.FaultWrapper(inner_app)
+ return openstack_api.FaultWrapper(inner_app)
def test_malformed_json(self):
req = webob.Request.blank('/')
diff --git a/nova/tests/api/openstack/v2/test_auth.py b/nova/tests/api/openstack/compute/test_auth.py
index d1dbc3319..bc83a8b96 100644
--- a/nova/tests/api/openstack/v2/test_auth.py
+++ b/nova/tests/api/openstack/compute/test_auth.py
@@ -20,9 +20,9 @@ import datetime
import webob
import webob.dec
-import nova.api.openstack.v2
-import nova.api.openstack.v2.auth
+import nova.api.openstack.compute
import nova.auth.manager
+from nova.api.openstack import auth
from nova import context
from nova import db
from nova import test
@@ -33,7 +33,7 @@ class Test(test.TestCase):
def setUp(self):
super(Test, self).setUp()
- self.stubs.Set(nova.api.openstack.v2.auth.AuthMiddleware,
+ self.stubs.Set(auth.AuthMiddleware,
'__init__', fakes.fake_auth_init)
self.stubs.Set(context, 'RequestContext', fakes.FakeRequestContext)
fakes.FakeAuthManager.clear_fakes()
@@ -80,7 +80,8 @@ class Test(test.TestCase):
self.assertEqual(result.headers['X-Storage-Url'], "")
token = result.headers['X-Auth-Token']
- self.stubs.Set(nova.api.openstack.v2, 'APIRouter', fakes.FakeRouter)
+ self.stubs.Set(nova.api.openstack.compute, 'APIRouter',
+ fakes.FakeRouter)
req = webob.Request.blank('/v2/user1_project')
req.headers['X-Auth-Token'] = token
result = req.get_response(fakes.wsgi_app(fake_auth=False))
@@ -124,7 +125,8 @@ class Test(test.TestCase):
self.assertEqual(result.status, '204 No Content')
token = result.headers['X-Auth-Token']
- self.stubs.Set(nova.api.openstack.v2, 'APIRouter', fakes.FakeRouter)
+ self.stubs.Set(nova.api.openstack.compute, 'APIRouter',
+ fakes.FakeRouter)
req = webob.Request.blank('/v2/user2_project')
req.headers['X-Auth-Token'] = token
result = req.get_response(fakes.wsgi_app(fake_auth=False))
@@ -177,7 +179,8 @@ class Test(test.TestCase):
self.assertEqual(result.status, '204 No Content')
token = result.headers['X-Auth-Token']
- self.stubs.Set(nova.api.openstack.v2, 'APIRouter', fakes.FakeRouter)
+ self.stubs.Set(nova.api.openstack.compute, 'APIRouter',
+ fakes.FakeRouter)
req = webob.Request.blank('/v2/user2_project')
req.headers['X-Auth-Token'] = token
result = req.get_response(fakes.wsgi_app(fake_auth=False))
@@ -200,7 +203,8 @@ class Test(test.TestCase):
self.assertEqual(result.status, '204 No Content')
token = result.headers['X-Auth-Token']
- self.stubs.Set(nova.api.openstack.v2, 'APIRouter', fakes.FakeRouter)
+ self.stubs.Set(nova.api.openstack.compute, 'APIRouter',
+ fakes.FakeRouter)
req = webob.Request.blank('/v2/user2_project')
req.headers['X-Auth-Token'] = token
result = req.get_response(fakes.wsgi_app(fake_auth=False))
@@ -237,7 +241,7 @@ class TestFunctional(test.TestCase):
class TestLimiter(test.TestCase):
def setUp(self):
super(TestLimiter, self).setUp()
- self.stubs.Set(nova.api.openstack.v2.auth.AuthMiddleware,
+ self.stubs.Set(auth.AuthMiddleware,
'__init__', fakes.fake_auth_init)
self.stubs.Set(context, 'RequestContext', fakes.FakeRequestContext)
fakes.FakeAuthManager.clear_fakes()
@@ -261,7 +265,8 @@ class TestLimiter(test.TestCase):
self.assertEqual(len(result.headers['X-Auth-Token']), 40)
token = result.headers['X-Auth-Token']
- self.stubs.Set(nova.api.openstack.v2, 'APIRouter', fakes.FakeRouter)
+ self.stubs.Set(nova.api.openstack.compute, 'APIRouter',
+ fakes.FakeRouter)
req = webob.Request.blank('/v2/test')
req.method = 'POST'
req.headers['X-Auth-Token'] = token
diff --git a/nova/tests/api/openstack/v2/test_consoles.py b/nova/tests/api/openstack/compute/test_consoles.py
index 5953737a8..f58e76a3f 100644
--- a/nova/tests/api/openstack/v2/test_consoles.py
+++ b/nova/tests/api/openstack/compute/test_consoles.py
@@ -22,7 +22,7 @@ import json
from lxml import etree
import webob
-from nova.api.openstack.v2 import consoles
+from nova.api.openstack.compute import consoles
from nova import console
from nova import db
from nova.compute import vm_states
diff --git a/nova/tests/api/openstack/v2/test_extensions.py b/nova/tests/api/openstack/compute/test_extensions.py
index f2a49c3ed..a4585781b 100644
--- a/nova/tests/api/openstack/v2/test_extensions.py
+++ b/nova/tests/api/openstack/compute/test_extensions.py
@@ -21,8 +21,9 @@ import json
import webob
from lxml import etree
-from nova.api.openstack import v2
-from nova.api.openstack.v2 import extensions
+from nova.api.openstack import compute
+from nova.api.openstack import extensions as base_extensions
+from nova.api.openstack.compute import extensions as compute_extensions
from nova.api.openstack import wsgi
from nova.api.openstack import xmlutil
from nova import flags
@@ -86,11 +87,13 @@ class StubExtensionManager(object):
class ExtensionTestCase(test.TestCase):
def setUp(self):
super(ExtensionTestCase, self).setUp()
- ext_list = FLAGS.osapi_extension[:]
- ext_list.append('nova.tests.api.openstack.v2.extensions.'
- 'foxinsocks.Foxinsocks')
- self.flags(osapi_extension=ext_list)
- extensions.ExtensionManager.reset()
+ ext_list = FLAGS.osapi_compute_extension[:]
+ fox = ('nova.tests.api.openstack.compute.extensions.'
+ 'foxinsocks.Foxinsocks')
+ if fox not in ext_list:
+ ext_list.append(fox)
+ self.flags(osapi_compute_extension=ext_list)
+ compute_extensions.ExtensionManager.reset()
class ExtensionControllerTest(ExtensionTestCase):
@@ -133,8 +136,8 @@ class ExtensionControllerTest(ExtensionTestCase):
self.ext_list.sort()
def test_list_extensions_json(self):
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/fake/extensions")
response = request.get_response(ser_midware)
@@ -142,8 +145,10 @@ class ExtensionControllerTest(ExtensionTestCase):
# Make sure we have all the extensions.
data = json.loads(response.body)
- names = [x['name'] for x in data['extensions']]
+ names = [str(x['name']) for x in data['extensions']]
names.sort()
+ print names
+ print self.ext_list
self.assertEqual(names, self.ext_list)
# Make sure that at least Fox in Sox is correct.
@@ -160,8 +165,8 @@ class ExtensionControllerTest(ExtensionTestCase):
)
def test_get_extension_json(self):
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/fake/extensions/FOXNSOX")
response = request.get_response(ser_midware)
@@ -177,15 +182,15 @@ class ExtensionControllerTest(ExtensionTestCase):
"links": []})
def test_get_non_existing_extension_json(self):
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
request = webob.Request.blank("/fake/extensions/4")
response = request.get_response(ext_midware)
self.assertEqual(404, response.status_int)
def test_list_extensions_xml(self):
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/fake/extensions")
request.accept = "application/xml"
@@ -212,8 +217,8 @@ class ExtensionControllerTest(ExtensionTestCase):
xmlutil.validate_schema(root, 'extensions')
def test_get_extension_xml(self):
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/fake/extensions/FOXNSOX")
request.accept = "application/xml"
@@ -239,19 +244,19 @@ class ResourceExtensionTest(ExtensionTestCase):
def test_no_extension_present(self):
manager = StubExtensionManager(None)
- app = v2.APIRouter(manager)
- ext_midware = extensions.ExtensionMiddleware(app, manager)
+ app = compute.APIRouter(manager)
+ ext_midware = compute_extensions.ExtensionMiddleware(app, manager)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/blah")
response = request.get_response(ser_midware)
self.assertEqual(404, response.status_int)
def test_get_resources(self):
- res_ext = extensions.ResourceExtension('tweedles',
- StubController(response_body))
+ res_ext = base_extensions.ResourceExtension('tweedles',
+ StubController(response_body))
manager = StubExtensionManager(res_ext)
- app = v2.APIRouter(manager)
- ext_midware = extensions.ExtensionMiddleware(app, manager)
+ app = compute.APIRouter(manager)
+ ext_midware = compute_extensions.ExtensionMiddleware(app, manager)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/fake/tweedles")
response = request.get_response(ser_midware)
@@ -259,11 +264,11 @@ class ResourceExtensionTest(ExtensionTestCase):
self.assertEqual(response_body, response.body)
def test_get_resources_with_controller(self):
- res_ext = extensions.ResourceExtension('tweedles',
+ res_ext = base_extensions.ResourceExtension('tweedles',
StubController(response_body))
manager = StubExtensionManager(res_ext)
- app = v2.APIRouter(manager)
- ext_midware = extensions.ExtensionMiddleware(app, manager)
+ app = compute.APIRouter(manager)
+ ext_midware = compute_extensions.ExtensionMiddleware(app, manager)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/fake/tweedles")
response = request.get_response(ser_midware)
@@ -271,11 +276,11 @@ class ResourceExtensionTest(ExtensionTestCase):
self.assertEqual(response_body, response.body)
def test_bad_request(self):
- res_ext = extensions.ResourceExtension('tweedles',
- StubController(response_body))
+ res_ext = base_extensions.ResourceExtension('tweedles',
+ StubController(response_body))
manager = StubExtensionManager(res_ext)
- app = v2.APIRouter(manager)
- ext_midware = extensions.ExtensionMiddleware(app, manager)
+ app = compute.APIRouter(manager)
+ ext_midware = compute_extensions.ExtensionMiddleware(app, manager)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/fake/tweedles")
request.method = "POST"
@@ -292,11 +297,11 @@ class ResourceExtensionTest(ExtensionTestCase):
self.assertDictMatch(expected, body)
def test_non_exist_resource(self):
- res_ext = extensions.ResourceExtension('tweedles',
+ res_ext = base_extensions.ResourceExtension('tweedles',
StubController(response_body))
manager = StubExtensionManager(res_ext)
- app = v2.APIRouter(manager)
- ext_midware = extensions.ExtensionMiddleware(app, manager)
+ app = compute.APIRouter(manager)
+ ext_midware = compute_extensions.ExtensionMiddleware(app, manager)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/fake/tweedles/1")
response = request.get_response(ser_midware)
@@ -317,7 +322,7 @@ class InvalidExtension(object):
alias = "THIRD"
-class AdminExtension(extensions.ExtensionDescriptor):
+class AdminExtension(base_extensions.ExtensionDescriptor):
"""Admin-only extension"""
name = "Admin Ext"
@@ -335,8 +340,8 @@ class ExtensionManagerTest(ExtensionTestCase):
response_body = "Try to say this Mr. Knox, sir..."
def test_get_resources(self):
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/fake/foxnsocks")
response = request.get_response(ser_midware)
@@ -346,8 +351,8 @@ class ExtensionManagerTest(ExtensionTestCase):
def test_invalid_extensions(self):
# Don't need the serialization middleware here because we're
# not testing any serialization
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ext_mgr = ext_midware.ext_mgr
ext_mgr.register(InvalidExtension())
self.assertTrue('FOXNSOX' in ext_mgr.extensions)
@@ -355,8 +360,8 @@ class ExtensionManagerTest(ExtensionTestCase):
def test_admin_extensions(self):
self.flags(allow_admin_api=True)
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ext_mgr = ext_midware.ext_mgr
ext_mgr.register(AdminExtension())
self.assertTrue('FOXNSOX' in ext_mgr.extensions)
@@ -364,8 +369,8 @@ class ExtensionManagerTest(ExtensionTestCase):
def test_admin_extensions_no_admin_api(self):
self.flags(allow_admin_api=False)
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ext_mgr = ext_midware.ext_mgr
ext_mgr.register(AdminExtension())
self.assertTrue('FOXNSOX' in ext_mgr.extensions)
@@ -375,8 +380,8 @@ class ExtensionManagerTest(ExtensionTestCase):
class ActionExtensionTest(ExtensionTestCase):
def _send_server_action_request(self, url, body):
- app = v2.APIRouter()
- ext_midware = extensions.ExtensionMiddleware(app)
+ app = compute.APIRouter()
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank(url)
request.method = 'POST'
@@ -443,13 +448,13 @@ class RequestExtensionTest(ExtensionTestCase):
body['flavor']['googoose'] = req.GET.get('chewing')
return res
- req_ext = extensions.RequestExtension('GET',
- '/v2/fake/flavors/:(id)',
- _req_handler)
+ req_ext = base_extensions.RequestExtension('GET',
+ '/v2/fake/flavors/:(id)',
+ _req_handler)
manager = StubExtensionManager(None, None, req_ext)
app = fakes.wsgi_app(serialization=base_wsgi.Middleware)
- ext_midware = extensions.ExtensionMiddleware(app, manager)
+ ext_midware = compute_extensions.ExtensionMiddleware(app, manager)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/v2/fake/flavors/1?chewing=bluegoo")
request.environ['api.version'] = '2'
@@ -461,7 +466,7 @@ class RequestExtensionTest(ExtensionTestCase):
def test_get_resources_with_mgr(self):
app = fakes.wsgi_app(serialization=base_wsgi.Middleware)
- ext_midware = extensions.ExtensionMiddleware(app)
+ ext_midware = compute_extensions.ExtensionMiddleware(app)
ser_midware = wsgi.LazySerializationMiddleware(ext_midware)
request = webob.Request.blank("/v2/fake/flavors/1?chewing=newblue")
request.environ['api.version'] = '2'
@@ -476,7 +481,7 @@ class RequestExtensionTest(ExtensionTestCase):
class ExtensionsXMLSerializerTest(test.TestCase):
def test_serialize_extension(self):
- serializer = extensions.ExtensionsXMLSerializer()
+ serializer = base_extensions.ExtensionsXMLSerializer()
data = {'extension': {
'name': 'ext1',
'namespace': 'http://docs.rack.com/servers/api/ext/pie/v1.0',
@@ -509,7 +514,7 @@ class ExtensionsXMLSerializerTest(test.TestCase):
xmlutil.validate_schema(root, 'extension')
def test_serialize_extensions(self):
- serializer = extensions.ExtensionsXMLSerializer()
+ serializer = base_extensions.ExtensionsXMLSerializer()
data = {"extensions": [{
"name": "Public Image Extension",
"namespace": "http://foo.com/api/ext/pie/v1.0",
diff --git a/nova/tests/api/openstack/v2/test_flavors.py b/nova/tests/api/openstack/compute/test_flavors.py
index d70d581df..37b67fc32 100644
--- a/nova/tests/api/openstack/v2/test_flavors.py
+++ b/nova/tests/api/openstack/compute/test_flavors.py
@@ -18,7 +18,7 @@
from lxml import etree
import webob
-from nova.api.openstack.v2 import flavors
+from nova.api.openstack.compute import flavors
from nova.api.openstack import xmlutil
import nova.compute.instance_types
from nova import exception
diff --git a/nova/tests/api/openstack/v2/test_image_metadata.py b/nova/tests/api/openstack/compute/test_image_metadata.py
index e3e774ba3..62f047a2a 100644
--- a/nova/tests/api/openstack/v2/test_image_metadata.py
+++ b/nova/tests/api/openstack/compute/test_image_metadata.py
@@ -18,7 +18,7 @@
import json
import webob
-from nova.api.openstack.v2 import image_metadata
+from nova.api.openstack.compute import image_metadata
from nova import flags
from nova import test
from nova.tests.api.openstack import fakes
diff --git a/nova/tests/api/openstack/v2/test_images.py b/nova/tests/api/openstack/compute/test_images.py
index 70c6db679..7bb1d44d9 100644
--- a/nova/tests/api/openstack/v2/test_images.py
+++ b/nova/tests/api/openstack/compute/test_images.py
@@ -26,8 +26,8 @@ from lxml import etree
import stubout
import webob
-from nova.api.openstack.v2 import images
-from nova.api.openstack.v2.views import images as images_view
+from nova.api.openstack.compute import images
+from nova.api.openstack.compute.views import images as images_view
from nova.api.openstack import xmlutil
from nova import test
from nova import utils
diff --git a/nova/tests/api/openstack/v2/test_limits.py b/nova/tests/api/openstack/compute/test_limits.py
index 1c299d751..20ec0d1a0 100644
--- a/nova/tests/api/openstack/v2/test_limits.py
+++ b/nova/tests/api/openstack/compute/test_limits.py
@@ -27,8 +27,8 @@ from lxml import etree
import stubout
import webob
-from nova.api.openstack.v2 import limits
-from nova.api.openstack.v2 import views
+from nova.api.openstack.compute import limits
+from nova.api.openstack.compute import views
from nova.api.openstack import wsgi
from nova.api.openstack import xmlutil
import nova.context
diff --git a/nova/tests/api/openstack/v2/test_server_actions.py b/nova/tests/api/openstack/compute/test_server_actions.py
index d2958e3b2..2f3976375 100644
--- a/nova/tests/api/openstack/v2/test_server_actions.py
+++ b/nova/tests/api/openstack/compute/test_server_actions.py
@@ -20,7 +20,7 @@ import mox
import stubout
import webob
-from nova.api.openstack.v2 import servers
+from nova.api.openstack.compute import servers
from nova.compute import vm_states
from nova.compute import instance_types
from nova import context
diff --git a/nova/tests/api/openstack/v2/test_server_metadata.py b/nova/tests/api/openstack/compute/test_server_metadata.py
index 49ff1bcd8..61bf4fc47 100644
--- a/nova/tests/api/openstack/v2/test_server_metadata.py
+++ b/nova/tests/api/openstack/compute/test_server_metadata.py
@@ -18,7 +18,7 @@
import json
import webob
-from nova.api.openstack.v2 import server_metadata
+from nova.api.openstack.compute import server_metadata
import nova.db
from nova import exception
from nova import flags
diff --git a/nova/tests/api/openstack/v2/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py
index 7216699b4..83b0e345c 100644
--- a/nova/tests/api/openstack/v2/test_servers.py
+++ b/nova/tests/api/openstack/compute/test_servers.py
@@ -23,9 +23,10 @@ import urlparse
from lxml import etree
import webob
-import nova.api.openstack.v2
-from nova.api.openstack.v2 import ips
-from nova.api.openstack.v2 import servers
+import nova.api.openstack.compute
+from nova.api.openstack.compute import ips
+from nova.api.openstack.compute import servers
+from nova.api.openstack.compute import views
from nova.api.openstack import xmlutil
import nova.compute.api
from nova.compute import instance_types
@@ -2290,8 +2291,8 @@ class TestServerCreateRequestXMLDeserializer(test.TestCase):
class TestAddressesXMLSerialization(test.TestCase):
- index_serializer = nova.api.openstack.v2.ips.AddressesTemplate()
- show_serializer = nova.api.openstack.v2.ips.NetworkTemplate()
+ index_serializer = nova.api.openstack.compute.ips.AddressesTemplate()
+ show_serializer = nova.api.openstack.compute.ips.NetworkTemplate()
def test_xml_declaration(self):
fixture = {
@@ -2369,7 +2370,7 @@ class ServersViewBuilderTest(test.TestCase):
include_fake_metadata=False)
self.uuid = self.instance['uuid']
- self.view_builder = nova.api.openstack.v2.views.servers.ViewBuilder()
+ self.view_builder = views.servers.ViewBuilder()
self.request = fakes.HTTPRequest.blank("/v2")
def test_build_server(self):
diff --git a/nova/tests/api/openstack/v2/test_urlmap.py b/nova/tests/api/openstack/compute/test_urlmap.py
index 82a870a50..ae269d01f 100644
--- a/nova/tests/api/openstack/v2/test_urlmap.py
+++ b/nova/tests/api/openstack/compute/test_urlmap.py
@@ -20,7 +20,7 @@ from nova import log as logging
from nova import test
from nova.tests.api.openstack import fakes
-LOG = logging.getLogger('nova.tests.api.openstack.v2.test_urlmap')
+LOG = logging.getLogger('nova.tests.api.openstack.compute.test_urlmap')
class UrlmapTest(test.TestCase):
diff --git a/nova/tests/api/openstack/v2/test_versions.py b/nova/tests/api/openstack/compute/test_versions.py
index 7e250471a..b1383be60 100644
--- a/nova/tests/api/openstack/v2/test_versions.py
+++ b/nova/tests/api/openstack/compute/test_versions.py
@@ -22,8 +22,8 @@ from lxml import etree
import stubout
import webob
-from nova.api.openstack.v2 import versions
-from nova.api.openstack.v2 import views
+from nova.api.openstack.compute import versions
+from nova.api.openstack.compute import views
from nova.api.openstack import xmlutil
from nova import context
from nova import test
diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py
index f9f8dd0a0..9fa1749ef 100644
--- a/nova/tests/api/openstack/fakes.py
+++ b/nova/tests/api/openstack/fakes.py
@@ -24,14 +24,14 @@ import webob.request
from glance import client as glance_client
-import nova.api.openstack.v2.auth
from nova.api import auth as api_auth
-from nova.api.openstack import v2
-from nova.api.openstack.v2 import auth
-from nova.api.openstack.v2 import extensions
-from nova.api.openstack.v2 import limits
-from nova.api.openstack.v2 import urlmap
-from nova.api.openstack.v2 import versions
+from nova.api import openstack as openstack_api
+from nova.api.openstack import compute
+from nova.api.openstack import auth
+from nova.api.openstack.compute import extensions
+from nova.api.openstack.compute import limits
+from nova.api.openstack import urlmap
+from nova.api.openstack.compute import versions
from nova.api.openstack import wsgi as os_wsgi
from nova.auth.manager import User, Project
from nova.compute import instance_types
@@ -77,24 +77,24 @@ def wsgi_app(inner_app_v2=None, fake_auth=True, fake_auth_context=None,
serialization=os_wsgi.LazySerializationMiddleware,
use_no_auth=False):
if not inner_app_v2:
- inner_app_v2 = v2.APIRouter()
+ inner_app_v2 = compute.APIRouter()
if fake_auth:
if fake_auth_context is not None:
ctxt = fake_auth_context
else:
ctxt = context.RequestContext('fake', 'fake', auth_token=True)
- api_v2 = v2.FaultWrapper(api_auth.InjectContext(ctxt,
+ api_v2 = openstack_api.FaultWrapper(api_auth.InjectContext(ctxt,
limits.RateLimitingMiddleware(
serialization(
extensions.ExtensionMiddleware(inner_app_v2)))))
elif use_no_auth:
- api_v2 = v2.FaultWrapper(auth.NoAuthMiddleware(
+ api_v2 = openstack_api.FaultWrapper(auth.NoAuthMiddleware(
limits.RateLimitingMiddleware(
serialization(
extensions.ExtensionMiddleware(inner_app_v2)))))
else:
- api_v2 = v2.FaultWrapper(auth.AuthMiddleware(
+ api_v2 = openstack_api.FaultWrapper(auth.AuthMiddleware(
limits.RateLimitingMiddleware(
serialization(
extensions.ExtensionMiddleware(inner_app_v2)))))
@@ -102,7 +102,7 @@ def wsgi_app(inner_app_v2=None, fake_auth=True, fake_auth_context=None,
mapper = urlmap.URLMap()
mapper['/v2'] = api_v2
mapper['/v1.1'] = api_v2
- mapper['/'] = v2.FaultWrapper(versions.Versions())
+ mapper['/'] = openstack_api.FaultWrapper(versions.Versions())
return mapper
@@ -138,9 +138,9 @@ def stub_out_auth(stubs):
def fake_auth_init(self, app):
self.application = app
- stubs.Set(nova.api.openstack.v2.auth.AuthMiddleware,
+ stubs.Set(auth.AuthMiddleware,
'__init__', fake_auth_init)
- stubs.Set(nova.api.openstack.v2.auth.AuthMiddleware,
+ stubs.Set(auth.AuthMiddleware,
'__call__', fake_wsgi)
@@ -149,10 +149,10 @@ def stub_out_rate_limiting(stubs):
super(limits.RateLimitingMiddleware, self).__init__(app)
self.application = app
- stubs.Set(nova.api.openstack.v2.limits.RateLimitingMiddleware,
+ stubs.Set(nova.api.openstack.compute.limits.RateLimitingMiddleware,
'__init__', fake_rate_init)
- stubs.Set(nova.api.openstack.v2.limits.RateLimitingMiddleware,
+ stubs.Set(nova.api.openstack.compute.limits.RateLimitingMiddleware,
'__call__', fake_wsgi)
diff --git a/nova/tests/api/openstack/volume/__init__.py b/nova/tests/api/openstack/volume/__init__.py
new file mode 100644
index 000000000..00fcfbb00
--- /dev/null
+++ b/nova/tests/api/openstack/volume/__init__.py
@@ -0,0 +1,16 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+# 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.
diff --git a/nova/tests/api/openstack/volume/test_snapshots.py b/nova/tests/api/openstack/volume/test_snapshots.py
new file mode 100644
index 000000000..06543ae5f
--- /dev/null
+++ b/nova/tests/api/openstack/volume/test_snapshots.py
@@ -0,0 +1,299 @@
+# Copyright 2011 Denali Systems, Inc.
+# All Rights Reserved.
+#
+# 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 json
+import stubout
+
+from lxml import etree
+import webob
+
+from nova.api.openstack.volume import snapshots
+from nova import context
+from nova import exception
+from nova import flags
+from nova import log as logging
+from nova import test
+from nova import volume
+from nova.tests.api.openstack import fakes
+
+FLAGS = flags.FLAGS
+
+LOG = logging.getLogger('nova.tests.api.openstack.snapshot')
+
+_last_param = {}
+
+
+def _get_default_snapshot_param():
+ return {
+ 'id': 123,
+ 'volume_id': 12,
+ 'status': 'available',
+ 'volume_size': 100,
+ 'created_at': None,
+ 'display_name': 'Default name',
+ 'display_description': 'Default description',
+ }
+
+
+def stub_snapshot_create(self, context, volume_id, name, description):
+ global _last_param
+ snapshot = _get_default_snapshot_param()
+ snapshot['volume_id'] = volume_id
+ snapshot['display_name'] = name
+ snapshot['display_description'] = description
+
+ LOG.debug(_("_create: %s"), snapshot)
+ _last_param = snapshot
+ return snapshot
+
+
+def stub_snapshot_delete(self, context, snapshot_id):
+ global _last_param
+ _last_param = dict(snapshot_id=snapshot_id)
+
+ LOG.debug(_("_delete: %s"), locals())
+ if snapshot_id != '123':
+ raise exception.NotFound
+
+
+def stub_snapshot_get(self, context, snapshot_id):
+ global _last_param
+ _last_param = dict(snapshot_id=snapshot_id)
+
+ LOG.debug(_("_get: %s"), locals())
+ if snapshot_id != '123':
+ raise exception.NotFound
+
+ param = _get_default_snapshot_param()
+ param['id'] = snapshot_id
+ return param
+
+
+def stub_snapshot_get_all(self, context):
+ LOG.debug(_("_get_all: %s"), locals())
+ param = _get_default_snapshot_param()
+ param['id'] = 123
+ return [param]
+
+
+class SnapshotApiTest(test.TestCase):
+ def setUp(self):
+ super(SnapshotApiTest, self).setUp()
+ self.stubs = stubout.StubOutForTesting()
+ fakes.FakeAuthManager.reset_fake_data()
+ fakes.FakeAuthDatabase.data = {}
+ fakes.stub_out_networking(self.stubs)
+ fakes.stub_out_rate_limiting(self.stubs)
+ fakes.stub_out_auth(self.stubs)
+ self.stubs.Set(volume.api.API, "create_snapshot", stub_snapshot_create)
+ self.stubs.Set(volume.api.API, "create_snapshot_force",
+ stub_snapshot_create)
+ self.stubs.Set(volume.api.API, "delete_snapshot", stub_snapshot_delete)
+ self.stubs.Set(volume.api.API, "get_snapshot", stub_snapshot_get)
+ self.stubs.Set(volume.api.API, "get_all_snapshots",
+ stub_snapshot_get_all)
+
+ self.context = context.get_admin_context()
+
+ def tearDown(self):
+ self.stubs.UnsetAll()
+ super(SnapshotApiTest, self).tearDown()
+
+ def test_snapshot_create(self):
+ global _last_param
+ _last_param = {}
+
+ snapshot = {"volume_id": 12,
+ "force": False,
+ "display_name": "Snapshot Test Name",
+ "display_description": "Snapshot Test Desc"}
+ body = dict(snapshot=snapshot)
+ req = webob.Request.blank('/v1.1/fake/os-snapshots')
+ req.method = 'POST'
+ req.body = json.dumps(body)
+ req.headers['content-type'] = 'application/json'
+
+ resp = req.get_response(fakes.wsgi_app())
+ LOG.debug(_("test_snapshot_create: param=%s"), _last_param)
+ self.assertEqual(resp.status_int, 200)
+
+ # Compare if parameters were correctly passed to stub
+ self.assertEqual(_last_param['display_name'], "Snapshot Test Name")
+ self.assertEqual(_last_param['display_description'],
+ "Snapshot Test Desc")
+
+ resp_dict = json.loads(resp.body)
+ LOG.debug(_("test_snapshot_create: resp_dict=%s"), resp_dict)
+ self.assertTrue('snapshot' in resp_dict)
+ self.assertEqual(resp_dict['snapshot']['displayName'],
+ snapshot['display_name'])
+ self.assertEqual(resp_dict['snapshot']['displayDescription'],
+ snapshot['display_description'])
+
+ def test_snapshot_create_force(self):
+ global _last_param
+ _last_param = {}
+
+ snapshot = {"volume_id": 12,
+ "force": True,
+ "display_name": "Snapshot Test Name",
+ "display_description": "Snapshot Test Desc"}
+ body = dict(snapshot=snapshot)
+ req = webob.Request.blank('/v1.1/fake/os-snapshots')
+ req.method = 'POST'
+ req.body = json.dumps(body)
+ req.headers['content-type'] = 'application/json'
+
+ resp = req.get_response(fakes.wsgi_app())
+ LOG.debug(_("test_snapshot_create_force: param=%s"), _last_param)
+ self.assertEqual(resp.status_int, 200)
+
+ # Compare if parameters were correctly passed to stub
+ self.assertEqual(_last_param['display_name'], "Snapshot Test Name")
+ self.assertEqual(_last_param['display_description'],
+ "Snapshot Test Desc")
+
+ resp_dict = json.loads(resp.body)
+ LOG.debug(_("test_snapshot_create_force: resp_dict=%s"), resp_dict)
+ self.assertTrue('snapshot' in resp_dict)
+ self.assertEqual(resp_dict['snapshot']['displayName'],
+ snapshot['display_name'])
+ self.assertEqual(resp_dict['snapshot']['displayDescription'],
+ snapshot['display_description'])
+
+ def test_snapshot_delete(self):
+ global _last_param
+ _last_param = {}
+
+ snapshot_id = 123
+ req = webob.Request.blank('/v1.1/fake/os-snapshots/%d' % snapshot_id)
+ req.method = 'DELETE'
+
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 202)
+ self.assertEqual(str(_last_param['snapshot_id']), str(snapshot_id))
+
+ def test_snapshot_delete_invalid_id(self):
+ global _last_param
+ _last_param = {}
+
+ snapshot_id = 234
+ req = webob.Request.blank('/v1.1/fake/os-snapshots/%d' % snapshot_id)
+ req.method = 'DELETE'
+
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 404)
+ self.assertEqual(str(_last_param['snapshot_id']), str(snapshot_id))
+
+ def test_snapshot_show(self):
+ global _last_param
+ _last_param = {}
+
+ snapshot_id = 123
+ req = webob.Request.blank('/v1.1/fake/os-snapshots/%d' % snapshot_id)
+ req.method = 'GET'
+ resp = req.get_response(fakes.wsgi_app())
+
+ LOG.debug(_("test_snapshot_show: resp=%s"), resp)
+ self.assertEqual(resp.status_int, 200)
+ self.assertEqual(str(_last_param['snapshot_id']), str(snapshot_id))
+
+ resp_dict = json.loads(resp.body)
+ self.assertTrue('snapshot' in resp_dict)
+ self.assertEqual(resp_dict['snapshot']['id'], str(snapshot_id))
+
+ def test_snapshot_show_invalid_id(self):
+ global _last_param
+ _last_param = {}
+
+ snapshot_id = 234
+ req = webob.Request.blank('/v1.1/fake/os-snapshots/%d' % snapshot_id)
+ req.method = 'GET'
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 404)
+ self.assertEqual(str(_last_param['snapshot_id']), str(snapshot_id))
+
+ def test_snapshot_detail(self):
+ req = webob.Request.blank('/v1.1/fake/os-snapshots/detail')
+ req.method = 'GET'
+ resp = req.get_response(fakes.wsgi_app())
+ self.assertEqual(resp.status_int, 200)
+
+ resp_dict = json.loads(resp.body)
+ LOG.debug(_("test_snapshot_detail: resp_dict=%s"), resp_dict)
+ self.assertTrue('snapshots' in resp_dict)
+ resp_snapshots = resp_dict['snapshots']
+ self.assertEqual(len(resp_snapshots), 1)
+
+ resp_snapshot = resp_snapshots.pop()
+ self.assertEqual(resp_snapshot['id'], 123)
+
+
+class SnapshotSerializerTest(test.TestCase):
+ def _verify_snapshot(self, snap, tree):
+ self.assertEqual(tree.tag, 'snapshot')
+
+ for attr in ('id', 'status', 'size', 'createdAt',
+ 'displayName', 'displayDescription', 'volumeId'):
+ self.assertEqual(str(snap[attr]), tree.get(attr))
+
+ def test_snapshot_show_create_serializer(self):
+ serializer = snapshots.SnapshotSerializer()
+ raw_snapshot = dict(
+ id='snap_id',
+ status='snap_status',
+ size=1024,
+ createdAt=datetime.datetime.now(),
+ displayName='snap_name',
+ displayDescription='snap_desc',
+ volumeId='vol_id',
+ )
+ text = serializer.serialize(dict(snapshot=raw_snapshot), 'show')
+
+ print text
+ tree = etree.fromstring(text)
+
+ self._verify_snapshot(raw_snapshot, tree)
+
+ def test_snapshot_index_detail_serializer(self):
+ serializer = snapshots.SnapshotSerializer()
+ raw_snapshots = [dict(
+ id='snap1_id',
+ status='snap1_status',
+ size=1024,
+ createdAt=datetime.datetime.now(),
+ displayName='snap1_name',
+ displayDescription='snap1_desc',
+ volumeId='vol1_id',
+ ),
+ dict(
+ id='snap2_id',
+ status='snap2_status',
+ size=1024,
+ createdAt=datetime.datetime.now(),
+ displayName='snap2_name',
+ displayDescription='snap2_desc',
+ volumeId='vol2_id',
+ )]
+ text = serializer.serialize(dict(snapshots=raw_snapshots), 'index')
+
+ print text
+ tree = etree.fromstring(text)
+
+ self.assertEqual('snapshots', tree.tag)
+ self.assertEqual(len(raw_snapshots), len(tree))
+ for idx, child in enumerate(tree):
+ self._verify_snapshot(raw_snapshots[idx], child)
diff --git a/nova/tests/api/openstack/volume/test_types.py b/nova/tests/api/openstack/volume/test_types.py
new file mode 100644
index 000000000..34d861bed
--- /dev/null
+++ b/nova/tests/api/openstack/volume/test_types.py
@@ -0,0 +1,166 @@
+# Copyright 2011 OpenStack LLC.
+# aLL Rights Reserved.
+#
+# 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 lxml import etree
+import webob
+
+from nova.api.openstack.volume import types
+from nova import exception
+from nova import test
+from nova import log as logging
+from nova.volume import volume_types
+from nova.tests.api.openstack import fakes
+
+
+LOG = logging.getLogger('nova.tests.api.openstack.volume.'
+ 'test_volume_types')
+
+last_param = {}
+
+
+def stub_volume_type(id):
+ specs = {
+ "key1": "value1",
+ "key2": "value2",
+ "key3": "value3",
+ "key4": "value4",
+ "key5": "value5"}
+ return dict(id=id, name='vol_type_%s' % str(id), extra_specs=specs)
+
+
+def return_volume_types_get_all_types(context):
+ return dict(vol_type_1=stub_volume_type(1),
+ vol_type_2=stub_volume_type(2),
+ vol_type_3=stub_volume_type(3))
+
+
+def return_empty_volume_types_get_all_types(context):
+ return {}
+
+
+def return_volume_types_get_volume_type(context, id):
+ if id == "777":
+ raise exception.VolumeTypeNotFound(volume_type_id=id)
+ return stub_volume_type(int(id))
+
+
+def return_volume_types_destroy(context, name):
+ if name == "777":
+ raise exception.VolumeTypeNotFoundByName(volume_type_name=name)
+ pass
+
+
+def return_volume_types_create(context, name, specs):
+ pass
+
+
+def return_volume_types_get_by_name(context, name):
+ if name == "777":
+ raise exception.VolumeTypeNotFoundByName(volume_type_name=name)
+ return stub_volume_type(int(name.split("_")[2]))
+
+
+class VolumeTypesApiTest(test.TestCase):
+ def setUp(self):
+ super(VolumeTypesApiTest, self).setUp()
+ fakes.stub_out_key_pair_funcs(self.stubs)
+ self.controller = types.VolumeTypesController()
+
+ def tearDown(self):
+ self.stubs.UnsetAll()
+ super(VolumeTypesApiTest, self).tearDown()
+
+ def test_volume_types_index(self):
+ self.stubs.Set(volume_types, 'get_all_types',
+ return_volume_types_get_all_types)
+
+ req = fakes.HTTPRequest.blank('/v2/123/os-volume-types')
+ res_dict = self.controller.index(req)
+
+ self.assertEqual(3, len(res_dict))
+ for name in ['vol_type_1', 'vol_type_2', 'vol_type_3']:
+ self.assertEqual(name, res_dict[name]['name'])
+ self.assertEqual('value1', res_dict[name]['extra_specs']['key1'])
+
+ def test_volume_types_index_no_data(self):
+ self.stubs.Set(volume_types, 'get_all_types',
+ return_empty_volume_types_get_all_types)
+
+ req = fakes.HTTPRequest.blank('/v2/123/os-volume-types')
+ res_dict = self.controller.index(req)
+
+ self.assertEqual(0, len(res_dict))
+
+ def test_volume_types_show(self):
+ self.stubs.Set(volume_types, 'get_volume_type',
+ return_volume_types_get_volume_type)
+
+ req = fakes.HTTPRequest.blank('/v2/123/os-volume-types/1')
+ res_dict = self.controller.show(req, 1)
+
+ self.assertEqual(1, len(res_dict))
+ self.assertEqual('vol_type_1', res_dict['volume_type']['name'])
+
+ def test_volume_types_show_not_found(self):
+ self.stubs.Set(volume_types, 'get_volume_type',
+ return_volume_types_get_volume_type)
+
+ req = fakes.HTTPRequest.blank('/v2/123/os-volume-types/777')
+ self.assertRaises(webob.exc.HTTPNotFound, self.controller.show,
+ req, '777')
+
+
+class VolumeTypesSerializerTest(test.TestCase):
+ def setUp(self):
+ super(VolumeTypesSerializerTest, self).setUp()
+ self.serializer = types.VolumeTypesSerializer()
+
+ def _verify_volume_type(self, vtype, tree):
+ self.assertEqual('volume_type', tree.tag)
+ self.assertEqual(vtype['name'], tree.get('name'))
+ self.assertEqual(str(vtype['id']), tree.get('id'))
+ self.assertEqual(1, len(tree))
+ extra_specs = tree[0]
+ self.assertEqual('extra_specs', extra_specs.tag)
+ seen = set(vtype['extra_specs'].keys())
+ for child in extra_specs:
+ self.assertTrue(child.tag in seen)
+ self.assertEqual(vtype['extra_specs'][child.tag], child.text)
+ seen.remove(child.tag)
+ self.assertEqual(len(seen), 0)
+
+ def test_index_serializer(self):
+ # Just getting some input data
+ vtypes = return_volume_types_get_all_types(None)
+ text = self.serializer.serialize(vtypes, 'index')
+
+ print text
+ tree = etree.fromstring(text)
+
+ self.assertEqual('volume_types', tree.tag)
+ self.assertEqual(len(vtypes), len(tree))
+ for child in tree:
+ name = child.get('name')
+ self.assertTrue(name in vtypes)
+ self._verify_volume_type(vtypes[name], child)
+
+ def test_voltype_serializer(self):
+ vtype = stub_volume_type(1)
+ text = self.serializer.serialize(dict(volume_type=vtype))
+
+ print text
+ tree = etree.fromstring(text)
+
+ self._verify_volume_type(vtype, tree)
diff --git a/nova/tests/api/openstack/volume/test_volumes.py b/nova/tests/api/openstack/volume/test_volumes.py
new file mode 100644
index 000000000..2f17c4b22
--- /dev/null
+++ b/nova/tests/api/openstack/volume/test_volumes.py
@@ -0,0 +1,179 @@
+# Copyright 2013 Josh Durgin
+# All Rights Reserved.
+#
+# 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 json
+
+from lxml import etree
+import webob
+
+import nova
+from nova.api.openstack.volume import volumes
+from nova.compute import instance_types
+from nova import flags
+from nova import test
+from nova.tests.api.openstack import fakes
+
+
+FLAGS = flags.FLAGS
+
+
+class VolumeSerializerTest(test.TestCase):
+ def _verify_volume_attachment(self, attach, tree):
+ for attr in ('id', 'volumeId', 'serverId', 'device'):
+ self.assertEqual(str(attach[attr]), tree.get(attr))
+
+ def _verify_volume(self, vol, tree):
+ self.assertEqual(tree.tag, 'volume')
+
+ for attr in ('id', 'status', 'size', 'availabilityZone', 'createdAt',
+ 'displayName', 'displayDescription', 'volumeType',
+ 'snapshotId'):
+ self.assertEqual(str(vol[attr]), tree.get(attr))
+
+ for child in tree:
+ self.assertTrue(child.tag in ('attachments', 'metadata'))
+ if child.tag == 'attachments':
+ self.assertEqual(1, len(child))
+ self.assertEqual('attachment', child[0].tag)
+ self._verify_volume_attachment(vol['attachments'][0], child[0])
+ elif child.tag == 'metadata':
+ not_seen = set(vol['metadata'].keys())
+ for gr_child in child:
+ self.assertTrue(gr_child.tag in not_seen)
+ self.assertEqual(str(vol['metadata'][gr_child.tag]),
+ gr_child.text)
+ not_seen.remove(gr_child.tag)
+ self.assertEqual(0, len(not_seen))
+
+ def test_attach_show_create_serializer(self):
+ serializer = volumes.VolumeAttachmentSerializer()
+ raw_attach = dict(
+ id='vol_id',
+ volumeId='vol_id',
+ serverId='instance_uuid',
+ device='/foo')
+ text = serializer.serialize(dict(volumeAttachment=raw_attach), 'show')
+
+ print text
+ tree = etree.fromstring(text)
+
+ self.assertEqual('volumeAttachment', tree.tag)
+ self._verify_volume_attachment(raw_attach, tree)
+
+ def test_attach_index_serializer(self):
+ serializer = volumes.VolumeAttachmentSerializer()
+ raw_attaches = [dict(
+ id='vol_id1',
+ volumeId='vol_id1',
+ serverId='instance1_uuid',
+ device='/foo1'),
+ dict(
+ id='vol_id2',
+ volumeId='vol_id2',
+ serverId='instance2_uuid',
+ device='/foo2')]
+ text = serializer.serialize(dict(volumeAttachments=raw_attaches),
+ 'index')
+
+ print text
+ tree = etree.fromstring(text)
+
+ self.assertEqual('volumeAttachments', tree.tag)
+ self.assertEqual(len(raw_attaches), len(tree))
+ for idx, child in enumerate(tree):
+ self.assertEqual('volumeAttachment', child.tag)
+ self._verify_volume_attachment(raw_attaches[idx], child)
+
+ def test_volume_show_create_serializer(self):
+ serializer = volumes.VolumeSerializer()
+ raw_volume = dict(
+ id='vol_id',
+ status='vol_status',
+ size=1024,
+ availabilityZone='vol_availability',
+ createdAt=datetime.datetime.now(),
+ attachments=[dict(
+ id='vol_id',
+ volumeId='vol_id',
+ serverId='instance_uuid',
+ device='/foo')],
+ displayName='vol_name',
+ displayDescription='vol_desc',
+ volumeType='vol_type',
+ snapshotId='snap_id',
+ metadata=dict(
+ foo='bar',
+ baz='quux',
+ ),
+ )
+ text = serializer.serialize(dict(volume=raw_volume), 'show')
+
+ print text
+ tree = etree.fromstring(text)
+
+ self._verify_volume(raw_volume, tree)
+
+ def test_volume_index_detail_serializer(self):
+ serializer = volumes.VolumeSerializer()
+ raw_volumes = [dict(
+ id='vol1_id',
+ status='vol1_status',
+ size=1024,
+ availabilityZone='vol1_availability',
+ createdAt=datetime.datetime.now(),
+ attachments=[dict(
+ id='vol1_id',
+ volumeId='vol1_id',
+ serverId='instance_uuid',
+ device='/foo1')],
+ displayName='vol1_name',
+ displayDescription='vol1_desc',
+ volumeType='vol1_type',
+ snapshotId='snap1_id',
+ metadata=dict(
+ foo='vol1_foo',
+ bar='vol1_bar',
+ ),
+ ),
+ dict(
+ id='vol2_id',
+ status='vol2_status',
+ size=1024,
+ availabilityZone='vol2_availability',
+ createdAt=datetime.datetime.now(),
+ attachments=[dict(
+ id='vol2_id',
+ volumeId='vol2_id',
+ serverId='instance_uuid',
+ device='/foo2')],
+ displayName='vol2_name',
+ displayDescription='vol2_desc',
+ volumeType='vol2_type',
+ snapshotId='snap2_id',
+ metadata=dict(
+ foo='vol2_foo',
+ bar='vol2_bar',
+ ),
+ )]
+ text = serializer.serialize(dict(volumes=raw_volumes), 'index')
+
+ print text
+ tree = etree.fromstring(text)
+
+ self.assertEqual('volumes', tree.tag)
+ self.assertEqual(len(raw_volumes), len(tree))
+ for idx, child in enumerate(tree):
+ self._verify_volume(raw_volumes[idx], child)
diff --git a/nova/tests/integrated/api/client.py b/nova/tests/integrated/api/client.py
index c942b0108..ccf83c1da 100644
--- a/nova/tests/integrated/api/client.py
+++ b/nova/tests/integrated/api/client.py
@@ -261,17 +261,17 @@ class TestOpenStackClient(object):
return self.api_delete('/flavors/%s' % flavor_id)
def get_volume(self, volume_id):
- return self.api_get('/os-volumes/%s' % volume_id)['volume']
+ return self.api_get('/volumes/%s' % volume_id)['volume']
def get_volumes(self, detail=True):
- rel_url = '/os-volumes/detail' if detail else '/os-volumes'
+ rel_url = '/volumes/detail' if detail else '/volumes'
return self.api_get(rel_url)['volumes']
def post_volume(self, volume):
- return self.api_post('/os-volumes', volume)['volume']
+ return self.api_post('/volumes', volume)['volume']
def delete_volume(self, volume_id):
- return self.api_delete('/os-volumes/%s' % volume_id)
+ return self.api_delete('/volumes/%s' % volume_id)
def get_server_volume(self, server_id, attachment_id):
return self.api_get('/servers/%s/os-volume_attachments/%s' %
diff --git a/nova/tests/integrated/integrated_helpers.py b/nova/tests/integrated/integrated_helpers.py
index b18d24bd4..a98c94f65 100644
--- a/nova/tests/integrated/integrated_helpers.py
+++ b/nova/tests/integrated/integrated_helpers.py
@@ -80,10 +80,14 @@ class _IntegratedTestBase(test.TestCase):
self.api = client.TestOpenStackClient('fake', 'fake', self.auth_url)
+ def tearDown(self):
+ self.osapi.stop()
+ super(_IntegratedTestBase, self).tearDown()
+
def _start_api_service(self):
- osapi = service.WSGIService("osapi")
- osapi.start()
- self.auth_url = 'http://%s:%s/v2' % (osapi.host, osapi.port)
+ self.osapi = service.WSGIService("osapi_compute")
+ self.osapi.start()
+ self.auth_url = 'http://%s:%s/v2' % (self.osapi.host, self.osapi.port)
LOG.warn(self.auth_url)
def _get_flags(self):
diff --git a/nova/tests/integrated/test_extensions.py b/nova/tests/integrated/test_extensions.py
index b10da166a..70c998ef0 100644
--- a/nova/tests/integrated/test_extensions.py
+++ b/nova/tests/integrated/test_extensions.py
@@ -17,7 +17,7 @@
import os
-from nova.api.openstack.v2 import extensions
+from nova.api.openstack.compute import extensions
from nova import flags
from nova.log import logging
from nova.tests.integrated import integrated_helpers
@@ -32,9 +32,10 @@ class ExtensionsTest(integrated_helpers._IntegratedTestBase):
extensions.ExtensionManager.reset()
f = super(ExtensionsTest, self)._get_flags()
- f['osapi_extension'] = FLAGS.osapi_extension[:]
- f['osapi_extension'].append('nova.tests.api.openstack.v2.extensions.'
- 'foxinsocks.Foxinsocks')
+ f['osapi_compute_extension'] = FLAGS.osapi_compute_extension[:]
+ f['osapi_compute_extension'].append(
+ 'nova.tests.api.openstack.compute.extensions.'
+ 'foxinsocks.Foxinsocks')
return f
def test_get_foxnsocks(self):
diff --git a/nova/tests/integrated/test_volumes.py b/nova/tests/integrated/test_volumes.py
index 9e19f2cff..d07865181 100644
--- a/nova/tests/integrated/test_volumes.py
+++ b/nova/tests/integrated/test_volumes.py
@@ -18,6 +18,7 @@
import unittest
import time
+from nova import service
from nova.log import logging
from nova.tests.integrated import integrated_helpers
from nova.tests.integrated.api import client
@@ -32,6 +33,12 @@ class VolumesTest(integrated_helpers._IntegratedTestBase):
super(VolumesTest, self).setUp()
driver.LoggingVolumeDriver.clear_logs()
+ def _start_api_service(self):
+ self.osapi = service.WSGIService("osapi_volume")
+ self.osapi.start()
+ self.auth_url = 'http://%s:%s/v1' % (self.osapi.host, self.osapi.port)
+ LOG.warn(self.auth_url)
+
def _get_flags(self):
f = super(VolumesTest, self)._get_flags()
f['use_local_volumes'] = False # Avoids calling local_path
@@ -135,157 +142,6 @@ class VolumesTest(integrated_helpers._IntegratedTestBase):
delete_action = export_actions[0]
self.assertEquals(delete_action['id'], created_volume_id)
- def test_attach_and_detach_volume(self):
- """Creates, attaches, detaches and deletes a volume."""
- self.flags(stub_network=True)
-
- # Create server
- server_req = {'server': self._build_minimal_create_server_request()}
- # NOTE(justinsb): Create an extra server so that server_id != volume_id
- self.api.post_server(server_req)
- created_server = self.api.post_server(server_req)
- LOG.debug("created_server: %s" % created_server)
- server_id = created_server['id']
-
- # Create volume
- created_volume = self.api.post_volume({'volume': {'size': 1}})
- LOG.debug("created_volume: %s" % created_volume)
- volume_id = created_volume['id']
- self._poll_while(volume_id, ['creating'])
-
- # Check we've got different IDs
- self.assertNotEqual(server_id, volume_id)
-
- # List current server attachments - should be none
- attachments = self.api.get_server_volumes(server_id)
- self.assertEquals([], attachments)
-
- # Template attach request
- device = '/dev/sdc'
- attach_req = {'device': device}
- post_req = {'volumeAttachment': attach_req}
-
- # Try to attach to a non-existent volume; should fail
- attach_req['volumeId'] = 3405691582
- self.assertRaises(client.OpenStackApiNotFoundException,
- self.api.post_server_volume, server_id, post_req)
-
- # Try to attach to a non-existent server; should fail
- attach_req['volumeId'] = volume_id
- self.assertRaises(client.OpenStackApiNotFoundException,
- self.api.post_server_volume, 3405691582, post_req)
-
- # Should still be no attachments...
- attachments = self.api.get_server_volumes(server_id)
- self.assertEquals([], attachments)
-
- # Do a real attach
- attach_req['volumeId'] = volume_id
- attach_result = self.api.post_server_volume(server_id, post_req)
- LOG.debug(_("Attachment = %s") % attach_result)
-
- attachment_id = attach_result['id']
- self.assertEquals(volume_id, attach_result['volumeId'])
-
- # These fields aren't set because it's async
- #self.assertEquals(server_id, attach_result['serverId'])
- #self.assertEquals(device, attach_result['device'])
-
- # This is just an implementation detail, but let's check it...
- self.assertEquals(volume_id, attachment_id)
-
- # NOTE(justinsb): There's an issue with the attach code, in that
- # it's currently asynchronous and not recorded until the attach
- # completes. So the caller must be 'smart', like this...
- attach_done = None
- retries = 0
- while True:
- try:
- attach_done = self.api.get_server_volume(server_id,
- attachment_id)
- break
- except client.OpenStackApiNotFoundException:
- LOG.debug("Got 404, waiting")
-
- time.sleep(1)
- retries = retries + 1
- if retries > 10:
- break
-
- expect_attach = {}
- expect_attach['id'] = volume_id
- expect_attach['volumeId'] = volume_id
- expect_attach['serverId'] = server_id
- expect_attach['device'] = device
-
- self.assertEqual(expect_attach, attach_done)
-
- # Should be one attachemnt
- attachments = self.api.get_server_volumes(server_id)
- self.assertEquals([expect_attach], attachments)
-
- # Should be able to get details
- attachment_info = self.api.get_server_volume(server_id, attachment_id)
- self.assertEquals(expect_attach, attachment_info)
-
- # Getting details on a different id should fail
- self.assertRaises(client.OpenStackApiNotFoundException,
- self.api.get_server_volume, server_id, 3405691582)
- self.assertRaises(client.OpenStackApiNotFoundException,
- self.api.get_server_volume,
- 3405691582, attachment_id)
-
- # Trying to detach a different id should fail
- self.assertRaises(client.OpenStackApiNotFoundException,
- self.api.delete_server_volume, server_id, 3405691582)
-
- # Detach should work
- self.api.delete_server_volume(server_id, attachment_id)
-
- # Again, it's async, so wait...
- retries = 0
- while True:
- try:
- attachment = self.api.get_server_volume(server_id,
- attachment_id)
- LOG.debug("Attachment still there: %s" % attachment)
- except client.OpenStackApiNotFoundException:
- LOG.debug("Got 404, delete done")
- break
-
- time.sleep(1)
- retries = retries + 1
- self.assertTrue(retries < 10)
-
- # Should be no attachments again
- attachments = self.api.get_server_volumes(server_id)
- self.assertEquals([], attachments)
-
- LOG.debug("Logs: %s" % driver.LoggingVolumeDriver.all_logs())
-
- # prepare_attach and prepare_detach are called from compute
- # on attach/detach
-
- disco_moves = driver.LoggingVolumeDriver.logs_like(
- 'initialize_connection',
- id=volume_id)
- LOG.debug("initialize_connection actions: %s" % disco_moves)
-
- self.assertEquals(1, len(disco_moves))
- disco_move = disco_moves[0]
- self.assertEquals(disco_move['id'], volume_id)
-
- last_days_of_disco_moves = driver.LoggingVolumeDriver.logs_like(
- 'terminate_connection',
- id=volume_id)
- LOG.debug("terminate_connection actions: %s" %
- last_days_of_disco_moves)
-
- self.assertEquals(1, len(last_days_of_disco_moves))
- undisco_move = last_days_of_disco_moves[0]
- self.assertEquals(undisco_move['id'], volume_id)
- self.assertEquals(undisco_move['mountpoint'], device)
-
def test_create_volume_with_metadata(self):
"""Creates and deletes a volume."""