terraform/internal/builtin/provisioners/file/resource_provisioner_test.go

119 lines
2.9 KiB
Go

package file
import (
"strings"
"testing"
"github.com/hashicorp/terraform/internal/provisioners"
"github.com/zclconf/go-cty/cty"
)
func TestResourceProvider_Validate_good_source(t *testing.T) {
v := cty.ObjectVal(map[string]cty.Value{
"source": cty.StringVal("/tmp/foo"),
"destination": cty.StringVal("/tmp/bar"),
})
resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
Config: v,
})
if len(resp.Diagnostics) > 0 {
t.Fatal(resp.Diagnostics.ErrWithWarnings())
}
}
func TestResourceProvider_Validate_good_content(t *testing.T) {
v := cty.ObjectVal(map[string]cty.Value{
"content": cty.StringVal("value to copy"),
"destination": cty.StringVal("/tmp/bar"),
})
resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
Config: v,
})
if len(resp.Diagnostics) > 0 {
t.Fatal(resp.Diagnostics.ErrWithWarnings())
}
}
func TestResourceProvider_Validate_good_unknown_variable_value(t *testing.T) {
v := cty.ObjectVal(map[string]cty.Value{
"content": cty.UnknownVal(cty.String),
"destination": cty.StringVal("/tmp/bar"),
})
resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
Config: v,
})
if len(resp.Diagnostics) > 0 {
t.Fatal(resp.Diagnostics.ErrWithWarnings())
}
}
func TestResourceProvider_Validate_bad_not_destination(t *testing.T) {
v := cty.ObjectVal(map[string]cty.Value{
"source": cty.StringVal("nope"),
})
resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
Config: v,
})
if !resp.Diagnostics.HasErrors() {
t.Fatal("Should have errors")
}
}
func TestResourceProvider_Validate_bad_no_source(t *testing.T) {
v := cty.ObjectVal(map[string]cty.Value{
"destination": cty.StringVal("/tmp/bar"),
})
resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
Config: v,
})
if !resp.Diagnostics.HasErrors() {
t.Fatal("Should have errors")
}
}
func TestResourceProvider_Validate_bad_to_many_src(t *testing.T) {
v := cty.ObjectVal(map[string]cty.Value{
"source": cty.StringVal("nope"),
"content": cty.StringVal("vlue to copy"),
"destination": cty.StringVal("/tmp/bar"),
})
resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
Config: v,
})
if !resp.Diagnostics.HasErrors() {
t.Fatal("Should have errors")
}
}
// Validate that Stop can Close can be called even when not provisioning.
func TestResourceProvisioner_StopClose(t *testing.T) {
p := New()
p.Stop()
p.Close()
}
func TestResourceProvisioner_connectionRequired(t *testing.T) {
p := New()
resp := p.ProvisionResource(provisioners.ProvisionResourceRequest{})
if !resp.Diagnostics.HasErrors() {
t.Fatal("expected error")
}
got := resp.Diagnostics.Err().Error()
if !strings.Contains(got, "Missing connection") {
t.Fatalf("expected 'Missing connection' error: got %q", got)
}
}