github.com/kikitux/packer@v0.10.1-0.20160322154024-6237df566f9f/provisioner/salt-masterless/provisioner_test.go (about) 1 package saltmasterless 2 3 import ( 4 "github.com/mitchellh/packer/packer" 5 "io/ioutil" 6 "os" 7 "strings" 8 "testing" 9 ) 10 11 func testConfig() map[string]interface{} { 12 return map[string]interface{}{ 13 "local_state_tree": os.TempDir(), 14 } 15 } 16 17 func TestProvisioner_Impl(t *testing.T) { 18 var raw interface{} 19 raw = &Provisioner{} 20 if _, ok := raw.(packer.Provisioner); !ok { 21 t.Fatalf("must be a Provisioner") 22 } 23 } 24 25 func TestProvisionerPrepare_Defaults(t *testing.T) { 26 var p Provisioner 27 config := testConfig() 28 29 err := p.Prepare(config) 30 if err != nil { 31 t.Fatalf("err: %s", err) 32 } 33 34 if p.config.TempConfigDir != DefaultTempConfigDir { 35 t.Errorf("unexpected temp config dir: %s", p.config.TempConfigDir) 36 } 37 } 38 39 func TestProvisionerPrepare_InvalidKey(t *testing.T) { 40 var p Provisioner 41 config := testConfig() 42 43 // Add a random key 44 config["i_should_not_be_valid"] = true 45 err := p.Prepare(config) 46 if err == nil { 47 t.Fatal("should have error") 48 } 49 } 50 51 func TestProvisionerPrepare_MinionConfig(t *testing.T) { 52 var p Provisioner 53 config := testConfig() 54 55 config["minion_config"] = "/i/dont/exist/i/think" 56 err := p.Prepare(config) 57 if err == nil { 58 t.Fatal("should have error") 59 } 60 61 tf, err := ioutil.TempFile("", "minion") 62 if err != nil { 63 t.Fatalf("error tempfile: %s", err) 64 } 65 defer os.Remove(tf.Name()) 66 67 config["minion_config"] = tf.Name() 68 err = p.Prepare(config) 69 if err != nil { 70 t.Fatalf("err: %s", err) 71 } 72 } 73 74 func TestProvisionerPrepare_MinionConfig_RemoteStateTree(t *testing.T) { 75 var p Provisioner 76 config := testConfig() 77 78 config["minion_config"] = "/i/dont/exist/i/think" 79 config["remote_state_tree"] = "/i/dont/exist/remote_state_tree" 80 err := p.Prepare(config) 81 if err == nil { 82 t.Fatal("minion_config and remote_state_tree should cause error") 83 } 84 } 85 86 func TestProvisionerPrepare_MinionConfig_RemotePillarRoots(t *testing.T) { 87 var p Provisioner 88 config := testConfig() 89 90 config["minion_config"] = "/i/dont/exist/i/think" 91 config["remote_pillar_roots"] = "/i/dont/exist/remote_pillar_roots" 92 err := p.Prepare(config) 93 if err == nil { 94 t.Fatal("minion_config and remote_pillar_roots should cause error") 95 } 96 } 97 98 func TestProvisionerPrepare_LocalStateTree(t *testing.T) { 99 var p Provisioner 100 config := testConfig() 101 102 config["local_state_tree"] = "/i/dont/exist/i/think" 103 err := p.Prepare(config) 104 if err == nil { 105 t.Fatal("should have error") 106 } 107 108 config["local_state_tree"] = os.TempDir() 109 err = p.Prepare(config) 110 if err != nil { 111 t.Fatalf("err: %s", err) 112 } 113 } 114 115 func TestProvisionerPrepare_LocalPillarRoots(t *testing.T) { 116 var p Provisioner 117 config := testConfig() 118 119 config["local_pillar_roots"] = "/i/dont/exist/i/think" 120 err := p.Prepare(config) 121 if err == nil { 122 t.Fatal("should have error") 123 } 124 125 config["local_pillar_roots"] = os.TempDir() 126 err = p.Prepare(config) 127 if err != nil { 128 t.Fatalf("err: %s", err) 129 } 130 } 131 132 func TestProvisionerSudo(t *testing.T) { 133 var p Provisioner 134 config := testConfig() 135 136 err := p.Prepare(config) 137 if err != nil { 138 t.Fatalf("err: %s", err) 139 } 140 141 withSudo := p.sudo("echo hello") 142 if withSudo != "sudo echo hello" { 143 t.Fatalf("sudo command not generated correctly") 144 } 145 146 config["disable_sudo"] = true 147 err = p.Prepare(config) 148 if err != nil { 149 t.Fatalf("err: %s", err) 150 } 151 withoutSudo := p.sudo("echo hello") 152 if withoutSudo != "echo hello" { 153 t.Fatalf("sudo-less command not generated correctly") 154 } 155 } 156 157 func TestProvisionerPrepare_RemoteStateTree(t *testing.T) { 158 var p Provisioner 159 config := testConfig() 160 161 config["remote_state_tree"] = "/remote_state_tree" 162 err := p.Prepare(config) 163 if err != nil { 164 t.Fatalf("err: %s", err) 165 } 166 167 if !strings.Contains(p.config.CmdArgs, "--file-root=/remote_state_tree") { 168 t.Fatal("--file-root should be set in CmdArgs") 169 } 170 } 171 172 func TestProvisionerPrepare_RemotePillarRoots(t *testing.T) { 173 var p Provisioner 174 config := testConfig() 175 176 config["remote_pillar_roots"] = "/remote_pillar_roots" 177 err := p.Prepare(config) 178 if err != nil { 179 t.Fatalf("err: %s", err) 180 } 181 182 if !strings.Contains(p.config.CmdArgs, "--pillar-root=/remote_pillar_roots") { 183 t.Fatal("--pillar-root should be set in CmdArgs") 184 } 185 } 186 187 func TestProvisionerPrepare_RemoteStateTree_Default(t *testing.T) { 188 var p Provisioner 189 config := testConfig() 190 191 // no minion_config, no remote_state_tree 192 err := p.Prepare(config) 193 if err != nil { 194 t.Fatalf("err: %s", err) 195 } 196 197 if !strings.Contains(p.config.CmdArgs, "--file-root=/srv/salt") { 198 t.Fatal("--file-root should be set in CmdArgs") 199 } 200 } 201 202 func TestProvisionerPrepare_RemotePillarRoots_Default(t *testing.T) { 203 var p Provisioner 204 config := testConfig() 205 206 // no minion_config, no remote_pillar_roots 207 err := p.Prepare(config) 208 if err != nil { 209 t.Fatalf("err: %s", err) 210 } 211 212 if !strings.Contains(p.config.CmdArgs, "--pillar-root=/srv/pillar") { 213 t.Fatal("--pillar-root should be set in CmdArgs") 214 } 215 } 216 217 func TestProvisionerPrepare_NoExitOnFailure(t *testing.T) { 218 var p Provisioner 219 config := testConfig() 220 221 err := p.Prepare(config) 222 if err != nil { 223 t.Fatalf("err: %s", err) 224 } 225 226 if !strings.Contains(p.config.CmdArgs, "--retcode-passthrough") { 227 t.Fatal("--retcode-passthrough should be set in CmdArgs") 228 } 229 230 config["no_exit_on_failure"] = true 231 err = p.Prepare(config) 232 if err != nil { 233 t.Fatalf("err: %s", err) 234 } 235 236 if strings.Contains(p.config.CmdArgs, "--retcode-passthrough") { 237 t.Fatal("--retcode-passthrough should not be set in CmdArgs") 238 } 239 } 240 241 func TestProvisionerPrepare_LogLevel(t *testing.T) { 242 var p Provisioner 243 config := testConfig() 244 245 err := p.Prepare(config) 246 if err != nil { 247 t.Fatalf("err: %s", err) 248 } 249 250 if !strings.Contains(p.config.CmdArgs, "-l info") { 251 t.Fatal("-l info should be set in CmdArgs") 252 } 253 254 config["log_level"] = "debug" 255 err = p.Prepare(config) 256 if err != nil { 257 t.Fatalf("err: %s", err) 258 } 259 260 if !strings.Contains(p.config.CmdArgs, "-l debug") { 261 t.Fatal("-l debug should be set in CmdArgs") 262 } 263 }