From e36597cad72c52dd3d05f5db9640fca430cbfa83 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Tue, 23 Jun 2015 16:52:04 -0700 Subject: [PATCH] helper/schema: internal validate as part of provider validation [GH-1291] --- helper/schema/provider.go | 7 +++++++ helper/schema/provider_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/helper/schema/provider.go b/helper/schema/provider.go index 6b364e5a1..aa35d32d0 100644 --- a/helper/schema/provider.go +++ b/helper/schema/provider.go @@ -97,6 +97,13 @@ func (p *Provider) Input( // Validate implementation of terraform.ResourceProvider interface. func (p *Provider) Validate(c *terraform.ResourceConfig) ([]string, []error) { + if err := p.InternalValidate(); err != nil { + return nil, []error{fmt.Errorf( + "Internal validation of the provider failed! This is always a bug\n"+ + "with the provider itself, and not a user issue. Please report\n"+ + "this bug:\n\n%s", err)} + } + return schemaMap(p.Schema).Validate(c) } diff --git a/helper/schema/provider_test.go b/helper/schema/provider_test.go index 85eb126db..e1f4b93b0 100644 --- a/helper/schema/provider_test.go +++ b/helper/schema/provider_test.go @@ -117,6 +117,36 @@ func TestProviderResources(t *testing.T) { } } +func TestProviderValidate(t *testing.T) { + cases := []struct { + P *Provider + Config map[string]interface{} + Err bool + }{ + { + P: &Provider{ + Schema: map[string]*Schema{ + "foo": &Schema{}, + }, + }, + Config: nil, + Err: true, + }, + } + + for i, tc := range cases { + c, err := config.NewRawConfig(tc.Config) + if err != nil { + t.Fatalf("err: %s", err) + } + + _, es := tc.P.Validate(terraform.NewResourceConfig(c)) + if (len(es) > 0) != tc.Err { + t.Fatalf("%d: %#v", i, es) + } + } +} + func TestProviderValidateResource(t *testing.T) { cases := []struct { P *Provider