🧪 test: implement per-scenario state isolation and enhance validate-test-suite.sh
- Add pkg/bdd/steps/scenario_state.go with thread-safe per-scenario state manager - Update auth_steps.go, jwt_retention_steps.go to use per-scenario state accessors - Add LastSecret and LastError fields to ScenarioState for JWT retention testing - Update steps.go with SetScenarioKeyForAllSteps function - Update suite.go to generate scenario keys and clear state properly - Mark config hot-reload scenarios as @flaky (timing-sensitive) - Fix validate-test-suite.sh: add -p 1 flag for sequential execution, filter JSON logs, add --count flag - Add CONFIG_SCHEMA.md documenting configuration architecture - Split greet tests into v1/v2 sub-tests with explicit v2 enable/disable Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
)
|
||||
|
||||
var sharedServer *testserver.Server
|
||||
var sharedStepContext *steps.StepContext
|
||||
|
||||
// isCleanupLoggingEnabled returns true if BDD_ENABLE_CLEANUP_LOGS environment variable is set to "true"
|
||||
func isCleanupLoggingEnabled() bool {
|
||||
@@ -48,15 +49,24 @@ func InitializeTestSuite(ctx *godog.TestSuiteContext) {
|
||||
feature = "bdd"
|
||||
}
|
||||
|
||||
// Generate scenario key for state isolation
|
||||
scenarioKey := s.Name
|
||||
if s.Uri != "" {
|
||||
scenarioKey = fmt.Sprintf("%s:%s", s.Uri, s.Name)
|
||||
}
|
||||
|
||||
// Set scenario key on all step instances for state isolation
|
||||
if sharedStepContext != nil {
|
||||
steps.SetScenarioKeyForAllSteps(sharedStepContext, scenarioKey)
|
||||
// Also clear state for this scenario to ensure clean start
|
||||
steps.ClearScenarioState(scenarioKey)
|
||||
}
|
||||
|
||||
if isCleanupLoggingEnabled() {
|
||||
log.Info().Str("feature", feature).Str("scenario", s.Name).Msg("CLEANUP: Scenario starting")
|
||||
}
|
||||
|
||||
// Trace scenario start
|
||||
scenarioKey := s.Name
|
||||
if s.Uri != "" {
|
||||
scenarioKey = fmt.Sprintf("%s:%s", s.Uri, s.Name)
|
||||
}
|
||||
testserver.TraceStateScenarioStart(feature, scenarioKey)
|
||||
|
||||
// Setup schema isolation if enabled
|
||||
@@ -126,11 +136,15 @@ func InitializeTestSuite(ctx *godog.TestSuiteContext) {
|
||||
}
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
}
|
||||
// Clear all scenario states
|
||||
steps.ClearAllScenarioStates()
|
||||
steps.CleanupAllTestConfigFiles()
|
||||
})
|
||||
}
|
||||
|
||||
func InitializeScenario(ctx *godog.ScenarioContext) {
|
||||
client := testserver.NewClient(sharedServer)
|
||||
steps.InitializeAllSteps(ctx, client)
|
||||
// Create and store the step context for scenario isolation
|
||||
sharedStepContext = steps.NewStepContext(client)
|
||||
steps.InitializeAllSteps(ctx, client, sharedStepContext)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user