func connectMySQL() { var db *sqlx.DB c, err := dockertest.ConnectToMySQL(15, time.Second, func(url string) bool { var err error db, err = sqlx.Open("mysql", url) if err != nil { log.Printf("Got error in mysql connector: %s", err) return false } return db.Ping() == nil }) if err != nil { log.Fatalf("Could not connect to database: %s", err) } containers = append(containers, c) s := NewSQLManager(db, nil) if err = s.CreateSchemas(); err != nil { log.Fatalf("Could not create mysql schema: %v", err) } managers["mysql"] = s }
func prepareTestContainer(t *testing.T, s logical.Storage, b logical.Backend) (cid dockertest.ContainerID, retURL string) { if os.Getenv("MYSQL_DSN") != "" { return "", os.Getenv("MYSQL_DSN") } // Without this the checks for whether the container has started seem to // never actually pass. There's really no reason to expose the test // containers, so don't. dockertest.BindDockerToLocalhost = "yep" testImagePull.Do(func() { dockertest.Pull("mysql") }) cid, connErr := dockertest.ConnectToMySQL(60, 500*time.Millisecond, func(connURL string) bool { // This will cause a validation to run resp, err := b.HandleRequest(&logical.Request{ Storage: s, Operation: logical.UpdateOperation, Path: "config/connection", Data: map[string]interface{}{ "connection_url": connURL, }, }) if err != nil || (resp != nil && resp.IsError()) { // It's likely not up and running yet, so return false and try again return false } if resp == nil { t.Fatal("expected warning") } retURL = connURL return true }) if connErr != nil { t.Fatalf("could not connect to database: %v", connErr) } return }