Skip to content

Commit

Permalink
Merge pull request #344 from hashicorp/panic-on-error-default
Browse files Browse the repository at this point in the history
TF_SCHEMA_PANIC_ON_ERROR on by default
  • Loading branch information
appilon committed Mar 6, 2020
2 parents de2fcd1 + d3a5028 commit a482dd3
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 3 deletions.
2 changes: 1 addition & 1 deletion helper/schema/resource_data_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2232,7 +2232,7 @@ func TestResourceDataSet(t *testing.T) {
}

oldEnv := os.Getenv(PanicOnErr)
os.Setenv(PanicOnErr, "")
os.Setenv(PanicOnErr, "false")
defer os.Setenv(PanicOnErr, oldEnv)

for i, tc := range cases {
Expand Down
13 changes: 11 additions & 2 deletions helper/schema/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ package schema
import (
"context"
"fmt"
"log"
"os"
"reflect"
"regexp"
Expand Down Expand Up @@ -411,10 +412,18 @@ type InternalMap = schemaMap
type schemaMap map[string]*Schema

func (m schemaMap) panicOnError() bool {
if os.Getenv(PanicOnErr) != "" {
if env := os.Getenv(PanicOnErr); env == "" {
// default to true
return true
} else if b, err := strconv.ParseBool(env); err == nil {
// allow opt out
return b
} else {
// default to true for anything set, this is backwards compatible
// with the previous implementation
log.Printf("[WARN] %s=%s not parsable: %s, defaulting to true", PanicOnErr, env, err)
return true
}
return false
}

// Data returns a ResourceData for the given schema, state, and diff.
Expand Down
44 changes: 44 additions & 0 deletions helper/schema/schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6457,3 +6457,47 @@ func TestValidateAtLeastOneOfAttributes(t *testing.T) {
})
}
}

func Test_panicOnErrDefaultTrue(t *testing.T) {
oldEnv := os.Getenv(PanicOnErr)

os.Setenv(PanicOnErr, "")
if !schemaMap(nil).panicOnError() {
t.Fatalf("Empty %s should default to true", PanicOnErr)
}

os.Setenv(PanicOnErr, oldEnv)
}

func Test_panicOnErrParsableTrue(t *testing.T) {
oldEnv := os.Getenv(PanicOnErr)

os.Setenv(PanicOnErr, "true")
if !schemaMap(nil).panicOnError() {
t.Fatalf("Parsable truthy %s should return true", PanicOnErr)
}

os.Setenv(PanicOnErr, oldEnv)
}

func Test_panicOnErrParsableFalse(t *testing.T) {
oldEnv := os.Getenv(PanicOnErr)

os.Setenv(PanicOnErr, "false")
if schemaMap(nil).panicOnError() {
t.Fatalf("Parsable falsy %s should return false", PanicOnErr)
}

os.Setenv(PanicOnErr, oldEnv)
}

func Test_panicOnErrUnparsableDefaultTrue(t *testing.T) {
oldEnv := os.Getenv(PanicOnErr)

os.Setenv(PanicOnErr, "FOO")
if !schemaMap(nil).panicOnError() {
t.Fatalf("Any set value for %s should return true", PanicOnErr)
}

os.Setenv(PanicOnErr, oldEnv)
}

0 comments on commit a482dd3

Please sign in to comment.