diff --git a/plans/changes_src.go b/plans/changes_src.go index fdc0853cc..63026e73f 100644 --- a/plans/changes_src.go +++ b/plans/changes_src.go @@ -200,9 +200,10 @@ func (cs *ChangeSrc) Decode(ty cty.Type) (*Change, error) { return nil, fmt.Errorf("error decoding 'after' value: %s", err) } } + return &Change{ Action: cs.Action, - Before: before, - After: after, + Before: before.MarkWithPaths(cs.BeforeValMarks), + After: after.MarkWithPaths(cs.AfterValMarks), }, nil } diff --git a/plans/changes_test.go b/plans/changes_test.go new file mode 100644 index 000000000..555a0c772 --- /dev/null +++ b/plans/changes_test.go @@ -0,0 +1,41 @@ +package plans + +import ( + "fmt" + "testing" + + "github.com/zclconf/go-cty/cty" +) + +func TestChangeEncodeSensitive(t *testing.T) { + testVals := []cty.Value{ + cty.ObjectVal(map[string]cty.Value{ + "ding": cty.StringVal("dong").Mark("sensitive"), + }), + cty.StringVal("bleep").Mark("bloop"), + cty.ListVal([]cty.Value{cty.UnknownVal(cty.String).Mark("sup?")}), + } + + for _, v := range testVals { + t.Run(fmt.Sprintf("%#v", v), func(t *testing.T) { + change := Change{ + Before: cty.NullVal(v.Type()), + After: v, + } + + encoded, err := change.Encode(v.Type()) + if err != nil { + t.Fatal(err) + } + + decoded, err := encoded.Decode(v.Type()) + if err != nil { + t.Fatal(err) + } + + if !v.RawEquals(decoded.After) { + t.Fatalf("%#v != %#v\n", decoded.After, v) + } + }) + } +}