github.com/magodo/terraform@v0.11.12-beta1/terraform/eval_local_test.go (about) 1 package terraform 2 3 import ( 4 "reflect" 5 "sync" 6 "testing" 7 8 "github.com/davecgh/go-spew/spew" 9 "github.com/hashicorp/terraform/config" 10 ) 11 12 func TestEvalLocal_impl(t *testing.T) { 13 var _ EvalNode = new(EvalLocal) 14 } 15 16 func TestEvalLocal(t *testing.T) { 17 tests := []struct { 18 Value string 19 Want interface{} 20 Err bool 21 }{ 22 { 23 "hello!", 24 "hello!", 25 false, 26 }, 27 { 28 "", 29 "", 30 false, 31 }, 32 } 33 34 for _, test := range tests { 35 t.Run(test.Value, func(t *testing.T) { 36 rawConfig, err := config.NewRawConfig(map[string]interface{}{ 37 "value": test.Value, 38 }) 39 if err != nil { 40 t.Fatal(err) 41 } 42 43 n := &EvalLocal{ 44 Name: "foo", 45 Value: rawConfig, 46 } 47 ctx := &MockEvalContext{ 48 StateState: &State{}, 49 StateLock: &sync.RWMutex{}, 50 51 InterpolateConfigResult: testResourceConfig(t, map[string]interface{}{ 52 "value": test.Want, 53 }), 54 } 55 56 _, err = n.Eval(ctx) 57 if (err != nil) != test.Err { 58 if err != nil { 59 t.Errorf("unexpected error: %s", err) 60 } else { 61 t.Errorf("successful Eval; want error") 62 } 63 } 64 65 ms := ctx.StateState.ModuleByPath([]string{}) 66 gotLocals := ms.Locals 67 wantLocals := map[string]interface{}{ 68 "foo": test.Want, 69 } 70 71 if !reflect.DeepEqual(gotLocals, wantLocals) { 72 t.Errorf( 73 "wrong locals after Eval\ngot: %swant: %s", 74 spew.Sdump(gotLocals), spew.Sdump(wantLocals), 75 ) 76 } 77 }) 78 } 79 80 }