Skip to content

Commit a518727

Browse files
authored
fix: use client opts to auto configure emulator instead of environment variable (#468)
1 parent 574d6fe commit a518727

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

driver.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import (
3939
"github.com/google/uuid"
4040
"github.com/googleapis/gax-go/v2"
4141
"google.golang.org/api/option"
42+
"google.golang.org/api/option/internaloption"
4243
"google.golang.org/grpc"
4344
"google.golang.org/grpc/codes"
4445
"google.golang.org/grpc/credentials/insecure"
@@ -586,7 +587,18 @@ func createConnector(d *Driver, connectorConfig ConnectorConfig) (*connector, er
586587
connectorConfig.Configurator(&config, &opts)
587588
}
588589
if connectorConfig.AutoConfigEmulator {
589-
if err := autoConfigEmulator(context.Background(), connectorConfig.Host, connectorConfig.Project, connectorConfig.Instance, connectorConfig.Database); err != nil {
590+
if connectorConfig.Host == "" {
591+
connectorConfig.Host = "localhost:9010"
592+
}
593+
schemeRemoved := regexp.MustCompile("^(http://|https://|passthrough:///)").ReplaceAllString(connectorConfig.Host, "")
594+
emulatorOpts := []option.ClientOption{
595+
option.WithEndpoint("passthrough:///" + schemeRemoved),
596+
option.WithGRPCDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
597+
option.WithoutAuthentication(),
598+
internaloption.SkipDialSettingsValidation(),
599+
}
600+
opts = append(emulatorOpts, opts...)
601+
if err := autoConfigEmulator(context.Background(), connectorConfig.Host, connectorConfig.Project, connectorConfig.Instance, connectorConfig.Database, opts); err != nil {
590602
return nil, err
591603
}
592604
}

emulator_util.go

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,33 @@ package spannerdriver
1717
import (
1818
"context"
1919
"fmt"
20-
"os"
2120

2221
"cloud.google.com/go/spanner"
2322
database "cloud.google.com/go/spanner/admin/database/apiv1"
2423
databasepb "cloud.google.com/go/spanner/admin/database/apiv1/databasepb"
2524
instance "cloud.google.com/go/spanner/admin/instance/apiv1"
2625
instancepb "cloud.google.com/go/spanner/admin/instance/apiv1/instancepb"
26+
"google.golang.org/api/option"
2727
"google.golang.org/grpc/codes"
2828
)
2929

30-
func autoConfigEmulator(ctx context.Context, host, project, instance, database string) error {
31-
if host == "" {
32-
host = "localhost:9010"
33-
}
34-
if err := os.Setenv("SPANNER_EMULATOR_HOST", host); err != nil {
35-
return err
36-
}
37-
if err := createInstance(project, instance); err != nil {
30+
func autoConfigEmulator(ctx context.Context, host, project, instance, database string, opts []option.ClientOption) error {
31+
if err := createInstance(project, instance, opts); err != nil {
3832
if spanner.ErrCode(err) != codes.AlreadyExists {
3933
return err
4034
}
4135
}
42-
if err := createDatabase(project, instance, database); err != nil {
36+
if err := createDatabase(project, instance, database, opts); err != nil {
4337
if spanner.ErrCode(err) != codes.AlreadyExists {
4438
return err
4539
}
4640
}
4741
return nil
4842
}
4943

50-
func createInstance(projectId, instanceId string) error {
44+
func createInstance(projectId, instanceId string, opts []option.ClientOption) error {
5145
ctx := context.Background()
52-
instanceAdmin, err := instance.NewInstanceAdminClient(ctx)
46+
instanceAdmin, err := instance.NewInstanceAdminClient(ctx, opts...)
5347
if err != nil {
5448
return err
5549
}
@@ -73,9 +67,9 @@ func createInstance(projectId, instanceId string) error {
7367
return nil
7468
}
7569

76-
func createDatabase(projectId, instanceId, databaseId string) error {
70+
func createDatabase(projectId, instanceId, databaseId string, opts []option.ClientOption) error {
7771
ctx := context.Background()
78-
databaseAdminClient, err := database.NewDatabaseAdminClient(ctx)
72+
databaseAdminClient, err := database.NewDatabaseAdminClient(ctx, opts...)
7973
if err != nil {
8074
return err
8175
}

0 commit comments

Comments
 (0)