|  | // Copyright 2017 The Go Authors.  All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | //go:build cloud && !plan9 | 
|  | // +build cloud,!plan9 | 
|  |  | 
|  | package dbtest | 
|  |  | 
|  | import ( | 
|  | "crypto/rand" | 
|  | "database/sql" | 
|  | "encoding/base64" | 
|  | "flag" | 
|  | "fmt" | 
|  | "testing" | 
|  |  | 
|  | _ "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/mysql" | 
|  | ) | 
|  |  | 
|  | var cloud = flag.Bool("cloud", false, "connect to Cloud SQL database instead of in-memory SQLite") | 
|  | var cloudsql = flag.String("cloudsql", "golang-org:us-central1:golang-org", "name of Cloud SQL instance to run tests on") | 
|  |  | 
|  | // createEmptyDB makes a new, empty database for the test. | 
|  | func createEmptyDB(t *testing.T) (driver, dsn string, cleanup func()) { | 
|  | if !*cloud { | 
|  | return "sqlite3", ":memory:", nil | 
|  | } | 
|  | buf := make([]byte, 6) | 
|  | if _, err := rand.Read(buf); err != nil { | 
|  | t.Fatal(err) | 
|  | } | 
|  |  | 
|  | name := "perfdata-test-" + base64.RawURLEncoding.EncodeToString(buf) | 
|  |  | 
|  | prefix := fmt.Sprintf("root:@cloudsql(%s)/", *cloudsql) | 
|  |  | 
|  | db, err := sql.Open("mysql", prefix) | 
|  | if err != nil { | 
|  | t.Fatal(err) | 
|  | } | 
|  |  | 
|  | if _, err := db.Exec(fmt.Sprintf("CREATE DATABASE `%s`", name)); err != nil { | 
|  | db.Close() | 
|  | t.Fatal(err) | 
|  | } | 
|  |  | 
|  | t.Logf("Using database %q", name) | 
|  |  | 
|  | return "mysql", prefix + name + "?interpolateParams=true", func() { | 
|  | if _, err := db.Exec(fmt.Sprintf("DROP DATABASE `%s`", name)); err != nil { | 
|  | t.Error(err) | 
|  | } | 
|  | db.Close() | 
|  | } | 
|  | } |