Coordinator Test Report
Expandable suites, scenario groups, individual test results, and failure detail in one static report.
Suites
Click a suite, scenario group, or test case to inspect nested results.
Coordinator Acl Audit Http Integration Test7 total 7 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorAclAuditHttpIntegrationTest · 1.401s
Passed7 total 7 passed
passed acl allows write role to read monitoring and mutate admin endpoints() 0.993s
passed acl keeps legacy admin and monitor roles as aliases() 0.018s
passed acl allows read role monitoring reads but rejects admin mutations() 0.009s
passed acl allows read role on read only stream endpoints() 0.060s
passed acl allows member heartbeat but rejects monitoring reads() 0.271s
passed audit log captures delete group mutation() 0.017s
passed audit log captures successful admin scale request() 0.025s
Coordinator Admin Exception Http Integration Test3 total 3 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorAdminExceptionHttpIntegrationTest · 0.092s
Passed3 total 3 passed
passed create stream returns conflict when Redis shard key already exists for prefix() 0.046s
passed consumer concurrency is not exposed as an admin endpoint() 0.015s
passed admin create stream validation errors use coordinator error response() 0.027s
Coordinator Audit Log Sink Test1 total 1 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorAuditLogSinkTest · 0.706s
Passed1 total 1 passed
passed redis audit sink appends group-scoped event and trims retained entries() 0.706s
Coordinator Authenticated Member Http Integration Test1 total 1 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorAuthenticatedMemberHttpIntegrationTest · 0.074s
Passed1 total 1 passed
passed member api requires basic auth when enabled() 0.074s
Coordinator Consumption Progress Test2 total 2 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorConsumptionProgressTest · 0.008s
Passed2 total 2 passed
passed coordinator fences progress reports for unassigned shards() 0.005s
passed coordinator stores consumer reported shard progress() 0.002s
Coordinator Docker Configuration Test1 total 1 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorDockerConfigurationTest · 0.004s
Passed1 total 1 passed
passed docker compose coordinator settings bind to coordinator properties() 0.004s
Graceful leave2 total 2 passed
Graceful leave · 0.005s
Passed2 total 2 passed
passed last member leave makes group empty and clears targets() 0.001s
passed leaving member releases targets and survivor owns every shard() 0.003s
Member expired2 total 2 passed
Member expired · 0.006s
Passed2 total 2 passed
passed expired member rejoin ignores stale ownership report() 0.003s
passed expired owner is reassigned and stale heartbeat is fenced() 0.002s
Member join3 total 3 passed
Member join · 0.004s
Passed3 total 3 passed
passed first member receives every initial shard() 0.001s
passed new member waits for previous owner revoke before receiving moved shard() 0.001s
passed three member join creates balanced target assignment without duplicate owners() 0.002s
New stream topic creation3 total 3 passed
New stream topic creation · 0.003s
Passed3 total 3 passed
passed same shard count scale does not provision a new stream topic version() 0.000s
passed group creation provisions initial stream topic shards() 0.000s
passed upscaling provisions next stream topic shards after preparing migration() 0.001s
Partition upscaling2 total 2 passed
Partition upscaling · 0.005s
Passed2 total 2 passed
passed scale updates shard count and assigns target shards() 0.003s
passed scale updates producer routing metadata() 0.002s
Coordinator Http Integration Test15 total 15 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorHttpIntegrationTest · 1.269s
Passed15 total 15 passed
passed login rejects invalid credentials() 0.021s
passed http api creates group and accepts heartbeat() 0.066s
passed monitoring console is exposed without triggering api basic auth() 0.030s
passed basic auth scheme is parsed case insensitively() 0.009s
passed login issues seven day bearer token for coordinator api calls() 0.054s
passed http api handles graceful leave and monitoring shows empty group() 0.021s
passed monitoring exposes coordination version compatibility lifecycle() 0.035s
passed http api scales group and refreshes producer routing metadata() 0.036s
passed admin api validates create group body() 0.013s
passed openapi docs and swagger ui are exposed for interactive tests() 0.910s
passed monitoring session verifies credentials without reading coordinator state() 0.007s
passed http api returns producer routing metadata() 0.010s
passed member api allows heartbeat without auth by default() 0.010s
passed http stream scale to zero updates every registered consumer group routing() 0.028s
passed admin api requires basic auth() 0.006s
Coordinator Metrics Test8 total 8 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorMetricsTest · 0.029s
Passed8 total 8 passed
passed coordinator records API request latency metrics() 0.016s
passed coordinator records producer routing metrics() 0.003s
passed coordinator exports unknown Redis lag as zero in Prometheus gauge() 0.002s
passed coordinator exports stream shard offset and lag metrics() 0.001s
passed coordinator records state conflict retry metrics() 0.000s
passed coordinator records heartbeat group state and expiry metrics() 0.002s
passed coordinator records scale migration and rebalance metrics() 0.002s
passed coordinator exports consumer shard progress metrics() 0.002s
Coordinator Open Api Operation Id Contract Test1 total 1 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorOpenApiOperationIdContractTest · 0.013s
Passed1 total 1 passed
passed openapi operation IDs and controller annotations stay in sync() 0.013s
Coordinator Protocol Defaults Test1 total 1 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorProtocolDefaultsTest · 0.000s
Passed1 total 1 passed
passed coordinator defaults come from shared coordination protocol() 0.000s
Coordinator Provisioning Failure Integration Test4 total 4 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorProvisioningFailureIntegrationTest · 0.065s
Passed4 total 4 passed
passed mocked losing create race does not provision rejected shard plan() 0.060s
passed mocked provisioning failure during create does not publish group metadata() 0.001s
passed mocked provisioning failure during scale keeps retryable preparing migration metadata() 0.002s
passed mocked save conflict during scale does not provision until preparing state is committed() 0.001s
Coordinator Rate Limit Http Integration Test2 total 2 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorRateLimitHttpIntegrationTest · 0.060s
Passed2 total 2 passed
passed rate limit does not block monitoring reads or member heartbeats() 0.048s
passed rate limit rejects repeated admin mutations for same caller and group() 0.011s
Assignment algorithm scenarios1 total 1 passed
Assignment algorithm scenarios · 0.008s
Passed1 total 1 passed
passed redistribution keeps survivor sticky shards while balancing expired owner shards() 0.008s
Heartbeat reconciliation component scenarios2 total 2 passed
Heartbeat reconciliation component scenarios · 0.005s
Passed2 total 2 passed
passed new member receives pending shards until previous owner reports released ownership() 0.003s
passed one second coordinator ticks enter rebalancing when a silent member lease expires() 0.002s
Member expiration rebalance workflow1 total 1 passed
Member expiration rebalance workflow · 0.008s
Passed1 total 1 passed
passed coordinator tick expires silent member and survivors converge through heartbeat responses() 0.008s
Coordinator Redis Commands Test2 total 2 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorRedisCommandsTest · 0.567s
Passed2 total 2 passed
passed memory usage routes stream key as the cluster key() 0.562s
passed cluster slot owners resolve stream slots to master nodes() 0.004s
Coordinator Service Test80 total 80 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorServiceTest · 0.274s
Passed80 total 80 passed
passed grafana shard rows expose produced and consumed rates after repeated observations() 0.018s
passed grafana group rows aggregate produced and consumed rates() 0.003s
passed health degrades when redis is required and unavailable() 0.014s
passed rebalance timeout fences stuck owner() 0.002s
passed new logical members rebalance shards by member count() 0.001s
passed health refreshes redis status asynchronously and reuses cache within configured ttl() 0.002s
passed metadata sync does not wait for empty leaving members() 0.001s
passed heartbeat rejects active member epoch reset() 0.001s
passed migration scale updates shard count() 0.001s
passed grafana shard offset reads can run in parallel() 0.053s
passed terminal members are pruned after stale member retention() 0.001s
passed unknown member can rejoin with zero epoch and receive assignment() 0.001s
passed grafana messages can jump to the last page for a single shard() 0.004s
passed delete group rejects live members unless forced() 0.001s
passed admin mutations are blocked while metadata sync is in progress() 0.001s
passed monitoring current assignments ignore expired members() 0.002s
passed assignment waits for previous owner revoke() 0.001s
passed health skips redis ping when redis features are disabled() 0.001s
passed grafana shard rows expose target owners separately from acknowledged current owners() 0.001s
passed producer routing returns shard routing metadata() 0.001s
passed grafana overview scans multiple groups in parallel() 0.029s
passed migration rollback restores previous version() 0.001s
passed scale rejects negative target shard count() 0.000s
passed logical members receive even shard assignments() 0.001s
passed heartbeat rejects epoch reset after ownership was acknowledged even when report is empty() 0.001s
passed grafana message search finds a record id across every shard() 0.002s
passed membership expires owner and reassigns shards() 0.000s
passed heartbeat returns unknown member for missing group() 0.000s
passed health does not wait for a slow redis ping beyond configured timeout() 0.023s
passed expired member leave heartbeat stays fenced() 0.002s
passed metadata sync waits in revoke pending until draining member releases and peers acknowledge() 0.001s
passed monitoring live owner rows exclude expired members with stale current assignments() 0.001s
passed member split join advances assignment epochs() 0.003s
passed coordinator tick expires silent members without waiting for another heartbeat() 0.001s
passed grafana offset cache reuses shard reads across overview panels() 0.002s
passed metadata sync does not expose new target shards as immediately assigned() 0.001s
passed scale to zero waits when Redis cannot compute removed shard lag() 0.002s
passed heartbeat rejects client advanced member epoch() 0.001s
passed migration rollback rejects unknown id() 0.000s
passed heartbeat fences member that reports shard owned by another active member() 0.003s
passed grafana shard rows can scan all groups for overview dashboards() 0.003s
passed assignment first member gets readable shards() 0.001s
passed heartbeat rejects unsupported negative member epoch() 0.000s
passed duplicate terminal revoke report after release does not fence member() 0.002s
passed grafana option APIs expose current sharded stream selections from metadata() 0.001s
passed metadata sync ignores stale revoke reports from discarded higher version() 0.003s
passed failover resumes pending revoke() 0.002s
passed rebalance timeout keeps timely owner active() 0.001s
passed scale to zero drains and removes every shard() 0.003s
passed initial join heartbeat replay returns current assignment without changing epochs() 0.001s
passed higher metadata version does not bypass fenced member state() 0.003s
passed heartbeat rejects member id mismatch() 0.001s
passed heartbeat with higher metadata version requests sync to current redis metadata() 0.001s
passed heartbeat rejects unknown member leave() 0.000s
passed grafana messages can page backward through a single shard more than once() 0.001s
passed membership rejoin restores expired member() 0.000s
passed heartbeat fences member that reports pending shard ownership before revoke completes() 0.000s
passed membership fences expired owner stale epoch() 0.000s
passed heartbeat fences stale member epoch() 0.000s
passed steady heartbeat replay does not bump metadata or assignment epochs() 0.000s
passed heartbeat accepts previously granted ownership after target changes before ack() 0.000s
passed delete group removes inactive metadata() 0.000s
passed stream scale updates every consumer group and assignments arrive on heartbeat() 0.001s
passed group creation provisions initial shard plan() 0.000s
passed create stream validates invalid stream prefix before storing metadata() 0.000s
passed grafana messages can jump to the last page across all shards() 0.002s
passed grafana offset cache is not invalidated by heartbeat metadata changes() 0.001s
passed migration scale lets live consumers revoke old assignments without fencing() 0.003s
passed scale in migration completes after removed shards are drained() 0.001s
passed membership rejoin restores gracefully left member() 0.001s
passed coordination version is accepted only inside module support range() 0.001s
passed metadata sync serializes concurrent stale revoke reports from multiple members() 0.001s
passed group rejects duplicate create() 0.001s
passed stream scale to zero updates every consumer group routing metadata() 0.001s
passed additional group create under managed prefix does not reject existing coordinator shard keys() 0.001s
passed monitoring read does not acquire critical section or write refreshed state() 0.001s
passed first group create rejects pre-existing Redis stream prefix keys() 0.001s
passed scale in waits for every Redis consumer group on removed shards to drain() 0.001s
passed membership ignores stale ownership on rejoin() 0.000s
passed scale provisions target shard plan after preparing migration state is committed() 0.000s
Coordinator State Mutex Test2 total 2 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorStateMutexTest · 0.005s
Passed2 total 2 passed
passed redis state mutex returns service unavailable when mutex cannot be acquired() 0.002s
passed redis state mutex allows only one critical section at a time() 0.003s
Coordinator State Store Test6 total 6 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CoordinatorStateStoreTest · 0.371s
Passed6 total 6 passed
passed memory store creates saves and lists groups() 0.000s
passed redis keys keep group metadata in one hash slot() 0.001s
passed memory store survives coordinator replacement() 0.001s
passed jdbc store persists group metadata and rejects stale writes() 0.338s
passed redis store rejects put if legacy group value key already exists() 0.015s
passed redis store reads and migrates legacy group value key() 0.013s
Critical Section Aspect Test2 total 2 passed
io.github.ghkdqhrbals.redisstreamcoordinator.CriticalSectionAspectTest · 0.130s
Passed2 total 2 passed
passed critical section rejects new work after coordinator starts terminating() 0.128s
passed critical section annotation applies local monitor and coordinator mutex() 0.002s
Grafana Dashboard Contract Test11 total 11 passed
io.github.ghkdqhrbals.redisstreamcoordinator.GrafanaDashboardContractTest · 0.011s
Passed11 total 11 passed
passed stream messages panel wires bounded pagination controls() 0.001s
passed stream messages tables expose resizable columns() 0.001s
passed admin console exposes shard scaling without producer stress controls() 0.000s
passed public dashboard is compatible with external sharing() 0.001s
passed stream sharding overview groups consumer groups under each stream() 0.001s
passed import dashboards expose datasource and coordinator URL inputs() 0.001s
passed api dashboard latency panels use recent window instead of sticky full-range maxima() 0.001s
passed html graphics datasource calls are grafana subpath safe() 0.000s
passed stream messages panel shows time shard offset and fields columns() 0.000s
passed overview dashboard keeps group and owner columns operator friendly() 0.000s
passed grafana gauge queries carry previous values across dashboard range() 0.002s
Redis Coordinator Metadata Schema Test5 total 5 passed
io.github.ghkdqhrbals.redisstreamcoordinator.RedisCoordinatorMetadataSchemaTest · 0.071s
Passed5 total 5 passed
passed redis metadata parser accepts current and legacy v1 metadata() 0.048s
passed redis metadata parser upgrades legacy coordinator managed shard layout metadata() 0.012s
passed redis metadata parser accepts legacy migration id fields() 0.003s
passed redis metadata parser ignores removed legacy fields() 0.002s
passed redis metadata parser rejects unsupported future schema() 0.002s
Redis Coordinator State Store Integration Test3 total 0 passed 3 skipped
io.github.ghkdqhrbals.redisstreamcoordinator.RedisCoordinatorStateStoreIntegrationTest · 0.001s
Skipped3 total 0 passed 3 skipped
skipped redis store rejects stale snapshot writes() 0.000s
skipped redis stream provisioning creates consumer groups for created and scaled shard versions() 0.000s
skipped redis store writes one metadata hash key() 0.001s
Redis Stream Coordinator Application Test1 total 1 passed
io.github.ghkdqhrbals.redisstreamcoordinator.RedisStreamCoordinatorApplicationTest · 0.006s
Passed1 total 1 passed
passed spring context loads() 0.006s
Redis Stream Provisioning Integration Test4 total 0 passed 4 skipped
io.github.ghkdqhrbals.redisstreamcoordinator.RedisStreamProvisioningIntegrationTest · 0.001s
Skipped4 total 0 passed 4 skipped
skipped stream provisioner is idempotent for existing Redis consumer groups() 0.000s
skipped coordinator provisions Redis consumer groups on create and scale() 0.000s
skipped stream provisioner retry succeeds after partial Redis failure leaves existing groups() 0.000s
skipped monitoring exposes shard offsets lag and paged stream messages() 0.000s
Redis Stream Shard Keys Test6 total 6 passed
io.github.ghkdqhrbals.redisstreamcoordinator.RedisStreamShardKeysTest · 0.004s