You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraform/internal/moduletest/graph/transform_test_run.go

61 lines
1.8 KiB

// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1
package graph
import (
"github.com/hashicorp/terraform/internal/moduletest"
"github.com/hashicorp/terraform/internal/terraform"
)
// TestRunTransformer is a GraphTransformer that adds all the test runs,
// and the variables defined in each run block, to the graph.
type TestRunTransformer struct {
opts *graphOptions
mode moduletest.CommandMode
}
func (t *TestRunTransformer) Transform(g *terraform.Graph) error {
switch t.mode {
case moduletest.CleanupMode:
for _, run := range t.opts.File.Runs {
priorRuns := make(map[string]*moduletest.Run)
for ix := run.Index - 1; ix >= 0; ix-- {
// If either node isn't parallel, we should draw an edge between
// them. Also, if they share the same state key we should also draw
// an edge between them regardless of the parallelisation.
if target := t.opts.File.Runs[ix]; !run.Config.Parallel || !target.Config.Parallel || run.Config.StateKey == target.Config.StateKey {
priorRuns[target.Name] = target
}
}
g.Add(&NodeTestRunCleanup{
run: run,
opts: t.opts,
priorRuns: priorRuns,
})
}
default:
for _, run := range t.opts.File.Runs {
priorRuns := make(map[string]*moduletest.Run)
for ix := run.Index - 1; ix >= 0; ix-- {
// If either node isn't parallel, we should draw an edge between
// them. Also, if they share the same state key we should also draw
// an edge between them regardless of the parallelisation.
if target := t.opts.File.Runs[ix]; !run.Config.Parallel || !target.Config.Parallel || run.Config.StateKey == target.Config.StateKey {
priorRuns[target.Name] = target
}
}
g.Add(&NodeTestRun{
run: run,
opts: t.opts,
priorRuns: priorRuns,
})
}
}
return nil
}