Skip to content

Commit feff769

Browse files
authored
feat: fixture now configure docker env variables.
feat: fixture now configure docker env variables.
2 parents 5c008b0 + 78c72e8 commit feff769

File tree

18 files changed

+870
-95
lines changed

18 files changed

+870
-95
lines changed

src/pytest_databases/docker/cockroachdb.py

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121
# SOFTWARE.
2222

23-
2423
from __future__ import annotations
2524

25+
import os
2626
from typing import TYPE_CHECKING
2727

2828
import psycopg
@@ -44,13 +44,35 @@ async def cockroachdb_responsive(host: str, port: int, database: str, driver_opt
4444

4545

4646
@pytest.fixture()
47-
async def cockroachdb_service(docker_services: DockerServiceRegistry) -> None:
47+
def cockroachdb_port() -> int:
48+
return 26257
49+
50+
51+
@pytest.fixture()
52+
def cockroachdb_database() -> str:
53+
return "defaultdb"
54+
55+
56+
@pytest.fixture()
57+
def cockroachdb_driver_opts() -> dict[str, str]:
58+
return {"sslmode": "disable"}
59+
60+
61+
@pytest.fixture(autouse=False)
62+
async def cockroachdb_service(
63+
docker_services: DockerServiceRegistry,
64+
cockroachdb_port: int,
65+
cockroachdb_database: str,
66+
cockroachdb_driver_opts: dict[str, str],
67+
) -> None:
68+
os.environ["COCKROACHDB_DATABASE"] = cockroachdb_database
69+
os.environ["COCKROACHDB_PORT"] = str(cockroachdb_port)
4870
await docker_services.start(
4971
"cockroachdb",
5072
timeout=60,
5173
pause=1,
5274
check=cockroachdb_responsive,
53-
port=26257,
54-
database="defaultdb",
55-
driver_opts={"sslmode": "disable"},
75+
port=cockroachdb_port,
76+
database=cockroachdb_database,
77+
driver_opts=cockroachdb_driver_opts,
5678
)

src/pytest_databases/docker/docker-compose.yml

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,128 +4,128 @@ services:
44
- default
55
image: postgres:12
66
ports:
7-
- "5423:5432" # use a non-standard port here
7+
- "${POSTGRES12_PORT}:5432" # use a non-standard port here
88
environment:
9-
POSTGRES_PASSWORD: super-secret
9+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
1010
postgres13:
1111
networks:
1212
- default
1313
image: postgres:13
1414
ports:
15-
- "5424:5432" # use a non-standard port here
15+
- "${POSTGRES13_PORT}:5432" # use a non-standard port here
1616
environment:
17-
POSTGRES_PASSWORD: super-secret
17+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
1818
postgres14:
1919
networks:
2020
- default
2121
image: postgres:14
2222
ports:
23-
- "5425:5432" # use a non-standard port here
23+
- "${POSTGRES14_PORT}:5432" # use a non-standard port here
2424
environment:
25-
POSTGRES_PASSWORD: super-secret
25+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
2626
postgres15:
2727
networks:
2828
- default
2929
image: postgres:15
3030
ports:
31-
- "5426:5432" # use a non-standard port here
31+
- "${POSTGRES15_PORT}:5432" # use a non-standard port here
3232
environment:
33-
POSTGRES_PASSWORD: super-secret
33+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
3434
postgres16:
3535
networks:
3636
- default
3737
image: postgres:16
3838
ports:
39-
- "5427:5432" # use a non-standard port here
39+
- "${POSTGRES16_PORT}:5432" # use a non-standard port here
4040
environment:
41-
POSTGRES_PASSWORD: super-secret
41+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
4242
mariadb113:
4343
networks:
4444
- default
4545
image: mariadb:11.3
4646
ports:
47-
- "3359:3306" # use a non-standard port here
47+
- "${MARIADB113_PORT}:3306" # use a non-standard port here
4848
environment:
49-
MARIADB_ROOT_PASSWORD: super-secret
50-
MARIADB_PASSWORD: super-secret
51-
MARIADB_USER: app
52-
MARIADB_DATABASE: db
49+
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
50+
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
51+
MARIADB_USER: ${MARIADB_USER}
52+
MARIADB_DATABASE: ${MARIADB_DATABASE}
5353
MARIADB_ROOT_HOST: "%"
5454
LANG: C.UTF-8
5555
mysql8:
5656
networks:
5757
- default
5858
image: mysql:latest
5959
ports:
60-
- "3360:3306" # use a non-standard port here
60+
- "${MYSQL8_PORT}:3306" # use a non-standard port here
6161
environment:
62-
MYSQL_ROOT_PASSWORD: super-secret
63-
MYSQL_PASSWORD: super-secret
64-
MYSQL_USER: app
65-
MYSQL_DATABASE: db
62+
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
63+
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
64+
MYSQL_USER: ${MYSQL_USER}
65+
MYSQL_DATABASE: ${MYSQL_DATABASE}
6666
MYSQL_ROOT_HOST: "%"
6767
LANG: C.UTF-8
6868
mysql57:
6969
networks:
7070
- default
7171
image: mysql:5.7
7272
ports:
73-
- "3362:3306" # use a non-standard port here
73+
- "${MYSQL57_PORT}:3306" # use a non-standard port here
7474
environment:
75-
MYSQL_ROOT_PASSWORD: super-secret
76-
MYSQL_PASSWORD: super-secret
77-
MYSQL_USER: app
78-
MYSQL_DATABASE: db
75+
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
76+
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
77+
MYSQL_USER: ${MYSQL_USER}
78+
MYSQL_DATABASE: ${MYSQL_DATABASE}
7979
MYSQL_ROOT_HOST: "%"
8080
LANG: C.UTF-8
8181
mysql56:
8282
networks:
8383
- default
8484
image: mysql:5.6
8585
ports:
86-
- "3363:3306" # use a non-standard port here
86+
- "${MYSQL56_PORT}:3306" # use a non-standard port here
8787
environment:
88-
MYSQL_ROOT_PASSWORD: super-secret
89-
MYSQL_PASSWORD: super-secret
90-
MYSQL_USER: app
91-
MYSQL_DATABASE: db
88+
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
89+
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
90+
MYSQL_USER: ${MYSQL_USER}
91+
MYSQL_DATABASE: ${MYSQL_DATABASE}
9292
MYSQL_ROOT_HOST: "%"
9393
LANG: C.UTF-8
9494
oracle18c:
9595
networks:
9696
- default
9797
image: gvenzl/oracle-xe:18-slim-faststart
9898
ports:
99-
- "1514:1521" # use a non-standard port here
99+
- "${ORACLE18C_PORT}:1521" # use a non-standard port here
100100
environment:
101-
ORACLE_PASSWORD: super-secret
102-
APP_USER_PASSWORD: super-secret
103-
APP_USER: app
101+
ORACLE_PASSWORD: ${ORACLE_SYSTEM_PASSWORD}
102+
APP_USER_PASSWORD: ${ORACLE_PASSWORD}
103+
APP_USER: ${ORACLE_USER}
104104
oracle23c:
105105
networks:
106106
- default
107107
image: gvenzl/oracle-free:23-slim-faststart
108108
ports:
109-
- "1513:1521" # use a non-standard port here
109+
- "${ORACLE23C_PORT}:1521" # use a non-standard port here
110110
environment:
111-
ORACLE_PASSWORD: super-secret
112-
APP_USER_PASSWORD: super-secret
113-
APP_USER: app
111+
ORACLE_PASSWORD: ${ORACLE_SYSTEM_PASSWORD}
112+
APP_USER_PASSWORD: ${ORACLE_PASSWORD}
113+
APP_USER: ${ORACLE_USER}
114114
mssql2022:
115115
networks:
116116
- default
117117
image: mcr.microsoft.com/mssql/server:2022-latest
118118
ports:
119-
- "4133:1433" # use a non-standard port here
119+
- "${MSSQL2022_PORT:-4133}:1433" # use a non-standard port here
120120
environment:
121-
SA_PASSWORD: Super-secret1
121+
SA_PASSWORD: ${MSSQL_PASSWORD:-Super-secret1}
122122
MSSQL_PID: Developer
123123
ACCEPT_EULA: Accepted
124124
MSSQL_TCP_PORT: 1433
125125
spanner:
126126
image: gcr.io/cloud-spanner-emulator/emulator:latest
127127
ports:
128-
- "9010:9010"
128+
- "${SPANNER_PORT}:9010"
129129
# Init (Create Instance)
130130
spanner_init:
131131
image: gcr.io/google.com/cloudsdktool/cloud-sdk:332.0.0-slim
@@ -136,9 +136,9 @@ services:
136136
gcloud config set auth/disable_credentials true &&
137137
gcloud spanner instances create $${INSTANCE_NAME} --config=emulator-config --description=Emulator --nodes=1'
138138
environment:
139-
PROJECT_ID: emulator-test-project
140-
INSTANCE_NAME: test-instance
141-
DATABASE_NAME: test-database
139+
PROJECT_ID: ${GOOGLE_CLOUD_PROJECT}
140+
INSTANCE_NAME: ${SPANNER_INSTANCE}
141+
DATABASE_NAME: ${SPANNER_DATABASE}
142142
depends_on:
143143
- spanner
144144
cockroachdb:
@@ -147,9 +147,9 @@ services:
147147
restart: "no"
148148
expose:
149149
- "8080"
150-
- "26257"
150+
- "${COCKROACHDB_PORT}"
151151
ports:
152-
- "26257:26257"
152+
- "${COCKROACHDB_PORT}:26257"
153153
- "8880:8080"
154154
healthcheck:
155155
test: ["CMD", "curl", "-f", "http://localhost:8080/health?ready=1"]
@@ -159,17 +159,17 @@ services:
159159
redis:
160160
image: redis
161161
ports:
162-
- "6397:6379"
162+
- "${REDIS_PORT}:6379"
163163
keydb:
164164
image: eqalpha/keydb
165165
ports:
166-
- "6396:6379"
166+
- "${KEYDB_PORT}:6379"
167167
dragonfly:
168168
image: "docker.dragonflydb.io/dragonflydb/dragonfly"
169169
ulimits:
170170
memlock: -1
171171
ports:
172-
- "6398:6379"
172+
- "${DRAGONFLY_PORT}:6379"
173173
# For better performance, consider `host` mode instead `port` to avoid docker NAT.
174174
# `host` mode is NOT currently supported in Swarm Mode.
175175
# https://docs.docker.com/compose/compose-file/compose-file-v3/#network_mode

src/pytest_databases/docker/dragonfly.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
from __future__ import annotations
2525

26+
import os
2627
from typing import TYPE_CHECKING
2728

2829
import pytest
@@ -50,4 +51,5 @@ def dragonfly_port() -> int:
5051

5152
@pytest.fixture(autouse=False)
5253
async def dragonfly_service(docker_services: DockerServiceRegistry, dragonfly_port: int) -> None:
54+
os.environ["DRAGONFLY_PORT"] = str(dragonfly_port)
5355
await docker_services.start("dragonfly", check=dragonfly_responsive, port=dragonfly_port)

src/pytest_databases/docker/keydb.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
from __future__ import annotations
2525

26+
import os
2627
from typing import TYPE_CHECKING
2728

2829
import pytest
@@ -50,4 +51,5 @@ def keydb_port() -> int:
5051

5152
@pytest.fixture(autouse=False)
5253
async def keydb_service(docker_services: DockerServiceRegistry, keydb_port: int) -> None:
54+
os.environ["KEYDB_PORT"] = str(keydb_port)
5355
await docker_services.start("keydb", check=keydb_responsive, port=keydb_port)

src/pytest_databases/docker/mariadb.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
from __future__ import annotations
2525

26+
import contextlib
27+
import os
2628
from typing import TYPE_CHECKING
2729

2830
import asyncmy
@@ -50,7 +52,8 @@ async def mariadb_responsive(host: str, port: int, user: str, password: str, dat
5052
resp = await cursor.fetchone()
5153
return resp[0] == 1
5254
finally:
53-
await conn.close()
55+
with contextlib.suppress(Exception):
56+
await conn.close()
5457

5558

5659
@pytest.fixture()
@@ -63,6 +66,11 @@ def mariadb_password() -> str:
6366
return "super-secret"
6467

6568

69+
@pytest.fixture()
70+
def mariadb_root_password() -> str:
71+
return "super-secret"
72+
73+
6674
@pytest.fixture()
6775
def mariadb_database() -> str:
6876
return "db"
@@ -90,9 +98,15 @@ async def mariadb113_service(
9098
mariadb_database: str,
9199
mariadb_user: str,
92100
mariadb_password: str,
101+
mariadb_root_password: str,
93102
) -> None:
103+
os.environ["MARIADB_ROOT_PASSWORD"] = mariadb_root_password
104+
os.environ["MARIADB_PASSWORD"] = mariadb_password
105+
os.environ["MARIADB_USER"] = mariadb_user
106+
os.environ["MARIADB_DATABASE"] = mariadb_database
107+
os.environ["MARIADB113_PORT"] = str(mariadb113_port)
94108
await docker_services.start(
95-
"mariadb8",
109+
"mariadb113",
96110
timeout=45,
97111
pause=1,
98112
check=mariadb_responsive,
@@ -111,7 +125,13 @@ async def mariadb_service(
111125
mariadb_database: str,
112126
mariadb_user: str,
113127
mariadb_password: str,
128+
mariadb_root_password: str,
114129
) -> None:
130+
os.environ["MARIADB_ROOT_PASSWORD"] = mariadb_root_password
131+
os.environ["MARIADB_PASSWORD"] = mariadb_password
132+
os.environ["MARIADB_USER"] = mariadb_user
133+
os.environ["MARIADB_DATABASE"] = mariadb_database
134+
os.environ[f"{mariadb_default_version.upper()}_PORT"] = str(mariadb_port)
115135
await docker_services.start(
116136
mariadb_default_version,
117137
timeout=45,

0 commit comments

Comments
 (0)