mirror of
https://github.com/jazzband/dj-database-url.git
synced 2026-03-16 22:20:24 +00:00
346 lines
14 KiB
Python
346 lines
14 KiB
Python
import os
|
|
import unittest
|
|
|
|
from django import VERSION as DJANGO_VERSION
|
|
|
|
import dj_database_url
|
|
|
|
POSTGIS_URL = "postgis://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn"
|
|
|
|
# Django deprecated the `django.db.backends.postgresql_psycopg2` in 2.0.
|
|
# https://docs.djangoproject.com/en/2.0/releases/2.0/#id1
|
|
EXPECTED_POSTGRES_ENGINE = "django.db.backends.postgresql"
|
|
if DJANGO_VERSION < (2, 0):
|
|
EXPECTED_POSTGRES_ENGINE = "django.db.backends.postgresql_psycopg2"
|
|
|
|
|
|
class DatabaseTestSuite(unittest.TestCase):
|
|
def test_postgres_parsing(self):
|
|
url = "postgres://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == EXPECTED_POSTGRES_ENGINE
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5431
|
|
|
|
def test_postgres_unix_socket_parsing(self):
|
|
url = "postgres://%2Fvar%2Frun%2Fpostgresql/d8r82722r2kuvn"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == EXPECTED_POSTGRES_ENGINE
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "/var/run/postgresql"
|
|
assert url["USER"] == ""
|
|
assert url["PASSWORD"] == ""
|
|
assert url["PORT"] == ""
|
|
|
|
url = "postgres://%2FUsers%2Fpostgres%2FRuN/d8r82722r2kuvn"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == EXPECTED_POSTGRES_ENGINE
|
|
assert url["HOST"] == "/Users/postgres/RuN"
|
|
assert url["USER"] == ""
|
|
assert url["PASSWORD"] == ""
|
|
assert url["PORT"] == ""
|
|
|
|
def test_ipv6_parsing(self):
|
|
url = "postgres://ieRaekei9wilaim7:wegauwhgeuioweg@[2001:db8:1234::1234:5678:90af]:5431/d8r82722r2kuvn"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == EXPECTED_POSTGRES_ENGINE
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "2001:db8:1234::1234:5678:90af"
|
|
assert url["USER"] == "ieRaekei9wilaim7"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5431
|
|
|
|
def test_postgres_search_path_parsing(self):
|
|
url = "postgres://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn?currentSchema=otherschema"
|
|
url = dj_database_url.parse(url)
|
|
assert url["ENGINE"] == EXPECTED_POSTGRES_ENGINE
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5431
|
|
assert url["OPTIONS"]["options"] == "-c search_path=otherschema"
|
|
assert "currentSchema" not in url["OPTIONS"]
|
|
|
|
def test_postgres_parsing_with_special_characters(self):
|
|
url = "postgres://%23user:%23password@ec2-107-21-253-135.compute-1.amazonaws.com:5431/%23database"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == EXPECTED_POSTGRES_ENGINE
|
|
assert url["NAME"] == "#database"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "#user"
|
|
assert url["PASSWORD"] == "#password"
|
|
assert url["PORT"] == 5431
|
|
|
|
def test_postgis_parsing(self):
|
|
url = "postgis://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django.contrib.gis.db.backends.postgis"
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5431
|
|
|
|
def test_postgis_search_path_parsing(self):
|
|
url = "postgis://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn?currentSchema=otherschema"
|
|
url = dj_database_url.parse(url)
|
|
assert url["ENGINE"] == "django.contrib.gis.db.backends.postgis"
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5431
|
|
assert url["OPTIONS"]["options"] == "-c search_path=otherschema"
|
|
assert "currentSchema" not in url["OPTIONS"]
|
|
|
|
def test_mysql_gis_parsing(self):
|
|
url = "mysqlgis://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django.contrib.gis.db.backends.mysql"
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5431
|
|
|
|
def test_mysql_connector_parsing(self):
|
|
url = "mysql-connector://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "mysql.connector.django"
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5431
|
|
|
|
def test_cleardb_parsing(self):
|
|
url = "mysql://bea6eb025ca0d8:69772142@us-cdbr-east.cleardb.com/heroku_97681db3eff7580?reconnect=true"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django.db.backends.mysql"
|
|
assert url["NAME"] == "heroku_97681db3eff7580"
|
|
assert url["HOST"] == "us-cdbr-east.cleardb.com"
|
|
assert url["USER"] == "bea6eb025ca0d8"
|
|
assert url["PASSWORD"] == "69772142"
|
|
assert url["PORT"] == ""
|
|
|
|
def test_database_url(self):
|
|
del os.environ["DATABASE_URL"]
|
|
a = dj_database_url.config()
|
|
assert not a
|
|
|
|
os.environ[
|
|
"DATABASE_URL"
|
|
] = "postgres://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn"
|
|
|
|
url = dj_database_url.config()
|
|
|
|
assert url["ENGINE"] == EXPECTED_POSTGRES_ENGINE
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5431
|
|
|
|
def test_empty_sqlite_url(self):
|
|
url = "sqlite://"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django.db.backends.sqlite3"
|
|
assert url["NAME"] == ":memory:"
|
|
|
|
def test_memory_sqlite_url(self):
|
|
url = "sqlite://:memory:"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django.db.backends.sqlite3"
|
|
assert url["NAME"] == ":memory:"
|
|
|
|
def test_parse_engine_setting(self):
|
|
engine = "django_mysqlpool.backends.mysqlpool"
|
|
url = "mysql://bea6eb025ca0d8:69772142@us-cdbr-east.cleardb.com/heroku_97681db3eff7580?reconnect=true"
|
|
url = dj_database_url.parse(url, engine)
|
|
|
|
assert url["ENGINE"] == engine
|
|
|
|
def test_config_engine_setting(self):
|
|
engine = "django_mysqlpool.backends.mysqlpool"
|
|
os.environ[
|
|
"DATABASE_URL"
|
|
] = "mysql://bea6eb025ca0d8:69772142@us-cdbr-east.cleardb.com/heroku_97681db3eff7580?reconnect=true"
|
|
url = dj_database_url.config(engine=engine)
|
|
|
|
assert url["ENGINE"] == engine
|
|
|
|
def test_parse_conn_max_age_setting(self):
|
|
conn_max_age = 600
|
|
url = "mysql://bea6eb025ca0d8:69772142@us-cdbr-east.cleardb.com/heroku_97681db3eff7580?reconnect=true"
|
|
url = dj_database_url.parse(url, conn_max_age=conn_max_age)
|
|
|
|
assert url["CONN_MAX_AGE"] == conn_max_age
|
|
|
|
def test_config_conn_max_age_setting(self):
|
|
conn_max_age = 600
|
|
os.environ[
|
|
"DATABASE_URL"
|
|
] = "mysql://bea6eb025ca0d8:69772142@us-cdbr-east.cleardb.com/heroku_97681db3eff7580?reconnect=true"
|
|
url = dj_database_url.config(conn_max_age=conn_max_age)
|
|
|
|
assert url["CONN_MAX_AGE"] == conn_max_age
|
|
|
|
def test_database_url_with_options(self):
|
|
# Test full options
|
|
os.environ[
|
|
"DATABASE_URL"
|
|
] = "postgres://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn?sslrootcert=rds-combined-ca-bundle.pem&sslmode=verify-full"
|
|
url = dj_database_url.config()
|
|
|
|
assert url["ENGINE"] == EXPECTED_POSTGRES_ENGINE
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5431
|
|
assert url["OPTIONS"] == {
|
|
"sslrootcert": "rds-combined-ca-bundle.pem",
|
|
"sslmode": "verify-full",
|
|
}
|
|
|
|
# Test empty options
|
|
os.environ[
|
|
"DATABASE_URL"
|
|
] = "postgres://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn?"
|
|
url = dj_database_url.config()
|
|
assert "OPTIONS" not in url
|
|
|
|
def test_mysql_database_url_with_sslca_options(self):
|
|
os.environ[
|
|
"DATABASE_URL"
|
|
] = "mysql://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:3306/d8r82722r2kuvn?ssl-ca=rds-combined-ca-bundle.pem"
|
|
url = dj_database_url.config()
|
|
|
|
assert url["ENGINE"] == "django.db.backends.mysql"
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 3306
|
|
assert url["OPTIONS"] == {"ssl": {"ca": "rds-combined-ca-bundle.pem"}}
|
|
|
|
# Test empty options
|
|
os.environ[
|
|
"DATABASE_URL"
|
|
] = "mysql://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:3306/d8r82722r2kuvn?"
|
|
url = dj_database_url.config()
|
|
assert "OPTIONS" not in url
|
|
|
|
def test_oracle_parsing(self):
|
|
url = "oracle://scott:tiger@oraclehost:1521/hr"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django.db.backends.oracle"
|
|
assert url["NAME"] == "hr"
|
|
assert url["HOST"] == "oraclehost"
|
|
assert url["USER"] == "scott"
|
|
assert url["PASSWORD"] == "tiger"
|
|
assert url["PORT"] == "1521"
|
|
|
|
def test_oracle_gis_parsing(self):
|
|
url = "oraclegis://scott:tiger@oraclehost:1521/hr"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django.contrib.gis.db.backends.oracle"
|
|
assert url["NAME"] == "hr"
|
|
assert url["HOST"] == "oraclehost"
|
|
assert url["USER"] == "scott"
|
|
assert url["PASSWORD"] == "tiger"
|
|
assert url["PORT"] == 1521
|
|
|
|
def test_oracle_dsn_parsing(self):
|
|
url = (
|
|
"oracle://scott:tiger@/"
|
|
"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)"
|
|
"(HOST=oraclehost)(PORT=1521)))"
|
|
"(CONNECT_DATA=(SID=hr)))"
|
|
)
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django.db.backends.oracle"
|
|
assert url["USER"] == "scott"
|
|
assert url["PASSWORD"] == "tiger"
|
|
assert url["HOST"] == ""
|
|
assert url["PORT"] == ""
|
|
|
|
dsn = (
|
|
"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)"
|
|
"(HOST=oraclehost)(PORT=1521)))"
|
|
"(CONNECT_DATA=(SID=hr)))"
|
|
)
|
|
|
|
assert url["NAME"] == dsn
|
|
|
|
def test_oracle_tns_parsing(self):
|
|
url = "oracle://scott:tiger@/tnsname"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django.db.backends.oracle"
|
|
assert url["USER"] == "scott"
|
|
assert url["PASSWORD"] == "tiger"
|
|
assert url["NAME"] == "tnsname"
|
|
assert url["HOST"] == ""
|
|
assert url["PORT"] == ""
|
|
|
|
def test_redshift_parsing(self):
|
|
url = "redshift://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5439/d8r82722r2kuvn?currentSchema=otherschema"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "django_redshift_backend"
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == 5439
|
|
assert url["OPTIONS"]["options"] == "-c search_path=otherschema"
|
|
assert "currentSchema" not in url["OPTIONS"]
|
|
|
|
def test_mssql_parsing(self):
|
|
url = "mssql://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com/d8r82722r2kuvn?driver=ODBC Driver 13 for SQL Server"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "sql_server.pyodbc"
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == ""
|
|
assert url["OPTIONS"]["driver"] == "ODBC Driver 13 for SQL Server"
|
|
assert "currentSchema" not in url["OPTIONS"]
|
|
|
|
def test_mssql_instance_port_parsing(self):
|
|
url = "mssql://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com\\insnsnss:12345/d8r82722r2kuvn?driver=ODBC Driver 13 for SQL Server"
|
|
url = dj_database_url.parse(url)
|
|
|
|
assert url["ENGINE"] == "sql_server.pyodbc"
|
|
assert url["NAME"] == "d8r82722r2kuvn"
|
|
assert url["HOST"] == "ec2-107-21-253-135.compute-1.amazonaws.com\\insnsnss"
|
|
assert url["USER"] == "uf07k1i6d8ia0v"
|
|
assert url["PASSWORD"] == "wegauwhgeuioweg"
|
|
assert url["PORT"] == "12345"
|
|
assert url["OPTIONS"]["driver"] == "ODBC Driver 13 for SQL Server"
|
|
assert "currentSchema" not in url["OPTIONS"]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|