diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-01-13 19:19:46 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-01-13 19:19:46 +0000 |
| commit | 6c898e6abf44caa176790e9cd4505aeed145397c (patch) | |
| tree | 4d9cbc1ef13d8d208284417f333e36482bdd8c26 /nova/tests | |
| parent | 485328e48fc7dff1ce2ebfd262c442d8f993688b (diff) | |
| parent | 60ff2e3b72b5a3c9200f8fc47aac01cdb610bdcf (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.py | 32 | ||||
| -rw-r--r-- | nova/tests/api/openstack/volume/__init__.py | 16 | ||||
| -rw-r--r-- | nova/tests/api/openstack/volume/test_snapshots.py | 299 | ||||
| -rw-r--r-- | nova/tests/api/openstack/volume/test_types.py | 166 | ||||
| -rw-r--r-- | nova/tests/api/openstack/volume/test_volumes.py | 179 | ||||
| -rw-r--r-- | nova/tests/integrated/api/client.py | 8 | ||||
| -rw-r--r-- | nova/tests/integrated/integrated_helpers.py | 10 | ||||
| -rw-r--r-- | nova/tests/integrated/test_extensions.py | 9 | ||||
| -rw-r--r-- | nova/tests/integrated/test_volumes.py | 158 |
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.""" |
