fix(events): suppress stream poll loop in test profile
Build & Test (NowChessSystems) TeamCity build failed
Build & Test (NowChessSystems) TeamCity build failed
CDI fires StartupEvent to all observer beans regardless of @InjectMock substitution, causing GameCreationStreamClient and GameCreationStreamListener to start their poll loops during @QuarkusTest even when mocked. Without Redis configured in account tests, this floods logs with NPE stack traces from the unconfigured RedisDataSource synthetic bean. - Switch @Startup/@PostConstruct to @Observes StartupEvent on both beans - Guard startup body with nowchess.game-creation-stream.enabled (default true) - Disable the flag in modules/account/src/test/resources/application.yml Mirrors the nowchess.coordinator.enabled pattern in InstanceHeartbeatService. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+13
-11
@@ -7,10 +7,11 @@ import de.nowchess.chess.config.RedisConfig
|
||||
import de.nowchess.chess.service.GameCreationService
|
||||
import io.quarkus.redis.datasource.RedisDataSource
|
||||
import io.quarkus.redis.datasource.stream.{StreamMessage, XAddArgs, XGroupCreateArgs, XReadGroupArgs}
|
||||
import io.quarkus.runtime.Startup
|
||||
import jakarta.annotation.PostConstruct
|
||||
import io.quarkus.runtime.StartupEvent
|
||||
import jakarta.enterprise.context.ApplicationScoped
|
||||
import jakarta.enterprise.event.Observes
|
||||
import jakarta.inject.Inject
|
||||
import org.eclipse.microprofile.config.inject.ConfigProperty
|
||||
import org.eclipse.microprofile.context.ManagedExecutor
|
||||
import org.jboss.logging.Logger
|
||||
import scala.compiletime.uninitialized
|
||||
@@ -19,7 +20,6 @@ import scala.util.{Failure, Success, Try}
|
||||
import java.time.Duration
|
||||
import java.util.UUID
|
||||
|
||||
@Startup
|
||||
@ApplicationScoped
|
||||
class GameCreationStreamListener:
|
||||
|
||||
@@ -29,6 +29,8 @@ class GameCreationStreamListener:
|
||||
@Inject var creationService: GameCreationService = uninitialized
|
||||
@Inject var executor: ManagedExecutor = uninitialized
|
||||
@Inject var redisConfig: RedisConfig = uninitialized
|
||||
@ConfigProperty(name = "nowchess.game-creation-stream.enabled", defaultValue = "true")
|
||||
private var streamEnabled: Boolean = true
|
||||
// scalafix:on DisableSyntax.var
|
||||
|
||||
private val log = Logger.getLogger(classOf[GameCreationStreamListener])
|
||||
@@ -41,14 +43,14 @@ class GameCreationStreamListener:
|
||||
private def responseStream: String = s"${redisConfig.prefix}:game-creation-response"
|
||||
private def dlqStream: String = s"${redisConfig.prefix}:dlq"
|
||||
|
||||
@PostConstruct
|
||||
def start(): Unit =
|
||||
createGroupIfAbsent()
|
||||
executor.submit(
|
||||
new Runnable:
|
||||
def run(): Unit = pollLoop(),
|
||||
)
|
||||
log.infof("Game-creation request listener started (consumer=%s)", consumerId)
|
||||
def start(@Observes _ev: StartupEvent): Unit =
|
||||
if streamEnabled then
|
||||
createGroupIfAbsent()
|
||||
executor.submit(
|
||||
new Runnable:
|
||||
def run(): Unit = pollLoop(),
|
||||
)
|
||||
log.infof("Game-creation request listener started (consumer=%s)", consumerId)
|
||||
|
||||
private def createGroupIfAbsent(): Unit =
|
||||
Try(
|
||||
|
||||
Reference in New Issue
Block a user