From 8e9a2f239a38628e77a1dd18d605bf0c71d7abbf Mon Sep 17 00:00:00 2001 From: Jacky Hu Date: Thu, 8 Mar 2018 14:45:14 +0800 Subject: [PATCH] Replace noop tests with registration test Previously the python tests are just some stub code, replace them with some real tests. Change-Id: I0d8d7213bf1abc690517d14c97f5c312b34b4112 --- .../integration_tests => enabled}/__init__.py | 0 octavia_dashboard/tests/base.py | 23 --- .../tests/integration_tests/horizon.conf | 78 -------- .../pages/project/__init__.py | 0 .../pages/project/network/__init__.py | 0 .../tests/integration_tests/tests/__init__.py | 0 .../tests/test_loadbalancers.py | 27 --- octavia_dashboard/tests/settings.py | 189 ++---------------- .../tests/test_octavia_dashboard.py | 28 --- .../pages => unit}/__init__.py | 0 .../registration.py} | 17 +- octavia_dashboard/tests/urls.py | 8 +- tox.ini | 14 +- 13 files changed, 38 insertions(+), 346 deletions(-) rename octavia_dashboard/{tests/integration_tests => enabled}/__init__.py (100%) delete mode 100644 octavia_dashboard/tests/base.py delete mode 100644 octavia_dashboard/tests/integration_tests/horizon.conf delete mode 100644 octavia_dashboard/tests/integration_tests/pages/project/__init__.py delete mode 100644 octavia_dashboard/tests/integration_tests/pages/project/network/__init__.py delete mode 100644 octavia_dashboard/tests/integration_tests/tests/__init__.py delete mode 100644 octavia_dashboard/tests/integration_tests/tests/test_loadbalancers.py delete mode 100644 octavia_dashboard/tests/test_octavia_dashboard.py rename octavia_dashboard/tests/{integration_tests/pages => unit}/__init__.py (100%) rename octavia_dashboard/tests/{integration_tests/pages/project/network/loadbalancerspage.py => unit/registration.py} (57%) diff --git a/octavia_dashboard/tests/integration_tests/__init__.py b/octavia_dashboard/enabled/__init__.py similarity index 100% rename from octavia_dashboard/tests/integration_tests/__init__.py rename to octavia_dashboard/enabled/__init__.py diff --git a/octavia_dashboard/tests/base.py b/octavia_dashboard/tests/base.py deleted file mode 100644 index 1c30cdb5..00000000 --- a/octavia_dashboard/tests/base.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2010-2011 OpenStack Foundation -# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. -# -# 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 oslotest import base - - -class TestCase(base.BaseTestCase): - - """Test case base class for all unit tests.""" diff --git a/octavia_dashboard/tests/integration_tests/horizon.conf b/octavia_dashboard/tests/integration_tests/horizon.conf deleted file mode 100644 index 46358921..00000000 --- a/octavia_dashboard/tests/integration_tests/horizon.conf +++ /dev/null @@ -1,78 +0,0 @@ -# -# Configuration filed based on Tempest's tempest.conf.sample -# - -[dashboard] -# Where the dashboard can be found (string value) -dashboard_url=http://localhost/dashboard/ - -# Login page for the dashboard (string value) -login_url=http://localhost/dashboard/auth/login/ - -# Dashboard help page url (string value) -help_url=https://docs.openstack.org/ - -[selenium] -# Timeout in seconds to wait for a page to become available -# (integer value) -page_timeout=30 - -# Output directory for screenshots. -# (string value) -screenshots_directory=integration_tests_screenshots - -# Implicit timeout to wait until element become available, -# this timeout is used for every find_element, find_elements call. -# (integer value) -implicit_wait=10 - -# Explicit timeout is used for long lasting operations, -# methods using explicit timeout are usually prefixed with 'wait', -# those methods ignore implicit_wait when looking up web elements. -# (integer value) -explicit_wait=300 - -[image] -# http accessible image (string value) -http_image=http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-uec.tar.gz - -[identity] -# Username to use for non-admin API requests. (string value) -username=demo - -# API key to use when authenticating. (string value) -password=secretadmin - -# Administrative Username to use for admin API requests. -# (string value) -admin_username=admin - -# API key to use when authenticating as admin. (string value) -admin_password=secretadmin - -[scenario] -# ssh username for image file (string value) -ssh_user=cirros - -[launch_instances] -#available zone to launch instances -available_zone=nova -#image_name to launch instances -image_name=cirros-0.3.4-x86_64-uec (24.0 MB) - -[plugin] - -is_plugin=True -plugin_page_path=octavia_dashboard.tests.integration_tests.pages -plugin_page_structure={ - "Project": - { - "Network": - { - "-": - [ - "Load Balancers" - ] - } - } - } diff --git a/octavia_dashboard/tests/integration_tests/pages/project/__init__.py b/octavia_dashboard/tests/integration_tests/pages/project/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/octavia_dashboard/tests/integration_tests/pages/project/network/__init__.py b/octavia_dashboard/tests/integration_tests/pages/project/network/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/octavia_dashboard/tests/integration_tests/tests/__init__.py b/octavia_dashboard/tests/integration_tests/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/octavia_dashboard/tests/integration_tests/tests/test_loadbalancers.py b/octavia_dashboard/tests/integration_tests/tests/test_loadbalancers.py deleted file mode 100644 index 1d36c866..00000000 --- a/octavia_dashboard/tests/integration_tests/tests/test_loadbalancers.py +++ /dev/null @@ -1,27 +0,0 @@ -# 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 openstack_dashboard.test.integration_tests import helpers - - -class TestLoadbalancers(helpers.TestCase): - - def setUp(self): - super(TestLoadbalancers, self).setUp() - self.home_pg.go_to_network_loadbalancerspage() - - def test_loadbalancers(self): - self._save_screenshot(None) - # TODO(MRV): Place holder for tests - - def tearDown(self): - super(TestLoadbalancers, self).tearDown() diff --git a/octavia_dashboard/tests/settings.py b/octavia_dashboard/tests/settings.py index a704e292..41bfa3d9 100644 --- a/octavia_dashboard/tests/settings.py +++ b/octavia_dashboard/tests/settings.py @@ -1,3 +1,4 @@ +# Copyright 2018 Walmart. # # 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 @@ -11,178 +12,28 @@ # License for the specific language governing permissions and limitations # under the License. -import importlib -import os -import six - +# Default to Horizons test settings to avoid any missing keys from horizon.test.settings import * # noqa -from horizon.utils import secret_key -from openstack_dashboard import exceptions +from openstack_dashboard.test.settings import * # noqa +# pop these keys to avoid log warnings about deprecation +# update_dashboards will populate them anyway +HORIZON_CONFIG.pop('dashboards', None) +HORIZON_CONFIG.pop('default_dashboard', None) -DEBUG = True -TEMPLATE_DEBUG = DEBUG - -TEST_DIR = os.path.dirname(os.path.abspath(__file__)) -ROOT_PATH = os.path.abspath(os.path.join(TEST_DIR, "..")) - -MEDIA_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '..', 'media')) -MEDIA_URL = '/media/' -STATIC_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '..', 'static')) -STATIC_URL = '/static/' - -SECRET_KEY = secret_key.generate_or_read_from_file( - os.path.join(TEST_DIR, '.secret_key_store')) -ROOT_URLCONF = 'octavia_dashboard.tests.urls' -TEMPLATE_DIRS = ( - os.path.join(TEST_DIR, 'templates'), -) - -TEMPLATE_CONTEXT_PROCESSORS += ( - 'openstack_dashboard.context_processors.openstack', -) - -INSTALLED_APPS = ( - 'django.contrib.contenttypes', - 'django.contrib.auth', - 'django.contrib.sessions', - 'django.contrib.staticfiles', - 'django.contrib.messages', - 'django.contrib.humanize', - 'django_nose', - 'openstack_auth', - 'compressor', - 'horizon', - 'openstack_dashboard', - 'openstack_dashboard.dashboards', -) - -AUTHENTICATION_BACKENDS = ('openstack_auth.backend.KeystoneBackend',) - -SITE_BRANDING = 'OpenStack' - -HORIZON_CONFIG = { - "password_validator": { - "regex": '^.{8,18}$', - "help_text": "Password must be between 8 and 18 characters." - }, - 'user_home': None, - 'help_url': "https://docs.openstack.org", - 'exceptions': {'recoverable': exceptions.RECOVERABLE, - 'not_found': exceptions.NOT_FOUND, - 'unauthorized': exceptions.UNAUTHORIZED}, - 'angular_modules': [], - 'js_files': [], -} - -# Load the pluggable dashboard settings +# Update the dashboards with octavia_dashboard +import octavia_dashboard.enabled +import openstack_dashboard.enabled from openstack_dashboard.utils import settings -dashboard_module_names = [ - 'openstack_dashboard.enabled', - 'openstack_dashboard.local.enabled', - 'octavia_dashboard.enabled', -] -dashboard_modules = [] -# All dashboards must be enabled for the namespace to get registered, which is -# needed by the unit tests. -for module_name in dashboard_module_names: - module = importlib.import_module(module_name) - dashboard_modules.append(module) - for submodule in six.itervalues(settings.import_submodules(module)): - if getattr(submodule, 'DISABLED', None): - delattr(submodule, 'DISABLED') -INSTALLED_APPS = list(INSTALLED_APPS) # Make sure it's mutable -settings.update_dashboards(dashboard_modules, HORIZON_CONFIG, INSTALLED_APPS) +settings.update_dashboards( + [ + octavia_dashboard.enabled, + openstack_dashboard.enabled, + ], + HORIZON_CONFIG, + INSTALLED_APPS +) -# Set to True to allow users to upload images to glance via Horizon server. -# When enabled, a file form field will appear on the create image form. -# See documentation for deployment considerations. -HORIZON_IMAGES_ALLOW_UPLOAD = True - -AVAILABLE_REGIONS = [ - ('http://localhost/identity', 'local'), - ('http://remote/identity', 'remote'), -] - -OPENSTACK_API_VERSIONS = { - "identity": 3 -} - -OPENSTACK_KEYSTONE_URL = "http://localhost/identity" -OPENSTACK_KEYSTONE_DEFAULT_ROLE = "_member_" - -OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True -OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'test_domain' - -OPENSTACK_KEYSTONE_BACKEND = { - 'name': 'native', - 'can_edit_user': True, - 'can_edit_group': True, - 'can_edit_project': True, - 'can_edit_domain': True, - 'can_edit_role': True -} - -OPENSTACK_CINDER_FEATURES = { - 'enable_backup': True, -} - -OPENSTACK_NEUTRON_NETWORK = { - 'enable_lb': False, - 'enable_firewall': False, - 'enable_vpn': False -} - -OPENSTACK_HYPERVISOR_FEATURES = { - 'can_set_mount_point': True, - - # NOTE: as of Grizzly this is not yet supported in Nova so enabling this - # setting will not do anything useful - 'can_encrypt_volumes': False -} - -LOGGING['loggers']['openstack_dashboard'] = { - 'handlers': ['test'], - 'propagate': False, -} - -LOGGING['loggers']['selenium'] = { - 'handlers': ['test'], - 'propagate': False, -} - -LOGGING['loggers']['octavia_dashboard'] = { - 'handlers': ['test'], - 'propagate': False, -} - -SECURITY_GROUP_RULES = { - 'all_tcp': { - 'name': 'ALL TCP', - 'ip_protocol': 'tcp', - 'from_port': '1', - 'to_port': '65535', - }, - 'http': { - 'name': 'HTTP', - 'ip_protocol': 'tcp', - 'from_port': '80', - 'to_port': '80', - }, -} - -NOSE_ARGS = ['--nocapture', - '--nologcapture', - '--cover-package=openstack_dashboard', - '--cover-inclusive', - '--all-modules'] - -POLICY_FILES_PATH = os.path.join(ROOT_PATH, "conf") -POLICY_FILES = { - 'identity': 'keystone_policy.json', - 'compute': 'nova_policy.json' -} - -# The openstack_auth.user.Token object isn't JSON-serializable ATM -SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer' +# Ensure any duplicate apps are removed after the update_dashboards call +INSTALLED_APPS = list(set(INSTALLED_APPS)) diff --git a/octavia_dashboard/tests/test_octavia_dashboard.py b/octavia_dashboard/tests/test_octavia_dashboard.py deleted file mode 100644 index 8b384acc..00000000 --- a/octavia_dashboard/tests/test_octavia_dashboard.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -# 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. - -""" -test_octavia_dashboard ----------------------------------- - -Tests for `octavia_dashboard` module. -""" - -from octavia_dashboard.tests import base - - -class Test_octavia_dashboard(base.TestCase): - - def test_something(self): - pass diff --git a/octavia_dashboard/tests/integration_tests/pages/__init__.py b/octavia_dashboard/tests/unit/__init__.py similarity index 100% rename from octavia_dashboard/tests/integration_tests/pages/__init__.py rename to octavia_dashboard/tests/unit/__init__.py diff --git a/octavia_dashboard/tests/integration_tests/pages/project/network/loadbalancerspage.py b/octavia_dashboard/tests/unit/registration.py similarity index 57% rename from octavia_dashboard/tests/integration_tests/pages/project/network/loadbalancerspage.py rename to octavia_dashboard/tests/unit/registration.py index 4c6c5802..0fdf85e9 100644 --- a/octavia_dashboard/tests/integration_tests/pages/project/network/loadbalancerspage.py +++ b/octavia_dashboard/tests/unit/registration.py @@ -1,3 +1,5 @@ +# Copyright 2018 Walmart. +# # 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 @@ -10,13 +12,14 @@ # License for the specific language governing permissions and limitations # under the License. -from openstack_dashboard.test.integration_tests.pages import basepage +import horizon +from octavia_dashboard.dashboards.project.load_balancer import panel as o_panel +from openstack_dashboard.test import helpers as test -class LoadbalancersPage(basepage.BaseNavigationPage): +class RegistrationTests(test.TestCase): + def test_registered(self): + dashboard = horizon.get_dashboard('project') + panel = dashboard.get_panel('load_balancer') - TABLE_IMAGE_COLUMN = 'name' - - def __init__(self, driver, conf): - super(LoadbalancersPage, self).__init__(driver, conf) - self._page_title = "Load Balancers" + self.assertEqual(panel.__class__, o_panel.NGLoadBalancers) diff --git a/octavia_dashboard/tests/urls.py b/octavia_dashboard/tests/urls.py index 7b339def..4924dbad 100644 --- a/octavia_dashboard/tests/urls.py +++ b/octavia_dashboard/tests/urls.py @@ -1,3 +1,4 @@ +# Copyright 2018 Walmart. # # 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 @@ -11,9 +12,10 @@ # License for the specific language governing permissions and limitations # under the License. -from django.conf import urls -from openstack_dashboard import urls as dashboard_urls +from django.conf.urls import include +from django.conf.urls import url +import openstack_dashboard.urls urlpatterns = [ - urls.url(r'', urls.include(dashboard_urls)) + url(r'', include(openstack_dashboard.urls)) ] diff --git a/tox.ini b/tox.ini index 13887c6f..399e8c90 100644 --- a/tox.ini +++ b/tox.ini @@ -13,12 +13,14 @@ setenv = NOSE_OPENSTACK_RED=0.05 NOSE_OPENSTACK_YELLOW=0.025 NOSE_OPENSTACK_SHOW_ELAPSED=1 + CLIENT_NAME=octavia-dashboard + DJANGO_SETTINGS_MODULE=octavia_dashboard.tests.settings deps = -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt whitelist_externals = npm bash -commands = python manage.py test +commands = python manage.py test octavia_dashboard --settings=octavia_dashboard.tests.settings [testenv:pep8] commands = flake8 @@ -26,16 +28,6 @@ commands = flake8 [testenv:venv] commands = {posargs} -[testenv:py27integration] -basepython = python2.7 -setenv = - {[testenv]setenv} - INTEGRATION_TESTS=1 - SELENIUM_HEADLESS=1 - HORIZON_INTEGRATION_TESTS_CONFIG_FILE=octavia_dashboard/tests/integration_tests/horizon.conf - DJANGO_SETTINGS_MODULE=octavia_dashboard.tests.settings -commands = nosetests octavia_dashboard/tests/integration_tests/tests {posargs} - [testenv:cover] commands = python setup.py test --coverage --testr-args='{posargs}'