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