|
4 | 4 | package mysql |
5 | 5 |
|
6 | 6 | import ( |
7 | | - "context" |
8 | 7 | "fmt" |
9 | 8 | "os" |
10 | 9 | "strings" |
11 | 10 | "testing" |
12 | | - |
13 | | - "github.com/hashicorp/go-version" |
14 | | - |
15 | | - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" |
16 | | - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" |
17 | 11 | ) |
18 | 12 |
|
19 | | -// To run these acceptance tests, you will need access to a MySQL server. |
20 | | -// Amazon RDS is one way to get a MySQL server. If you use RDS, you can |
21 | | -// use the root account credentials you specified when creating an RDS |
22 | | -// instance to get the access necessary to run these tests. (the tests |
23 | | -// assume full access to the server.) |
24 | | -// |
25 | | -// Set the MYSQL_ENDPOINT and MYSQL_USERNAME environment variables before |
26 | | -// running the tests. If the given user has a password then you will also need |
27 | | -// to set MYSQL_PASSWORD. |
28 | | -// |
29 | | -// The tests assume a reasonably-vanilla MySQL configuration. In particular, |
30 | | -// they assume that the "utf8" character set is available and that |
31 | | -// "utf8_bin" is a valid collation that isn't the default for that character |
32 | | -// set. |
33 | | -// |
34 | | -// You can run the tests like this: |
35 | | -// make testacc TEST=./builtin/providers/mysql |
36 | | - |
37 | | -var testAccProviderFactories map[string]func() (*schema.Provider, error) |
38 | | - |
39 | | -// var testAccProviders map[string]*schema.Provider |
40 | | -var testAccProvider *schema.Provider |
41 | | - |
42 | | -func init() { |
43 | | - testAccProvider = Provider() |
44 | | - testAccProviderFactories = map[string]func() (*schema.Provider, error){ |
45 | | - "mysql": func() (*schema.Provider, error) { return testAccProvider, nil }, |
46 | | - } |
47 | | -} |
48 | | - |
49 | | -func TestProvider(t *testing.T) { |
50 | | - if err := Provider().InternalValidate(); err != nil { |
51 | | - t.Fatalf("err: %s", err) |
52 | | - } |
53 | | -} |
54 | | - |
55 | | -func TestProvider_impl(t *testing.T) { |
56 | | - var _ = Provider() |
57 | | -} |
58 | | - |
59 | 13 | // TestMain sets up a shared MySQL/TiDB container for all testcontainers tests |
60 | 14 | // This is more efficient than starting a container for each test |
61 | 15 | func TestMain(m *testing.M) { |
@@ -153,207 +107,3 @@ func TestMain(m *testing.M) { |
153 | 107 | // Exit with test result code |
154 | 108 | os.Exit(code) |
155 | 109 | } |
156 | | - |
157 | | -func testAccPreCheck(t *testing.T) { |
158 | | - ctx := context.Background() |
159 | | - for _, name := range []string{"MYSQL_ENDPOINT", "MYSQL_USERNAME"} { |
160 | | - if v := os.Getenv(name); v == "" { |
161 | | - t.Fatal("MYSQL_ENDPOINT, MYSQL_USERNAME and optionally MYSQL_PASSWORD must be set for acceptance tests") |
162 | | - } |
163 | | - } |
164 | | - |
165 | | - raw := map[string]interface{}{ |
166 | | - "conn_params": map[string]interface{}{}, |
167 | | - } |
168 | | - err := testAccProvider.Configure(ctx, terraform.NewResourceConfigRaw(raw)) |
169 | | - if err != nil { |
170 | | - t.Fatal(err) |
171 | | - } |
172 | | -} |
173 | | - |
174 | | -func testAccPreCheckSkipNotRds(t *testing.T) { |
175 | | - testAccPreCheck(t) |
176 | | - |
177 | | - ctx := context.Background() |
178 | | - db, err := connectToMySQL(ctx, testAccProvider.Meta().(*MySQLConfiguration)) |
179 | | - if err != nil { |
180 | | - return |
181 | | - } |
182 | | - |
183 | | - rdsEnabled, err := serverRds(db) |
184 | | - if err != nil { |
185 | | - return |
186 | | - } |
187 | | - |
188 | | - if !rdsEnabled { |
189 | | - t.Skip("Skip on non RDS instance") |
190 | | - } |
191 | | -} |
192 | | - |
193 | | -func testAccPreCheckSkipRds(t *testing.T) { |
194 | | - testAccPreCheck(t) |
195 | | - |
196 | | - ctx := context.Background() |
197 | | - db, err := connectToMySQL(ctx, testAccProvider.Meta().(*MySQLConfiguration)) |
198 | | - if err != nil { |
199 | | - if strings.Contains(err.Error(), "SUPER privilege(s) for this operation") { |
200 | | - t.Skip("Skip on RDS") |
201 | | - } |
202 | | - return |
203 | | - } |
204 | | - |
205 | | - rdsEnabled, err := serverRds(db) |
206 | | - if err != nil { |
207 | | - return |
208 | | - } |
209 | | - |
210 | | - if rdsEnabled { |
211 | | - t.Skip("Skip on RDS") |
212 | | - } |
213 | | -} |
214 | | - |
215 | | -func testAccPreCheckSkipTiDB(t *testing.T) { |
216 | | - testAccPreCheck(t) |
217 | | - |
218 | | - ctx := context.Background() |
219 | | - db, err := connectToMySQL(ctx, testAccProvider.Meta().(*MySQLConfiguration)) |
220 | | - if err != nil { |
221 | | - t.Fatalf("Cannot connect to DB (SkipTiDB): %v", err) |
222 | | - return |
223 | | - } |
224 | | - |
225 | | - currentVersionString, err := serverVersionString(db) |
226 | | - if err != nil { |
227 | | - t.Fatalf("Cannot get DB version string (SkipTiDB): %v", err) |
228 | | - return |
229 | | - } |
230 | | - |
231 | | - if strings.Contains(currentVersionString, "TiDB") { |
232 | | - t.Skip("Skip on TiDB") |
233 | | - } |
234 | | -} |
235 | | - |
236 | | -func testAccPreCheckSkipMariaDB(t *testing.T) { |
237 | | - testAccPreCheck(t) |
238 | | - |
239 | | - ctx := context.Background() |
240 | | - db, err := connectToMySQL(ctx, testAccProvider.Meta().(*MySQLConfiguration)) |
241 | | - if err != nil { |
242 | | - t.Fatalf("Cannot connect to DB (SkipMariaDB): %v", err) |
243 | | - return |
244 | | - } |
245 | | - |
246 | | - currentVersionString, err := serverVersionString(db) |
247 | | - if err != nil { |
248 | | - t.Fatalf("Cannot get DB version string (SkipMariaDB): %v", err) |
249 | | - return |
250 | | - } |
251 | | - |
252 | | - if strings.Contains(currentVersionString, "MariaDB") { |
253 | | - t.Skip("Skip on MariaDB") |
254 | | - } |
255 | | -} |
256 | | - |
257 | | -func testAccPreCheckSkipNotMySQL8(t *testing.T) { |
258 | | - testAccPreCheckSkipNotMySQLVersionMin(t, "8.0.0") |
259 | | -} |
260 | | - |
261 | | -func testAccPreCheckSkipNotMySQLVersionMin(t *testing.T, minVersion string) { |
262 | | - testAccPreCheck(t) |
263 | | - |
264 | | - ctx := context.Background() |
265 | | - db, err := connectToMySQL(ctx, testAccProvider.Meta().(*MySQLConfiguration)) |
266 | | - if err != nil { |
267 | | - t.Fatalf("Cannot connect to DB (SkipNotMySQL8): %v", err) |
268 | | - return |
269 | | - } |
270 | | - |
271 | | - currentVersion, err := serverVersion(db) |
272 | | - if err != nil { |
273 | | - t.Fatalf("Cannot get DB version string (SkipNotMySQL8): %v", err) |
274 | | - return |
275 | | - } |
276 | | - |
277 | | - versionMin, _ := version.NewVersion(minVersion) |
278 | | - if currentVersion.LessThan(versionMin) { |
279 | | - // TiDB 7.x series advertises as 8.0 mysql so we batch its testing strategy with Mysql8 |
280 | | - isTiDB, tidbVersion, mysqlCompatibilityVersion, err := serverTiDB(db) |
281 | | - if err != nil { |
282 | | - t.Fatalf("Cannot get DB version string (SkipNotMySQL8): %v", err) |
283 | | - return |
284 | | - } |
285 | | - if isTiDB { |
286 | | - mysqlVersion, err := version.NewVersion(mysqlCompatibilityVersion) |
287 | | - if err != nil { |
288 | | - t.Fatalf("Cannot get DB version string for TiDB (SkipNotMySQL8): %s %s %v", tidbVersion, mysqlCompatibilityVersion, err) |
289 | | - return |
290 | | - } |
291 | | - if mysqlVersion.LessThan(versionMin) { |
292 | | - t.Skip("Skip on MySQL8") |
293 | | - } |
294 | | - } |
295 | | - |
296 | | - t.Skip("Skip on MySQL8") |
297 | | - } |
298 | | -} |
299 | | - |
300 | | -func testAccPreCheckSkipNotTiDB(t *testing.T) { |
301 | | - testAccPreCheck(t) |
302 | | - |
303 | | - ctx := context.Background() |
304 | | - db, err := connectToMySQL(ctx, testAccProvider.Meta().(*MySQLConfiguration)) |
305 | | - if err != nil { |
306 | | - t.Fatalf("Cannot connect to DB (SkipNotTiDB): %v", err) |
307 | | - return |
308 | | - } |
309 | | - |
310 | | - currentVersionString, err := serverVersionString(db) |
311 | | - if err != nil { |
312 | | - t.Fatalf("Cannot get DB version string (SkipNotTiDB): %v", err) |
313 | | - return |
314 | | - } |
315 | | - |
316 | | - if !strings.Contains(currentVersionString, "TiDB") { |
317 | | - msg := fmt.Sprintf("Skip on MySQL %s", currentVersionString) |
318 | | - t.Skip(msg) |
319 | | - } |
320 | | -} |
321 | | - |
322 | | -func testAccPreCheckSkipNotTiDBVersionMin(t *testing.T, minVersion string) { |
323 | | - testAccPreCheck(t) |
324 | | - |
325 | | - ctx := context.Background() |
326 | | - db, err := connectToMySQL(ctx, testAccProvider.Meta().(*MySQLConfiguration)) |
327 | | - if err != nil { |
328 | | - t.Fatalf("Cannot connect to DB (SkipNotTiDBVersionMin): %v", err) |
329 | | - return |
330 | | - } |
331 | | - |
332 | | - currentVersion, err := serverVersion(db) |
333 | | - if err != nil { |
334 | | - t.Fatalf("Cannot get DB version string (SkipNotTiDBVersionMin): %v", err) |
335 | | - return |
336 | | - } |
337 | | - |
338 | | - versionMin, _ := version.NewVersion(minVersion) |
339 | | - if currentVersion.LessThan(versionMin) { |
340 | | - isTiDB, tidbVersion, _, err := serverTiDB(db) |
341 | | - if err != nil { |
342 | | - t.Fatalf("Cannot get DB version string (SkipNotTiDBVersionMin): %v", err) |
343 | | - return |
344 | | - } |
345 | | - if isTiDB { |
346 | | - tidbSemVar, err := version.NewVersion(tidbVersion) |
347 | | - if err != nil { |
348 | | - t.Fatalf("Cannot get DB version string for TiDB (SkipNotTiDBVersionMin): %s %v", tidbSemVar, err) |
349 | | - return |
350 | | - } |
351 | | - if tidbSemVar.LessThan(versionMin) { |
352 | | - t.Skip("Skip on TiDB (SkipNotTiDBVersionMin)") |
353 | | - } |
354 | | - return |
355 | | - } |
356 | | - |
357 | | - t.Skip("Skip on MySQL") |
358 | | - } |
359 | | -} |
0 commit comments