Skip to content

Commit 1b3d806

Browse files
committed
Fix TiDB file descriptor limit issue for TiKV containers
- Add HostConfigModifier to TiKV containers to set ulimit for file descriptors - Set nofile ulimit to 100000 (exceeds TiKV minimum requirement of 82920) - Fixes error: 'maximum number of open file descriptors is too small, got 65536, expect greater or equal to 82920' - Also split provider_test.go to fix vet error: moved common test infrastructure to provider_test_common.go without build tag
1 parent 0178325 commit 1b3d806

File tree

3 files changed

+281
-250
lines changed

3 files changed

+281
-250
lines changed

mysql/provider_test.go

Lines changed: 0 additions & 250 deletions
Original file line numberDiff line numberDiff line change
@@ -4,58 +4,12 @@
44
package mysql
55

66
import (
7-
"context"
87
"fmt"
98
"os"
109
"strings"
1110
"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"
1711
)
1812

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-
5913
// TestMain sets up a shared MySQL/TiDB container for all testcontainers tests
6014
// This is more efficient than starting a container for each test
6115
func TestMain(m *testing.M) {
@@ -153,207 +107,3 @@ func TestMain(m *testing.M) {
153107
// Exit with test result code
154108
os.Exit(code)
155109
}
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

Comments
 (0)