@@ -30,25 +30,8 @@ function Get-RepositoryCommitId {
30
30
}
31
31
32
32
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
52
35
53
36
$builder = New-Object - TypeName System.Data.SqlClient.SqlConnectionStringBuilder
54
37
$builder [" Initial Catalog" ] = " SqlDatabaseTest"
@@ -59,58 +42,25 @@ function Start-Mssql {
59
42
$builder [" Data Source" ] = " .,$port "
60
43
$connectionString = $builder.ToString ()
61
44
62
- $builder [" Data Source" ] = $ip
45
+ $builder [" Data Source" ] = $container . ip
63
46
$remoteConnectionString = $builder.ToString ()
64
47
65
48
return @ {
66
- containerId = $containerId
49
+ containerId = $container . containerId
67
50
connectionString = $connectionString
68
51
remoteConnectionString = $remoteConnectionString
69
52
}
70
53
}
71
54
72
55
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
90
57
}
91
58
92
59
function Start-Pgsql {
93
60
$npgsqldll = Join-Path $env: USERPROFILE " .nuget\packages\npgsql\4.0.11\lib\netstandard2.0\Npgsql.dll"
94
61
Add-Type - Path $npgsqldll
95
62
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
114
64
115
65
$builder = New-Object - TypeName Npgsql.NpgsqlConnectionStringBuilder
116
66
$builder [" Database" ] = " sqldatabasetest"
@@ -119,24 +69,97 @@ function Start-Pgsql {
119
69
$builder [" Timeout" ] = 5
120
70
121
71
$builder.Host = " localhost"
122
- $builder.Port = $port.ToString ()
72
+ $builder.Port = $container . port.ToString ()
123
73
$connectionString = $builder.ToString ()
124
74
125
- $builder.Host = $ip.ToString ()
75
+ $builder.Host = $container . ip.ToString ()
126
76
$builder.Port = 5432
127
77
$remoteConnectionString = $builder.ToString ()
128
78
129
79
return @ {
130
- containerId = $containerId
80
+ containerId = $container . containerId
131
81
connectionString = $connectionString
132
82
remoteConnectionString = $remoteConnectionString
133
83
}
134
84
}
135
85
136
86
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
138
161
try {
139
- for ($i = 0 ; $i -lt 20 ; $i ++ ) {
162
+ for ($i = 0 ; $i -lt $timeout ; $i ++ ) {
140
163
try {
141
164
$connection.Open ()
142
165
return
@@ -146,9 +169,14 @@ function Wait-Pgsql($connectionString) {
146
169
}
147
170
}
148
171
149
- $connection.Open ()
172
+ try {
173
+ $connection.Open ()
174
+ }
175
+ catch {
176
+ throw " $connectionName $connectionString "
177
+ }
150
178
}
151
179
finally {
152
180
$connection.Dispose ()
153
181
}
154
- }
182
+ }
0 commit comments