0.1.0
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:
GcpExceptionwith paired HTTP/gRPC status codes,GcpExceptionMapperfor JAX-RS, andGcpGrpcControllerbase class mappingGcpException→StatusRuntimeException - Project context:
ProjectContextFilterresolves the GCP project ID from the URL path,x-goog-request-paramsheader, orFLOCI_GCP_DEFAULT_PROJECT_IDfallback - Resource naming:
GcpResourceNamesparses and buildsprojects/{project}/...strings - Project isolation:
ProjectAwareStorageBackendnamespaces all storage keys by GCP project ID - Request pipeline:
GzipRequestFilterfor Vert.x server-side gzip decompression (required by the Google Cloud Java SDK);ServiceRegistry+ServiceEnabledFilterto reject requests against disabled services
Configuration & storage
@ConfigMapping-basedEmulatorConfigrooted atfloci-gcp.*, every setting overridable viaFLOCI_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 updateslabelsfield on bucket create and patch — required for the Terraform/OpenTofugoogle_storage_bucketresource
Other services
- Pub/Sub (gRPC): topics, subscriptions, publish, pull, acknowledge,
StreamingPull - Secret Manager (gRPC): secrets, versions, access, enable/disable/destroy,
versions/latestresolution - Firestore (gRPC): documents, collections, filtered queries, transactions,
Listenstreaming - Datastore (REST/JSON): entities,
lookup,runQuery,commitwith 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.ymlwith/var/run/docker.sockmount for Managed Kafka container orchestration- Operational endpoints:
/_floci-gcp/healthand/_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 — fixesgoogle_storage_bucket_objectwith 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