github.com/jgbaldwinbrown/perf@v0.1.1/storage/db/dbtest/cloud.go (about) 1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build cloud && !plan9 6 // +build cloud,!plan9 7 8 package dbtest 9 10 import ( 11 "crypto/rand" 12 "database/sql" 13 "encoding/base64" 14 "flag" 15 "fmt" 16 "testing" 17 18 _ "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/mysql" 19 ) 20 21 var cloud = flag.Bool("cloud", false, "connect to Cloud SQL database instead of in-memory SQLite") 22 var cloudsql = flag.String("cloudsql", "golang-org:us-central1:golang-org", "name of Cloud SQL instance to run tests on") 23 24 // createEmptyDB makes a new, empty database for the test. 25 func createEmptyDB(t *testing.T) (driver, dsn string, cleanup func()) { 26 if !*cloud { 27 return "sqlite3", ":memory:", nil 28 } 29 buf := make([]byte, 6) 30 if _, err := rand.Read(buf); err != nil { 31 t.Fatal(err) 32 } 33 34 name := "perfdata-test-" + base64.RawURLEncoding.EncodeToString(buf) 35 36 prefix := fmt.Sprintf("root:@cloudsql(%s)/", *cloudsql) 37 38 db, err := sql.Open("mysql", prefix) 39 if err != nil { 40 t.Fatal(err) 41 } 42 43 if _, err := db.Exec(fmt.Sprintf("CREATE DATABASE `%s`", name)); err != nil { 44 db.Close() 45 t.Fatal(err) 46 } 47 48 t.Logf("Using database %q", name) 49 50 return "mysql", prefix + name + "?interpolateParams=true", func() { 51 if _, err := db.Exec(fmt.Sprintf("DROP DATABASE `%s`", name)); err != nil { 52 t.Error(err) 53 } 54 db.Close() 55 } 56 }