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  }