decode change values with marks

Marks stored in a plans.ChangeSrc were not decoded along with the
stored values. This was working in many cases by evaluation correctly
re-evaluating the marks, but this cannot happen in all cases.
This commit is contained in:
James Bardin 2021-05-11 17:37:07 -04:00
parent 4a93399c60
commit e29eb78cfd
2 changed files with 44 additions and 2 deletions

View File

@ -200,9 +200,10 @@ func (cs *ChangeSrc) Decode(ty cty.Type) (*Change, error) {
return nil, fmt.Errorf("error decoding 'after' value: %s", err) return nil, fmt.Errorf("error decoding 'after' value: %s", err)
} }
} }
return &Change{ return &Change{
Action: cs.Action, Action: cs.Action,
Before: before, Before: before.MarkWithPaths(cs.BeforeValMarks),
After: after, After: after.MarkWithPaths(cs.AfterValMarks),
}, nil }, nil
} }

41
plans/changes_test.go Normal file
View File

@ -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)
}
})
}
}