Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 0280ee5

Browse files
wwwliciousmythz
authored andcommitted
Dockerized db server instances (#624)
* Updating dapper to release 1.60.1 * adding docker compose to create firebird container instance for tests * fixing mysql provider version * fixing mysql table describe test case sensitive * adding mysql mariadb 5.5 to docker compose * fix issue causing erroneous firebird locks when recreating tables * adding docker readme * correcting spelling * correcting postgres dbproviderfactory version * adding postgres 9 docker test instance * adding dbproviderfactory to oracle test config * adding sql server, oracle XE and additional mysql and postgres versions Updating connection strings * adding example img
1 parent 68da117 commit 0280ee5

File tree

15 files changed

+239
-71
lines changed

15 files changed

+239
-71
lines changed

src/Docker/docker-compose.yml

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# this file creates docker instances of all the db engines required for running integration tests
2+
# before running tests, from a commandline in this directory type `docker-compose up -d` to start database engines
3+
# to remove all db engines after tesing, type `docker-compose down`
4+
5+
version: '3'
6+
7+
services:
8+
9+
firebird3:
10+
image: "jacobalberty/firebird:3.0.4"
11+
networks:
12+
- servicestack_test
13+
ports:
14+
- "48101:3050"
15+
environment:
16+
FIREBIRD_DATABASE: "test.gdb"
17+
FIREBIRD_USER: "test"
18+
ISC_PASSWORD: "masterkey"
19+
EnableWireCrypt: "true"
20+
21+
mysql5.5:
22+
image: mariadb:5.5
23+
networks:
24+
- servicestack_test
25+
ports:
26+
- "48201:3306"
27+
environment:
28+
MYSQL_DATABASE: "test"
29+
MYSQL_USER: "test"
30+
MYSQL_ROOT_PASSWORD: "test"
31+
32+
mysql10.1:
33+
image: mariadb:10.1
34+
networks:
35+
- servicestack_test
36+
ports:
37+
- "48202:3306"
38+
environment:
39+
MYSQL_DATABASE: "test"
40+
MYSQL_USER: "test"
41+
MYSQL_ROOT_PASSWORD: "test"
42+
43+
mysql10.2:
44+
image: mariadb:10.2
45+
networks:
46+
- servicestack_test
47+
ports:
48+
- "48203:3306"
49+
environment:
50+
MYSQL_DATABASE: "test"
51+
MYSQL_USER: "test"
52+
MYSQL_ROOT_PASSWORD: "test"
53+
54+
mysql10.3:
55+
image: mariadb:10.3
56+
networks:
57+
- servicestack_test
58+
ports:
59+
- "48204:3306"
60+
environment:
61+
MYSQL_DATABASE: "test"
62+
MYSQL_USER: "test"
63+
MYSQL_ROOT_PASSWORD: "test"
64+
65+
mysql10.4:
66+
image: mariadb:10.4
67+
networks:
68+
- servicestack_test
69+
ports:
70+
- "48205:3306"
71+
environment:
72+
MYSQL_DATABASE: "test"
73+
MYSQL_USER: "test"
74+
MYSQL_ROOT_PASSWORD: "test"
75+
76+
postgres9:
77+
image: postgres:9-alpine
78+
networks:
79+
- servicestack_test
80+
ports:
81+
- "48301:5432"
82+
environment:
83+
POSTGRES_USER: "test"
84+
POSTGRES_DB: "test"
85+
POSTGRES_PASSWORD: "test"
86+
87+
postgres10:
88+
image: postgres:10-alpine
89+
networks:
90+
- servicestack_test
91+
ports:
92+
- "48302:5432"
93+
environment:
94+
POSTGRES_USER: "test"
95+
POSTGRES_DB: "test"
96+
POSTGRES_PASSWORD: "test"
97+
98+
postgres11:
99+
image: postgres:11-alpine
100+
networks:
101+
- servicestack_test
102+
ports:
103+
- "48303:5432"
104+
environment:
105+
POSTGRES_USER: "test"
106+
POSTGRES_DB: "test"
107+
POSTGRES_PASSWORD: "test"
108+
109+
oracle11:
110+
image: epiclabs/docker-oracle-xe-11g
111+
networks:
112+
- servicestack_test
113+
ports:
114+
- "48401:1521"
115+
environment:
116+
ORACLE_ALLOW_REMOTE: "true"
117+
ORACLE_PASSWORD : "test"
118+
119+
MSSqlServer2017:
120+
image: mcr.microsoft.com/mssql/server:2017-latest-ubuntu
121+
networks:
122+
- servicestack_test
123+
ports:
124+
- "48501:1433"
125+
environment:
126+
MSSQL_PID: "Express"
127+
ACCEPT_EULA: "Y"
128+
SA_PASSWORD : "Test!tesT"
129+
networks:
130+
servicestack_test:

src/Docker/ormlite-docker.gif

146 KB
Loading

src/Docker/readme.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Docker database server instances for testing
2+
3+
This directory contains a docker compose file that can be used to create database server instances for running tests that do not support embedded instances. The list of db servers created is below.
4+
5+
To use, you must first have docker and docker compose installed.
6+
7+
## To spin up all the database servers, run the following
8+
9+
```bash
10+
$> docker-compose up -d
11+
```
12+
13+
## To remove/teardown the database servers, run the following
14+
15+
```bash
16+
$> docker-compose down
17+
```
18+
19+
## Database servers created
20+
21+
|Database|Version|Port|DbName|DbUser|DbPwd|
22+
|--------|-------|----|------|------|-----|
23+
|Firebird|3.0.4|48101|test|test|test|masterkey|
24+
|MySql (mariaDb)|5.5.x|48201|test|test|test|
25+
|MySql (mariaDb)|10.1.x|48202|test|test|test|
26+
|MySql (mariaDb)|10.2.x|48203|test|test|test|
27+
|MySql (mariaDb)|10.3.x|48204|test|test|test|
28+
|MySql (mariaDb)|10.4.x|48205|test|test|test|
29+
|Postgres|9.x|48301|test|test|test|
30+
|Postgres|10.x|48302|test|test|test|
31+
|Postgres|11.x|48303|test|test|test|
32+
|Oracle XE|11.x|48401|SID: xe|system|test|
33+
|MS SQL Server Express|2017.x|48501|master|sa|Test!tesT|
34+
35+
## What it looks like in action...
36+
37+
![Example](ormlite-docker.gif)

src/ServiceStack.OrmLite.Firebird/FirebirdOrmLiteDialectProvider.cs

Lines changed: 15 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -334,11 +334,7 @@ public override string ToCreateTableStatement(Type tableType)
334334
if (sbPk.Length != 0)
335335
sbColumns.AppendFormat(", \n PRIMARY KEY({0})", sbPk);
336336

337-
var sql = string.Format(
338-
"CREATE TABLE {0} \n(\n {1}{2} \n); \n",
339-
GetQuotedTableName(modelDef),
340-
StringBuilderCache.ReturnAndFree(sbColumns),
341-
StringBuilderCacheAlt.ReturnAndFree(sbConstraints));
337+
var sql = $"RECREATE TABLE {GetQuotedTableName(modelDef)} \n(\n {StringBuilderCache.ReturnAndFree(sbColumns)}{StringBuilderCacheAlt.ReturnAndFree(sbConstraints)} \n); \n";
342338

343339
return sql;
344340
}
@@ -421,7 +417,7 @@ public override List<string> ToCreateIndexStatements(Type tableType)
421417
protected override string GetIndexName(bool isUnique, string modelName, string fieldName)
422418
{
423419
return NamingStrategy.ApplyNameRestrictions(
424-
string.Format("{0}idx_{1}_{2}", isUnique ? "u" : "", modelName, fieldName).ToLower());
420+
$"{(isUnique ? "u" : "")}idx_{modelName}_{fieldName}".ToLower());
425421
}
426422

427423
protected override string ToCreateIndexStatement(bool isUnique, string indexName, ModelDefinition modelDef, string fieldName,
@@ -430,11 +426,7 @@ protected override string ToCreateIndexStatement(bool isUnique, string indexName
430426
var fieldNames = fieldName.Split(',')
431427
.Map(x => NamingStrategy.GetColumnName(x.LeftPart(' ')));
432428

433-
return string.Format("CREATE {0} INDEX {1} ON {2} ({3}); \n",
434-
isUnique ? "UNIQUE" : "",
435-
indexName,
436-
GetQuotedTableName(modelDef),
437-
string.Join(",", fieldNames.ToArray()));
429+
return $"CREATE {(isUnique ? "UNIQUE" : "")} INDEX {indexName} ON {GetQuotedTableName(modelDef)} ({string.Join(",", fieldNames.ToArray())}); \n";
438430
}
439431

440432
public static string RowVersionTriggerFormat = "{0}RowVersionUpdateTrigger";
@@ -566,14 +558,14 @@ public override string ToSelectFromProcedureStatement(
566558
sbColumnValues.Append(fieldDef.GetQuotedValue(fromObjWithProperties));
567559
}
568560

569-
var columnVaues = StringBuilderCache.ReturnAndFree(sbColumnValues);
561+
var columnValues = StringBuilderCache.ReturnAndFree(sbColumnValues);
570562
var sql = StringBuilderCache.Allocate();
571563
sql.AppendFormat("SELECT {0} \nFROM {1} {2}{3}{4} \n",
572564
GetColumnNames(GetModel(outputModelType)),
573565
GetQuotedTableName(modelDef),
574-
columnVaues.Length > 0 ? "(" : "",
575-
columnVaues,
576-
columnVaues.Length > 0 ? ")" : "");
566+
columnValues.Length > 0 ? "(" : "",
567+
columnValues,
568+
columnValues.Length > 0 ? ")" : "");
577569

578570
if (!string.IsNullOrEmpty(sqlFilter))
579571
{
@@ -605,11 +597,8 @@ public override string ToExecuteProcedureStatement(object objWithProperties)
605597
}
606598

607599
var columnValues = StringBuilderCache.ReturnAndFree(sbColumnValues);
608-
var sql = string.Format("EXECUTE PROCEDURE {0} {1}{2}{3};",
609-
GetQuotedTableName(modelDef),
610-
columnValues.Length > 0 ? "(" : "",
611-
columnValues,
612-
columnValues.Length > 0 ? ")" : "");
600+
var sql =
601+
$"EXECUTE PROCEDURE {GetQuotedTableName(modelDef)} {(columnValues.Length > 0 ? "(" : "")}{columnValues}{(columnValues.Length > 0 ? ")" : "")};";
613602

614603
return sql;
615604
}
@@ -634,7 +623,7 @@ private object GetNextValue(IDbCommand dbCmd, string sequence, object value)
634623

635624
}
636625

637-
dbCmd.CommandText = string.Format("select next value for {0} from RDB$DATABASE", Quote(sequence));
626+
dbCmd.CommandText = $"select next value for {Quote(sequence)} from RDB$DATABASE";
638627
long result = (long)dbCmd.ExecuteScalar();
639628
LastInsertId = result;
640629
return result;
@@ -645,19 +634,15 @@ private object GetNextValue(IDbCommand dbCmd, string sequence, object value)
645634
private string Quote(string name)
646635
{
647636
return QuoteNames
648-
? string.Format("\"{0}\"", name)
637+
? $"\"{name}\""
649638
: RESERVED.Contains(name.ToUpper())
650-
? string.Format("\"{0}\"", name)
639+
? $"\"{name}\""
651640
: name;
652641
}
653642

654643
public override string EscapeWildcards(string value)
655644
{
656-
if (value == null)
657-
return null;
658-
659-
return value
660-
.Replace("^", @"^^")
645+
return value?.Replace("^", @"^^")
661646
.Replace("_", @"^_")
662647
.Replace("%", @"^%");
663648
}
@@ -814,9 +799,8 @@ public override string ToSelectStatement(ModelDefinition modelDef,
814799
public override void DropColumn(IDbConnection db, Type modelType, string columnName)
815800
{
816801
var provider = db.GetDialectProvider();
817-
var command = string.Format("ALTER TABLE {0} DROP {1};",
818-
provider.GetQuotedTableName(modelType.GetModelMetadata().ModelName),
819-
provider.GetQuotedColumnName(columnName));
802+
var command =
803+
$"ALTER TABLE {provider.GetQuotedTableName(modelType.GetModelMetadata().ModelName)} DROP {provider.GetQuotedColumnName(columnName)};";
820804

821805
db.ExecuteSql(command);
822806
}

src/ServiceStack.OrmLite.MySql.Tests/MySqlAdminTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void Can_describe_a_table()
2525
{
2626
db.DropAndCreateTable<Author>();
2727

28-
var info = db.SqlList<Describe>("DESCRIBE author");
28+
var info = db.SqlList<Describe>("DESCRIBE Author");
2929

3030
info.PrintDump();
3131
}

src/ServiceStack.OrmLite.MySql.Tests/OrmLiteTestBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class MySqlConfig
1313
#else
1414
MySqlConnectorDialectProvider.Instance;
1515
#endif
16-
public static string ConnectionString = "Server=localhost;Database=test;UID=root;Password=test";
16+
public static string ConnectionString = "Server=localhost;Port=48201;Database=test;UID=root;Password=test";
1717
}
1818

1919
public class OrmLiteTestBase

src/ServiceStack.OrmLite.MySql.Tests/app.config

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
<configSections>
44
</configSections>
55
<connectionStrings>
6-
<add name="testDb" connectionString="Server=localhost;Database=test;UID=root;Password=test" providerName="MySql.Data.MySqlClient" />
6+
<add name="testDb" connectionString="Server=localhost;Database=test;Port=48201;UID=root;Password=test" providerName="MySql.Data.MySqlClient" />
77
</connectionStrings>
88
<startup>
99
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
1010
</startup>
1111
<system.data>
1212
<DbProviderFactories>
1313
<remove invariant="MySql.Data.MySqlClient" />
14-
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
14+
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.15.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
1515
</DbProviderFactories>
1616
</system.data>
1717
</configuration>

src/ServiceStack.OrmLite.MySql/app.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><system.data>
55
<DbProviderFactories>
66
<remove invariant="MySql.Data.MySqlClient" />
7-
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
7+
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.15.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
88
</DbProviderFactories>
99
</system.data></configuration>
Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
<?xml version="1.0"?>
2+
23
<configuration>
3-
<configSections>
4-
</configSections>
5-
<connectionStrings>
6-
<add name="testDb" connectionString="Data Source=localhost:1521/XE;User ID=servicestack_test;Password=servicestack_test;Unicode=True"/>
7-
</connectionStrings>
8-
<appSettings>
9-
<add key="servicestack:license" value="1001-e1JlZjoxMDAxLE5hbWU6VGVzdCBCdXNpbmVzcyxUeXBlOkJ1c2luZXNzLEhhc2g6UHVNTVRPclhvT2ZIbjQ5MG5LZE1mUTd5RUMzQnBucTFEbTE3TDczVEF4QUNMT1FhNXJMOWkzVjFGL2ZkVTE3Q2pDNENqTkQyUktRWmhvUVBhYTBiekJGUUZ3ZE5aZHFDYm9hL3lydGlwUHI5K1JsaTBYbzNsUC85cjVJNHE5QVhldDN6QkE4aTlvdldrdTgyTk1relY2eis2dFFqTThYN2lmc0JveHgycFdjPSxFeHBpcnk6MjAxMy0wMS0wMX0="/>
10-
</appSettings>
11-
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
12-
</configuration>
4+
<configSections>
5+
</configSections>
6+
<connectionStrings>
7+
<add name="testDb" connectionString="Data Source=localhost:48401/XE;User ID=system;Password=test;Unicode=True" />
8+
</connectionStrings>
9+
<appSettings>
10+
<add key="servicestack:license" value="1001-e1JlZjoxMDAxLE5hbWU6VGVzdCBCdXNpbmVzcyxUeXBlOkJ1c2luZXNzLEhhc2g6UHVNTVRPclhvT2ZIbjQ5MG5LZE1mUTd5RUMzQnBucTFEbTE3TDczVEF4QUNMT1FhNXJMOWkzVjFGL2ZkVTE3Q2pDNENqTkQyUktRWmhvUVBhYTBiekJGUUZ3ZE5aZHFDYm9hL3lydGlwUHI5K1JsaTBYbzNsUC85cjVJNHE5QVhldDN6QkE4aTlvdldrdTgyTk1relY2eis2dFFqTThYN2lmc0JveHgycFdjPSxFeHBpcnk6MjAxMy0wMS0wMX0=" />
11+
</appSettings>
12+
<startup>
13+
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
14+
</startup>
15+
<system.data>
16+
<DbProviderFactories>
17+
<remove invariant="Devart.Data.Oracle"/>
18+
<add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle, Version=8.3.115.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
19+
</DbProviderFactories>
20+
</system.data>
21+
</configuration>
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<?xml version="1.0" encoding="utf-8"?>
2+
23
<configuration>
3-
<startup>
4-
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
5-
</startup>
6-
7-
<system.data>
8-
<DbProviderFactories>
9-
<add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle, Version=8.3.115.0, Culture=neutral, PublicKeyToken=09af7300eec23701"/>
10-
</DbProviderFactories>
11-
</system.data></configuration>
4+
<startup>
5+
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
6+
</startup>
7+
8+
<system.data>
9+
<DbProviderFactories>
10+
<add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle, Version=8.3.115.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
11+
</DbProviderFactories>
12+
</system.data>
13+
</configuration>

0 commit comments

Comments
 (0)