@@ -30,25 +30,8 @@ function Get-RepositoryCommitId {
3030}
3131
3232function 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
7255function 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
9259function 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
13686function 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+ }
0 commit comments