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  }