Skip to content

0.1.0

Choose a tag to compare

@hectorvent hectorvent released this 23 May 17:04
· 45 commits to main since this release
99196ea

Highlights

Initial release of floci-gcp, a unified Google Cloud Platform emulator. Serves REST and gRPC on a single ALPN-multiplexed port and ships emulations for 7 GCP services, validated by 186 SDK compatibility tests across Java, Python, Node.js, and Go, plus dedicated Terraform and OpenTofu test suites.

✨ Added

Core platform

  • Single-port transport: HTTP/2 + gRPC via ALPN on port 4588 — no split-server config
  • Unified error model: GcpException with paired HTTP/gRPC status codes, GcpExceptionMapper for JAX-RS, and GcpGrpcController base class mapping GcpExceptionStatusRuntimeException
  • Project context: ProjectContextFilter resolves the GCP project ID from the URL path, x-goog-request-params header, or FLOCI_GCP_DEFAULT_PROJECT_ID fallback
  • Resource naming: GcpResourceNames parses and builds projects/{project}/... strings
  • Project isolation: ProjectAwareStorageBackend namespaces all storage keys by GCP project ID
  • Request pipeline: GzipRequestFilter for Vert.x server-side gzip decompression (required by the Google Cloud Java SDK); ServiceRegistry + ServiceEnabledFilter to reject requests against disabled services

Configuration & storage

  • @ConfigMapping-based EmulatorConfig rooted at floci-gcp.*, every setting overridable via FLOCI_GCP_* env vars
  • Four storage modes: memory (default), persistent, hybrid, wal

Cloud Storage (GCS)

  • Full REST API: buckets (create, get, list, patch, delete) and objects (multipart / resumable / media upload, download, copy, list, delete) across both XML and JSON API paths
  • CRC32C + MD5 checksum support
  • PATCH /storage/v1/b/{bucket} for label and metadata updates
  • labels field on bucket create and patch — required for the Terraform/OpenTofu google_storage_bucket resource

Other services

  • Pub/Sub (gRPC): topics, subscriptions, publish, pull, acknowledge, StreamingPull
  • Secret Manager (gRPC): secrets, versions, access, enable/disable/destroy, versions/latest resolution
  • Firestore (gRPC): documents, collections, filtered queries, transactions, Listen streaming
  • Datastore (REST/JSON): entities, lookup, runQuery, commit with upsert/insert/update/delete mutations, transactions
  • IAM (REST): service account CRUD, getIamPolicy, setIamPolicy, testIamPermissions
  • Managed Kafka (REST): Tier 1 + Tier 2 coverage of clusters, topics, and consumer groups; Redpanda-backed via Docker; mock mode for CI

Compatibility, packaging & operations

  • SDK compatibility test suites in Java, Python, Node.js, and Go — 186 tests across all 7 services
  • Terraform compatibility suite (compat-terraform/) using GCP provider v6
  • OpenTofu compatibility suite (compat-opentofu/) using GCP provider v6
  • JVM and native Docker images
  • docker-compose.yml with /var/run/docker.sock mount for Managed Kafka container orchestration
  • Operational endpoints: /_floci-gcp/health and /_floci-gcp/info

🐛 Fixed

  • gcs: multipart object upload now falls back to the ?name= query parameter when the object name is absent from the JSON metadata body — fixes google_storage_bucket_object with the Terraform GCP provider

📝 Upgrade notes

Initial release — no migration required. Configure via floci-gcp.* properties or FLOCI_GCP_* environment variables, and pick a storage mode (memory, persistent, hybrid, wal) appropriate to your environment.

Full Changelog: https://github.com/hectorvent/floci-gcp/compare/main...HEAD