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  }