github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/builtin/provisioners/file/resource_provisioner_test.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package file
     5  
     6  import (
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/terramate-io/tf/provisioners"
    11  	"github.com/zclconf/go-cty/cty"
    12  )
    13  
    14  func TestResourceProvider_Validate_good_source(t *testing.T) {
    15  	v := cty.ObjectVal(map[string]cty.Value{
    16  		"source":      cty.StringVal("/tmp/foo"),
    17  		"destination": cty.StringVal("/tmp/bar"),
    18  	})
    19  
    20  	resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
    21  		Config: v,
    22  	})
    23  
    24  	if len(resp.Diagnostics) > 0 {
    25  		t.Fatal(resp.Diagnostics.ErrWithWarnings())
    26  	}
    27  }
    28  
    29  func TestResourceProvider_Validate_good_content(t *testing.T) {
    30  	v := cty.ObjectVal(map[string]cty.Value{
    31  		"content":     cty.StringVal("value to copy"),
    32  		"destination": cty.StringVal("/tmp/bar"),
    33  	})
    34  
    35  	resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
    36  		Config: v,
    37  	})
    38  
    39  	if len(resp.Diagnostics) > 0 {
    40  		t.Fatal(resp.Diagnostics.ErrWithWarnings())
    41  	}
    42  }
    43  
    44  func TestResourceProvider_Validate_good_unknown_variable_value(t *testing.T) {
    45  	v := cty.ObjectVal(map[string]cty.Value{
    46  		"content":     cty.UnknownVal(cty.String),
    47  		"destination": cty.StringVal("/tmp/bar"),
    48  	})
    49  
    50  	resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
    51  		Config: v,
    52  	})
    53  
    54  	if len(resp.Diagnostics) > 0 {
    55  		t.Fatal(resp.Diagnostics.ErrWithWarnings())
    56  	}
    57  }
    58  
    59  func TestResourceProvider_Validate_bad_not_destination(t *testing.T) {
    60  	v := cty.ObjectVal(map[string]cty.Value{
    61  		"source": cty.StringVal("nope"),
    62  	})
    63  
    64  	resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
    65  		Config: v,
    66  	})
    67  
    68  	if !resp.Diagnostics.HasErrors() {
    69  		t.Fatal("Should have errors")
    70  	}
    71  }
    72  
    73  func TestResourceProvider_Validate_bad_no_source(t *testing.T) {
    74  	v := cty.ObjectVal(map[string]cty.Value{
    75  		"destination": cty.StringVal("/tmp/bar"),
    76  	})
    77  
    78  	resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
    79  		Config: v,
    80  	})
    81  
    82  	if !resp.Diagnostics.HasErrors() {
    83  		t.Fatal("Should have errors")
    84  	}
    85  }
    86  
    87  func TestResourceProvider_Validate_bad_to_many_src(t *testing.T) {
    88  	v := cty.ObjectVal(map[string]cty.Value{
    89  		"source":      cty.StringVal("nope"),
    90  		"content":     cty.StringVal("vlue to copy"),
    91  		"destination": cty.StringVal("/tmp/bar"),
    92  	})
    93  
    94  	resp := New().ValidateProvisionerConfig(provisioners.ValidateProvisionerConfigRequest{
    95  		Config: v,
    96  	})
    97  
    98  	if !resp.Diagnostics.HasErrors() {
    99  		t.Fatal("Should have errors")
   100  	}
   101  }
   102  
   103  // Validate that Stop can Close can be called even when not provisioning.
   104  func TestResourceProvisioner_StopClose(t *testing.T) {
   105  	p := New()
   106  	p.Stop()
   107  	p.Close()
   108  }
   109  
   110  func TestResourceProvisioner_connectionRequired(t *testing.T) {
   111  	p := New()
   112  	resp := p.ProvisionResource(provisioners.ProvisionResourceRequest{})
   113  	if !resp.Diagnostics.HasErrors() {
   114  		t.Fatal("expected error")
   115  	}
   116  
   117  	got := resp.Diagnostics.Err().Error()
   118  	if !strings.Contains(got, "Missing connection") {
   119  		t.Fatalf("expected 'Missing connection' error: got %q", got)
   120  	}
   121  }