From 9c80574417f48d34313d7608ec56d48ee51f8bdd Mon Sep 17 00:00:00 2001 From: James Bardin Date: Wed, 13 Oct 2021 17:28:14 -0400 Subject: [PATCH] test planfile may need to have a specific lineage In order to test applying a plan from an existing state, we need to be able to inject the state meta into the planfile. --- internal/command/apply_test.go | 19 ++++++++++++++++--- internal/command/command_test.go | 10 ++++++++-- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/internal/command/apply_test.go b/internal/command/apply_test.go index 750c6b6bf..b2306623c 100644 --- a/internal/command/apply_test.go +++ b/internal/command/apply_test.go @@ -710,7 +710,6 @@ func TestApply_plan(t *testing.T) { } func TestApply_plan_backup(t *testing.T) { - planPath := applyFixturePlanFile(t) statePath := testTempFile(t) backupPath := testTempFile(t) @@ -724,11 +723,17 @@ func TestApply_plan_backup(t *testing.T) { } // create a state file that needs to be backed up - err := statemgr.NewFilesystem(statePath).WriteState(states.NewState()) + fs := statemgr.NewFilesystem(statePath) + fs.StateSnapshotMeta() + err := fs.WriteState(states.NewState()) if err != nil { t.Fatal(err) } + // the plan file must contain the metadata from the prior state to be + // backed up + planPath := applyFixturePlanFileMatchState(t, fs.StateSnapshotMeta()) + args := []string{ "-state", statePath, "-backup", backupPath, @@ -2280,6 +2285,13 @@ func applyFixtureProvider() *terraform.MockProvider { // a single change to create the test_instance.foo that is included in the // "apply" test fixture, returning the location of that plan file. func applyFixturePlanFile(t *testing.T) string { + return applyFixturePlanFileMatchState(t, statemgr.SnapshotMeta{}) +} + +// applyFixturePlanFileMatchState creates a planfile like applyFixturePlanFile, +// but inserts the state meta information if that plan must match a preexisting +// state. +func applyFixturePlanFileMatchState(t *testing.T, stateMeta statemgr.SnapshotMeta) string { _, snap := testModuleWithSnapshot(t, "apply") plannedVal := cty.ObjectVal(map[string]cty.Value{ "id": cty.UnknownVal(cty.String), @@ -2310,11 +2322,12 @@ func applyFixturePlanFile(t *testing.T) string { After: plannedValRaw, }, }) - return testPlanFile( + return testPlanFileMatchState( t, snap, states.NewState(), plan, + stateMeta, ) } diff --git a/internal/command/command_test.go b/internal/command/command_test.go index a9ba2a044..4b6fcf311 100644 --- a/internal/command/command_test.go +++ b/internal/command/command_test.go @@ -229,15 +229,21 @@ func testPlan(t *testing.T) *plans.Plan { } func testPlanFile(t *testing.T, configSnap *configload.Snapshot, state *states.State, plan *plans.Plan) string { + return testPlanFileMatchState(t, configSnap, state, plan, statemgr.SnapshotMeta{}) +} + +func testPlanFileMatchState(t *testing.T, configSnap *configload.Snapshot, state *states.State, plan *plans.Plan, stateMeta statemgr.SnapshotMeta) string { t.Helper() stateFile := &statefile.File{ - Lineage: "", + Lineage: stateMeta.Lineage, + Serial: stateMeta.Serial, State: state, TerraformVersion: version.SemVer, } prevStateFile := &statefile.File{ - Lineage: "", + Lineage: stateMeta.Lineage, + Serial: stateMeta.Serial, State: state, // we just assume no changes detected during refresh TerraformVersion: version.SemVer, }