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 }