github.com/sneal/packer@v0.5.2/builder/amazon/instance/builder_test.go (about)

     1  package instance
     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  		"account_id":       "foo",
    18  		"ami_name":         "foo",
    19  		"instance_type":    "m1.small",
    20  		"region":           "us-east-1",
    21  		"s3_bucket":        "foo",
    22  		"source_ami":       "foo",
    23  		"ssh_username":     "bob",
    24  		"x509_cert_path":   tf.Name(),
    25  		"x509_key_path":    tf.Name(),
    26  		"x509_upload_path": "/foo",
    27  	}
    28  }
    29  
    30  func TestBuilder_ImplementsBuilder(t *testing.T) {
    31  	var raw interface{}
    32  	raw = &Builder{}
    33  	if _, ok := raw.(packer.Builder); !ok {
    34  		t.Fatalf("Builder should be a builder")
    35  	}
    36  }
    37  
    38  func TestBuilderPrepare_AccountId(t *testing.T) {
    39  	b := &Builder{}
    40  	config := testConfig()
    41  
    42  	config["account_id"] = ""
    43  	warnings, err := b.Prepare(config)
    44  	if len(warnings) > 0 {
    45  		t.Fatalf("bad: %#v", warnings)
    46  	}
    47  	if err == nil {
    48  		t.Fatal("should have error")
    49  	}
    50  
    51  	config["account_id"] = "foo"
    52  	warnings, err = b.Prepare(config)
    53  	if len(warnings) > 0 {
    54  		t.Fatalf("bad: %#v", warnings)
    55  	}
    56  	if err != nil {
    57  		t.Errorf("err: %s", err)
    58  	}
    59  
    60  	config["account_id"] = "0123-0456-7890"
    61  	warnings, err = b.Prepare(config)
    62  	if len(warnings) > 0 {
    63  		t.Fatalf("bad: %#v", warnings)
    64  	}
    65  	if err != nil {
    66  		t.Fatalf("err: %s", err)
    67  	}
    68  
    69  	if b.config.AccountId != "012304567890" {
    70  		t.Errorf("should strip hyphens: %s", b.config.AccountId)
    71  	}
    72  }
    73  
    74  func TestBuilderPrepare_AMIName(t *testing.T) {
    75  	var b Builder
    76  	config := testConfig()
    77  
    78  	// Test good
    79  	config["ami_name"] = "foo"
    80  	warnings, err := b.Prepare(config)
    81  	if len(warnings) > 0 {
    82  		t.Fatalf("bad: %#v", warnings)
    83  	}
    84  	if err != nil {
    85  		t.Fatalf("should not have error: %s", err)
    86  	}
    87  
    88  	// Test bad
    89  	config["ami_name"] = "foo {{"
    90  	b = Builder{}
    91  	warnings, err = b.Prepare(config)
    92  	if len(warnings) > 0 {
    93  		t.Fatalf("bad: %#v", warnings)
    94  	}
    95  	if err == nil {
    96  		t.Fatal("should have error")
    97  	}
    98  
    99  	// Test bad
   100  	delete(config, "ami_name")
   101  	b = Builder{}
   102  	warnings, err = b.Prepare(config)
   103  	if len(warnings) > 0 {
   104  		t.Fatalf("bad: %#v", warnings)
   105  	}
   106  	if err == nil {
   107  		t.Fatal("should have error")
   108  	}
   109  }
   110  
   111  func TestBuilderPrepare_BundleDestination(t *testing.T) {
   112  	b := &Builder{}
   113  	config := testConfig()
   114  
   115  	config["bundle_destination"] = ""
   116  	warnings, err := b.Prepare(config)
   117  	if len(warnings) > 0 {
   118  		t.Fatalf("bad: %#v", warnings)
   119  	}
   120  	if err != nil {
   121  		t.Fatalf("err: %s", err)
   122  	}
   123  
   124  	if b.config.BundleDestination != "/tmp" {
   125  		t.Fatalf("bad: %s", b.config.BundleDestination)
   126  	}
   127  }
   128  
   129  func TestBuilderPrepare_BundlePrefix(t *testing.T) {
   130  	b := &Builder{}
   131  	config := testConfig()
   132  
   133  	config["bundle_prefix"] = ""
   134  	warnings, err := b.Prepare(config)
   135  	if len(warnings) > 0 {
   136  		t.Fatalf("bad: %#v", warnings)
   137  	}
   138  	if err != nil {
   139  		t.Fatalf("err: %s", err)
   140  	}
   141  
   142  	if b.config.BundlePrefix == "" {
   143  		t.Fatalf("bad: %s", b.config.BundlePrefix)
   144  	}
   145  }
   146  
   147  func TestBuilderPrepare_InvalidKey(t *testing.T) {
   148  	var b Builder
   149  	config := testConfig()
   150  
   151  	// Add a random key
   152  	config["i_should_not_be_valid"] = true
   153  	warnings, err := b.Prepare(config)
   154  	if len(warnings) > 0 {
   155  		t.Fatalf("bad: %#v", warnings)
   156  	}
   157  	if err == nil {
   158  		t.Fatal("should have error")
   159  	}
   160  }
   161  
   162  func TestBuilderPrepare_S3Bucket(t *testing.T) {
   163  	b := &Builder{}
   164  	config := testConfig()
   165  
   166  	config["s3_bucket"] = ""
   167  	warnings, err := b.Prepare(config)
   168  	if len(warnings) > 0 {
   169  		t.Fatalf("bad: %#v", warnings)
   170  	}
   171  	if err == nil {
   172  		t.Fatal("should have error")
   173  	}
   174  
   175  	config["s3_bucket"] = "foo"
   176  	warnings, err = b.Prepare(config)
   177  	if len(warnings) > 0 {
   178  		t.Fatalf("bad: %#v", warnings)
   179  	}
   180  	if err != nil {
   181  		t.Errorf("err: %s", err)
   182  	}
   183  }
   184  
   185  func TestBuilderPrepare_X509CertPath(t *testing.T) {
   186  	b := &Builder{}
   187  	config := testConfig()
   188  
   189  	config["x509_cert_path"] = ""
   190  	warnings, err := b.Prepare(config)
   191  	if len(warnings) > 0 {
   192  		t.Fatalf("bad: %#v", warnings)
   193  	}
   194  	if err == nil {
   195  		t.Fatal("should have error")
   196  	}
   197  
   198  	config["x509_cert_path"] = "i/am/a/file/that/doesnt/exist"
   199  	warnings, err = b.Prepare(config)
   200  	if len(warnings) > 0 {
   201  		t.Fatalf("bad: %#v", warnings)
   202  	}
   203  	if err == nil {
   204  		t.Error("should have error")
   205  	}
   206  
   207  	tf, err := ioutil.TempFile("", "packer")
   208  	if err != nil {
   209  		t.Fatalf("error tempfile: %s", err)
   210  	}
   211  	defer os.Remove(tf.Name())
   212  
   213  	config["x509_cert_path"] = tf.Name()
   214  	warnings, err = b.Prepare(config)
   215  	if len(warnings) > 0 {
   216  		t.Fatalf("bad: %#v", warnings)
   217  	}
   218  	if err != nil {
   219  		t.Fatalf("should not have error: %s", err)
   220  	}
   221  }
   222  
   223  func TestBuilderPrepare_X509KeyPath(t *testing.T) {
   224  	b := &Builder{}
   225  	config := testConfig()
   226  
   227  	config["x509_key_path"] = ""
   228  	warnings, err := b.Prepare(config)
   229  	if len(warnings) > 0 {
   230  		t.Fatalf("bad: %#v", warnings)
   231  	}
   232  	if err == nil {
   233  		t.Fatal("should have error")
   234  	}
   235  
   236  	config["x509_key_path"] = "i/am/a/file/that/doesnt/exist"
   237  	warnings, err = b.Prepare(config)
   238  	if len(warnings) > 0 {
   239  		t.Fatalf("bad: %#v", warnings)
   240  	}
   241  	if err == nil {
   242  		t.Error("should have error")
   243  	}
   244  
   245  	tf, err := ioutil.TempFile("", "packer")
   246  	if err != nil {
   247  		t.Fatalf("error tempfile: %s", err)
   248  	}
   249  	defer os.Remove(tf.Name())
   250  
   251  	config["x509_key_path"] = tf.Name()
   252  	warnings, err = b.Prepare(config)
   253  	if len(warnings) > 0 {
   254  		t.Fatalf("bad: %#v", warnings)
   255  	}
   256  	if err != nil {
   257  		t.Fatalf("should not have error: %s", err)
   258  	}
   259  }
   260  
   261  func TestBuilderPrepare_X509UploadPath(t *testing.T) {
   262  	b := &Builder{}
   263  	config := testConfig()
   264  
   265  	config["x509_upload_path"] = ""
   266  	warnings, err := b.Prepare(config)
   267  	if len(warnings) > 0 {
   268  		t.Fatalf("bad: %#v", warnings)
   269  	}
   270  	if err != nil {
   271  		t.Fatalf("should not have error: %s", err)
   272  	}
   273  }