151 lines
5.5 KiB
Python
151 lines
5.5 KiB
Python
"""
|
|
Settings for Bok Choy tests that are used when running LMS.
|
|
|
|
Bok Choy uses two different settings files:
|
|
1. test_static_optimized is used when invoking collectstatic
|
|
2. bok_choy is used when running the tests
|
|
|
|
Note: it isn't possible to have a single settings file, because Django doesn't
|
|
support both generating static assets to a directory and also serving static
|
|
from the same directory.
|
|
"""
|
|
|
|
|
|
# Silence noisy logs
|
|
import logging
|
|
import os
|
|
from tempfile import mkdtemp
|
|
|
|
from django.utils.translation import ugettext_lazy
|
|
from path import Path as path
|
|
|
|
from openedx.core.release import RELEASE_LINE
|
|
from xmodule.modulestore.modulestore_settings import update_module_store_settings
|
|
|
|
CONFIG_ROOT = path(__file__).abspath().dirname()
|
|
TEST_ROOT = CONFIG_ROOT.dirname().dirname() / "test_root"
|
|
|
|
########################## Prod-like settings ###################################
|
|
# These should be as close as possible to the settings we use in production.
|
|
# As in prod, we read in environment and auth variables from JSON files.
|
|
# Unlike in prod, we use the JSON files stored in this repo.
|
|
# This is a convenience for ensuring (a) that we can consistently find the files
|
|
# and (b) that the files are the same in Jenkins as in local dev.
|
|
os.environ['SERVICE_VARIANT'] = 'bok_choy_docker' if 'BOK_CHOY_HOSTNAME' in os.environ else 'bok_choy'
|
|
os.environ['LMS_CFG'] = str.format("{config_root}/{service_variant}.yml",
|
|
config_root=CONFIG_ROOT, service_variant=os.environ['SERVICE_VARIANT'])
|
|
os.environ['REVISION_CFG'] = f"{CONFIG_ROOT}/revisions.yml"
|
|
|
|
from .production import * # pylint: disable=wildcard-import, unused-wildcard-import, wrong-import-position
|
|
|
|
|
|
######################### Testing overrides ####################################
|
|
|
|
# Redirect to the test_root folder within the repo
|
|
GITHUB_REPO_ROOT = (TEST_ROOT / "data").abspath()
|
|
LOG_DIR = (TEST_ROOT / "log").abspath()
|
|
|
|
# Configure modulestore to use the test folder within the repo
|
|
update_module_store_settings(
|
|
MODULESTORE,
|
|
module_store_options={
|
|
'fs_root': (TEST_ROOT / "data").abspath(),
|
|
},
|
|
xml_store_options={
|
|
'data_dir': (TEST_ROOT / "data").abspath(),
|
|
},
|
|
default_store=os.environ.get('DEFAULT_STORE', 'draft'),
|
|
)
|
|
|
|
PLATFORM_NAME = ugettext_lazy("édX")
|
|
PLATFORM_DESCRIPTION = ugettext_lazy("Open édX Platform")
|
|
|
|
############################ STATIC FILES #############################
|
|
|
|
# Serve static files at /static directly from the staticfiles directory under test root
|
|
# Note: optimized files for testing are generated with settings from test_static_optimized
|
|
STATIC_URL = "/static/"
|
|
STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder']
|
|
STATICFILES_DIRS = [
|
|
(TEST_ROOT / "staticfiles" / "lms").abspath(),
|
|
]
|
|
|
|
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
|
|
MEDIA_ROOT = TEST_ROOT / "uploads"
|
|
|
|
# Webpack loader must use webpack output setting
|
|
WEBPACK_LOADER['DEFAULT']['STATS_FILE'] = TEST_ROOT / "staticfiles" / "lms" / "webpack-stats.json"
|
|
|
|
# Don't use compression during tests
|
|
PIPELINE['JS_COMPRESSOR'] = None
|
|
|
|
###################### Grades ######################
|
|
GRADES_DOWNLOAD = {
|
|
'STORAGE_TYPE': 'localfs',
|
|
'BUCKET': 'edx-grades',
|
|
'ROOT_PATH': os.path.join(mkdtemp(), 'edx-s3', 'grades'),
|
|
}
|
|
|
|
|
|
LOG_OVERRIDES = [
|
|
('track.middleware', logging.CRITICAL),
|
|
('common.djangoapps.edxmako.shortcuts', logging.ERROR),
|
|
('edx.discussion', logging.CRITICAL),
|
|
]
|
|
for log_name, log_level in LOG_OVERRIDES:
|
|
logging.getLogger(log_name).setLevel(log_level)
|
|
|
|
|
|
YOUTUBE_HOSTNAME = os.environ.get('BOK_CHOY_HOSTNAME', '127.0.0.1')
|
|
# Point the URL used to test YouTube availability to our stub YouTube server
|
|
YOUTUBE_PORT = 9080
|
|
YOUTUBE['TEST_TIMEOUT'] = 5000
|
|
YOUTUBE['API'] = f"http://{YOUTUBE_HOSTNAME}:{YOUTUBE_PORT}/get_youtube_api/"
|
|
YOUTUBE['METADATA_URL'] = f"http://{YOUTUBE_HOSTNAME}:{YOUTUBE_PORT}/test_youtube/"
|
|
YOUTUBE['TEXT_API']['url'] = f"{YOUTUBE_HOSTNAME}:{YOUTUBE_PORT}/test_transcripts_youtube/"
|
|
|
|
############################# SECURITY SETTINGS ################################
|
|
# Default to advanced security in common.py, so tests can reset here to use
|
|
# a simpler security model
|
|
|
|
# Path at which to store the mock index
|
|
MOCK_SEARCH_BACKING_FILE = (
|
|
TEST_ROOT / "index_file.dat"
|
|
).abspath()
|
|
|
|
# Verify student settings
|
|
VERIFY_STUDENT["SOFTWARE_SECURE"] = {
|
|
"API_ACCESS_KEY": "BBBBBBBBBBBBBBBBBBBB",
|
|
"API_SECRET_KEY": "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC",
|
|
}
|
|
|
|
# Set dummy values for profile image settings.
|
|
PROFILE_IMAGE_BACKEND = {
|
|
'class': 'openedx.core.storage.OverwriteStorage',
|
|
'options': {
|
|
'location': os.path.join(MEDIA_ROOT, 'profile-images/'),
|
|
'base_url': os.path.join(MEDIA_URL, 'profile-images/'),
|
|
},
|
|
}
|
|
|
|
LMS_ROOT_URL = "http://localhost:{}".format(os.environ.get('BOK_CHOY_LMS_PORT', 8003))
|
|
CMS_BASE = "localhost:{}".format(os.environ.get('BOK_CHOY_CMS_PORT', 8031))
|
|
LOGIN_REDIRECT_WHITELIST = [CMS_BASE]
|
|
|
|
INSTALLED_APPS.append('openedx.testing.coverage_context_listener')
|
|
|
|
if RELEASE_LINE == "master":
|
|
# On master, acceptance tests use edX books, not the default Open edX books.
|
|
HELP_TOKENS_BOOKS = {
|
|
'learner': 'https://edx.readthedocs.io/projects/edx-guide-for-students',
|
|
'course_author': 'https://edx.readthedocs.io/projects/edx-partner-course-staff',
|
|
}
|
|
|
|
|
|
#####################################################################
|
|
# Lastly, see if the developer has any local overrides.
|
|
try:
|
|
from .private import * # pylint: disable=wildcard-import
|
|
except ImportError:
|
|
pass
|