github.com/dacamp/packer@v0.10.2/provisioner/chef-client/provisioner_test.go (about) 1 package chefclient 2 3 import ( 4 "bytes" 5 "io/ioutil" 6 "os" 7 "strings" 8 "testing" 9 10 "github.com/mitchellh/packer/packer" 11 ) 12 13 func testConfig() map[string]interface{} { 14 return map[string]interface{}{ 15 "server_url": "foo", 16 } 17 } 18 19 func TestProvisioner_Impl(t *testing.T) { 20 var raw interface{} 21 raw = &Provisioner{} 22 if _, ok := raw.(packer.Provisioner); !ok { 23 t.Fatalf("must be a Provisioner") 24 } 25 } 26 27 func TestProvisionerPrepare_chefEnvironment(t *testing.T) { 28 var p Provisioner 29 30 config := testConfig() 31 config["chef_environment"] = "some-env" 32 33 err := p.Prepare(config) 34 if err != nil { 35 t.Fatalf("err: %s", err) 36 } 37 38 if p.config.ChefEnvironment != "some-env" { 39 t.Fatalf("unexpected: %#v", p.config.ChefEnvironment) 40 } 41 } 42 43 func TestProvisionerPrepare_configTemplate(t *testing.T) { 44 var err error 45 var p Provisioner 46 47 // Test no config template 48 config := testConfig() 49 delete(config, "config_template") 50 err = p.Prepare(config) 51 if err != nil { 52 t.Fatalf("err: %s", err) 53 } 54 55 // Test with a file 56 tf, err := ioutil.TempFile("", "packer") 57 if err != nil { 58 t.Fatalf("err: %s", err) 59 } 60 defer os.Remove(tf.Name()) 61 62 config = testConfig() 63 config["config_template"] = tf.Name() 64 p = Provisioner{} 65 err = p.Prepare(config) 66 if err != nil { 67 t.Fatalf("err: %s", err) 68 } 69 70 // Test with a directory 71 td, err := ioutil.TempDir("", "packer") 72 if err != nil { 73 t.Fatalf("err: %s", err) 74 } 75 defer os.RemoveAll(td) 76 77 config = testConfig() 78 config["config_template"] = td 79 p = Provisioner{} 80 err = p.Prepare(config) 81 if err == nil { 82 t.Fatal("should have err") 83 } 84 } 85 86 func TestProvisionerPrepare_commands(t *testing.T) { 87 commands := []string{ 88 "execute_command", 89 "install_command", 90 } 91 92 for _, command := range commands { 93 var p Provisioner 94 95 // Test not set 96 config := testConfig() 97 delete(config, command) 98 err := p.Prepare(config) 99 if err != nil { 100 t.Fatalf("err: %s", err) 101 } 102 103 // Test invalid template 104 config = testConfig() 105 config[command] = "{{if NOPE}}" 106 err = p.Prepare(config) 107 if err == nil { 108 t.Fatal("should error") 109 } 110 111 // Test good template 112 config = testConfig() 113 config[command] = "{{.Foo}}" 114 err = p.Prepare(config) 115 if err != nil { 116 t.Fatalf("err: %s", err) 117 } 118 } 119 } 120 121 func TestProvisionerPrepare_serverUrl(t *testing.T) { 122 var p Provisioner 123 124 // Test not set 125 config := testConfig() 126 delete(config, "server_url") 127 err := p.Prepare(config) 128 if err == nil { 129 t.Fatal("should error") 130 } 131 132 // Test set 133 config = testConfig() 134 config["server_url"] = "foo" 135 err = p.Prepare(config) 136 if err != nil { 137 t.Fatalf("err: %s", err) 138 } 139 } 140 141 func TestProvisionerPrepare_encryptedDataBagSecretPath(t *testing.T) { 142 var err error 143 var p Provisioner 144 145 // Test no config template 146 config := testConfig() 147 delete(config, "encrypted_data_bag_secret_path") 148 err = p.Prepare(config) 149 if err != nil { 150 t.Fatalf("err: %s", err) 151 } 152 153 // Test with a file 154 tf, err := ioutil.TempFile("", "packer") 155 if err != nil { 156 t.Fatalf("err: %s", err) 157 } 158 defer os.Remove(tf.Name()) 159 160 config = testConfig() 161 config["encrypted_data_bag_secret_path"] = tf.Name() 162 p = Provisioner{} 163 err = p.Prepare(config) 164 if err != nil { 165 t.Fatalf("err: %s", err) 166 } 167 168 // Test with a directory 169 td, err := ioutil.TempDir("", "packer") 170 if err != nil { 171 t.Fatalf("err: %s", err) 172 } 173 defer os.RemoveAll(td) 174 175 config = testConfig() 176 config["encrypted_data_bag_secret_path"] = td 177 p = Provisioner{} 178 err = p.Prepare(config) 179 if err == nil { 180 t.Fatal("should have err") 181 } 182 } 183 184 func TestProvisioner_createDir(t *testing.T) { 185 for _, sudo := range []bool{true, false} { 186 config := testConfig() 187 config["prevent_sudo"] = !sudo 188 189 p := &Provisioner{} 190 comm := &packer.MockCommunicator{} 191 ui := &packer.BasicUi{ 192 Reader: new(bytes.Buffer), 193 Writer: new(bytes.Buffer), 194 } 195 196 err := p.Prepare(config) 197 if err != nil { 198 t.Fatalf("err: %s", err) 199 } 200 201 if err := p.createDir(ui, comm, "/tmp/foo"); err != nil { 202 t.Fatalf("err: %s", err) 203 } 204 205 if !sudo && strings.HasPrefix(comm.StartCmd.Command, "sudo") { 206 t.Fatalf("createDir should not use sudo, got: \"%s\"", comm.StartCmd.Command) 207 } 208 209 if sudo && !strings.HasPrefix(comm.StartCmd.Command, "sudo") { 210 t.Fatalf("createDir should use sudo, got: \"%s\"", comm.StartCmd.Command) 211 } 212 } 213 } 214 215 func TestProvisioner_removeDir(t *testing.T) { 216 for _, sudo := range []bool{true, false} { 217 config := testConfig() 218 config["prevent_sudo"] = !sudo 219 220 p := &Provisioner{} 221 comm := &packer.MockCommunicator{} 222 ui := &packer.BasicUi{ 223 Reader: new(bytes.Buffer), 224 Writer: new(bytes.Buffer), 225 } 226 227 err := p.Prepare(config) 228 if err != nil { 229 t.Fatalf("err: %s", err) 230 } 231 232 if err := p.removeDir(ui, comm, "/tmp/foo"); err != nil { 233 t.Fatalf("err: %s", err) 234 } 235 236 if !sudo && strings.HasPrefix(comm.StartCmd.Command, "sudo") { 237 t.Fatalf("removeDir should not use sudo, got: \"%s\"", comm.StartCmd.Command) 238 } 239 240 if sudo && !strings.HasPrefix(comm.StartCmd.Command, "sudo") { 241 t.Fatalf("removeDir should use sudo, got: \"%s\"", comm.StartCmd.Command) 242 } 243 } 244 }