github.com/pbthorste/terraform@v0.8.6-0.20170127005045-deb56bd93da2/builtin/provisioners/remote-exec/resource_provisioner_test.go (about) 1 package remoteexec 2 3 import ( 4 "bytes" 5 "io" 6 "strings" 7 "testing" 8 9 "reflect" 10 11 "github.com/hashicorp/terraform/config" 12 "github.com/hashicorp/terraform/terraform" 13 ) 14 15 func TestResourceProvisioner_impl(t *testing.T) { 16 var _ terraform.ResourceProvisioner = new(ResourceProvisioner) 17 } 18 19 func TestResourceProvider_Validate_good(t *testing.T) { 20 c := testConfig(t, map[string]interface{}{ 21 "inline": "echo foo", 22 }) 23 p := new(ResourceProvisioner) 24 warn, errs := p.Validate(c) 25 if len(warn) > 0 { 26 t.Fatalf("Warnings: %v", warn) 27 } 28 if len(errs) > 0 { 29 t.Fatalf("Errors: %v", errs) 30 } 31 } 32 33 func TestResourceProvider_Validate_bad(t *testing.T) { 34 c := testConfig(t, map[string]interface{}{ 35 "invalid": "nope", 36 }) 37 p := new(ResourceProvisioner) 38 warn, errs := p.Validate(c) 39 if len(warn) > 0 { 40 t.Fatalf("Warnings: %v", warn) 41 } 42 if len(errs) == 0 { 43 t.Fatalf("Should have errors") 44 } 45 } 46 47 var expectedScriptOut = `cd /tmp 48 wget http://foobar 49 exit 0 50 ` 51 52 var expectedInlineScriptsOut = strings.Split(expectedScriptOut, "\n") 53 54 func TestResourceProvider_generateScripts(t *testing.T) { 55 p := new(ResourceProvisioner) 56 conf := testConfig(t, map[string]interface{}{ 57 "inline": []interface{}{ 58 "cd /tmp", 59 "wget http://foobar", 60 "exit 0", 61 }, 62 }) 63 out, err := p.generateScripts(conf) 64 if err != nil { 65 t.Fatalf("err: %v", err) 66 } 67 68 if reflect.DeepEqual(out, expectedInlineScriptsOut) { 69 t.Fatalf("bad: %v", out) 70 } 71 } 72 73 func TestResourceProvider_CollectScripts_inline(t *testing.T) { 74 p := new(ResourceProvisioner) 75 conf := testConfig(t, map[string]interface{}{ 76 "inline": []interface{}{ 77 "cd /tmp", 78 "wget http://foobar", 79 "exit 0", 80 }, 81 }) 82 83 scripts, err := p.collectScripts(conf) 84 if err != nil { 85 t.Fatalf("err: %v", err) 86 } 87 88 if len(scripts) != 3 { 89 t.Fatalf("bad: %v", scripts) 90 } 91 92 for i, script := range scripts { 93 var out bytes.Buffer 94 _, err = io.Copy(&out, script) 95 if err != nil { 96 t.Fatalf("err: %v", err) 97 } 98 99 if out.String() != expectedInlineScriptsOut[i] { 100 t.Fatalf("bad: %v", out.String()) 101 } 102 } 103 } 104 105 func TestResourceProvider_CollectScripts_script(t *testing.T) { 106 p := new(ResourceProvisioner) 107 conf := testConfig(t, map[string]interface{}{ 108 "script": "test-fixtures/script1.sh", 109 }) 110 111 scripts, err := p.collectScripts(conf) 112 if err != nil { 113 t.Fatalf("err: %v", err) 114 } 115 116 if len(scripts) != 1 { 117 t.Fatalf("bad: %v", scripts) 118 } 119 120 var out bytes.Buffer 121 _, err = io.Copy(&out, scripts[0]) 122 if err != nil { 123 t.Fatalf("err: %v", err) 124 } 125 126 if out.String() != expectedScriptOut { 127 t.Fatalf("bad: %v", out.String()) 128 } 129 } 130 131 func TestResourceProvider_CollectScripts_scripts(t *testing.T) { 132 p := new(ResourceProvisioner) 133 conf := testConfig(t, map[string]interface{}{ 134 "scripts": []interface{}{ 135 "test-fixtures/script1.sh", 136 "test-fixtures/script1.sh", 137 "test-fixtures/script1.sh", 138 }, 139 }) 140 141 scripts, err := p.collectScripts(conf) 142 if err != nil { 143 t.Fatalf("err: %v", err) 144 } 145 146 if len(scripts) != 3 { 147 t.Fatalf("bad: %v", scripts) 148 } 149 150 for idx := range scripts { 151 var out bytes.Buffer 152 _, err = io.Copy(&out, scripts[idx]) 153 if err != nil { 154 t.Fatalf("err: %v", err) 155 } 156 157 if out.String() != expectedScriptOut { 158 t.Fatalf("bad: %v", out.String()) 159 } 160 } 161 } 162 163 func testConfig( 164 t *testing.T, 165 c map[string]interface{}) *terraform.ResourceConfig { 166 r, err := config.NewRawConfig(c) 167 if err != nil { 168 t.Fatalf("bad: %s", err) 169 } 170 171 return terraform.NewResourceConfig(r) 172 }