From 0bf45e231d81b8cf32ce83e8fae53aaa0ebb34a1 Mon Sep 17 00:00:00 2001 From: Serge Zaitsev Date: Thu, 6 Feb 2025 16:21:55 +0100 Subject: [PATCH] Chore: Add devenv block for Spanner --- devenv/docker/blocks/spanner_tests/README.md | 53 +++++++++++++++++++ .../blocks/spanner_tests/docker-compose.yaml | 19 +++++++ 2 files changed, 72 insertions(+) create mode 100644 devenv/docker/blocks/spanner_tests/README.md create mode 100644 devenv/docker/blocks/spanner_tests/docker-compose.yaml diff --git a/devenv/docker/blocks/spanner_tests/README.md b/devenv/docker/blocks/spanner_tests/README.md new file mode 100644 index 00000000000..27f82d1f1bc --- /dev/null +++ b/devenv/docker/blocks/spanner_tests/README.md @@ -0,0 +1,53 @@ +This devenv block spawns a Spanner emulator for Grafana integration tests and development purposes: + +``` +make devenv sources=spanner_tests +``` + +You should then be able to connect to the database using Go SQL Spanner driver. Here's a minimal example: + +```go +package main + +import ( + "log" + + _ "github.com/googleapis/go-sql-spanner" + + "context" + "database/sql" + "fmt" +) + +func main() { + ctx := context.Background() + db, err := sql.Open("spanner", fmt.Sprintf("projects/%s/instances/%s/databases/%s", "grafanatest", "grafanatest", "grafanatest")) + if err != nil { + log.Fatalf("failed to open database connection: %v", err) + } + defer db.Close() + + rows, err := db.QueryContext(ctx, "SELECT 'Hello World!'") + if err != nil { + log.Fatalf("failed to execute query: %v", err) + } + defer rows.Close() + + var msg string + for rows.Next() { + if err := rows.Scan(&msg); err != nil { + log.Fatalf("failed to scan row values: %v", err) + } + fmt.Printf("%s\n", msg) + } + if err := rows.Err(); err != nil { + log.Fatalf("failed to execute query: %v", err) + } +} +``` + +Run it and you should see the "Hello world" message: + +``` +SPANNER_EMULATOR_HOST=localhost:9010 go run example.go +``` diff --git a/devenv/docker/blocks/spanner_tests/docker-compose.yaml b/devenv/docker/blocks/spanner_tests/docker-compose.yaml new file mode 100644 index 00000000000..c270f800f35 --- /dev/null +++ b/devenv/docker/blocks/spanner_tests/docker-compose.yaml @@ -0,0 +1,19 @@ + spannertests: + image: gcr.io/cloud-spanner-emulator/emulator:1.5.24 + ports: + - "9010:9010" + - "9020:9020" + spannertests_gcloud: + image: google/cloud-sdk:509.0.0 + environment: + SPANNER_EMULATOR_HOST: spannertests:9010 + command: + - /bin/sh + - -c + - | + sleep 5 + gcloud config set auth/disable_credentials true + gcloud config set project grafanatest + gcloud config set api_endpoint_overrides/spanner http://spannertests:9020/ + gcloud spanner instances create grafanatest --config=emulator-config --description="For integration tests" --nodes=1 + gcloud spanner databases create --instance grafanatest grafanatest