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 }