github.com/aspring/packer@v0.8.1-0.20150629211158-9db281ac0f89/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 TestProvisioner_createDir(t *testing.T) { 142 p1 := &Provisioner{config: Config{PreventSudo: true}} 143 p2 := &Provisioner{config: Config{PreventSudo: false}} 144 comm := &packer.MockCommunicator{} 145 ui := &packer.BasicUi{ 146 Reader: new(bytes.Buffer), 147 Writer: new(bytes.Buffer), 148 } 149 150 if err := p1.createDir(ui, comm, "/tmp/foo"); err != nil { 151 t.Fatalf("err: %s", err) 152 } 153 154 if strings.HasPrefix(comm.StartCmd.Command, "sudo") { 155 t.Fatalf("createDir should not use sudo, got: \"%s\"", comm.StartCmd.Command) 156 } 157 158 if err := p2.createDir(ui, comm, "/tmp/foo"); err != nil { 159 t.Fatalf("err: %s", err) 160 } 161 162 if !strings.HasPrefix(comm.StartCmd.Command, "sudo") { 163 t.Fatalf("createDir should use sudo, got: \"%s\"", comm.StartCmd.Command) 164 } 165 } 166 167 func TestProvisioner_removeDir(t *testing.T) { 168 p1 := &Provisioner{config: Config{PreventSudo: true}} 169 p2 := &Provisioner{config: Config{PreventSudo: false}} 170 comm := &packer.MockCommunicator{} 171 ui := &packer.BasicUi{ 172 Reader: new(bytes.Buffer), 173 Writer: new(bytes.Buffer), 174 } 175 176 if err := p1.removeDir(ui, comm, "/tmp/foo"); err != nil { 177 t.Fatalf("err: %s", err) 178 } 179 180 if strings.HasPrefix(comm.StartCmd.Command, "sudo") { 181 t.Fatalf("removeDir should not use sudo, got: \"%s\"", comm.StartCmd.Command) 182 } 183 184 if err := p2.removeDir(ui, comm, "/tmp/foo"); err != nil { 185 t.Fatalf("err: %s", err) 186 } 187 188 if !strings.HasPrefix(comm.StartCmd.Command, "sudo") { 189 t.Fatalf("removeDir should use sudo, got: \"%s\"", comm.StartCmd.Command) 190 } 191 }