{"id":31826953,"url":"https://github.com/tom-uchida/go-api-test","last_synced_at":"2025-10-11T17:48:48.705Z","repository":{"id":314764451,"uuid":"1056198438","full_name":"tom-uchida/go-api-test","owner":"tom-uchida","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-28T14:57:08.000Z","size":76,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-28T16:40:54.679Z","etag":null,"topics":["api-test","cloud-spanner","golang","testcontainers-go"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tom-uchida.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-13T15:39:16.000Z","updated_at":"2025-09-28T14:57:11.000Z","dependencies_parsed_at":"2025-09-14T17:40:16.236Z","dependency_job_id":"1efcde92-1cec-496e-9197-47f913854f65","html_url":"https://github.com/tom-uchida/go-api-test","commit_stats":null,"previous_names":["tom-uchida/go-spanner-emulator","tom-uchida/go-api-test"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/tom-uchida/go-api-test","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom-uchida%2Fgo-api-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom-uchida%2Fgo-api-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom-uchida%2Fgo-api-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom-uchida%2Fgo-api-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tom-uchida","download_url":"https://codeload.github.com/tom-uchida/go-api-test/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tom-uchida%2Fgo-api-test/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279008139,"owners_count":26084397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-test","cloud-spanner","golang","testcontainers-go"],"created_at":"2025-10-11T17:48:47.328Z","updated_at":"2025-10-11T17:48:48.692Z","avatar_url":"https://github.com/tom-uchida.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-api-test\n\n## API test using Go test\n\n1. Run Go test\n\n```shell\n\u003e go test ./test/... -v\n2025/10/12 02:23:14 github.com/testcontainers/testcontainers-go - Connected to docker: \n  Server Version: 25.0.2\n  API Version: 1.44\n  Operating System: Docker Desktop\n  Total Memory: 7941 MB\n  Testcontainers for Go Version: v0.39.0\n  Resolved Docker Host: unix:///Users/uchidatomomasa/.docker/run/docker.sock\n  Resolved Docker Socket Path: /var/run/docker.sock\n  Test SessionID: 62426c5078f237d12da2ee9324564142f5b4ea2e956e38bcb8013ab87735e36b\n  Test ProcessID: 772e3c94-ee8b-4ecd-a590-8224516c6dd9\n2025/10/12 02:23:14 🐳 Creating container for image gcr.io/cloud-spanner-emulator/emulator:latest\n2025/10/12 02:23:14 🐳 Creating container for image testcontainers/ryuk:0.13.0\n2025/10/12 02:23:14 ✅ Container created: bef0f8944250\n2025/10/12 02:23:14 🐳 Starting container: bef0f8944250\n2025/10/12 02:23:15 ✅ Container started: bef0f8944250\n2025/10/12 02:23:15 ⏳ Waiting for container id bef0f8944250 image: testcontainers/ryuk:0.13.0. Waiting for: \u0026{Port:8080/tcp timeout:\u003cnil\u003e PollInterval:100ms skipInternalCheck:false skipExternalCheck:false}\n2025/10/12 02:23:15 Shell not executable in container, only external port validated\n2025/10/12 02:23:15 🔔 Container is ready: bef0f8944250\n2025/10/12 02:23:15 ✅ Container created: faa1dc392b88\n2025/10/12 02:23:15 🐳 Starting container: faa1dc392b88\n2025/10/12 02:23:15 ✅ Container started: faa1dc392b88\n2025/10/12 02:23:15 ⏳ Waiting for container id faa1dc392b88 image: gcr.io/cloud-spanner-emulator/emulator:latest. Waiting for: \u0026{timeout:\u003cnil\u003e Log:Cloud Spanner emulator running IsRegexp:false Occurrence:1 PollInterval:100ms check:\u003cnil\u003e submatchCallback:\u003cnil\u003e re:\u003cnil\u003e log:[]}\n2025/10/12 02:23:16 🔔 Container is ready: faa1dc392b88\nSpanner emulator running at: localhost:57242\nSPANNER_EMULATOR_HOST: localhost:57242\nInstance created: projects/test-project/instances/test-instance\n=== RUN   Test_CreateUser\n=== PAUSE Test_CreateUser\n=== CONT  Test_CreateUser\nDatabase created: test-db\n\n=== RUN   Test_CreateUser/runbook/go-test-ver.yaml(01559caa60f32e80a95eb254be15cecbbcd8f405)\n{\n  \"user_id\": \"c9c0907a-0b2e-464f-a41d-5f70e585fda6\"\n}\n{\n  \"user_id\": \"1fa66879-0512-4b16-821b-aa5b927841a0\"\n}\n[\n  {\n    \"Name\": \"test-name-1\",\n    \"UserID\": \"c9c0907a-0b2e-464f-a41d-5f70e585fda6\"\n  },\n  {\n    \"Name\": \"test-name-2\",\n    \"UserID\": \"1fa66879-0512-4b16-821b-aa5b927841a0\"\n  }\n]\n--- PASS: Test_CreateUser (0.19s)\n    --- PASS: Test_CreateUser/runbook/go-test-ver.yaml(01559caa60f32e80a95eb254be15cecbbcd8f405) (0.09s)\nPASS\nok  \tgithub.com/tom-uchida/go-api-test/test\t4.138sgithub.com/tom-uchida/go-api-test/test\t4.209s\n```\n\n## API test using Docker containers\n\n1. Start all containers\n\n```shell\n\u003e docker compose up --build\n\n[+] Building 12.5s (15/15) FINISHED                                               docker:desktop-linux\n =\u003e [api-server internal] load build definition from Dockerfile                                   0.0s\n =\u003e =\u003e transferring dockerfile: 321B                                                              0.0s\n =\u003e [api-server internal] load metadata for docker.io/library/alpine:latest                       1.3s\n =\u003e [api-server internal] load metadata for docker.io/library/golang:1.24-alpine                  1.3s\n =\u003e [api-server internal] load .dockerignore                                                      0.0s\n =\u003e =\u003e transferring context: 2B                                                                   0.0s\n =\u003e [api-server builder 1/6] FROM docker.io/library/golang:1.24-alpine@sha256:fc2cff6625f3c1c92e  0.0s\n =\u003e [api-server stage-1 1/3] FROM docker.io/library/alpine:latest@sha256:4bcff63911fcb4448bd4fda  0.0s\n =\u003e [api-server internal] load build context                                                      0.0s\n =\u003e =\u003e transferring context: 12.19kB                                                              0.0s\n =\u003e CACHED [api-server builder 2/6] WORKDIR /app                                                  0.0s\n =\u003e CACHED [api-server builder 3/6] COPY go.mod go.sum ./                                         0.0s\n =\u003e CACHED [api-server builder 4/6] RUN go mod download                                           0.0s\n =\u003e [api-server builder 5/6] COPY . .                                                             0.0s\n =\u003e [api-server builder 6/6] RUN go build -o /app/server ./cmd/main.go                           11.0s\n =\u003e CACHED [api-server stage-1 2/3] WORKDIR /app                                                  0.0s\n =\u003e [api-server stage-1 3/3] COPY --from=builder /app/server .                                    0.0s\n =\u003e [api-server] exporting to image                                                               0.1s\n =\u003e =\u003e exporting layers                                                                           0.1s\n =\u003e =\u003e writing image sha256:2026b7b66666eb24d7a50485bd577d63a76087c70c28756a90ea93defa28bbe1      0.0s\n =\u003e =\u003e naming to docker.io/library/build-api-server                                               0.0s\n[+] Running 2/2\n ✔ Container build-spanner-emulator-1  Created                                                    0.0s \n ✔ Container build-api-server-1        Recreated                                                  0.0s \nAttaching to api-server-1, spanner-emulator-1\nspanner-emulator-1  | WARNING: proto: file \"google/rpc/status.proto\" is already registered\nspanner-emulator-1  | \tpreviously from: \"google.golang.org/genproto/googleapis/rpc/status\"\nspanner-emulator-1  | \tcurrently from:  \"unknown\"\nspanner-emulator-1  | See https://protobuf.dev/reference/go/faq#namespace-conflict\nspanner-emulator-1  | \nspanner-emulator-1  | WARNING: proto: file \"google/rpc/status.proto\" has a name conflict over google.rpc.Status\nspanner-emulator-1  | \tpreviously from: \"google.golang.org/genproto/googleapis/rpc/status\"\nspanner-emulator-1  | \tcurrently from:  \"unknown\"\nspanner-emulator-1  | See https://protobuf.dev/reference/go/faq#namespace-conflict\nspanner-emulator-1  | \nspanner-emulator-1  | WARNING: proto: message google.rpc.Status is already registered\nspanner-emulator-1  | \tpreviously from: \"google.golang.org/genproto/googleapis/rpc/status\"\nspanner-emulator-1  | \tcurrently from:  \"unknown\"\nspanner-emulator-1  | See https://protobuf.dev/reference/go/faq#namespace-conflict\nspanner-emulator-1  | \nspanner-emulator-1  | WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\nspanner-emulator-1  | I0000 00:00:1759591537.337902      11 emulator_main.cc:39] Cloud Spanner Emulator running.\nspanner-emulator-1  | I0000 00:00:1759591537.337921      11 emulator_main.cc:40] Server address: 0.0.0.0:9010\napi-server-1        | SPANNER_EMULATOR_HOST: spanner-emulator:9010\napi-server-1        | Instance created: projects/test-project/instances/test-instance\napi-server-1        | Database created: test-db\napi-server-1        | \napi-server-1        | 2025/10/04 15:25:37 \napi-server-1        | Server running at: localhost:8080\nspanner-emulator-1  | 2025/10/04 15:25:38 gateway.go:151: Cloud Spanner emulator running.\nspanner-emulator-1  | 2025/10/04 15:25:38 gateway.go:152: REST server listening at 0.0.0.0:9020\nspanner-emulator-1  | 2025/10/04 15:25:38 gateway.go:153: gRPC server listening at 0.0.0.0:9010\n```\n\n2. Run runn\n\n```shell\n\u003e SPANNER_EMULATOR_HOST=0.0.0.0:9010 runn run runbook/docker-containers-ver.yaml\n{\n  \"user_id\": \"7b87e886-a73c-4820-a079-f44d12099d09\"\n}\n{\n  \"user_id\": \"0813020f-65f4-47fc-adc1-4c244f80f8fb\"\n}\n[\n  {\n    \"Name\": \"test-name-1\",\n    \"UserID\": \"7b87e886-a73c-4820-a079-f44d12099d09\"\n  },\n  {\n    \"Name\": \"test-name-2\",\n    \"UserID\": \"0813020f-65f4-47fc-adc1-4c244f80f8fb\"\n  }\n]\n.\n\n1 scenario, 0 skipped, 0 failures\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftom-uchida%2Fgo-api-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftom-uchida%2Fgo-api-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftom-uchida%2Fgo-api-test/lists"}