Skip to content

feat: inspect tools from Toolbox UI - #887

Merged
AlexTalreja merged 4 commits into
toolbox-uifrom
inspect-tools
Jul 21, 2025
Merged

feat: inspect tools from Toolbox UI#887
AlexTalreja merged 4 commits into
toolbox-uifrom
inspect-tools

resolve comments

7417173
Select commit
Loading
Failed to load commit list.
Google Cloud Build / integration-test-pr (toolbox-testing-438616) succeeded Jul 19, 2025 in 3m 0s

Summary

Build Information

Trigger integration-test-pr
Build f9aa104b-5d9a-45d1-aa94-57f6d66aa2bb
Start 2025-07-18T23:06:18-07:00
Duration 2m15.327s
Status SUCCESS

Steps

Step Status Duration
install-dependencies SUCCESS 13.473s
compile-test-binary SUCCESS 45.459s
cloud-sql-pg SUCCESS 19.176s
alloydb-pg SUCCESS 20.619s
alloydb-ai-nl SUCCESS 7.682s
bigtable SUCCESS 12.837s
bigquery SUCCESS 35.734s
postgres SUCCESS 6.199s
spanner SUCCESS 1m11.821s
neo4j SUCCESS 4.049s
cloud-sql-mssql SUCCESS 5.847s
cloud-sql-mysql SUCCESS 5.191s
mysql SUCCESS 4.522s
mssql SUCCESS 5.745s
dgraph SUCCESS 3.826s
http SUCCESS 3.936s
sqlite SUCCESS 3.528s
couchbase SUCCESS 27.076s
redis SUCCESS 4.348s
valkey SUCCESS 4.148s

Details


starting build "f9aa104b-5d9a-45d1-aa94-57f6d66aa2bb"

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>
Initialized empty Git repository in /workspace/.git/
From https://github.com/googleapis/genai-toolbox
 * branch            74171737db0cb45ab2af5f07e22830b7d91221a6 -> FETCH_HEAD
HEAD is now at 7417173 resolve comments
GitCommit:
74171737db0cb45ab2af5f07e22830b7d91221a6
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": Digest: sha256:14fd8a55e59a560704e5fc44970b301d00d344e45d6b914dda228e09f359a088
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 google.golang.org/api v0.240.0
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 cloud.google.com/go/bigquery v1.69.0
Step #0 - "install-dependencies": go: downloading github.com/fsnotify/fsnotify v1.9.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/bigtable v1.38.0
Step #0 - "install-dependencies": go: downloading github.com/couchbase/gocb/v2 v2.10.0
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/cloudsqlconn v1.17.2
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/alloydbconn v1.15.3
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/trace v1.36.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/spanner v1.83.0
Step #0 - "install-dependencies": go: downloading github.com/go-chi/chi/v5 v5.2.2
Step #0 - "install-dependencies": go: downloading github.com/valkey-io/valkey-go v1.0.62
Step #0 - "install-dependencies": go: downloading github.com/microsoft/go-mssqldb v1.9.2
Step #0 - "install-dependencies": go: downloading github.com/go-sql-driver/mysql v1.9.3
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel v1.36.0
Step #0 - "install-dependencies": go: downloading github.com/couchbase/tools-common/http v1.0.9
Step #0 - "install-dependencies": go: downloading golang.org/x/oauth2 v0.30.0
Step #0 - "install-dependencies": go: downloading modernc.org/sqlite v1.38.0
Step #0 - "install-dependencies": go: downloading github.com/go-playground/validator/v10 v10.27.0
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/go-chi/httplog/v2 v2.1.1
Step #0 - "install-dependencies": go: downloading github.com/spf13/cobra v1.9.1
Step #0 - "install-dependencies": go: downloading github.com/json-iterator/go v1.1.12
Step #0 - "install-dependencies": go: downloading github.com/go-chi/render v1.0.3
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/google/uuid v1.6.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/autoprop v0.61.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/metric v1.36.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go v0.121.2
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/sdk/metric v1.36.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/sdk v1.36.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0
Step #0 - "install-dependencies": go: downloading golang.org/x/sys v0.33.0
Step #0 - "install-dependencies": go: downloading filippo.io/edwards25519 v1.1.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.14.2
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-20250505200425-f936aa4a68b2
Step #0 - "install-dependencies": go: downloading google.golang.org/protobuf v1.36.6
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.39.0
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-20250603155806-513f23925822
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/aws v1.36.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/b3 v1.36.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/jaeger v1.36.0
Step #0 - "install-dependencies": go: downloading go.opentelemetry.io/contrib/propagators/ot v1.36.0
Step #0 - "install-dependencies": go: downloading github.com/ajg/form v1.5.1
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/compute/metadata v0.7.0
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/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/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 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 golang.org/x/text v0.26.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/auth v0.16.2
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/auth/oauth2adapt v0.2.8
Step #0 - "install-dependencies": go: downloading golang.org/x/net v0.41.0
Step #0 - "install-dependencies": go: downloading cloud.google.com/go/alloydb v1.16.1
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/jackc/puddle/v2 v2.2.2
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 github.com/couchbase/gocbcore/v10 v10.7.0
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 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.15.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.6.0
Step #0 - "install-dependencies": go: downloading go.uber.org/multierr v1.11.0
Step #0 - "install-dependencies": go: downloading github.com/go-playground/locales v0.14.1
Step #0 - "install-dependencies": go: downloading golang.org/x/time v0.12.0
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/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/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/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0
Step #0 - "install-dependencies": go: downloading github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8
Step #0 - "install-dependencies": go: downloading github.com/gorilla/websocket v1.5.3
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/cenkalti/backoff/v5 v5.0.2
Step #0 - "install-dependencies": go: downloading github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3
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/felixge/httpsnoop v1.0.4
Step #0 - "install-dependencies": go: downloading github.com/envoyproxy/go-control-plane/envoy v1.32.4
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 golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0
Step #0 - "install-dependencies": go: downloading golang.org/x/tools v0.33.0
Step #0 - "install-dependencies": go: downloading golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da
Step #0 - "install-dependencies": go: downloading github.com/klauspost/compress v1.16.7
Step #0 - "install-dependencies": go: downloading github.com/google/flatbuffers v23.5.26+incompatible
Step #0 - "install-dependencies": go: downloading github.com/pierrec/lz4/v4 v4.1.18
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 github.com/goccy/go-json v0.10.2
Step #0 - "install-dependencies": go: downloading github.com/zeebo/xxh3 v1.0.2
Step #0 - "install-dependencies": go: downloading github.com/klauspost/cpuid/v2 v2.2.5
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/mattn/go-isatty v0.0.20
Step #0 - "install-dependencies": go: downloading github.com/ncruces/go-strftime v0.1.9
Step #0 - "install-dependencies": go: downloading modernc.org/mathutil v1.7.1
Step #0 - "install-dependencies": go: downloading github.com/dustin/go-humanize v1.0.1
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 #2 - "cloud-sql-pg"
Starting Step #7 - "postgres"
Starting Step #15 - "http"
Starting Step #11 - "cloud-sql-mysql"
Starting Step #13 - "mssql"
Starting Step #14 - "dgraph"
Starting Step #4 - "alloydb-ai-nl"
Starting Step #10 - "cloud-sql-mssql"
Starting Step #12 - "mysql"
Starting Step #9 - "neo4j"
Starting Step #16 - "sqlite"
Starting Step #18 - "redis"
Step #2 - "cloud-sql-pg": Already have image (with digest): golang:1
Starting Step #6 - "bigquery"
Starting Step #8 - "spanner"
Starting Step #5 - "bigtable"
Starting Step #17 - "couchbase"
Starting Step #3 - "alloydb-pg"
Starting Step #19 - "valkey"
Step #14 - "dgraph": Already have image (with digest): golang:1
Step #11 - "cloud-sql-mysql": Already have image (with digest): golang:1
Step #4 - "alloydb-ai-nl": Already have image (with digest): golang:1
Step #16 - "sqlite": Already have image (with digest): golang:1
Step #17 - "couchbase": Already have image (with digest): golang:1
Step #8 - "spanner": Already have image (with digest): golang:1
Step #12 - "mysql": Already have image (with digest): golang:1
Step #5 - "bigtable": Already have image (with digest): golang:1
Step #13 - "mssql": Already have image (with digest): golang:1
Step #7 - "postgres": Already have image (with digest): golang:1
Step #19 - "valkey": Already have image (with digest): golang:1
Step #6 - "bigquery": Already have image (with digest): golang:1
Step #9 - "neo4j": Already have image (with digest): golang:1
Step #10 - "cloud-sql-mssql": Already have image (with digest): golang:1
Step #18 - "redis": Already have image (with digest): golang:1
Step #15 - "http": Already have image (with digest): golang:1
Step #3 - "alloydb-pg": Already have image (with digest): golang:1
Step #14 - "dgraph": === RUN   TestDgraphToolEndpoints
Step #5 - "bigtable": === RUN   TestBigtableToolEndpoints
Step #6 - "bigquery": === RUN   TestBigQueryToolEndpoints
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint
Step #5 - "bigtable": 2025/07/19 06:07:22 Creating table param_table02dff68837d94089bf0461eda89ca1f8
Step #14 - "dgraph": === RUN   TestDgraphToolEndpoints/get_my-simple-tool
Step #14 - "dgraph": 2025-07-19T06:07:22.24166011Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-simple-dql-tool/" method: "GET" path: "/api/tool/my-simple-dql-tool/" remoteIP: "127.0.0.1:47180" proto: "HTTP/1.1" requestID: "93fe0736df8c/nL1TL7ak5O-000001"} httpResponse: {status: 200 bytes: 171 elapsed: 0.603203} 
Step #14 - "dgraph": === RUN   TestDgraphToolEndpoints/invoke_my-simple-dql-tool
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/get_my-simple-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.286159577Z 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:47190" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000001"} httpResponse: {status: 200 bytes: 167 elapsed: 0.458083} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_my-simple-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.369189965Z 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:47190" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000002"} httpResponse: {status: 200 bytes: 25 elapsed: 0.702580} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_my-param-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.371470607Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-param-tool/invoke" method: "POST" path: "/api/tool/my-param-tool/invoke" remoteIP: "127.0.0.1:47190" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000003"} httpResponse: {status: 200 bytes: 73 elapsed: 1.233037} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_my-param-tool2_with_nil_response
Step #16 - "sqlite": 2025-07-19T06:07:22.373419126Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-param-tool2/invoke" method: "POST" path: "/api/tool/my-param-tool2/invoke" remoteIP: "127.0.0.1:47190" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000004"} httpResponse: {status: 200 bytes: 40 elapsed: 1.079837} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/Invoke_my-param-tool_without_parameters
Step #16 - "sqlite": 2025-07-19T06:07:22.374420557Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-param-tool/invoke" method: "POST" path: "/api/tool/my-param-tool/invoke" remoteIP: "127.0.0.1:47190" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000005"} httpResponse: {status: 400 bytes: 98 elapsed: 0.232927} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/Invoke_my-param-tool_with_insufficient_parameters
Step #16 - "sqlite": 2025-07-19T06:07:22.375820447Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-param-tool/invoke" method: "POST" path: "/api/tool/my-param-tool/invoke" remoteIP: "127.0.0.1:47206" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000006"} httpResponse: {status: 400 bytes: 100 elapsed: 0.239687} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/Invoke_my-auth-tool_with_auth_token
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints
Step #16 - "sqlite": 2025-07-19T06:07:22.510645431Z 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:47222" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000007"} httpResponse: {status: 200 bytes: 36 elapsed: 133.707794} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/Invoke_my-auth-tool_with_invalid_auth_token
Step #16 - "sqlite": 2025-07-19T06:07:22.511856047Z 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:47222" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000008"} httpResponse: {status: 400 bytes: 159 elapsed: 0.226536} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/Invoke_my-auth-tool_without_auth_token
Step #16 - "sqlite": 2025-07-19T06:07:22.513199612Z 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:47224" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000009"} httpResponse: {status: 400 bytes: 159 elapsed: 0.302262} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/Invoke_my-auth-required-tool_with_auth_token
Step #16 - "sqlite": 2025-07-19T06:07:22.515153171Z 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:47238" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000010"} httpResponse: {status: 200 bytes: 25 elapsed: 0.775115} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/Invoke_my-auth-required-tool_with_invalid_auth_token
Step #14 - "dgraph": 2025-07-19T06:07:22.515473424Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-simple-dql-tool/invoke" method: "POST" path: "/api/tool/my-simple-dql-tool/invoke" remoteIP: "127.0.0.1:47180" proto: "HTTP/1.1" requestID: "93fe0736df8c/nL1TL7ak5O-000002"} httpResponse: {status: 200 bytes: 47 elapsed: 272.533062} 
Step #14 - "dgraph": --- PASS: TestDgraphToolEndpoints (0.80s)
Step #14 - "dgraph":     --- PASS: TestDgraphToolEndpoints/get_my-simple-tool (0.00s)
Step #14 - "dgraph":     --- PASS: TestDgraphToolEndpoints/invoke_my-simple-dql-tool (0.27s)
Step #14 - "dgraph": PASS
Step #16 - "sqlite": 2025-07-19T06:07:22.516227408Z 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:47238" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000011"} httpResponse: {status: 401 bytes: 119 elapsed: 0.159471} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/Invoke_my-auth-required-tool_without_auth_token
Step #16 - "sqlite": 2025-07-19T06:07:22.517603916Z 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:47244" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000012"} httpResponse: {status: 400 bytes: 159 elapsed: 0.257368} 
Step #16 - "sqlite": 2025-07-19T06:07:22.519133775Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000013"} httpResponse: {status: 200 bytes: 195 elapsed: 0.544948} 
Step #16 - "sqlite": 2025-07-19T06:07:22.520034839Z INFO Response: 202 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000014"} httpResponse: {status: 202 bytes: 0 elapsed: 0.194464} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/MCP_Invoke_my-param-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.522511665Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000015"} httpResponse: {status: 200 bytes: 170 elapsed: 1.670699} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/MCP_Invoke_invalid_tool
Step #14 - "dgraph": coverage: 7.7% of statements in ./internal/sources/..., ./internal/tools/...
Step #16 - "sqlite": 2025-07-19T06:07:22.523755834Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000016"} httpResponse: {status: 200 bytes: 131 elapsed: 0.427110} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/MCP_Invoke_my-param-tool_without_parameters
Step #16 - "sqlite": 2025-07-19T06:07:22.525047515Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000017"} httpResponse: {status: 200 bytes: 149 elapsed: 0.225996} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/MCP_Invoke_my-param-tool_with_insufficient_parameters
Step #16 - "sqlite": 2025-07-19T06:07:22.526405212Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000018"} httpResponse: {status: 200 bytes: 156 elapsed: 0.317513} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/MCP_Invoke_my-auth-required-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.527698454Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000019"} httpResponse: {status: 200 bytes: 156 elapsed: 0.247497} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/MCP_Invoke_my-fail-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.529303658Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000020"} httpResponse: {status: 200 bytes: 180 elapsed: 0.582161} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_create-table-templateParams-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.540517176Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/create-table-templateParams-tool/invoke" method: "POST" path: "/api/tool/create-table-templateParams-tool/invoke" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000021"} httpResponse: {status: 200 bytes: 18 elapsed: 10.069206} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_insert-table-templateParams-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.547986868Z 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:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000022"} httpResponse: {status: 200 bytes: 18 elapsed: 6.247535} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_insert-table-templateParams-tool#01
Step #16 - "sqlite": 2025-07-19T06:07:22.554645632Z 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:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000023"} httpResponse: {status: 200 bytes: 18 elapsed: 5.635741} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_select-templateParams-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.557281529Z 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:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000024"} httpResponse: {status: 200 bytes: 97 elapsed: 1.536160} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_select-templateParams-combined-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.559254059Z 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:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000025"} httpResponse: {status: 200 bytes: 55 elapsed: 0.888623} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_select-fields-templateParams-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.561498569Z 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:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000026"} httpResponse: {status: 200 bytes: 56 elapsed: 1.259919} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_select-filter-templateParams-combined-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.563150927Z 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:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000027"} httpResponse: {status: 200 bytes: 55 elapsed: 0.914155} 
Step #16 - "sqlite": === RUN   TestSQLiteToolEndpoint/invoke_drop-table-templateParams-tool
Step #16 - "sqlite": 2025-07-19T06:07:22.571185708Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/drop-table-templateParams-tool/invoke" method: "POST" path: "/api/tool/drop-table-templateParams-tool/invoke" remoteIP: "127.0.0.1:47252" proto: "HTTP/1.1" requestID: "a2c8a29db5ba/xrXunV368h-000028"} httpResponse: {status: 200 bytes: 18 elapsed: 7.022780} 
Step #16 - "sqlite": --- PASS: TestSQLiteToolEndpoint (0.37s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint/get_my-simple-tool (0.00s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint/invoke_my-simple-tool (0.00s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint/invoke_my-param-tool (0.00s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint/invoke_my-param-tool2_with_nil_response (0.00s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint/Invoke_my-param-tool_without_parameters (0.00s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint/Invoke_my-param-tool_with_insufficient_parameters (0.00s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint/Invoke_my-auth-tool_with_auth_token (0.13s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint/Invoke_my-auth-tool_with_invalid_auth_token (0.00s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint/Invoke_my-auth-tool_without_auth_token (0.00s)
Step #16 - "sqlite":     --- PASS: TestSQLiteToolEndpoint
...
[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%22f9aa104b-5d9a-45d1-aa94-57f6d66aa2bb%22+AND+resource.labels.build_trigger_id%3D%22785da918-06f1-47bb-860c-fbabc80b5977%22&project=toolbox-testing-438616.]
...
 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-required-tool_without_auth_token (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_my-param-tool (0.37s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_invalid_tool (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_my-param-tool_without_parameters (0.00s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/MCP_Invoke_my-param-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.28s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_create-table-templateParams-tool (0.58s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_insert-table-templateParams-tool (2.06s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_insert-table-templateParams-tool#01 (1.80s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_select-templateParams-tool (0.55s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_select-templateParams-combined-tool (0.52s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_select-fields-templateParams-tool (1.66s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_select-filter-templateParams-combined-tool (0.43s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_drop-table-templateParams-tool (0.49s)
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.28s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_create_table (0.18s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_with_data_present_in_table (1.17s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_drop_table (0.15s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-exec-sql-tool_insert_entry (2.15s)
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.31s)
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 (2.83s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-list-dataset-ids-tool_with_project (3.24s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-list-dataset-ids-tool_with_non-existent_project (0.50s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/invoke_my-auth-list-dataset-ids-tool (1.94s)
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.18s)
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.10s)
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.11s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_correct_project (0.10s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-list-table-ids-tool_with_non-existent_project (0.12s)
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.12s)
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.11s)
Step #6 - "bigquery":     --- PASS: TestBigQueryToolEndpoints/Invoke_my-auth-get-table-info-tool_with_correct_project (0.12s)
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: 21.1% of statements in ./internal/sources/..., ./internal/tools/...
Step #6 - "bigquery": Calculating coverage for BigQuery...
Step #6 - "bigquery": BigQuery total coverage: 75.9%
Step #6 - "bigquery": Coverage for BigQuery is sufficient.
Finished Step #6 - "bigquery"
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/get_my-simple-tool
Step #8 - "spanner": 2025-07-19T06:08:11.110969796Z 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:37630" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000001"} httpResponse: {status: 200 bytes: 167 elapsed: 0.413479} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-simple-tool
Step #8 - "spanner": 2025-07-19T06:08:11.711944349Z 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:37630" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000002"} httpResponse: {status: 200 bytes: 28 elapsed: 585.256915} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-param-tool
Step #8 - "spanner": 2025-07-19T06:08:11.744170052Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-param-tool/invoke" method: "POST" path: "/api/tool/my-param-tool/invoke" remoteIP: "127.0.0.1:37630" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000003"} httpResponse: {status: 200 bytes: 81 elapsed: 31.193779} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-param-tool2_with_nil_response
Step #8 - "spanner": 2025-07-19T06:08:11.763484277Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-param-tool2/invoke" method: "POST" path: "/api/tool/my-param-tool2/invoke" remoteIP: "127.0.0.1:37630" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000004"} httpResponse: {status: 200 bytes: 44 elapsed: 18.400740} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-param-tool_without_parameters
Step #8 - "spanner": 2025-07-19T06:08:11.764841114Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-param-tool/invoke" method: "POST" path: "/api/tool/my-param-tool/invoke" remoteIP: "127.0.0.1:37630" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000005"} httpResponse: {status: 400 bytes: 98 elapsed: 0.300211} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-param-tool_with_insufficient_parameters
Step #8 - "spanner": 2025-07-19T06:08:11.766144216Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-param-tool/invoke" method: "POST" path: "/api/tool/my-param-tool/invoke" remoteIP: "127.0.0.1:37644" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000006"} httpResponse: {status: 400 bytes: 100 elapsed: 0.223477} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-auth-tool_with_auth_token
Step #8 - "spanner": 2025-07-19T06:08:11.810669785Z 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:37660" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000007"} httpResponse: {status: 200 bytes: 36 elapsed: 43.443581} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-auth-tool_with_invalid_auth_token
Step #8 - "spanner": 2025-07-19T06:08:11.811821787Z 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:37660" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000008"} httpResponse: {status: 400 bytes: 159 elapsed: 0.212035} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-auth-tool_without_auth_token
Step #8 - "spanner": 2025-07-19T06:08:11.813057845Z 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:37666" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000009"} httpResponse: {status: 400 bytes: 159 elapsed: 0.182283} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-auth-required-tool_with_auth_token
Step #8 - "spanner": 2025-07-19T06:08:11.828095755Z 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:37676" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000010"} httpResponse: {status: 200 bytes: 28 elapsed: 13.966334} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-auth-required-tool_with_invalid_auth_token
Step #8 - "spanner": 2025-07-19T06:08:11.829247197Z 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:37676" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000011"} httpResponse: {status: 401 bytes: 119 elapsed: 0.186693} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-auth-required-tool_without_auth_token
Step #8 - "spanner": 2025-07-19T06:08:11.830625524Z 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:37686" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000012"} httpResponse: {status: 400 bytes: 159 elapsed: 0.250837} 
Step #8 - "spanner": 2025-07-19T06:08:11.8321024Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000013"} httpResponse: {status: 200 bytes: 195 elapsed: 0.518416} 
Step #8 - "spanner": 2025-07-19T06:08:11.833025136Z INFO Response: 202 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000014"} httpResponse: {status: 202 bytes: 0 elapsed: 0.171472} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/MCP_Invoke_my-param-tool
Step #8 - "spanner": 2025-07-19T06:08:11.850809331Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000015"} httpResponse: {status: 200 bytes: 178 elapsed: 17.045223} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/MCP_Invoke_invalid_tool
Step #8 - "spanner": 2025-07-19T06:08:11.852139386Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000016"} httpResponse: {status: 200 bytes: 131 elapsed: 0.318493} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/MCP_Invoke_my-param-tool_without_parameters
Step #8 - "spanner": 2025-07-19T06:08:11.853484531Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000017"} httpResponse: {status: 200 bytes: 149 elapsed: 0.328333} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/MCP_Invoke_my-param-tool_with_insufficient_parameters
Step #8 - "spanner": 2025-07-19T06:08:11.854641853Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000018"} httpResponse: {status: 200 bytes: 156 elapsed: 0.286331} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/MCP_Invoke_my-auth-required-tool
Step #8 - "spanner": 2025-07-19T06:08:11.855643695Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000019"} httpResponse: {status: 200 bytes: 156 elapsed: 0.171282} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/MCP_Invoke_my-fail-tool
Step #8 - "spanner": 2025-07-19T06:08:11.867837462Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/mcp" method: "POST" path: "/mcp" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000020"} httpResponse: {status: 200 bytes: 331 elapsed: 11.395091} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_list-tables-read-only
Step #8 - "spanner": 2025-07-19T06:08:11.906061822Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/access-schema-read-only/invoke" method: "POST" path: "/api/tool/access-schema-read-only/invoke" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000021"} httpResponse: {status: 200 bytes: 56 elapsed: 37.360968} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_list-tables
Step #8 - "spanner": 2025-07-19T06:08:11.919414613Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/access-schema/invoke" method: "POST" path: "/api/tool/access-schema/invoke" remoteIP: "127.0.0.1:37698" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000022"} httpResponse: {status: 400 bytes: 266 elapsed: 12.352399} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only
Step #8 - "spanner": 2025-07-19T06:08:11.943407Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool-read-only/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool-read-only/invoke" remoteIP: "127.0.0.1:37710" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000023"} httpResponse: {status: 200 bytes: 28 elapsed: 21.906008} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_with_data_present_in_table
Step #8 - "spanner": 2025-07-19T06:08:11.966752911Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool-read-only/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool-read-only/invoke" remoteIP: "127.0.0.1:37710" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000024"} httpResponse: {status: 200 bytes: 81 elapsed: 22.514022} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_create_table
Step #8 - "spanner": 2025-07-19T06:08:11.975951066Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool-read-only/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool-read-only/invoke" remoteIP: "127.0.0.1:37710" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000025"} httpResponse: {status: 400 bytes: 407 elapsed: 8.248596} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_drop_table
Step #8 - "spanner": 2025-07-19T06:08:11.985731191Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool-read-only/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool-read-only/invoke" remoteIP: "127.0.0.1:37716" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000026"} httpResponse: {status: 400 bytes: 363 elapsed: 8.763313} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_insert_entry
Step #8 - "spanner": 2025-07-19T06:08:11.991388574Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool-read-only/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool-read-only/invoke" remoteIP: "127.0.0.1:37730" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000027"} httpResponse: {status: 400 bytes: 282 elapsed: 4.637900} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool_without_body
Step #8 - "spanner": 2025-07-19T06:08:11.992756601Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool/invoke" remoteIP: "127.0.0.1:37734" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000028"} httpResponse: {status: 400 bytes: 99 elapsed: 0.194093} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool
Step #8 - "spanner": 2025-07-19T06:08:12.009490812Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool/invoke" remoteIP: "127.0.0.1:37750" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000029"} httpResponse: {status: 200 bytes: 28 elapsed: 15.653214} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool_create_table
Step #8 - "spanner": 2025-07-19T06:08:12.021041244Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool/invoke" remoteIP: "127.0.0.1:37750" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000030"} httpResponse: {status: 400 bytes: 407 elapsed: 10.600154} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool_drop_table
Step #8 - "spanner": 2025-07-19T06:08:12.032108631Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool/invoke" remoteIP: "127.0.0.1:37764" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000031"} httpResponse: {status: 400 bytes: 363 elapsed: 10.107619} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool_insert_entry
Step #8 - "spanner": 2025-07-19T06:08:12.0779077Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool/invoke" remoteIP: "127.0.0.1:37776" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000032"} httpResponse: {status: 200 bytes: 18 elapsed: 44.769826} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_my-exec-sql-tool_without_body#01
Step #8 - "spanner": 2025-07-19T06:08:12.078920463Z INFO Response: 400 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-exec-sql-tool/invoke" method: "POST" path: "/api/tool/my-exec-sql-tool/invoke" remoteIP: "127.0.0.1:37776" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000033"} httpResponse: {status: 400 bytes: 99 elapsed: 0.209554} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-auth-exec-sql-tool_with_auth_token
Step #8 - "spanner": 2025-07-19T06:08:12.098937457Z INFO Response: 200 OK service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-exec-sql-tool/invoke" method: "POST" path: "/api/tool/my-auth-exec-sql-tool/invoke" remoteIP: "127.0.0.1:37786" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000034"} httpResponse: {status: 200 bytes: 28 elapsed: 18.861332} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-auth-exec-sql-tool_with_invalid_auth_token
Step #8 - "spanner": 2025-07-19T06:08:12.099918057Z INFO Response: 401 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-exec-sql-tool/invoke" method: "POST" path: "/api/tool/my-auth-exec-sql-tool/invoke" remoteIP: "127.0.0.1:37786" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000035"} httpResponse: {status: 401 bytes: 119 elapsed: 0.142840} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/Invoke_my-auth-exec-sql-tool_without_auth_token
Step #8 - "spanner": 2025-07-19T06:08:12.101119962Z INFO Response: 401 Client Error service: "httplog" httpRequest: {url: "http://127.0.0.1:5000/api/tool/my-auth-exec-sql-tool/invoke" method: "POST" path: "/api/tool/my-auth-exec-sql-tool/invoke" remoteIP: "127.0.0.1:57554" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000036"} httpResponse: {status: 401 bytes: 119 elapsed: 0.121478} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_create-table-templateParams-tool
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_insert-table-templateParams-tool
Step #8 - "spanner": 2025-07-19T06:08:12.124723182Z 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:57560" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000037"} httpResponse: {status: 200 bytes: 18 elapsed: 22.462308} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_insert-table-templateParams-tool#01
Step #8 - "spanner": 2025-07-19T06:08:12.148352433Z 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:57560" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000038"} httpResponse: {status: 200 bytes: 18 elapsed: 22.712977} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_select-templateParams-tool
Step #8 - "spanner": 2025-07-19T06:08:12.167992761Z 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:57560" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000039"} httpResponse: {status: 200 bytes: 113 elapsed: 18.643756} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_select-templateParams-combined-tool
Step #8 - "spanner": 2025-07-19T06:08:12.190356522Z 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:57560" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000040"} httpResponse: {status: 200 bytes: 63 elapsed: 21.386812} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_select-fields-templateParams-tool
Step #8 - "spanner": 2025-07-19T06:08:12.213611997Z 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:57560" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000041"} httpResponse: {status: 200 bytes: 56 elapsed: 22.170467} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_select-filter-templateParams-combined-tool
Step #8 - "spanner": 2025-07-19T06:08:12.234425858Z 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:57560" proto: "HTTP/1.1" requestID: "51f8b12bb578/vgNvIhQ8TW-000042"} httpResponse: {status: 200 bytes: 63 elapsed: 19.942939} 
Step #8 - "spanner": === RUN   TestSpannerToolEndpoints/invoke_drop-table-templateParams-tool
Step #8 - "spanner": --- PASS: TestSpannerToolEndpoints (68.99s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/get_my-simple-tool (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-simple-tool (0.59s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-param-tool (0.03s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-param-tool2_with_nil_response (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-param-tool_without_parameters (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-param-tool_with_insufficient_parameters (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-tool_with_auth_token (0.04s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-tool_with_invalid_auth_token (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-tool_without_auth_token (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-required-tool_with_auth_token (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-required-tool_with_invalid_auth_token (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-required-tool_without_auth_token (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-param-tool (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_invalid_tool (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-param-tool_without_parameters (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-param-tool_with_insufficient_parameters (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-auth-required-tool (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/MCP_Invoke_my-fail-tool (0.01s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_list-tables-read-only (0.04s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_list-tables (0.01s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_with_data_present_in_table (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_create_table (0.01s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_drop_table (0.01s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool-read-only_insert_entry (0.01s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_without_body (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_create_table (0.01s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_drop_table (0.01s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_insert_entry (0.05s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_my-exec-sql-tool_without_body#01 (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-exec-sql-tool_with_auth_token (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-exec-sql-tool_with_invalid_auth_token (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/Invoke_my-auth-exec-sql-tool_without_auth_token (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_create-table-templateParams-tool (0.00s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_insert-table-templateParams-tool (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_insert-table-templateParams-tool#01 (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_select-templateParams-tool (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_select-templateParams-combined-tool (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_select-fields-templateParams-tool (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_select-filter-templateParams-combined-tool (0.02s)
Step #8 - "spanner":     --- PASS: TestSpannerToolEndpoints/invoke_drop-table-templateParams-tool (0.00s)
Step #8 - "spanner": PASS
Step #8 - "spanner": coverage: 16.6% of statements in ./internal/sources/..., ./internal/tools/...
Step #8 - "spanner": Calculating coverage for Spanner...
Step #8 - "spanner": Spanner total coverage: 86.3%
Step #8 - "spanner": Coverage for Spanner is sufficient.
Finished Step #8 - "spanner"
PUSH
DONE

Build Log: https://console.cloud.google.com/logs/viewer?advancedFilter=resource.type%3D%22build%22+AND+resource.labels.build_id%3D%22f9aa104b-5d9a-45d1-aa94-57f6d66aa2bb%22+AND+resource.labels.build_trigger_id%3D%22785da918-06f1-47bb-860c-fbabc80b5977%22&project=toolbox-testing-438616