Skip to content

Commit 54219d7

Browse files
authored
Merge pull request #1 from mbobrovskyi/feature/bigqeury-test
Feature/bigqeury test
2 parents decd290 + e764e1d commit 54219d7

File tree

3 files changed

+93
-23
lines changed

3 files changed

+93
-23
lines changed

database/bigquery/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* [Examples](./examples)
55

66
### Usage
7-
`bigquery://https://www.googleapis.com/bigquery/v2:443?x-migrations-table=schema_migrations&x-statement-timeout=0&credentials_filename=./myproject-XXXXXXXXXXXXX-XXXXXXXXXXXX.json&project_id=myproject-XXXXXXXXXXXXX&dataset_id=mydataset`
7+
`bigquery://https://bigquery.googleapis.com/bigquery/v2/?x-migrations-table=schema_migrations&x-statement-timeout=0&credentials_filename=./myproject-XXXXXXXXXXXXX-XXXXXXXXXXXX.json&project_id=myproject-XXXXXXXXXXXXX&dataset_id=mydataset`
88

99

1010
### System variables reference

database/bigquery/bigquery.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"google.golang.org/api/option"
1515
"io"
1616
nurl "net/url"
17+
"os"
1718
"strconv"
1819
"strings"
1920
"time"
@@ -148,12 +149,14 @@ func (b *BigQuery) Open(url string) (database.Driver, error) {
148149
}
149150
}
150151

151-
//By default, try to get from environment variable GOOGLE_APPLICATION_CREDENTIALS
152152
if q.Has("credentials_filename") {
153153
opts = append(opts, option.WithCredentialsFile(q.Get("credentials_filename")))
154+
} else if os.Getenv("GOOGLE_APPLICATION_CREDENTIALS") != "" {
155+
opts = append(opts, option.WithCredentialsFile(os.Getenv("GOOGLE_APPLICATION_CREDENTIALS")))
156+
} else {
157+
opts = append(opts, option.WithoutAuthentication())
154158
}
155159

156-
// By default, try to get from credentials file
157160
projectID := bigquery.DetectProjectID
158161
if q.Has("project_id") {
159162
projectID = q.Get("project_id")
@@ -175,6 +178,8 @@ func (b *BigQuery) Open(url string) (database.Driver, error) {
175178
config.TimeZone = q.Get("time_zone")
176179
}
177180

181+
opts = append(opts, option.WithEndpoint(fmt.Sprintf("%s%s", purl.Host, purl.Path)))
182+
178183
client, err := bigquery.NewClient(ctx, projectID, opts...)
179184
if err != nil {
180185
return nil, err
@@ -267,10 +272,9 @@ func (b *BigQuery) SetVersion(version int, dirty bool) error {
267272
ctx := context.Background()
268273

269274
query := fmt.Sprintf(`
270-
SET @@dataset_id = '%[1]s';
271275
BEGIN TRANSACTION;
272-
DELETE FROM %[2]s WHERE true;
273-
INSERT INTO %[2]s (version, dirty) VALUES (%[3]d, %[4]t);
276+
DELETE FROM `+"`%[1]s.%[2]s`"+` WHERE true;
277+
INSERT INTO `+"`%[1]s.%[2]s`"+` (version, dirty) VALUES (%[3]d, %[4]t);
274278
COMMIT TRANSACTION;
275279
`, b.config.DatasetID, b.config.MigrationsTable, version, dirty)
276280

database/bigquery/bigquery_test.go

Lines changed: 83 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package bigquery
22

33
import (
4+
"context"
5+
"errors"
46
"github.com/golang-migrate/migrate/v4/database"
57
"strings"
68
"testing"
79
)
810

911
const (
10-
connectionUrl = "bigquery://https://www.googleapis.com/bigquery/v2:443?x-migrations-table=schema_migrations&x-statement-timeout=0&credentials_filename=./tmp/myproject-XXXXXXXXXXXXX-XXXXXXXXXXXX.json&dataset_id=mydataset"
12+
//connectionUrl = "bigquery://https://bigquery.googleapis.com/bigquery/v2/?x-migrations-table=schema_migrations&x-statement-timeout=0&credentials_filename=./tmp/myproject-XXXXXXXXXXXXX-XXXXXXXXXXXX.json&dataset_id=mydataset"
13+
connectionUrl = "bigquery://http://0.0.0.0:9050/?x-migrations-table=schema_migrations&project_id=myproject&dataset_id=mydataset"
1114
)
1215

1316
func openConnection() (database.Driver, error) {
@@ -21,66 +24,117 @@ func openConnection() (database.Driver, error) {
2124
return driver, nil
2225
}
2326

27+
func TestWithInstanceWithoutClient(t *testing.T) {
28+
driver, err := WithInstance(context.Background(), nil, &Config{})
29+
if err == nil {
30+
t.Errorf("expected `no client`, got nil")
31+
return
32+
}
33+
if !errors.Is(err, ErrNoClient) {
34+
t.Errorf("expected `no client`, got %s", err.Error())
35+
return
36+
}
37+
if driver != nil {
38+
t.Errorf("driver should be nil")
39+
return
40+
}
41+
}
42+
2443
func TestOpen(t *testing.T) {
25-
_, err := openConnection()
44+
driver, err := openConnection()
2645
if err != nil {
2746
t.Error(err)
2847
return
2948
}
49+
50+
defer func() {
51+
err := driver.Close()
52+
if err != nil {
53+
t.Error(err)
54+
}
55+
}()
3056
}
3157

32-
func TestVersion(t *testing.T) {
58+
func TestClose(t *testing.T) {
3359
driver, err := openConnection()
3460
if err != nil {
3561
t.Error(err)
3662
return
3763
}
3864

39-
version, dirty, err := driver.Version()
65+
defer func() {
66+
err := driver.Close()
67+
if err != nil {
68+
t.Error(err)
69+
}
70+
}()
71+
72+
err = driver.Close()
4073
if err != nil {
4174
t.Error(err)
4275
return
4376
}
44-
45-
t.Log(version, dirty)
4677
}
4778

48-
func TestDrop(t *testing.T) {
79+
func TestVersion(t *testing.T) {
4980
driver, err := openConnection()
5081
if err != nil {
5182
t.Error(err)
5283
return
5384
}
5485

55-
err = driver.Drop()
86+
defer func() {
87+
err := driver.Close()
88+
if err != nil {
89+
t.Error(err)
90+
}
91+
}()
92+
93+
version, dirty, err := driver.Version()
5694
if err != nil {
5795
t.Error(err)
5896
return
5997
}
98+
99+
t.Log(version, dirty)
60100
}
61101

62-
func TestClose(t *testing.T) {
102+
func TestSetVersion(t *testing.T) {
63103
driver, err := openConnection()
64104
if err != nil {
65105
t.Error(err)
66106
return
67107
}
68108

69-
err = driver.Close()
109+
defer func() {
110+
err := driver.Close()
111+
if err != nil {
112+
t.Error(err)
113+
}
114+
}()
115+
116+
err = driver.SetVersion(-1, false)
70117
if err != nil {
71118
t.Error(err)
72119
return
73120
}
74121
}
75122

76-
func TestSetVersion(t *testing.T) {
123+
func TestDrop(t *testing.T) {
77124
driver, err := openConnection()
78125
if err != nil {
79126
t.Error(err)
80127
return
81128
}
82129

83-
err = driver.SetVersion(-1, false)
130+
defer func() {
131+
err := driver.Close()
132+
if err != nil {
133+
t.Error(err)
134+
}
135+
}()
136+
137+
err = driver.Drop()
84138
if err != nil {
85139
t.Error(err)
86140
return
@@ -94,6 +148,13 @@ func TestRun(t *testing.T) {
94148
return
95149
}
96150

151+
defer func() {
152+
err := driver.Close()
153+
if err != nil {
154+
t.Error(err)
155+
}
156+
}()
157+
97158
err = driver.Run(strings.NewReader(`
98159
CREATE TABLE IF NOT EXISTS users (
99160
first_name STRING,
@@ -112,16 +173,21 @@ func TestRunWithError(t *testing.T) {
112173
return
113174
}
114175

176+
defer func() {
177+
err := driver.Close()
178+
if err != nil {
179+
t.Error(err)
180+
}
181+
}()
182+
115183
err = driver.Run(strings.NewReader(`
116184
CREATE TABLE IF NOT EXISTS users (
117185
first_name STRINGa,
118186
last_name STRING
119187
)`))
120-
if err != nil {
121-
t.Log(err)
122-
return
188+
if err == nil {
189+
t.Error("expected 'googleapi: Error 400: Query error: Type not found: STRINGa at [4:36], invalidQuery' got nil")
123190
}
124191

125-
t.Error("error is nil, should be 'googleapi: Error 400: Query error: Type not found: STRINGa at [4:36], invalidQuery'")
126-
return
192+
t.Log(err)
127193
}

0 commit comments

Comments
 (0)