terraform/terraform/eval_output_test.go

57 lines
1.1 KiB
Go

package terraform
import (
"sync"
"testing"
)
func TestEvalWriteMapOutput(t *testing.T) {
ctx := new(MockEvalContext)
ctx.StateState = NewState()
ctx.StateLock = new(sync.RWMutex)
cases := []struct {
name string
cfg *ResourceConfig
err bool
}{
{
// Eval should recognize a single map in a slice, and collapse it
// into the map value
"single-map",
&ResourceConfig{
Config: map[string]interface{}{
"value": []map[string]interface{}{
map[string]interface{}{"a": "b"},
},
},
},
false,
},
{
// we can't apply a multi-valued map to a variable, so this should error
"multi-map",
&ResourceConfig{
Config: map[string]interface{}{
"value": []map[string]interface{}{
map[string]interface{}{"a": "b"},
map[string]interface{}{"c": "d"},
},
},
},
true,
},
}
for _, tc := range cases {
evalNode := &EvalWriteOutput{Name: tc.name}
ctx.InterpolateConfigResult = tc.cfg
t.Run(tc.name, func(t *testing.T) {
_, err := evalNode.Eval(ctx)
if err != nil && !tc.err {
t.Fatal(err)
}
})
}
}