mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 21:13:36 +00:00
Our ldap integration is quite sensitive to misconfigurations, so more logging is better than less to help debug those issues. Despite the following docstring on ZulipLDAPException: "Since this inherits from _LDAPUser.AuthenticationFailed, these will be caught and logged at debug level inside django-auth-ldap's authenticate()" We weren't actually logging anything, because debug level messages were ignored due to our general logging settings. It is however desirable to log these errors, as they can prove useful in debugging configuration problems. The django_auth_ldap logger can get fairly spammy on debug level, so we delegate ldap logging to a separate file /var/log/zulip/ldap.log to avoid spamming server.log too much.
221 lines
7.5 KiB
Python
221 lines
7.5 KiB
Python
import os
|
|
# test_settings.py works differently from
|
|
# dev_settings.py/prod_settings.py; it actually is directly referenced
|
|
# by the test suite as DJANGO_SETTINGS_MODULE and imports settings.py
|
|
# directly and then hacks up the values that are different for the
|
|
# test suite. As will be explained, this is kinda messy and probably
|
|
# we'd be better off switching it to work more like dev_settings.py,
|
|
# but for now, this is what we have.
|
|
#
|
|
# An important downside of the test_settings.py approach is that if we
|
|
# want to change any settings that settings.py then computes
|
|
# additional settings from (e.g. EXTERNAL_HOST), we need to do a hack
|
|
# like the below line(s) before we import from settings, for
|
|
# transmitting the value of EXTERNAL_HOST to dev_settings.py so that
|
|
# it can be set there, at the right place in the settings.py flow.
|
|
# Ick.
|
|
if os.getenv("EXTERNAL_HOST") is None:
|
|
os.environ["EXTERNAL_HOST"] = "testserver"
|
|
from .settings import *
|
|
|
|
FAKE_EMAIL_DOMAIN = "zulip.testserver"
|
|
|
|
# Clear out the REALM_HOSTS set in dev_settings.py
|
|
REALM_HOSTS = {}
|
|
|
|
# Used to clone DBs in backend tests.
|
|
BACKEND_DATABASE_TEMPLATE = 'zulip_test_template'
|
|
|
|
DATABASES["default"] = {
|
|
"NAME": os.getenv("ZULIP_DB_NAME", "zulip_test"),
|
|
"USER": "zulip_test",
|
|
"PASSWORD": LOCAL_DATABASE_PASSWORD,
|
|
"HOST": "localhost",
|
|
"SCHEMA": "zulip",
|
|
"ENGINE": "django.db.backends.postgresql",
|
|
"TEST_NAME": "django_zulip_tests",
|
|
"OPTIONS": {"connection_factory": TimeTrackingConnection},
|
|
}
|
|
|
|
if "TORNADO_SERVER" in os.environ:
|
|
# This covers the Casper test suite case
|
|
TORNADO_SERVER = os.environ["TORNADO_SERVER"]
|
|
else:
|
|
# This covers the backend test suite case
|
|
TORNADO_SERVER = None
|
|
CAMO_URI = 'https://external-content.zulipcdn.net/external_content/'
|
|
CAMO_KEY = 'dummy'
|
|
|
|
if "CASPER_TESTS" in os.environ:
|
|
CASPER_TESTS = True
|
|
# Disable search pills prototype for production use
|
|
SEARCH_PILLS_ENABLED = False
|
|
|
|
if "RUNNING_OPENAPI_CURL_TEST" in os.environ:
|
|
RUNNING_OPENAPI_CURL_TEST = True
|
|
|
|
# Decrease the get_updates timeout to 1 second.
|
|
# This allows CasperJS to proceed quickly to the next test step.
|
|
POLL_TIMEOUT = 1000
|
|
|
|
# Don't use the real message log for tests
|
|
EVENT_LOG_DIR = '/tmp/zulip-test-event-log'
|
|
|
|
# Stores the messages in `django.core.mail.outbox` rather than sending them.
|
|
EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
|
|
|
|
# The test suite uses EmailAuthBackend
|
|
AUTHENTICATION_BACKENDS += ('zproject.backends.EmailAuthBackend',)
|
|
|
|
# Configure Google Oauth2
|
|
GOOGLE_OAUTH2_CLIENT_ID = "test_client_id"
|
|
|
|
# Makes testing LDAP backend require less mocking
|
|
AUTH_LDAP_ALWAYS_UPDATE_USER = False
|
|
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=zulip,dc=com",
|
|
ldap.SCOPE_ONELEVEL, "(uid=%(user)s)")
|
|
AUTH_LDAP_USERNAME_ATTR = "uid"
|
|
AUTH_LDAP_REVERSE_EMAIL_SEARCH = LDAPSearch("ou=users,dc=zulip,dc=com",
|
|
ldap.SCOPE_ONELEVEL,
|
|
"(mail=%(email)s)")
|
|
|
|
TEST_SUITE = True
|
|
RATE_LIMITING = False
|
|
# Don't use rabbitmq from the test suite -- the user_profile_ids for
|
|
# any generated queue elements won't match those being used by the
|
|
# real app.
|
|
USING_RABBITMQ = False
|
|
|
|
# Disable the tutorial because it confuses the client tests.
|
|
TUTORIAL_ENABLED = False
|
|
|
|
# Disable use of memcached for caching
|
|
CACHES['database'] = {
|
|
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
|
|
'LOCATION': 'zulip-database-test-cache',
|
|
'TIMEOUT': 3600,
|
|
'CONN_MAX_AGE': 600,
|
|
'OPTIONS': {
|
|
'MAX_ENTRIES': 100000
|
|
}
|
|
}
|
|
|
|
# Disable caching on sessions to make query counts consistent
|
|
SESSION_ENGINE = "django.contrib.sessions.backends.db"
|
|
|
|
# Use production config from Webpack in tests
|
|
if CASPER_TESTS:
|
|
WEBPACK_FILE = 'webpack-stats-production.json'
|
|
else:
|
|
WEBPACK_FILE = os.path.join('var', 'webpack-stats-test.json')
|
|
WEBPACK_LOADER['DEFAULT']['STATS_FILE'] = os.path.join(DEPLOY_ROOT, WEBPACK_FILE)
|
|
|
|
# Don't auto-restart Tornado server during automated tests
|
|
AUTORELOAD = False
|
|
|
|
if not CASPER_TESTS:
|
|
# Use local memory cache for backend tests.
|
|
CACHES['default'] = {
|
|
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'
|
|
}
|
|
|
|
def set_loglevel(logger_name: str, level: str) -> None:
|
|
LOGGING['loggers'].setdefault(logger_name, {})['level'] = level
|
|
set_loglevel('zulip.requests', 'CRITICAL')
|
|
set_loglevel('zulip.management', 'CRITICAL')
|
|
set_loglevel('django.request', 'ERROR')
|
|
set_loglevel('django_auth_ldap', 'WARNING')
|
|
set_loglevel('fakeldap', 'ERROR')
|
|
set_loglevel('zulip.send_email', 'ERROR')
|
|
set_loglevel('zerver.lib.push_notifications', 'WARNING')
|
|
set_loglevel('zerver.lib.digest', 'ERROR')
|
|
set_loglevel('zerver.lib.email_mirror', 'ERROR')
|
|
set_loglevel('zerver.worker.queue_processors', 'WARNING')
|
|
set_loglevel('stripe', 'WARNING')
|
|
|
|
# Enable file:/// hyperlink support by default in tests
|
|
ENABLE_FILE_LINKS = True
|
|
|
|
# These settings are set dynamically in `zerver/lib/test_runner.py`:
|
|
TEST_WORKER_DIR = ''
|
|
# Allow setting LOCAL_UPLOADS_DIR in the environment so that the
|
|
# Casper/API tests in test_server.py can control this.
|
|
if "LOCAL_UPLOADS_DIR" in os.environ:
|
|
LOCAL_UPLOADS_DIR = os.getenv("LOCAL_UPLOADS_DIR")
|
|
# Otherwise, we use the default value from dev_settings.py
|
|
|
|
S3_KEY = 'test-key'
|
|
S3_SECRET_KEY = 'test-secret-key'
|
|
S3_AUTH_UPLOADS_BUCKET = 'test-authed-bucket'
|
|
S3_AVATAR_BUCKET = 'test-avatar-bucket'
|
|
|
|
INLINE_URL_EMBED_PREVIEW = False
|
|
|
|
HOME_NOT_LOGGED_IN = '/login/'
|
|
LOGIN_URL = '/accounts/login/'
|
|
|
|
# By default will not send emails when login occurs.
|
|
# Explicity set this to True within tests that must have this on.
|
|
SEND_LOGIN_EMAILS = False
|
|
|
|
GOOGLE_OAUTH2_CLIENT_ID = "id"
|
|
GOOGLE_OAUTH2_CLIENT_SECRET = "secret"
|
|
|
|
SOCIAL_AUTH_GITHUB_KEY = "key"
|
|
SOCIAL_AUTH_GITHUB_SECRET = "secret"
|
|
SOCIAL_AUTH_GOOGLE_KEY = "key"
|
|
SOCIAL_AUTH_GOOGLE_SECRET = "secret"
|
|
SOCIAL_AUTH_SUBDOMAIN = 'www'
|
|
|
|
# By default two factor authentication is disabled in tests.
|
|
# Explicitly set this to True within tests that must have this on.
|
|
TWO_FACTOR_AUTHENTICATION_ENABLED = False
|
|
PUSH_NOTIFICATION_BOUNCER_URL = None
|
|
|
|
# Disable messages from slow queries as they affect backend tests.
|
|
SLOW_QUERY_LOGS_STREAM = None
|
|
|
|
THUMBOR_URL = 'http://127.0.0.1:9995'
|
|
THUMBNAIL_IMAGES = True
|
|
THUMBOR_SERVES_CAMO = True
|
|
|
|
# Logging the emails while running the tests adds them
|
|
# to /emails page.
|
|
DEVELOPMENT_LOG_EMAILS = False
|
|
|
|
SOCIAL_AUTH_SAML_SP_ENTITY_ID = 'http://' + EXTERNAL_HOST
|
|
SOCIAL_AUTH_SAML_SP_PUBLIC_CERT = get_from_file_if_exists("zerver/tests/fixtures/saml/zulip.crt")
|
|
SOCIAL_AUTH_SAML_SP_PRIVATE_KEY = get_from_file_if_exists("zerver/tests/fixtures/saml/zulip.key")
|
|
|
|
SOCIAL_AUTH_SAML_ORG_INFO = {
|
|
"en-US": {
|
|
"name": "example",
|
|
"displayname": "Example Inc.",
|
|
"url": "%s%s" % ('http://', EXTERNAL_HOST),
|
|
}
|
|
}
|
|
|
|
SOCIAL_AUTH_SAML_TECHNICAL_CONTACT = {
|
|
"givenName": "Tech Gal",
|
|
"emailAddress": "technical@example.com"
|
|
}
|
|
|
|
SOCIAL_AUTH_SAML_SUPPORT_CONTACT = {
|
|
"givenName": "Support Guy",
|
|
"emailAddress": "support@example.com",
|
|
}
|
|
|
|
SOCIAL_AUTH_SAML_ENABLED_IDPS = {
|
|
"test_idp": {
|
|
"entity_id": "https://idp.testshib.org/idp/shibboleth",
|
|
"url": "https://idp.testshib.org/idp/profile/SAML2/Redirect/SSO",
|
|
"x509cert": get_from_file_if_exists("zerver/tests/fixtures/saml/idp.crt"),
|
|
"attr_user_permanent_id": "email",
|
|
"attr_first_name": "first_name",
|
|
"attr_last_name": "last_name",
|
|
"attr_username": "email",
|
|
"attr_email": "email",
|
|
"display_name": "Test IdP",
|
|
}
|
|
}
|