Merge pull request #21274 from hashicorp/jbardin/validate-integers
validate integers when using protoV5
This commit is contained in:
commit
d495fb5b35
|
@ -153,6 +153,10 @@ func testResource() *schema.Resource {
|
|||
Optional: true,
|
||||
Description: "do not set in config",
|
||||
},
|
||||
"int": {
|
||||
Type: schema.TypeInt,
|
||||
Optional: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1029,3 +1029,24 @@ resource "test_resource" "foo" {
|
|||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestResource_floatInIntAttr(t *testing.T) {
|
||||
resource.UnitTest(t, resource.TestCase{
|
||||
Providers: testAccProviders,
|
||||
CheckDestroy: testAccCheckResourceDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
resource.TestStep{
|
||||
Config: strings.TrimSpace(`
|
||||
resource "test_resource" "foo" {
|
||||
required = "yep"
|
||||
required_map = {
|
||||
key = "value"
|
||||
}
|
||||
int = 40.2
|
||||
}
|
||||
`),
|
||||
ExpectError: regexp.MustCompile(`must be a whole number, got 40.2`),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1731,12 +1731,25 @@ func (m schemaMap) validatePrimitive(
|
|||
}
|
||||
decoded = n
|
||||
case TypeInt:
|
||||
// Verify that we can parse this as an int
|
||||
var n int
|
||||
if err := mapstructure.WeakDecode(raw, &n); err != nil {
|
||||
return nil, []error{fmt.Errorf("%s: %s", k, err)}
|
||||
switch {
|
||||
case isProto5():
|
||||
// We need to verify the type precisely, because WeakDecode will
|
||||
// decode a float as an integer.
|
||||
|
||||
// the config shims only use int for integral number values
|
||||
if v, ok := raw.(int); ok {
|
||||
decoded = v
|
||||
} else {
|
||||
return nil, []error{fmt.Errorf("%s: must be a whole number, got %v", k, raw)}
|
||||
}
|
||||
default:
|
||||
// Verify that we can parse this as an int
|
||||
var n int
|
||||
if err := mapstructure.WeakDecode(raw, &n); err != nil {
|
||||
return nil, []error{fmt.Errorf("%s: %s", k, err)}
|
||||
}
|
||||
decoded = n
|
||||
}
|
||||
decoded = n
|
||||
case TypeFloat:
|
||||
// Verify that we can parse this as an int
|
||||
var n float64
|
||||
|
|
Loading…
Reference in New Issue