github.com/Hashicorp/terraform@v0.11.12-beta1/terraform/eval_provider_test.go (about) 1 package terraform 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/hashicorp/terraform/config" 8 ) 9 10 func TestEvalBuildProviderConfig_impl(t *testing.T) { 11 var _ EvalNode = new(EvalBuildProviderConfig) 12 } 13 14 func TestEvalBuildProviderConfig(t *testing.T) { 15 config := testResourceConfig(t, map[string]interface{}{ 16 "set_in_config": "config", 17 "set_in_config_and_parent": "config", 18 "computed_in_config": "config", 19 }) 20 provider := "foo" 21 22 n := &EvalBuildProviderConfig{ 23 Provider: provider, 24 Config: &config, 25 Output: &config, 26 } 27 28 ctx := &MockEvalContext{ 29 ProviderInputConfig: map[string]interface{}{ 30 "set_in_config": "input", 31 "set_by_input": "input", 32 }, 33 } 34 if _, err := n.Eval(ctx); err != nil { 35 t.Fatalf("err: %s", err) 36 } 37 38 // We expect the provider config with the added input value 39 expected := map[string]interface{}{ 40 "set_in_config": "config", 41 "set_in_config_and_parent": "config", 42 "computed_in_config": "config", 43 "set_by_input": "input", 44 } 45 if !reflect.DeepEqual(config.Raw, expected) { 46 t.Fatalf("incorrect merged config:\n%#v\nwanted:\n%#v", config.Raw, expected) 47 } 48 } 49 50 func TestEvalConfigProvider_impl(t *testing.T) { 51 var _ EvalNode = new(EvalConfigProvider) 52 } 53 54 func TestEvalConfigProvider(t *testing.T) { 55 config := testResourceConfig(t, map[string]interface{}{}) 56 provider := &MockResourceProvider{} 57 n := &EvalConfigProvider{Config: &config} 58 59 ctx := &MockEvalContext{ProviderProvider: provider} 60 if _, err := n.Eval(ctx); err != nil { 61 t.Fatalf("err: %s", err) 62 } 63 64 if !ctx.ConfigureProviderCalled { 65 t.Fatal("should be called") 66 } 67 if !reflect.DeepEqual(ctx.ConfigureProviderConfig, config) { 68 t.Fatalf("bad: %#v", ctx.ConfigureProviderConfig) 69 } 70 } 71 72 func TestEvalInitProvider_impl(t *testing.T) { 73 var _ EvalNode = new(EvalInitProvider) 74 } 75 76 func TestEvalInitProvider(t *testing.T) { 77 n := &EvalInitProvider{Name: "foo"} 78 provider := &MockResourceProvider{} 79 ctx := &MockEvalContext{InitProviderProvider: provider} 80 if _, err := n.Eval(ctx); err != nil { 81 t.Fatalf("err: %s", err) 82 } 83 84 if !ctx.InitProviderCalled { 85 t.Fatal("should be called") 86 } 87 if ctx.InitProviderName != "foo" { 88 t.Fatalf("bad: %#v", ctx.InitProviderName) 89 } 90 } 91 92 func TestEvalCloseProvider(t *testing.T) { 93 providerName := ResolveProviderName("foo", nil) 94 n := &EvalCloseProvider{Name: providerName} 95 provider := &MockResourceProvider{} 96 ctx := &MockEvalContext{CloseProviderProvider: provider} 97 if _, err := n.Eval(ctx); err != nil { 98 t.Fatalf("err: %s", err) 99 } 100 101 if !ctx.CloseProviderCalled { 102 t.Fatal("should be called") 103 } 104 if ctx.CloseProviderName != providerName { 105 t.Fatalf("bad: %#v", ctx.CloseProviderName) 106 } 107 } 108 109 func TestEvalGetProvider_impl(t *testing.T) { 110 var _ EvalNode = new(EvalGetProvider) 111 } 112 113 func TestEvalGetProvider(t *testing.T) { 114 var actual ResourceProvider 115 n := &EvalGetProvider{Name: "foo", Output: &actual} 116 provider := &MockResourceProvider{} 117 ctx := &MockEvalContext{ProviderProvider: provider} 118 if _, err := n.Eval(ctx); err != nil { 119 t.Fatalf("err: %s", err) 120 } 121 if actual != provider { 122 t.Fatalf("bad: %#v", actual) 123 } 124 125 if !ctx.ProviderCalled { 126 t.Fatal("should be called") 127 } 128 if ctx.ProviderName != "foo" { 129 t.Fatalf("bad: %#v", ctx.ProviderName) 130 } 131 } 132 133 func TestEvalInputProvider(t *testing.T) { 134 var provider ResourceProvider = &MockResourceProvider{ 135 InputFn: func(ui UIInput, c *ResourceConfig) (*ResourceConfig, error) { 136 if c.Config["mock_config"] != "mock" { 137 t.Fatalf("original config not passed to provider.Input") 138 } 139 140 rawConfig, err := config.NewRawConfig(map[string]interface{}{ 141 "set_by_input": "input", 142 }) 143 if err != nil { 144 return nil, err 145 } 146 config := NewResourceConfig(rawConfig) 147 config.ComputedKeys = []string{"computed"} // fake computed key 148 149 return config, nil 150 }, 151 } 152 ctx := &MockEvalContext{ProviderProvider: provider} 153 rawConfig, err := config.NewRawConfig(map[string]interface{}{ 154 "mock_config": "mock", 155 "set_in_config": "input", 156 }) 157 if err != nil { 158 t.Fatalf("NewRawConfig failed: %s", err) 159 } 160 config := NewResourceConfig(rawConfig) 161 162 n := &EvalInputProvider{ 163 Name: "mock", 164 Provider: &provider, 165 Config: &config, 166 } 167 168 result, err := n.Eval(ctx) 169 if err != nil { 170 t.Fatalf("Eval failed: %s", err) 171 } 172 if result != nil { 173 t.Fatalf("Eval returned non-nil result %#v", result) 174 } 175 176 if !ctx.SetProviderInputCalled { 177 t.Fatalf("ctx.SetProviderInput wasn't called") 178 } 179 180 if got, want := ctx.SetProviderInputName, "mock"; got != want { 181 t.Errorf("wrong provider name %q; want %q", got, want) 182 } 183 184 inputCfg := ctx.SetProviderInputConfig 185 186 // we should only have the value that was set during Input 187 want := map[string]interface{}{ 188 "set_by_input": "input", 189 } 190 if !reflect.DeepEqual(inputCfg, want) { 191 t.Errorf("got incorrect input config:\n%#v\nwant:\n%#v", inputCfg, want) 192 } 193 }