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