github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/builder/amazon/common/run_config_test.go (about)

     1  package common
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"regexp"
     7  	"testing"
     8  
     9  	"github.com/hashicorp/packer/helper/communicator"
    10  )
    11  
    12  func init() {
    13  	// Clear out the AWS access key env vars so they don't
    14  	// affect our tests.
    15  	os.Setenv("AWS_ACCESS_KEY_ID", "")
    16  	os.Setenv("AWS_ACCESS_KEY", "")
    17  	os.Setenv("AWS_SECRET_ACCESS_KEY", "")
    18  	os.Setenv("AWS_SECRET_KEY", "")
    19  }
    20  
    21  func testConfig() *RunConfig {
    22  	return &RunConfig{
    23  		SourceAmi:    "abcd",
    24  		InstanceType: "m1.small",
    25  
    26  		Comm: communicator.Config{
    27  			SSHUsername: "foo",
    28  		},
    29  	}
    30  }
    31  
    32  func testConfigFilter() *RunConfig {
    33  	config := testConfig()
    34  	config.SourceAmi = ""
    35  	config.SourceAmiFilter = AmiFilterOptions{}
    36  	return config
    37  }
    38  
    39  func TestRunConfigPrepare(t *testing.T) {
    40  	c := testConfig()
    41  	err := c.Prepare(nil)
    42  	if len(err) > 0 {
    43  		t.Fatalf("err: %s", err)
    44  	}
    45  }
    46  
    47  func TestRunConfigPrepare_InstanceType(t *testing.T) {
    48  	c := testConfig()
    49  	c.InstanceType = ""
    50  	if err := c.Prepare(nil); len(err) != 1 {
    51  		t.Fatalf("err: %s", err)
    52  	}
    53  }
    54  
    55  func TestRunConfigPrepare_SourceAmi(t *testing.T) {
    56  	c := testConfig()
    57  	c.SourceAmi = ""
    58  	if err := c.Prepare(nil); len(err) != 1 {
    59  		t.Fatalf("err: %s", err)
    60  	}
    61  }
    62  
    63  func TestRunConfigPrepare_SourceAmiFilterBlank(t *testing.T) {
    64  	c := testConfigFilter()
    65  	if err := c.Prepare(nil); len(err) != 1 {
    66  		t.Fatalf("err: %s", err)
    67  	}
    68  }
    69  
    70  func TestRunConfigPrepare_SourceAmiFilterGood(t *testing.T) {
    71  	c := testConfigFilter()
    72  	owner := "123"
    73  	filter_key := "name"
    74  	filter_value := "foo"
    75  	goodFilter := AmiFilterOptions{Owners: []*string{&owner}, Filters: map[*string]*string{&filter_key: &filter_value}}
    76  	c.SourceAmiFilter = goodFilter
    77  	if err := c.Prepare(nil); len(err) != 0 {
    78  		t.Fatalf("err: %s", err)
    79  	}
    80  }
    81  
    82  func TestRunConfigPrepare_SpotAuto(t *testing.T) {
    83  	c := testConfig()
    84  	c.SpotPrice = "auto"
    85  	if err := c.Prepare(nil); len(err) != 1 {
    86  		t.Fatalf("err: %s", err)
    87  	}
    88  
    89  	c.SpotPriceAutoProduct = "foo"
    90  	if err := c.Prepare(nil); len(err) != 0 {
    91  		t.Fatalf("err: %s", err)
    92  	}
    93  }
    94  
    95  func TestRunConfigPrepare_SSHPort(t *testing.T) {
    96  	c := testConfig()
    97  	c.Comm.SSHPort = 0
    98  	if err := c.Prepare(nil); len(err) != 0 {
    99  		t.Fatalf("err: %s", err)
   100  	}
   101  
   102  	if c.Comm.SSHPort != 22 {
   103  		t.Fatalf("invalid value: %d", c.Comm.SSHPort)
   104  	}
   105  
   106  	c.Comm.SSHPort = 44
   107  	if err := c.Prepare(nil); len(err) != 0 {
   108  		t.Fatalf("err: %s", err)
   109  	}
   110  
   111  	if c.Comm.SSHPort != 44 {
   112  		t.Fatalf("invalid value: %d", c.Comm.SSHPort)
   113  	}
   114  }
   115  
   116  func TestRunConfigPrepare_UserData(t *testing.T) {
   117  	c := testConfig()
   118  	tf, err := ioutil.TempFile("", "packer")
   119  	if err != nil {
   120  		t.Fatalf("err: %s", err)
   121  	}
   122  	defer tf.Close()
   123  
   124  	c.UserData = "foo"
   125  	c.UserDataFile = tf.Name()
   126  	if err := c.Prepare(nil); len(err) != 1 {
   127  		t.Fatalf("err: %s", err)
   128  	}
   129  }
   130  
   131  func TestRunConfigPrepare_UserDataFile(t *testing.T) {
   132  	c := testConfig()
   133  	if err := c.Prepare(nil); len(err) != 0 {
   134  		t.Fatalf("err: %s", err)
   135  	}
   136  
   137  	c.UserDataFile = "idontexistidontthink"
   138  	if err := c.Prepare(nil); len(err) != 1 {
   139  		t.Fatalf("err: %s", err)
   140  	}
   141  
   142  	tf, err := ioutil.TempFile("", "packer")
   143  	if err != nil {
   144  		t.Fatalf("err: %s", err)
   145  	}
   146  	defer tf.Close()
   147  
   148  	c.UserDataFile = tf.Name()
   149  	if err := c.Prepare(nil); len(err) != 0 {
   150  		t.Fatalf("err: %s", err)
   151  	}
   152  }
   153  
   154  func TestRunConfigPrepare_TemporaryKeyPairName(t *testing.T) {
   155  	c := testConfig()
   156  	c.TemporaryKeyPairName = ""
   157  	if err := c.Prepare(nil); len(err) != 0 {
   158  		t.Fatalf("err: %s", err)
   159  	}
   160  
   161  	if c.TemporaryKeyPairName == "" {
   162  		t.Fatal("keypair name is empty")
   163  	}
   164  
   165  	// Match prefix and UUID, e.g. "packer_5790d491-a0b8-c84c-c9d2-2aea55086550".
   166  	r := regexp.MustCompile(`\Apacker_(?:(?i)[a-f\d]{8}(?:-[a-f\d]{4}){3}-[a-f\d]{12}?)\z`)
   167  	if !r.MatchString(c.TemporaryKeyPairName) {
   168  		t.Fatal("keypair name is not valid")
   169  	}
   170  
   171  	c.TemporaryKeyPairName = "ssh-key-123"
   172  	if err := c.Prepare(nil); len(err) != 0 {
   173  		t.Fatalf("err: %s", err)
   174  	}
   175  
   176  	if c.TemporaryKeyPairName != "ssh-key-123" {
   177  		t.Fatal("keypair name does not match")
   178  	}
   179  }