Skip to content

Commit d0572cd

Browse files
Merge pull request #15 from max-ieremenko/release/4.0
Release/4.0
2 parents 6a259d2 + bdc489a commit d0572cd

File tree

68 files changed

+2329
-166
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+2329
-166
lines changed

Build/build-scripts.ps1

Lines changed: 91 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,8 @@ function Get-RepositoryCommitId {
3030
}
3131

3232
function Start-Mssql {
33-
# https://github.com/docker/for-win/issues/3171
34-
$containerId = exec {
35-
docker run `
36-
-d `
37-
-p 1433 `
38-
sqldatabase/mssql:2017
39-
}
40-
41-
$ip = exec {
42-
docker inspect `
43-
--format "{{.NetworkSettings.Networks.bridge.IPAddress}}" `
44-
$containerId
45-
}
46-
47-
$port = exec {
48-
docker inspect `
49-
--format "{{(index (index .NetworkSettings.Ports \""1433/tcp\"") 0).HostPort}}" `
50-
$containerId
51-
}
33+
$container = Start-Container sqldatabase/mssql:2017 1433
34+
$port = $container.port
5235

5336
$builder = New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder
5437
$builder["Initial Catalog"] = "SqlDatabaseTest"
@@ -59,58 +42,25 @@ function Start-Mssql {
5942
$builder["Data Source"] = ".,$port"
6043
$connectionString = $builder.ToString()
6144

62-
$builder["Data Source"] = $ip
45+
$builder["Data Source"] = $container.ip
6346
$remoteConnectionString = $builder.ToString()
6447

6548
return @{
66-
containerId = $containerId
49+
containerId = $container.containerId
6750
connectionString = $connectionString
6851
remoteConnectionString = $remoteConnectionString
6952
}
7053
}
7154

7255
function Wait-Mssql($connectionString) {
73-
$connection = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList $connectionString
74-
try {
75-
for ($i = 0; $i -lt 20; $i++) {
76-
try {
77-
$connection.Open()
78-
return
79-
}
80-
catch {
81-
Start-Sleep -Seconds 1
82-
}
83-
}
84-
85-
$connection.Open()
86-
}
87-
finally {
88-
$connection.Dispose()
89-
}
56+
Wait-Connection System.Data.SqlClient.SqlConnection $connectionString
9057
}
9158

9259
function Start-Pgsql {
9360
$npgsqldll = Join-Path $env:USERPROFILE ".nuget\packages\npgsql\4.0.11\lib\netstandard2.0\Npgsql.dll"
9461
Add-Type -Path $npgsqldll
9562

96-
$containerId = exec {
97-
docker run `
98-
-d `
99-
-p 5432 `
100-
sqldatabase/postgres:13.3
101-
}
102-
103-
$ip = exec {
104-
docker inspect `
105-
--format "{{.NetworkSettings.Networks.bridge.IPAddress}}" `
106-
$containerId
107-
}
108-
109-
$port = exec {
110-
docker inspect `
111-
--format "{{(index (index .NetworkSettings.Ports \""5432/tcp\"") 0).HostPort}}" `
112-
$containerId
113-
}
63+
$container = Start-Container sqldatabase/postgres:13.3 5432
11464

11565
$builder = New-Object -TypeName Npgsql.NpgsqlConnectionStringBuilder
11666
$builder["Database"] = "sqldatabasetest"
@@ -119,24 +69,97 @@ function Start-Pgsql {
11969
$builder["Timeout"] = 5
12070

12171
$builder.Host = "localhost"
122-
$builder.Port = $port.ToString()
72+
$builder.Port = $container.port.ToString()
12373
$connectionString = $builder.ToString()
12474

125-
$builder.Host = $ip.ToString()
75+
$builder.Host = $container.ip.ToString()
12676
$builder.Port = 5432
12777
$remoteConnectionString = $builder.ToString()
12878

12979
return @{
130-
containerId = $containerId
80+
containerId = $container.containerId
13181
connectionString = $connectionString
13282
remoteConnectionString = $remoteConnectionString
13383
}
13484
}
13585

13686
function Wait-Pgsql($connectionString) {
137-
$connection = New-Object -TypeName Npgsql.NpgsqlConnection -ArgumentList $connectionString
87+
Wait-Connection Npgsql.NpgsqlConnection $connectionString
88+
}
89+
90+
function Start-Mysql {
91+
$sqlConnectordll = Join-Path $env:USERPROFILE "\.nuget\packages\mysqlconnector\1.3.10\lib\netstandard2.0\MySqlConnector.dll"
92+
Add-Type -Path $sqlConnectordll
93+
94+
$container = Start-Container sqldatabase/mysql:8.0.25 3306
95+
96+
$builder = New-Object -TypeName MySqlConnector.MySqlConnectionStringBuilder
97+
$builder["Database"] = "sqldatabasetest"
98+
$builder["User ID"] = "root"
99+
$builder["Password"] = "qwerty"
100+
$builder["ConnectionTimeout"] = 5
101+
102+
$builder.Server = "localhost"
103+
$builder.Port = $container.port.ToString()
104+
$connectionString = $builder.ToString()
105+
106+
$builder.Server = $container.ip.ToString()
107+
$builder.Port = 3306
108+
$remoteConnectionString = $builder.ToString()
109+
110+
return @{
111+
containerId = $container.containerId
112+
connectionString = $connectionString
113+
remoteConnectionString = $remoteConnectionString
114+
}
115+
}
116+
117+
function Wait-Mysql($connectionString) {
118+
Wait-Connection MySqlConnector.MySqlConnection $connectionString
119+
}
120+
121+
function Start-Container {
122+
param (
123+
$image,
124+
$containerPort
125+
)
126+
127+
$containerId = exec {
128+
docker run `
129+
-d `
130+
-p $containerPort `
131+
$image
132+
}
133+
134+
$ip = exec {
135+
docker inspect `
136+
--format "{{.NetworkSettings.Networks.bridge.IPAddress}}" `
137+
$containerId
138+
}
139+
140+
$hostPort = exec {
141+
docker inspect `
142+
--format "{{(index (index .NetworkSettings.Ports \""$containerPort/tcp\"") 0).HostPort}}" `
143+
$containerId
144+
}
145+
146+
return @{
147+
containerId = $containerId
148+
ip = $ip
149+
port = $hostPort
150+
}
151+
}
152+
153+
function Wait-Connection {
154+
param (
155+
$connectionName,
156+
$connectionString,
157+
$timeout = 50
158+
)
159+
160+
$connection = New-Object -TypeName $connectionName -ArgumentList $connectionString
138161
try {
139-
for ($i = 0; $i -lt 20; $i++) {
162+
for ($i = 0; $i -lt $timeout; $i++) {
140163
try {
141164
$connection.Open()
142165
return
@@ -146,9 +169,14 @@ function Wait-Pgsql($connectionString) {
146169
}
147170
}
148171

149-
$connection.Open()
172+
try {
173+
$connection.Open()
174+
}
175+
catch {
176+
throw "$connectionName $connectionString"
177+
}
150178
}
151179
finally {
152180
$connection.Dispose()
153181
}
154-
}
182+
}

Build/build-tasks.it-ps-desktop.ps1

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
param(
22
$settings
3+
, $database
34
)
45

56
task Test RunContainers, CopyModule, PublishModule, RunTest
67

78
. .\build-scripts.ps1
89

9-
$mssqlContainerId = ""
10-
$mssqlConnectionString = ""
11-
$pgsqlContainerId = ""
12-
$pgsqlConnectionString = ""
10+
$containerId = ""
11+
$connectionString = ""
1312
$testDir = Join-Path ([Environment]::GetFolderPath("MyDocuments")) "WindowsPowerShell\modules\SqlDatabase"
1413

1514
task CopyModule {
@@ -28,28 +27,17 @@ task PublishModule {
2827
}
2928

3029
task RunContainers {
31-
$info = Start-Mssql
32-
$script:mssqlContainerId = $info.containerId
33-
$script:mssqlConnectionString = $info.connectionString
34-
Write-Output $mssqlConnectionString
35-
36-
$info = Start-Pgsql
37-
$script:pgsqlContainerId = $info.containerId
38-
$script:pgsqlConnectionString = $info.connectionString
39-
Write-Output $pgsqlConnectionString
30+
$info = & "Start-$database"
31+
$script:containerId = $info.containerId
32+
$script:connectionString = $info.connectionString
33+
Write-Output $connectionString
4034
}
4135

4236
task RunTest {
43-
Wait-Mssql $mssqlConnectionString
44-
Wait-Pgsql $pgsqlConnectionString
37+
& "Wait-$database" $connectionString
4538

46-
$env:connectionString = $mssqlConnectionString
47-
$testScript = Join-Path $settings.integrationTests "MsSql\TestPowerShell.ps1"
48-
$command = ". $testScript"
49-
exec { powershell -NoLogo -Command "$command" }
50-
51-
$env:connectionString = $pgsqlConnectionString
52-
$testScript = Join-Path $settings.integrationTests "PgSql\TestPowerShell.ps1"
39+
$env:connectionString = $connectionString
40+
$testScript = Join-Path $settings.integrationTests "$database\TestPowerShell.ps1"
5341
$command = ". $testScript"
5442
exec { powershell -NoLogo -Command "$command" }
5543
}
@@ -59,5 +47,5 @@ Exit-Build {
5947
Remove-Item -Path $testDir -Force -Recurse
6048
}
6149

62-
exec { docker container rm -f $mssqlContainerId $pgsqlContainerId } | Out-Null
50+
exec { docker container rm -f $containerId } | Out-Null
6351
}

0 commit comments

Comments
 (0)