Skip to content

feat: add FlociAzContainer and FlociGcpContainer for Azure and GCP emulation #166

Description

@fdelbrayelle

Summary

The library currently ships FlociContainer for the AWS emulator (Floci). The same vendor provides two sibling emulators — floci-az for Azure and floci-gcp for GCP — but neither has a Testcontainers module yet.

This issue requests dedicated container classes for both, following the same design as FlociContainer.

Motivation

Teams building multi-cloud applications or migrating between providers often test against Azure and GCP services alongside AWS. Having FlociAzContainer and FlociGcpContainer in this library would let them manage all three emulators through a single, consistent Testcontainers dependency — same lifecycle management, same pattern, no custom GenericContainer wiring per project.

Concrete use case: kestra-io/plugin-azure has integration tests for Blob Storage, Table Storage, Cosmos DB, Event Hubs, and Azure Functions that currently require real Azure credentials. floci-az covers all of those services, but without a Testcontainers module, each project must hand-roll its own GenericContainer<> wrapper.

Proposed API

Azure (FlociAzContainer)

floci-az exposes all services on a single port (4577).

var flociAz = new FlociAzContainer();
flociAz.start();

String blobEndpoint      = flociAz.getBlobEndpoint();
String tableEndpoint     = flociAz.getTableEndpoint();
String cosmosEndpoint    = flociAz.getCosmosEndpoint();
String eventHubsEndpoint = flociAz.getEventHubsEndpoint();

GCP (FlociGcpContainer)

floci-gcp exposes all services on a single port (4588) using HTTP/2 ALPN routing.

var flociGcp = new FlociGcpContainer();
flociGcp.start();

String storageEndpoint       = flociGcp.getStorageEndpoint();
String pubSubEndpoint        = flociGcp.getPubSubEndpoint();
String firestoreEndpoint     = flociGcp.getFirestoreEndpoint();
String secretManagerEndpoint = flociGcp.getSecretManagerEndpoint();

Gradle Dependency (proposed)

// Azure
testImplementation "io.floci:testcontainers-floci-az:<version>"

// GCP
testImplementation "io.floci:testcontainers-floci-gcp:<version>"

Or bundled as optional features of the existing io.floci:testcontainers-floci artifact — whichever fits the project structure best.

References

  • floci-az repository: https://github.com/floci-io/floci-az — Azure emulator (Blob, Table, Cosmos DB, Event Hubs, Functions, Key Vault, App Configuration); single port 4577
  • floci-gcp repository: https://github.com/floci-io/floci-gcp — GCP emulator (Cloud Storage, Pub/Sub, Firestore, Datastore, Secret Manager, IAM, Managed Kafka); single port 4588
  • Existing FlociContainer as the reference implementation

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions