gopkg.in/hashicorp/packer.v1@v1.3.2/provisioner/puppet-server/provisioner_test.go (about) 1 package puppetserver 2 3 import ( 4 "io/ioutil" 5 "os" 6 "testing" 7 8 "github.com/hashicorp/packer/packer" 9 ) 10 11 func testConfig() (config map[string]interface{}, tf *os.File) { 12 tf, err := ioutil.TempFile("", "packer") 13 if err != nil { 14 panic(err) 15 } 16 17 config = map[string]interface{}{ 18 "puppet_server": tf.Name(), 19 } 20 21 return config, tf 22 } 23 24 func TestProvisioner_Impl(t *testing.T) { 25 var raw interface{} 26 raw = &Provisioner{} 27 if _, ok := raw.(packer.Provisioner); !ok { 28 t.Fatalf("must be a Provisioner") 29 } 30 } 31 32 func TestProvisionerPrepare_puppetBinDir(t *testing.T) { 33 config, tempfile := testConfig() 34 defer os.Remove(tempfile.Name()) 35 defer tempfile.Close() 36 37 delete(config, "puppet_bin_dir") 38 p := new(Provisioner) 39 err := p.Prepare(config) 40 if err != nil { 41 t.Fatalf("err: %s", err) 42 } 43 44 // Test with a good one 45 tf, err := ioutil.TempFile("", "packer") 46 if err != nil { 47 t.Fatalf("error tempfile: %s", err) 48 } 49 defer os.Remove(tf.Name()) 50 51 config["puppet_bin_dir"] = tf.Name() 52 p = new(Provisioner) 53 err = p.Prepare(config) 54 if err != nil { 55 t.Fatalf("err: %s", err) 56 } 57 } 58 59 func TestProvisionerPrepare_clientPrivateKeyPath(t *testing.T) { 60 config, tempfile := testConfig() 61 defer os.Remove(tempfile.Name()) 62 defer tempfile.Close() 63 64 delete(config, "client_private_key_path") 65 p := new(Provisioner) 66 err := p.Prepare(config) 67 if err != nil { 68 t.Fatalf("err: %s", err) 69 } 70 71 // Test with bad paths 72 config["client_private_key_path"] = "i-should-not-exist" 73 p = new(Provisioner) 74 err = p.Prepare(config) 75 if err == nil { 76 t.Fatal("should be an error") 77 } 78 79 // Test with a good one 80 td, err := ioutil.TempDir("", "packer") 81 if err != nil { 82 t.Fatalf("error: %s", err) 83 } 84 defer os.RemoveAll(td) 85 86 config["client_private_key_path"] = td 87 p = new(Provisioner) 88 err = p.Prepare(config) 89 if err != nil { 90 t.Fatalf("err: %s", err) 91 } 92 } 93 94 func TestProvisionerPrepare_clientCertPath(t *testing.T) { 95 config, tempfile := testConfig() 96 defer os.Remove(tempfile.Name()) 97 defer tempfile.Close() 98 99 delete(config, "client_cert_path") 100 p := new(Provisioner) 101 err := p.Prepare(config) 102 if err != nil { 103 t.Fatalf("err: %s", err) 104 } 105 106 // Test with bad paths 107 config["client_cert_path"] = "i-should-not-exist" 108 p = new(Provisioner) 109 err = p.Prepare(config) 110 if err == nil { 111 t.Fatal("should be an error") 112 } 113 114 // Test with a good one 115 td, err := ioutil.TempDir("", "packer") 116 if err != nil { 117 t.Fatalf("error: %s", err) 118 } 119 defer os.RemoveAll(td) 120 121 config["client_cert_path"] = td 122 p = new(Provisioner) 123 err = p.Prepare(config) 124 if err != nil { 125 t.Fatalf("err: %s", err) 126 } 127 } 128 129 func TestProvisionerPrepare_executeCommand(t *testing.T) { 130 config, tempfile := testConfig() 131 defer os.Remove(tempfile.Name()) 132 defer tempfile.Close() 133 134 delete(config, "execute_command") 135 p := new(Provisioner) 136 err := p.Prepare(config) 137 if err != nil { 138 t.Fatalf("err: %s", err) 139 } 140 } 141 142 func TestProvisionerPrepare_facterFacts(t *testing.T) { 143 config, tempfile := testConfig() 144 defer os.Remove(tempfile.Name()) 145 defer tempfile.Close() 146 147 delete(config, "facter") 148 p := new(Provisioner) 149 err := p.Prepare(config) 150 if err != nil { 151 t.Fatalf("err: %s", err) 152 } 153 154 // Test with malformed fact 155 config["facter"] = "fact=stringified" 156 p = new(Provisioner) 157 err = p.Prepare(config) 158 if err == nil { 159 t.Fatal("should be an error") 160 } 161 162 // Test with a good one 163 td, err := ioutil.TempDir("", "packer") 164 if err != nil { 165 t.Fatalf("error: %s", err) 166 } 167 defer os.RemoveAll(td) 168 169 facts := make(map[string]string) 170 facts["fact_name"] = "fact_value" 171 config["facter"] = facts 172 173 p = new(Provisioner) 174 err = p.Prepare(config) 175 if err != nil { 176 t.Fatalf("err: %s", err) 177 } 178 179 // Make sure the default facts are present 180 delete(config, "facter") 181 p = new(Provisioner) 182 err = p.Prepare(config) 183 if err != nil { 184 t.Fatalf("err: %s", err) 185 } 186 if p.config.Facter == nil { 187 t.Fatalf("err: Default facts are not set in the Puppet provisioner!") 188 } 189 190 if _, ok := p.config.Facter["packer_build_name"]; !ok { 191 t.Fatalf("err: packer_build_name fact not set in the Puppet provisioner!") 192 } 193 194 if _, ok := p.config.Facter["packer_builder_type"]; !ok { 195 t.Fatalf("err: packer_builder_type fact not set in the Puppet provisioner!") 196 } 197 } 198 199 func TestProvisionerPrepare_stagingDir(t *testing.T) { 200 config, tempfile := testConfig() 201 defer os.Remove(tempfile.Name()) 202 defer tempfile.Close() 203 204 delete(config, "staging_dir") 205 p := new(Provisioner) 206 err := p.Prepare(config) 207 if err != nil { 208 t.Fatalf("err: %s", err) 209 } 210 211 // Make sure the default staging directory is correct 212 if p.config.StagingDir != "/tmp/packer-puppet-server" { 213 t.Fatalf("err: Default staging_dir is not set in the Puppet provisioner!") 214 } 215 216 // Make sure default staging directory can be overridden 217 config["staging_dir"] = "/tmp/override" 218 p = new(Provisioner) 219 err = p.Prepare(config) 220 if err != nil { 221 t.Fatalf("err: %s", err) 222 } 223 224 if p.config.StagingDir != "/tmp/override" { 225 t.Fatalf("err: Overridden staging_dir is not set correctly in the Puppet provisioner!") 226 } 227 }