Skip to content

feat: add support for DuckDB#879

Merged
averikitsch merged 23 commits into
googleapis:mainfrom
bpranava:feat/duckdb
Jul 29, 2025
Merged

feat: add support for DuckDB#879
averikitsch merged 23 commits into
googleapis:mainfrom
bpranava:feat/duckdb

Merge branch 'main' into feat/duckdb

b28df50
Select commit
Loading
Failed to load commit list.
Google Cloud Build / integration-test-pr (toolbox-testing-438616) succeeded Jul 29, 2025 in 5m 13s

Summary

Build Information

Trigger integration-test-pr
Build 69db88df-e7dd-4025-91cd-dfb0d3c12687
Start 2025-07-29T14:10:05-07:00
Duration 4m24.177s
Status SUCCESS

Steps

Step Status Duration
install-dependencies SUCCESS 25.538s
compile-test-binary SUCCESS 1m41.467s
cloud-sql-pg SUCCESS 18.169s
alloydb-pg SUCCESS 21.244s
alloydb-ai-nl SUCCESS 8.576s
bigtable SUCCESS 15.689s
bigquery SUCCESS 43.132s
dataplex SUCCESS 2m9.342s
postgres SUCCESS 8.505s
spanner SUCCESS 1m15.226s
neo4j SUCCESS 6.581s
cloud-sql-mssql SUCCESS 5.789s
cloud-sql-mysql SUCCESS 8.397s
mysql SUCCESS 6.973s
mssql SUCCESS 5.128s
dgraph SUCCESS 4.157s
http SUCCESS 4.069s
sqlite SUCCESS 4.435s
couchbase SUCCESS 25.746s
redis SUCCESS 5.446s
valkey SUCCESS 5.335s
firestore SUCCESS 5.36s
looker SUCCESS 12.691s
duckdb SUCCESS 3.952s
alloydbwaitforoperation SUCCESS 4.244s

Details


starting build "69db88df-e7dd-4025-91cd-dfb0d3c12687"

FETCHSOURCE
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: 	git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: 	git branch -m <name>
hint:
hint: Disable this message with "git config set advice.defaultBranchName false"
Initialized empty Git repository in /workspace/.git/
From https://github.com/googleapis/genai-toolbox
 * branch            b28df50d9f464b529e592131dae75c88aa24a0f0 -> FETCH_HEAD
HEAD is now at b28df50 Merge branch 'main' into feat/duckdb
GitCommit:
b28df50d9f464b529e592131dae75c88aa24a0f0
SETUPBUILD
BUILD
Starting Step #0 - "install-dependencies"
Step #0 - "install-dependencies": Pulling image: golang:1
Step #0 - "install-dependencies": 1: Pulling from library/golang
Step #0 - "install-dependencies": ebed137c7c18: Pulling fs layer
Step #0 - "install-dependencies": c2e76af9483f: Pulling fs layer
Step #0 - "install-dependencies": 37f838b71c6b: Pulling fs layer
Step #0 - "install-dependencies": a73486c29d94: Pulling fs layer
Step #0 - "install-dependencies": a3e4aa2eec44: Pulling fs layer
Step #0 - "install-dependencies": 85db7d6e6763: Pulling fs layer
Step #0 - "install-dependencies": 4f4fb700ef54: Pulling fs layer
Step #0 - "install-dependencies": a3e4aa2eec44: Waiting
Step #0 - "install-dependencies": 85db7d6e6763: Waiting
Step #0 - "install-dependencies": 4f4fb700ef54: Waiting
Step #0 - "install-dependencies": a73486c29d94: Waiting
Step #0 - "install-dependencies": c2e76af9483f: Verifying Checksum
Step #0 - "install-dependencies": c2e76af9483f: Download complete
Step #0 - "install-dependencies": ebed137c7c18: Verifying Checksum
Step #0 - "install-dependencies": ebed137c7c18: Download complete
Step #0 - "install-dependencies": 37f838b71c6b: Verifying Checksum
Step #0 - "install-dependencies": 37f838b71c6b: Download complete
Step #0 - "install-dependencies": 85db7d6e6763: Verifying Checksum
Step #0 - "install-dependencies": 85db7d6e6763: Download complete
Step #0 - "install-dependencies": 4f4fb700ef54: Verifying Checksum
Step #0 - "install-dependencies": 4f4fb700ef54: Download complete
Step #0 - "install-dependencies": a73486c29d94: Verifying Checksum
Step #0 - "install-dependencies": a73486c29d94: Download complete
Step #0 - "install-dependencies": a3e4aa2eec44: Verifying Checksum
Step #0 - "install-dependencies": a3e4aa2eec44: Download complete
Step #0 - "install-dependencies": ebed137c7c18: Pull complete
Step #0 - "install-dependencies": c2e76af9483f: Pull complete
Step #0 - "install-dependencies": 37f838b71c6b: Pull complete
Step #0 - "install-dependencies": a73486c29d94: Pull complete
Step #0 - "install-dependencies": a3e4aa2eec44: Pull complete
Step #0 - "install-dependencies": 85db7d6e6763: Pull complete
Step #0 - "install-dependencies": 4f4fb700ef54: Pull complete
Step #0 - "install-dependencies": Digest: sha256:ef5b4be1f94b36c90385abd9b6b4f201723ae28e71acacb76d00687333c17282
Step #0 - "install-dependencies": Status: Downloaded newer image for golang:1
Step #0 - "install-dependencies": docker.io/library/golang:1
Step #0 - "install-dependencies": go: -d flag is deprecated. -d=true is a no-op
Step #0 - "install-dependencies": go: downloading github.com/goccy/go-yaml v1.18.0
Step #0 - "install-dependencies": go: downloading github.com/jackc/pgx/v5 v5.7.5
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/trace v1.37.0
Step #0 - "install-dependencies": go: downloading github.com/redis/go-redis/v9 v9.11.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/bigquery v1.69.0
Step #0 - "install-dependencies": go: downloading github.com/marcboeker/go-duckdb/v2 v2.3.3
Step #0 - "install-dependencies": go: downloading golang.org/x/oauth2 v0.30.0
Step #0 - "install-dependencies": go: downloading google.golang.org/api v0.243.0
Step #0 - "install-dependencies": go: downloading modernc.org/sqlite v1.38.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/spanner v1.83.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/cloudsqlconn v1.17.3
Step #0 - "install-dependencies": go: downloading github.com/valkey-io/valkey-go v1.0.63
Step #0 - "install-dependencies": go: downloading github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.53.0
Step #0 - "install-dependencies": go: downloading github.com/microsoft/go-mssqldb v1.9.2
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/bigtable v1.38.0
Step #0 - "install-dependencies": go: downloading github.com/go-sql-driver/mysql v1.9.3
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/dataplex v1.26.0
Step #0 - "install-dependencies": go: downloading github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.29.0
Step #0 - "install-dependencies": go: downloading github.com/looker-open-source/sdk-codegen/go v0.25.10
Step #0 - "install-dependencies": go: downloading go.mongodb.org/mongo-driver v1.17.4
Step #0 - "install-dependencies": go: downloading github.com/couchbase/gocb/v2 v2.10.1
Step #0 - "install-dependencies": go: downloading github.com/neo4j/neo4j-go-driver/v5 v5.28.1
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/firestore v1.18.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/autoprop v0.62.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/alloydbconn v1.15.4
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel v1.37.0
Step #0 - "install-dependencies": go: downloading github.com/go-chi/chi/v5 v5.2.2
Step #0 - "install-dependencies": go: downloading github.com/couchbase/tools-common/http v1.0.9
Step #0 - "install-dependencies": go: downloading github.com/fsnotify/fsnotify v1.9.0
Step #0 - "install-dependencies": go: downloading github.com/spf13/cobra v1.9.1
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.37.0
Step #0 - "install-dependencies": go: downloading github.com/thlib/go-timezone-local v0.0.7
Step #0 - "install-dependencies": go: downloading cloud.google.com/go v0.121.2
Step #0 - "install-dependencies": go: downloading github.com/go-chi/httplog/v2 v2.1.1
Step #0 - "install-dependencies": go: downloading github.com/json-iterator/go v1.1.12
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.37.0
Step #0 - "install-dependencies": go: downloading github.com/go-chi/render v1.0.3
Step #0 - "install-dependencies": go: downloading github.com/go-playground/validator/v10 v10.27.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/metric v1.37.0
Step #0 - "install-dependencies": go: downloading github.com/google/uuid v1.6.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/sdk/metric v1.37.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/sdk v1.37.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/monitoring v1.24.2
Step #0 - "install-dependencies": go: downloading github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.53.0
Step #0 - "install-dependencies": go: downloading github.com/googleapis/gax-go/v2 v2.15.0
Step #0 - "install-dependencies": go: downloading google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822
Step #0 - "install-dependencies": go: downloading google.golang.org/grpc v1.73.0
Step #0 - "install-dependencies": go: downloading google.golang.org/genproto v0.0.0-20250603155806-513f23925822
Step #0 - "install-dependencies": go: downloading google.golang.org/protobuf v1.36.6
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/trace v1.11.6
Step #0 - "install-dependencies": go: downloading google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79
Step #0 - "install-dependencies": go: downloading filippo.io/edwards25519 v1.1.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/aws v1.37.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/b3 v1.37.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/jaeger v1.37.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/ot v1.37.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/compute/metadata v0.7.0
Step #0 - "install-dependencies": go: downloading gopkg.in/ini.v1 v1.67.0
Step #0 - "install-dependencies": go: downloading github.com/couchbase/tools-common/errors v1.0.0
Step #0 - "install-dependencies": go: downloading github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78
Step #0 - "install-dependencies": go: downloading golang.org/x/crypto v0.40.0
Step #0 - "install-dependencies": go: downloading github.com/apache/arrow-go/v18 v18.1.0
Step #0 - "install-dependencies": go: downloading github.com/go-viper/mapstructure/v2 v2.2.1
Step #0 - "install-dependencies": go: downloading github.com/marcboeker/go-duckdb/arrowmapping v0.0.10
Step #0 - "install-dependencies": go: downloading github.com/marcboeker/go-duckdb/mapping v0.0.11
Step #0 - "install-dependencies": go: downloading golang.org/x/sys v0.34.0
Step #0 - "install-dependencies": go: downloading github.com/cespare/xxhash/v2 v2.3.0
Step #0 - "install-dependencies": go: downloading github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f
Step #0 - "install-dependencies": go: downloading github.com/inconshreveable/mousetrap v1.1.0
Step #0 - "install-dependencies": go: downloading github.com/spf13/pflag v1.0.6
Step #0 - "install-dependencies": go: downloading github.com/ajg/form v1.5.1
Step #0 - "install-dependencies": go: downloading github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
Step #0 - "install-dependencies": go: downloading github.com/modern-go/reflect2 v1.0.2
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/alloydb v1.18.0
Step #0 - "install-dependencies": go: downloading golang.org/x/net v0.42.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/auth v0.16.3
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/auth/oauth2adapt v0.2.8
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/iam v1.5.2
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/longrunning v0.6.7
Step #0 - "install-dependencies": go: downloading github.com/couchbase/gocbcore/v10 v10.7.1
Step #0 - "install-dependencies": go: downloading github.com/couchbase/gocbcoreps v0.1.3
Step #0 - "install-dependencies": go: downloading github.com/couchbase/goprotostellar v1.0.2
Step #0 - "install-dependencies": go: downloading github.com/couchbaselabs/gocbconnstr/v2 v2.0.0-20240607131231-fb385523de28
Step #0 - "install-dependencies": go: downloading github.com/golang/snappy v0.0.4
Step #0 - "install-dependencies": go: downloading go.uber.org/zap v1.27.0
Step #0 - "install-dependencies": go: downloading golang.org/x/time v0.12.0
Step #0 - "install-dependencies": go: downloading github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9
Step #0 - "install-dependencies": go: downloading github.com/golang-sql/sqlexp v0.1.0
Step #0 - "install-dependencies": go: downloading golang.org/x/text v0.27.0
Step #0 - "install-dependencies": go: downloading github.com/gabriel-vasile/mimetype v1.4.8
Step #0 - "install-dependencies": go: downloading github.com/go-playground/universal-translator v0.18.1
Step #0 - "install-dependencies": go: downloading github.com/leodido/go-urn v1.4.0
Step #0 - "install-dependencies": go: downloading github.com/jackc/puddle/v2 v2.2.2
Step #0 - "install-dependencies": go: downloading github.com/GoogleCloudPlatform/grpc-gcp-go/grpcgcp v1.5.3
Step #0 - "install-dependencies": go: downloading go.opencensus.io v0.24.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/detectors/gcp v1.36.0
Step #0 - "install-dependencies": go: downloading github.com/apache/arrow/go/v15 v15.0.2
Step #0 - "install-dependencies": go: downloading golang.org/x/sync v0.16.0
Step #0 - "install-dependencies": go: downloading github.com/go-logr/logr v1.4.3
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/proto/otlp v1.7.0
Step #0 - "install-dependencies": go: downloading go.uber.org/multierr v1.11.0
Step #0 - "install-dependencies": go: downloading github.com/duckdb/duckdb-go-bindings v0.1.17
Step #0 - "install-dependencies": go: downloading github.com/duckdb/duckdb-go-bindings/darwin-amd64 v0.1.12
Step #0 - "install-dependencies": go: downloading github.com/duckdb/duckdb-go-bindings/darwin-arm64 v0.1.12
Step #0 - "install-dependencies": go: downloading github.com/duckdb/duckdb-go-bindings/linux-amd64 v0.1.12
Step #0 - "install-dependencies": go: downloading github.com/duckdb/duckdb-go-bindings/linux-arm64 v0.1.12
Step #0 - "install-dependencies": go: downloading github.com/duckdb/duckdb-go-bindings/windows-amd64 v0.1.12
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0
Step #0 - "install-dependencies": go: downloading github.com/grpc-ecosystem/go-grpc-middleware v1.4.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0
Step #0 - "install-dependencies": go: downloading github.com/gorilla/websocket v1.5.3
Step #0 - "install-dependencies": go: downloading github.com/go-playground/locales v0.14.1
Step #0 - "install-dependencies": go: downloading github.com/jackc/pgpassfile v1.0.0
Step #0 - "install-dependencies": go: downloading github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761
Step #0 - "install-dependencies": go: downloading github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8
Step #0 - "install-dependencies": go: downloading golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0
Step #0 - "install-dependencies": go: downloading golang.org/x/tools v0.34.0
Step #0 - "install-dependencies": go: downloading golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da
Step #0 - "install-dependencies": go: downloading github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0
Step #0 - "install-dependencies": go: downloading github.com/cenkalti/backoff/v5 v5.0.2
Step #0 - "install-dependencies": go: downloading github.com/go-logr/stdr v1.2.2
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/auto/sdk v1.1.0
Step #0 - "install-dependencies": go: downloading github.com/google/s2a-go v0.1.9
Step #0 - "install-dependencies": go: downloading github.com/googleapis/enterprise-certificate-proxy v0.3.6
Step #0 - "install-dependencies": go: downloading github.com/envoyproxy/go-control-plane/envoy v1.32.4
Step #0 - "install-dependencies": go: downloading github.com/felixge/httpsnoop v1.0.4
Step #0 - "install-dependencies": go: downloading github.com/klauspost/compress v1.17.11
Step #0 - "install-dependencies": go: downloading github.com/xdg-go/scram v1.1.2
Step #0 - "install-dependencies": go: downloading github.com/xdg-go/stringprep v1.0.4
Step #0 - "install-dependencies": go: downloading github.com/montanaflynn/stats v0.7.1
Step #0 - "install-dependencies": go: downloading github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1
Step #0 - "install-dependencies": go: downloading github.com/goccy/go-json v0.10.5
Step #0 - "install-dependencies": go: downloading github.com/zeebo/xxh3 v1.0.2
Step #0 - "install-dependencies": go: downloading github.com/google/flatbuffers v25.1.24+incompatible
Step #0 - "install-dependencies": go: downloading github.com/pierrec/lz4/v4 v4.1.22
Step #0 - "install-dependencies": go: downloading github.com/spiffe/go-spiffe/v2 v2.5.0
Step #0 - "install-dependencies": go: downloading github.com/cncf/xds/go v0.0.0-20250326154945-ae57f3c0d45f
Step #0 - "install-dependencies": go: downloading github.com/xdg-go/pbkdf2 v1.0.0
Step #0 - "install-dependencies": go: downloading github.com/klauspost/cpuid/v2 v2.2.9
Step #0 - "install-dependencies": go: downloading github.com/go-jose/go-jose/v4 v4.0.5
Step #0 - "install-dependencies": go: downloading github.com/zeebo/errs v1.4.0
Step #0 - "install-dependencies": go: downloading cel.dev/expr v0.23.0
Step #0 - "install-dependencies": go: downloading github.com/envoyproxy/protoc-gen-validate v1.2.1
Step #0 - "install-dependencies": go: downloading github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10
Step #0 - "install-dependencies": go: downloading golang.org/x/mod v0.25.0
Step #0 - "install-dependencies": go: downloading modernc.org/libc v1.65.10
Step #0 - "install-dependencies": go: downloading modernc.org/memory v1.11.0
Step #0 - "install-dependencies": go: downloading github.com/dustin/go-humanize v1.0.1
Step #0 - "install-dependencies": go: downloading github.com/mattn/go-isatty v0.0.20
Step #0 - "install-dependencies": go: downloading modernc.org/mathutil v1.7.1
Step #0 - "install-dependencies": go: downloading github.com/ncruces/go-strftime v0.1.9
Step #0 - "install-dependencies": go: downloading github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec
Finished Step #0 - "install-dependencies"
Starting Step #1 - "compile-test-binary"
Step #1 - "compile-test-binary": Already have image (with digest): golang:1
Step #1 - "compile-test-binary": ?   	github.com/googleapis/genai-toolbox/tests	[no test files]
Finished Step #1 - "compile-test-binary"
Starting Step #24 - "alloydbwaitforoperation"
Starting Step #23 - "duckdb"
Starting Step #3 - "alloydb-pg"
Starting Step #12 - "cloud-sql-mysql"
Starting Step #11 - "cloud-sql-mssql"
Starting Step #10 - "neo4j"
Starting Step #9 - "spanner"
Starting Step #8 - "postgres"
Starting Step #6 - "bigquery"
Starting Step #2 - "cloud-sql-pg"
Starting Step #5 - "bigtable"
Starting Step #13 - "mysql"
Starting Step #7 - "dataplex"
Starting Step #4 - "alloydb-ai-nl"
Starting Step #18 - "couchbase"
Starting Step #17 - "sqlite"
Starting Step #20 - "valkey"
Starting Step #16 - "http"
Starting Step #15 - "dgraph"
Starting Step #14 - "mssql"
Starting Step #19 - "redis"
Starting Step #22 - "looker"
Starting Step #21 - "firestore"
Step #9 - "spanner": Already have image (with digest): golang:1
Step #2 - "cloud-sql-pg": Already have image (with digest): golang:1
Step #16 - "http": Already have image (with digest): golang:1
Step #5 - "bigtable": Already have image (with digest): golang:1
Step #14 - "mssql": Already have image (with digest): golang:1
Step #22 - "looker": Already have image (with digest): golang:1
Step #18 - "couchbase": Already have image (with digest): golang:1
Step #4 - "alloydb-ai-nl": Already have image (with digest): golang:1
Step #24 - "alloydbwaitforoperation": Already have image (with digest): golang:1
Step #15 - "dgraph": Already have image (with digest): golang:1
Step #8 - "postgres": Already have image (with digest): golang:1
Step #10 - "neo4j": Already have image (with digest): golang:1
Step #21 - "firestore": Already have image (with digest): golang:1
Step #23 - "duckdb": Already have image (with digest): golang:1
Step #13 - "mysql": Already have image (with digest): golang:1
Step #6 - "bigquery": Already have image (with digest): golang:1
Step #19 - "redis": Already have image (with digest): golang:1
Step #20 - "valkey": Already have image (with digest): golang:1
Step #3 - "alloydb-pg": Already have image (with digest): golang:1
Step #11 - "cloud-sql-mssql": Already have image (with digest): golang:1
Step #7 - "dataplex": Already have image (with digest): golang:1
Step #12 - "cloud-sql-mysql": Already have image (with digest): golang:1
Step #17 - "sqlite": Already have image (with digest): golang:1
Step #15 - "dgraph": === RUN   TestDgraphToolEndpoints
Step #23 - "duckdb": === RUN   TestDuckDb
Step #23 - "duckdb": === RUN   TestDuckDb/get_my-simple-tool
Step #23 - "duckdb": 2025-07-29T21:12:17.244377233Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-simple-tool/" method: "GET" path: "/api/tool/my-simple-tool/" remoteIP: "127.0.0.1:34938" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000001"} httpResponse: {status: 200 bytes: 168 elapsed: 0.490960} 
Step #23 - "duckdb": === RUN   TestDuckDb/invoke_my-simple-tool
Step #23 - "duckdb": 2025-07-29T21:12:17.382650689Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-simple-tool/invoke" method: "POST" path: "/api/tool/my-simple-tool/invoke" remoteIP: "127.0.0.1:34938" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000002"} httpResponse: {status: 200 bytes: 25 elapsed: 1.281072} 
Step #23 - "duckdb": === RUN   TestDuckDb/invoke_my-tool
Step #23 - "duckdb": 2025-07-29T21:12:17.386326124Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-tool/invoke" method: "POST" path: "/api/tool/my-tool/invoke" remoteIP: "127.0.0.1:34938" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000003"} httpResponse: {status: 200 bytes: 55 elapsed: 2.420753} 
Step #23 - "duckdb": === RUN   TestDuckDb/invoke_my-tool-by-id_with_nil_response
Step #23 - "duckdb": 2025-07-29T21:12:17.38983017Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-tool-by-id/invoke" method: "POST" path: "/api/tool/my-tool-by-id/invoke" remoteIP: "127.0.0.1:34938" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000004"} httpResponse: {status: 200 bytes: 40 elapsed: 2.391943} 
Step #23 - "duckdb": === RUN   TestDuckDb/invoke_my-tool-by-name_with_nil_response
Step #23 - "duckdb": 2025-07-29T21:12:17.392676733Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-tool-by-name/invoke" method: "POST" path: "/api/tool/my-tool-by-name/invoke" remoteIP: "127.0.0.1:34938" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000005"} httpResponse: {status: 200 bytes: 18 elapsed: 1.617992} 
Step #23 - "duckdb": === RUN   TestDuckDb/Invoke_my-tool_without_parameters
Step #23 - "duckdb": 2025-07-29T21:12:17.394072685Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-tool/invoke" method: "POST" path: "/api/tool/my-tool/invoke" remoteIP: "127.0.0.1:34938" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000006"} httpResponse: {status: 400 bytes: 98 elapsed: 0.314480} 
Step #23 - "duckdb": === RUN   TestDuckDb/Invoke_my-tool_with_insufficient_parameters
Step #23 - "duckdb": 2025-07-29T21:12:17.396160228Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-tool/invoke" method: "POST" path: "/api/tool/my-tool/invoke" remoteIP: "127.0.0.1:34950" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000007"} httpResponse: {status: 400 bytes: 100 elapsed: 0.354370} 
Step #23 - "duckdb": === RUN   TestDuckDb/invoke_my-array-tool
Step #23 - "duckdb": 2025-07-29T21:12:17.401816567Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-array-tool/invoke" method: "POST" path: "/api/tool/my-array-tool/invoke" remoteIP: "127.0.0.1:34960" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000008"} httpResponse: {status: 200 bytes: 55 elapsed: 4.122855} 
Step #23 - "duckdb": === RUN   TestDuckDb/Invoke_my-auth-tool_with_auth_token
Step #5 - "bigtable": === RUN   TestBigtableToolEndpoints
Step #24 - "alloydbwaitforoperation": === RUN   TestWaitToolEndpoints
Step #24 - "alloydbwaitforoperation": === RUN   TestWaitToolEndpoints/successful_operation
Step #24 - "alloydbwaitforoperation": 2025-07-29T21:12:17.460022619Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/wait-for-op1/invoke" method: "POST" path: "/api/tool/wait-for-op1/invoke" remoteIP: "127.0.0.1:34974" proto: "HTTP/1.1" requestID: "864a383f6662/aDYulc4VFO-000001"} httpResponse: {status: 200 bytes: 96 elapsed: 2.407093} 
Step #24 - "alloydbwaitforoperation": === RUN   TestWaitToolEndpoints/failed_operation
Step #24 - "alloydbwaitforoperation": 2025-07-29T21:12:17.462118082Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/wait-for-op2/invoke" method: "POST" path: "/api/tool/wait-for-op2/invoke" remoteIP: "127.0.0.1:34974" proto: "HTTP/1.1" requestID: "864a383f6662/aDYulc4VFO-000002"} httpResponse: {status: 400 bytes: 174 elapsed: 1.066922} 
Step #24 - "alloydbwaitforoperation": --- PASS: TestWaitToolEndpoints (0.02s)
Step #24 - "alloydbwaitforoperation":     --- PASS: TestWaitToolEndpoints/successful_operation (0.00s)
Step #24 - "alloydbwaitforoperation":     --- PASS: TestWaitToolEndpoints/failed_operation (0.00s)
Step #24 - "alloydbwaitforoperation": PASS
Step #24 - "alloydbwaitforoperation": coverage: 4.8% of statements in ./internal/sources/..., ./internal/tools/...
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints
Step #23 - "duckdb": 2025-07-29T21:12:17.519736454Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-tool/invoke" method: "POST" path: "/api/tool/my-auth-tool/invoke" remoteIP: "127.0.0.1:34960" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000009"} httpResponse: {status: 200 bytes: 36 elapsed: 116.662946} 
Step #23 - "duckdb": === RUN   TestDuckDb/Invoke_my-auth-tool_with_invalid_auth_token
Step #23 - "duckdb": 2025-07-29T21:12:17.521308846Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-tool/invoke" method: "POST" path: "/api/tool/my-auth-tool/invoke" remoteIP: "127.0.0.1:34960" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000010"} httpResponse: {status: 400 bytes: 159 elapsed: 0.348880} 
Step #23 - "duckdb": === RUN   TestDuckDb/Invoke_my-auth-tool_without_auth_token
Step #23 - "duckdb": 2025-07-29T21:12:17.522983059Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-tool/invoke" method: "POST" path: "/api/tool/my-auth-tool/invoke" remoteIP: "127.0.0.1:34990" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000011"} httpResponse: {status: 400 bytes: 159 elapsed: 0.325451} 
Step #23 - "duckdb": === RUN   TestDuckDb/Invoke_my-auth-required-tool_with_auth_token
Step #23 - "duckdb": 2025-07-29T21:12:17.526358513Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-required-tool/invoke" method: "POST" path: "/api/tool/my-auth-required-tool/invoke" remoteIP: "127.0.0.1:35004" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000012"} httpResponse: {status: 200 bytes: 25 elapsed: 1.967142} 
Step #23 - "duckdb": === RUN   TestDuckDb/Invoke_my-auth-required-tool_with_invalid_auth_token
Step #23 - "duckdb": 2025-07-29T21:12:17.527563375Z INFO Response: 401 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-required-tool/invoke" method: "POST" path: "/api/tool/my-auth-required-tool/invoke" remoteIP: "127.0.0.1:35004" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000013"} httpResponse: {status: 401 bytes: 119 elapsed: 0.137010} 
Step #23 - "duckdb": === RUN   TestDuckDb/Invoke_my-auth-required-tool_without_auth_token
Step #23 - "duckdb": 2025-07-29T21:12:17.529299878Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-tool/invoke" method: "POST" path: "/api/tool/my-auth-tool/invoke" remoteIP: "127.0.0.1:35010" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000014"} httpResponse: {status: 400 bytes: 159 elapsed: 0.354411} 
Step #23 - "duckdb": 2025-07-29T21:12:17.53126217Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:35026" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000015"} httpResponse: {status: 200 bytes: 196 elapsed: 0.712511} 
Step #23 - "duckdb": 2025-07-29T21:12:17.532373142Z INFO Response: 202 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:35026" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000016"} httpResponse: {status: 202 bytes: 0 elapsed: 0.300381} 
Step #23 - "duckdb": === RUN   TestDuckDb/MCP_Invoke_my-tool
Step #23 - "duckdb": 2025-07-29T21:12:17.535947877Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:35026" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000017"} httpResponse: {status: 200 bytes: 146 elapsed: 2.536924} 
Step #23 - "duckdb": === RUN   TestDuckDb/MCP_Invoke_invalid_tool
Step #23 - "duckdb": 2025-07-29T21:12:17.537351579Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:35026" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000018"} httpResponse: {status: 200 bytes: 131 elapsed: 0.405761} 
Step #23 - "duckdb": === RUN   TestDuckDb/MCP_Invoke_my-tool_without_parameters
Step #23 - "duckdb": 2025-07-29T21:12:17.538561041Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:35026" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000019"} httpResponse: {status: 200 bytes: 149 elapsed: 0.313591} 
Step #23 - "duckdb": === RUN   TestDuckDb/MCP_Invoke_my-tool_with_insufficient_parameters
Step #23 - "duckdb": 2025-07-29T21:12:17.539724922Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:35026" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000020"} httpResponse: {status: 200 bytes: 156 elapsed: 0.278521} 
Step #23 - "duckdb": === RUN   TestDuckDb/MCP_Invoke_my-auth-required-tool
Step #23 - "duckdb": 2025-07-29T21:12:17.541142994Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:35026" proto: "HTTP/1.1" requestID: "7266e61f29d9/3Sq2bnwylY-000021"} httpResponse: {status: 200 bytes: 156 elapsed: 0.394500} 
Step #23 - "duckdb": === RUN   TestDuckDb/MCP_Invoke_my-fail-tool
Step #23 - "duckdb": 2025-07-29T21:12:17.542789037Z INFO Response: 200 OK service: "httplog" httpRequest: 
...
[Logs truncated due to log size limitations. For full logs, see https://console.cloud.google.com/logs/viewer?advancedFilter=resource.type%3D%22build%22+AND+resource.labels.build_id%3D%2269db88df-e7dd-4025-91cd-dfb0d3c12687%22+AND+resource.labels.build_trigger_id%3D%22785da918-06f1-47bb-860c-fbabc80b5977%22&project=toolbox-testing-438616.]
...
.1:5000/api/tool/insert-table-templateParams-tool/invoke" method: "POST" path: "/api/tool/insert-table-templateParams-tool/invoke" remoteIP: "127.0.0.1:48438" proto: "HTTP/1.1" requestID: "8b26eecca08d/cTFXf3MC0j-000039"} httpResponse: {status: 200 bytes: 18 elapsed: 32.508236} 
Step #9 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_insert-table-templateParams-tool#01
Step #9 - "spanner": 2025-07-29T21:12:50.13648203Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/insert-table-templateParams-tool/invoke" method: "POST" path: "/api/tool/insert-table-templateParams-tool/invoke" remoteIP: "127.0.0.1:48438" proto: "HTTP/1.1" requestID: "8b26eecca08d/cTFXf3MC0j-000040"} httpResponse: {status: 200 bytes: 18 elapsed: 22.276772} 
Step #9 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_select-templateParams-tool
Step #9 - "spanner": 2025-07-29T21:12:50.156460538Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/select-templateParams-tool/invoke" method: "POST" path: "/api/tool/select-templateParams-tool/invoke" remoteIP: "127.0.0.1:48438" proto: "HTTP/1.1" requestID: "8b26eecca08d/cTFXf3MC0j-000041"} httpResponse: {status: 200 bytes: 113 elapsed: 18.750947} 
Step #9 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_select-templateParams-combined-tool
Step #9 - "spanner": 2025-07-29T21:12:50.179640161Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/select-templateParams-combined-tool/invoke" method: "POST" path: "/api/tool/select-templateParams-combined-tool/invoke" remoteIP: "127.0.0.1:48438" proto: "HTTP/1.1" requestID: "8b26eecca08d/cTFXf3MC0j-000042"} httpResponse: {status: 200 bytes: 63 elapsed: 20.796379} 
Step #9 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_select-fields-templateParams-tool
Step #9 - "spanner": 2025-07-29T21:12:50.200837751Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/select-fields-templateParams-tool/invoke" method: "POST" path: "/api/tool/select-fields-templateParams-tool/invoke" remoteIP: "127.0.0.1:48438" proto: "HTTP/1.1" requestID: "8b26eecca08d/cTFXf3MC0j-000043"} httpResponse: {status: 200 bytes: 56 elapsed: 19.986718} 
Step #9 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_select-filter-templateParams-combined-tool
Step #6 - "bigquery": 2025-07-29T21:12:50.217889646Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-list-dataset-ids-tool/invoke" method: "POST" path: "/api/tool/my-auth-list-dataset-ids-tool/invoke" remoteIP: "127.0.0.1:53864" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000044"} httpResponse: {status: 400 bytes: 209 elapsed: 466.613053} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-auth-list-dataset-ids-tool
Step #9 - "spanner": 2025-07-29T21:12:50.222607162Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/select-filter-templateParams-combined-tool/invoke" method: "POST" path: "/api/tool/select-filter-templateParams-combined-tool/invoke" remoteIP: "127.0.0.1:48438" proto: "HTTP/1.1" requestID: "8b26eecca08d/cTFXf3MC0j-000044"} httpResponse: {status: 200 bytes: 63 elapsed: 20.551709} 
Step #9 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_drop-table-templateParams-tool
Step #6 - "bigquery": 2025-07-29T21:12:53.766910715Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-list-dataset-ids-tool/invoke" method: "POST" path: "/api/tool/my-auth-list-dataset-ids-tool/invoke" remoteIP: "127.0.0.1:48446" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000045"} httpResponse: {status: 200 bytes: 18292 elapsed: 3547.673518} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-get-dataset-info-tool_without_body
Step #6 - "bigquery": 2025-07-29T21:12:53.771020971Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-get-dataset-info-tool/invoke" method: "POST" path: "/api/tool/my-get-dataset-info-tool/invoke" remoteIP: "127.0.0.1:48446" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000046"} httpResponse: {status: 400 bytes: 103 elapsed: 0.252481} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-get-dataset-info-tool
Step #6 - "bigquery": 2025-07-29T21:12:53.926175962Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-get-dataset-info-tool/invoke" method: "POST" path: "/api/tool/my-get-dataset-info-tool/invoke" remoteIP: "127.0.0.1:48454" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000047"} httpResponse: {status: 200 bytes: 1222 elapsed: 153.579399} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_with_correct_project
Step #6 - "bigquery": 2025-07-29T21:12:54.12208395Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-dataset-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-dataset-info-tool/invoke" remoteIP: "127.0.0.1:48454" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000048"} httpResponse: {status: 200 bytes: 1222 elapsed: 194.572226} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_with_non-existent_project
Step #6 - "bigquery": 2025-07-29T21:12:54.202303825Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-dataset-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-dataset-info-tool/invoke" remoteIP: "127.0.0.1:48454" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000049"} httpResponse: {status: 400 bytes: 440 elapsed: 79.091693} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-auth-get-dataset-info-tool_without_body
Step #6 - "bigquery": 2025-07-29T21:12:54.204202228Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-get-dataset-info-tool/invoke" method: "POST" path: "/api/tool/my-get-dataset-info-tool/invoke" remoteIP: "127.0.0.1:48458" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000050"} httpResponse: {status: 400 bytes: 103 elapsed: 0.356160} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_with_auth_token
Step #6 - "bigquery": 2025-07-29T21:12:54.421145906Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-dataset-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-dataset-info-tool/invoke" remoteIP: "127.0.0.1:48460" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000051"} httpResponse: {status: 200 bytes: 1222 elapsed: 215.290126} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_with_invalid_auth_token
Step #6 - "bigquery": 2025-07-29T21:12:54.422758018Z INFO Response: 401 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-dataset-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-dataset-info-tool/invoke" remoteIP: "127.0.0.1:48460" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000052"} httpResponse: {status: 401 bytes: 119 elapsed: 0.179220} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_without_auth_token
Step #6 - "bigquery": 2025-07-29T21:12:54.42430959Z INFO Response: 401 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-dataset-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-dataset-info-tool/invoke" remoteIP: "127.0.0.1:48466" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000053"} httpResponse: {status: 401 bytes: 119 elapsed: 0.191570} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-list-table-ids-tool_without_body
Step #6 - "bigquery": 2025-07-29T21:12:54.427047774Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-list-table-ids-tool/invoke" method: "POST" path: "/api/tool/my-list-table-ids-tool/invoke" remoteIP: "127.0.0.1:48478" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000054"} httpResponse: {status: 400 bytes: 103 elapsed: 0.299470} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-list-table-ids-tool
Step #6 - "bigquery": 2025-07-29T21:12:54.562211117Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-list-table-ids-tool/invoke" method: "POST" path: "/api/tool/my-list-table-ids-tool/invoke" remoteIP: "127.0.0.1:48492" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000055"} httpResponse: {status: 200 bytes: 112 elapsed: 133.787871} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-list-table-ids-tool_without_body#01
Step #6 - "bigquery": 2025-07-29T21:12:54.563457769Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-list-table-ids-tool/invoke" method: "POST" path: "/api/tool/my-list-table-ids-tool/invoke" remoteIP: "127.0.0.1:48492" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000056"} httpResponse: {status: 400 bytes: 103 elapsed: 0.324590} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_auth_token
Step #6 - "bigquery": 2025-07-29T21:12:54.698815341Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-list-table-ids-tool/invoke" method: "POST" path: "/api/tool/my-auth-list-table-ids-tool/invoke" remoteIP: "127.0.0.1:48496" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000057"} httpResponse: {status: 200 bytes: 112 elapsed: 133.993630} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_correct_project
Step #6 - "bigquery": 2025-07-29T21:12:54.821868806Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-list-table-ids-tool/invoke" method: "POST" path: "/api/tool/my-auth-list-table-ids-tool/invoke" remoteIP: "127.0.0.1:48496" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000058"} httpResponse: {status: 200 bytes: 112 elapsed: 121.786253} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_non-existent_project
Step #6 - "bigquery": 2025-07-29T21:12:54.898992536Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-list-table-ids-tool/invoke" method: "POST" path: "/api/tool/my-auth-list-table-ids-tool/invoke" remoteIP: "127.0.0.1:48496" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000059"} httpResponse: {status: 400 bytes: 436 elapsed: 76.168829} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_invalid_auth_token
Step #6 - "bigquery": 2025-07-29T21:12:54.900508648Z INFO Response: 401 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-list-table-ids-tool/invoke" method: "POST" path: "/api/tool/my-auth-list-table-ids-tool/invoke" remoteIP: "127.0.0.1:48502" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000060"} httpResponse: {status: 401 bytes: 119 elapsed: 0.165520} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_without_auth_token
Step #6 - "bigquery": 2025-07-29T21:12:54.90198266Z INFO Response: 401 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-list-table-ids-tool/invoke" method: "POST" path: "/api/tool/my-auth-list-table-ids-tool/invoke" remoteIP: "127.0.0.1:48516" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000061"} httpResponse: {status: 401 bytes: 119 elapsed: 0.172700} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-get-table-info-tool_without_body
Step #6 - "bigquery": 2025-07-29T21:12:54.904466194Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-get-table-info-tool/invoke" method: "POST" path: "/api/tool/my-get-table-info-tool/invoke" remoteIP: "127.0.0.1:48528" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000062"} httpResponse: {status: 400 bytes: 103 elapsed: 0.217630} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-get-table-info-tool
Step #6 - "bigquery": 2025-07-29T21:12:55.063121549Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-get-table-info-tool/invoke" method: "POST" path: "/api/tool/my-get-table-info-tool/invoke" remoteIP: "127.0.0.1:48540" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000063"} httpResponse: {status: 200 bytes: 1495 elapsed: 157.548934} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/invoke_my-auth-get-table-info-tool_without_body
Step #6 - "bigquery": 2025-07-29T21:12:55.064747982Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-get-table-info-tool/invoke" method: "POST" path: "/api/tool/my-get-table-info-tool/invoke" remoteIP: "127.0.0.1:48540" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000064"} httpResponse: {status: 400 bytes: 103 elapsed: 0.215271} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_with_auth_token
Step #6 - "bigquery": 2025-07-29T21:12:55.215137926Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-table-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-table-info-tool/invoke" remoteIP: "127.0.0.1:48546" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000065"} httpResponse: {status: 200 bytes: 1495 elapsed: 148.993731} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_with_correct_project
Step #6 - "bigquery": 2025-07-29T21:12:55.371671688Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-table-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-table-info-tool/invoke" remoteIP: "127.0.0.1:48546" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000066"} httpResponse: {status: 200 bytes: 1495 elapsed: 155.283231} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_with_non-existent_project
Step #6 - "bigquery": 2025-07-29T21:12:55.405584816Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-table-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-table-info-tool/invoke" remoteIP: "127.0.0.1:48546" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000067"} httpResponse: {status: 400 bytes: 507 elapsed: 32.563177} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_with_invalid_auth_token
Step #6 - "bigquery": 2025-07-29T21:12:55.407113549Z INFO Response: 401 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-table-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-table-info-tool/invoke" remoteIP: "127.0.0.1:48550" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000068"} httpResponse: {status: 401 bytes: 119 elapsed: 0.176170} 
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_without_auth_token
Step #6 - "bigquery": 2025-07-29T21:12:55.408643841Z INFO Response: 401 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-get-table-info-tool/invoke" method: "POST" path: "/api/tool/my-auth-get-table-info-tool/invoke" remoteIP: "127.0.0.1:48556" proto: "HTTP/1.1" requestID: "f7cbd752b34a/xUmbsocyyh-000069"} httpResponse: {status: 401 bytes: 119 elapsed: 0.266941} 
Step #6 - "bigquery": --- PASS: TestBigQueryToolEndpoints (40.11s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/get_my-simple-tool (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-simple-tool (0.37s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-tool (0.59s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-tool-by-id_with_nil_response (0.58s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-tool-by-name_with_nil_response (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-tool_without_parameters (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-tool_with_insufficient_parameters (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-array-tool (0.58s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-tool_with_auth_token (0.45s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-tool_with_invalid_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-tool_without_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-required-tool_with_auth_token (0.36s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-required-tool_with_invalid_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-required-tool_without_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_my-tool (0.39s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_invalid_tool (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_my-tool_without_parameters (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_my-tool_with_insufficient_parameters (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_my-auth-required-tool (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_my-fail-tool (0.13s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_create-table-templateParams-tool (0.47s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_insert-table-templateParams-tool (2.02s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_insert-table-templateParams-tool#01 (2.98s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_select-templateParams-tool (0.79s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_select-templateParams-combined-tool (0.61s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_select-fields-templateParams-tool (0.63s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_select-filter-templateParams-combined-tool (0.49s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_drop-table-templateParams-tool (0.52s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_without_body (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool (0.66s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_create_table (0.09s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_with_data_present_in_table (0.95s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_with_no_matching_rows (0.96s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_drop_table (0.08s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_insert_entry (2.54s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_without_body#01 (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-exec-sql-tool_with_auth_token (0.51s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-exec-sql-tool_with_invalid_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-exec-sql-tool_without_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-list-dataset-ids-tool (3.70s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-list-dataset-ids-tool_with_project (3.30s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-list-dataset-ids-tool_with_non-existent_project (0.47s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-auth-list-dataset-ids-tool (3.55s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-get-dataset-info-tool_without_body (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-get-dataset-info-tool (0.16s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_with_correct_project (0.20s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_with_non-existent_project (0.08s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-auth-get-dataset-info-tool_without_body (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_with_auth_token (0.22s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_with_invalid_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-dataset-info-tool_without_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-list-table-ids-tool_without_body (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-list-table-ids-tool (0.14s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-list-table-ids-tool_without_body#01 (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_auth_token (0.14s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_correct_project (0.12s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_non-existent_project (0.08s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_invalid_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_without_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-get-table-info-tool_without_body (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-get-table-info-tool (0.16s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-auth-get-table-info-tool_without_body (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_with_auth_token (0.15s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_with_correct_project (0.16s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_with_non-existent_project (0.03s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_with_invalid_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_without_auth_token (0.00s)
Step #6 - "bigquery": PASS
Step #6 - "bigquery": coverage: 11.8% of statements in ./internal/sources/..., ./internal/tools/...
Step #6 - "bigquery": Calculating coverage for BigQuery...
Step #6 - "bigquery": BigQuery total coverage: 83.5%
Step #6 - "bigquery": Coverage for BigQuery is sufficient.
Finished Step #6 - "bigquery"
Step #9 - "spanner": --- PASS: TestSpannerToolEndpoints (71.57s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/get_my-simple-tool (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-simple-tool (0.44s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-tool (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-tool-by-id_with_nil_response (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-tool-by-name_with_nil_response (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-tool_without_parameters (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-tool_with_insufficient_parameters (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-array-tool (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-tool_with_auth_token (0.04s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-tool_with_invalid_auth_token (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-tool_without_auth_token (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-required-tool_with_auth_token (0.01s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-required-tool_with_invalid_auth_token (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-required-tool_without_auth_token (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-tool (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_invalid_tool (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-tool_without_parameters (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-tool_with_insufficient_parameters (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-auth-required-tool (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-fail-tool (0.01s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_list-tables-read-only (0.05s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_list-tables (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_with_data_present_in_table (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_create_table (0.01s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_drop_table (0.01s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_insert_entry (0.01s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_without_body (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_create_table (0.01s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_drop_table (0.01s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_insert_entry (0.05s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_without_body#01 (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-exec-sql-tool_with_auth_token (0.01s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-exec-sql-tool_with_invalid_auth_token (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-exec-sql-tool_without_auth_token (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_create-table-templateParams-tool (0.00s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_insert-table-templateParams-tool (0.03s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_insert-table-templateParams-tool#01 (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_select-templateParams-tool (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_select-templateParams-combined-tool (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_select-fields-templateParams-tool (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_select-filter-templateParams-combined-tool (0.02s)
Step #9 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_drop-table-templateParams-tool (0.00s)
Step #9 - "spanner": PASS
Step #9 - "spanner": coverage: 9.3% of statements in ./internal/sources/..., ./internal/tools/...
Step #9 - "spanner": Calculating coverage for Spanner...
Step #9 - "spanner": Spanner total coverage: 86.2%
Step #9 - "spanner": Coverage for Spanner is sufficient.
Finished Step #9 - "spanner"
Step #7 - "dataplex": 2025-07-29T21:14:18.965495465Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-search-entries-tool/" method: "GET" path: "/api/tool/my-search-entries-tool/" remoteIP: "127.0.0.1:36750" proto: "HTTP/1.1" requestID: "4b0981fd97fa/S4eJFgUHzx-000001"} httpResponse: {status: 200 bytes: 1254 elapsed: 0.583980} 
Step #7 - "dataplex": === RUN   TestDataplexToolEndpoints/Success_-_Entry_Found
Step #7 - "dataplex": 2025-07-29T21:14:20.634639155Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-search-entries-tool/invoke" method: "POST" path: "/api/tool/my-search-entries-tool/invoke" remoteIP: "127.0.0.1:36750" proto: "HTTP/1.1" requestID: "4b0981fd97fa/S4eJFgUHzx-000002"} httpResponse: {status: 200 bytes: 1620 elapsed: 1667.893922} 
Step #7 - "dataplex": === RUN   TestDataplexToolEndpoints/Failure_-_Entry_Not_Found
Step #7 - "dataplex": 2025-07-29T21:14:22.643865098Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-search-entries-tool/invoke" method: "POST" path: "/api/tool/my-search-entries-tool/invoke" remoteIP: "127.0.0.1:36750" proto: "HTTP/1.1" requestID: "4b0981fd97fa/S4eJFgUHzx-000003"} httpResponse: {status: 200 bytes: 18 elapsed: 2007.623723} 
Step #7 - "dataplex": --- PASS: TestDataplexToolEndpoints (125.90s)
Step #7 - "dataplex":     --- PASS: TestDataplexToolEndpoints/Success_-_Entry_Found (1.67s)
Step #7 - "dataplex":     --- PASS: TestDataplexToolEndpoints/Failure_-_Entry_Not_Found (2.01s)
Step #7 - "dataplex": PASS
Step #7 - "dataplex": coverage: 4.9% of statements in ./internal/sources/..., ./internal/tools/...
Step #7 - "dataplex": Calculating coverage for Dataplex...
Step #7 - "dataplex": Dataplex total coverage: 83.3%
Step #7 - "dataplex": Coverage for Dataplex is sufficient.
Finished Step #7 - "dataplex"
PUSH
DONE

Build Log: https://console.cloud.google.com/logs/viewer?advancedFilter=resource.type%3D%22build%22+AND+resource.labels.build_id%3D%2269db88df-e7dd-4025-91cd-dfb0d3c12687%22+AND+resource.labels.build_trigger_id%3D%22785da918-06f1-47bb-860c-fbabc80b5977%22&project=toolbox-testing-438616