| 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) |
| } |
| } |