Skip to content

Commit 148198d

Browse files
committed
Add MS Sql Server
1 parent 1e4fa30 commit 148198d

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

testcontainers/mssql.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from os import environ
2+
3+
from testcontainers.core.generic import DbContainer
4+
5+
6+
class SqlServerContainer(DbContainer):
7+
SQLSERVER_PASSWORD = environ.get("SQLSERVER_PASSWORD", "1Secure*Password1")
8+
SQLSERVER_USER = "SA"
9+
SQLSERVER_DBNAME = "tempdb"
10+
11+
def __init__(self, image="mcr.microsoft.com/mssql/server:2019-latest", **kwargs):
12+
super(SqlServerContainer, self).__init__(image)
13+
self.port_to_expose = 1433
14+
self.with_exposed_ports(self.port_to_expose)
15+
self.ACCEPT_EULA = 'Y'
16+
self.MSSQL_PID = 'Developer'
17+
18+
if 'SQLSERVER_PASSWORD' in kwargs:
19+
self.SQLSERVER_PASSWORD = kwargs['SQLSERVER_PASSWORD']
20+
if 'SQLSERVER_USER' in kwargs:
21+
self.SQLSERVER_USER = kwargs['SQLSERVER_USER']
22+
if 'SQLSERVER_DBNAME' in kwargs:
23+
self.SQLSERVER_DBNAME = kwargs['SQLSERVER_DBNAME']
24+
25+
def _configure(self):
26+
self.with_env("SA_PASSWORD", self.SQLSERVER_PASSWORD)
27+
self.with_env("SQLSERVER_USER", self.SQLSERVER_USER)
28+
self.with_env("SQLSERVER_DBNAME", self.SQLSERVER_DBNAME)
29+
self.with_env("ACCEPT_EULA", self.ACCEPT_EULA)
30+
self.with_env("MSSQL_PID", self.MSSQL_PID)
31+
32+
def get_connection_url(self):
33+
return super()._create_connection_url(dialect="mssql+pymssql",
34+
username=self.SQLSERVER_USER,
35+
password=self.SQLSERVER_PASSWORD,
36+
db_name=self.SQLSERVER_DBNAME,
37+
port=self.port_to_expose)

tests/test_db_containers.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from testcontainers.core.generic import GenericContainer
66
from testcontainers.core.waiting_utils import wait_for
7+
from testcontainers.mssql import SqlServerContainer
78
from testcontainers.mysql import MySqlContainer, MariaDbContainer
89
from testcontainers.oracle import OracleDbContainer
910
from testcontainers.postgres import PostgresContainer
@@ -100,3 +101,13 @@ def connect():
100101
cursor = db.restaurants.find({"borough": "Manhattan"})
101102
for document in cursor:
102103
print(document)
104+
105+
106+
def test_docker_run_mssql():
107+
config = SqlServerContainer()
108+
with config as mssql:
109+
e = sqlalchemy.create_engine(mssql.get_connection_url())
110+
result = e.execute('select @@servicename')
111+
for row in result:
112+
print(row[0])
113+
assert row[0] == 'MSSQLSERVER'

0 commit comments

Comments
 (0)