Inherit test settings from Horizon
Inherits the testing settings from Horizon. This makes it easier to maintain long term, as test settings will always contain any default keys. There are a couple of workarounds, due to update_dashboards effectively being called twice: 1. We remove dashboard/ default_dashboard config variables that have been populated. 2. We ensure INSTALLED_APPS has no duplicates Change-Id: Ia61b456bbac9d94fd463735e24d4396f1241fde1
This commit is contained in:
parent
8f554eb3a9
commit
263c3f6902
@ -13,177 +13,28 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import importlib
|
# Default to Horizons test settings to avoid any missing keys
|
||||||
import os
|
|
||||||
import six
|
|
||||||
|
|
||||||
from horizon.test.settings import * # noqa
|
from horizon.test.settings import * # noqa
|
||||||
from horizon.utils import secret_key
|
from openstack_dashboard.test.settings import * # noqa
|
||||||
from openstack_dashboard import exceptions
|
|
||||||
|
|
||||||
DEBUG = True
|
# pop these keys to avoid log warnings about deprecation
|
||||||
TEMPLATE_DEBUG = DEBUG
|
# update_dashboards will populate them anyway
|
||||||
|
HORIZON_CONFIG.pop('dashboards', None)
|
||||||
|
HORIZON_CONFIG.pop('default_dashboard', None)
|
||||||
|
|
||||||
TEST_DIR = os.path.dirname(os.path.abspath(__file__))
|
# Update the dashboards with ironic_ui
|
||||||
ROOT_PATH = os.path.abspath(os.path.join(TEST_DIR, ".."))
|
import ironic_ui.enabled
|
||||||
|
import openstack_dashboard.enabled
|
||||||
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 = 'ironic_ui.test.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': "http://docs.openstack.org",
|
|
||||||
'exceptions': {'recoverable': exceptions.RECOVERABLE,
|
|
||||||
'not_found': exceptions.NOT_FOUND,
|
|
||||||
'unauthorized': exceptions.UNAUTHORIZED},
|
|
||||||
'angular_modules': [],
|
|
||||||
'js_files': [],
|
|
||||||
}
|
|
||||||
|
|
||||||
# Load the pluggable dashboard settings
|
|
||||||
from openstack_dashboard.utils import settings
|
from openstack_dashboard.utils import settings
|
||||||
dashboard_module_names = [
|
|
||||||
'openstack_dashboard.enabled',
|
|
||||||
'openstack_dashboard.local.enabled',
|
|
||||||
'ironic_ui.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(
|
||||||
|
[
|
||||||
|
ironic_ui.enabled,
|
||||||
|
openstack_dashboard.enabled,
|
||||||
|
],
|
||||||
|
HORIZON_CONFIG,
|
||||||
|
INSTALLED_APPS
|
||||||
|
)
|
||||||
|
|
||||||
# Set to True to allow users to upload images to glance via Horizon server.
|
# Ensure any duplicate apps are removed after the update_dashboards call
|
||||||
# When enabled, a file form field will appear on the create image form.
|
INSTALLED_APPS = list(set(INSTALLED_APPS))
|
||||||
# See documentation for deployment considerations.
|
|
||||||
HORIZON_IMAGES_ALLOW_UPLOAD = True
|
|
||||||
|
|
||||||
AVAILABLE_REGIONS = [
|
|
||||||
('http://localhost:5000/v2.0', 'local'),
|
|
||||||
('http://remote:5000/v2.0', 'remote'),
|
|
||||||
]
|
|
||||||
|
|
||||||
OPENSTACK_API_VERSIONS = {
|
|
||||||
"identity": 3
|
|
||||||
}
|
|
||||||
|
|
||||||
OPENSTACK_KEYSTONE_URL = "http://localhost:5000/v2.0"
|
|
||||||
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']['ironic_ui'] = {
|
|
||||||
'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'
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user