github.phpd.cn/hashicorp/packer@v1.3.2/builder/scaleway/builder_test.go (about) 1 package scaleway 2 3 import ( 4 "strconv" 5 "testing" 6 7 "github.com/hashicorp/packer/packer" 8 ) 9 10 func testConfig() map[string]interface{} { 11 return map[string]interface{}{ 12 "api_access_key": "foo", 13 "api_token": "bar", 14 "region": "ams1", 15 "commercial_type": "START1-S", 16 "ssh_username": "root", 17 "image": "image-uuid", 18 } 19 } 20 21 func TestBuilder_ImplementsBuilder(t *testing.T) { 22 var raw interface{} 23 raw = &Builder{} 24 if _, ok := raw.(packer.Builder); !ok { 25 t.Fatalf("Builder should be a builder") 26 } 27 } 28 29 func TestBuilder_Prepare_BadType(t *testing.T) { 30 b := &Builder{} 31 c := map[string]interface{}{ 32 "api_token": []string{}, 33 } 34 35 warnings, err := b.Prepare(c) 36 if len(warnings) > 0 { 37 t.Fatalf("bad: %#v", warnings) 38 } 39 if err == nil { 40 t.Fatalf("prepare should fail") 41 } 42 } 43 44 func TestBuilderPrepare_InvalidKey(t *testing.T) { 45 var b Builder 46 config := testConfig() 47 48 config["i_should_not_be_valid"] = true 49 warnings, err := b.Prepare(config) 50 if len(warnings) > 0 { 51 t.Fatalf("bad: %#v", warnings) 52 } 53 if err == nil { 54 t.Fatal("should have error") 55 } 56 } 57 58 func TestBuilderPrepare_Region(t *testing.T) { 59 var b Builder 60 config := testConfig() 61 62 delete(config, "region") 63 warnings, err := b.Prepare(config) 64 if len(warnings) > 0 { 65 t.Fatalf("bad: %#v", warnings) 66 } 67 if err == nil { 68 t.Fatalf("should error") 69 } 70 71 expected := "ams1" 72 73 config["region"] = expected 74 b = Builder{} 75 warnings, err = b.Prepare(config) 76 if len(warnings) > 0 { 77 t.Fatalf("bad: %#v", warnings) 78 } 79 if err != nil { 80 t.Fatalf("should not have error: %s", err) 81 } 82 83 if b.config.Region != expected { 84 t.Errorf("found %s, expected %s", b.config.Region, expected) 85 } 86 } 87 88 func TestBuilderPrepare_CommercialType(t *testing.T) { 89 var b Builder 90 config := testConfig() 91 92 delete(config, "commercial_type") 93 warnings, err := b.Prepare(config) 94 if len(warnings) > 0 { 95 t.Fatalf("bad: %#v", warnings) 96 } 97 if err == nil { 98 t.Fatalf("should error") 99 } 100 101 expected := "START1-S" 102 103 config["commercial_type"] = expected 104 b = Builder{} 105 warnings, err = b.Prepare(config) 106 if len(warnings) > 0 { 107 t.Fatalf("bad: %#v", warnings) 108 } 109 if err != nil { 110 t.Fatalf("should not have error: %s", err) 111 } 112 113 if b.config.CommercialType != expected { 114 t.Errorf("found %s, expected %s", b.config.CommercialType, expected) 115 } 116 } 117 118 func TestBuilderPrepare_Image(t *testing.T) { 119 var b Builder 120 config := testConfig() 121 122 delete(config, "image") 123 warnings, err := b.Prepare(config) 124 if len(warnings) > 0 { 125 t.Fatalf("bad: %#v", warnings) 126 } 127 if err == nil { 128 t.Fatal("should error") 129 } 130 131 expected := "cc586e45-5156-4f71-b223-cf406b10dd1c" 132 133 config["image"] = expected 134 b = Builder{} 135 warnings, err = b.Prepare(config) 136 if len(warnings) > 0 { 137 t.Fatalf("bad: %#v", warnings) 138 } 139 if err != nil { 140 t.Fatalf("should not have error: %s", err) 141 } 142 143 if b.config.Image != expected { 144 t.Errorf("found %s, expected %s", b.config.Image, expected) 145 } 146 } 147 148 func TestBuilderPrepare_SnapshotName(t *testing.T) { 149 var b Builder 150 config := testConfig() 151 152 warnings, err := b.Prepare(config) 153 if len(warnings) > 0 { 154 t.Fatalf("bad: %#v", warnings) 155 } 156 if err != nil { 157 t.Fatalf("should not have error: %s", err) 158 } 159 160 if b.config.SnapshotName == "" { 161 t.Errorf("invalid: %s", b.config.SnapshotName) 162 } 163 164 config["snapshot_name"] = "foobarbaz" 165 b = Builder{} 166 warnings, err = b.Prepare(config) 167 if len(warnings) > 0 { 168 t.Fatalf("bad: %#v", warnings) 169 } 170 if err != nil { 171 t.Fatalf("should not have error: %s", err) 172 } 173 174 config["snapshot_name"] = "{{timestamp}}" 175 b = Builder{} 176 warnings, err = b.Prepare(config) 177 if len(warnings) > 0 { 178 t.Fatalf("bad: %#v", warnings) 179 } 180 if err != nil { 181 t.Fatalf("should not have error: %s", err) 182 } 183 184 _, err = strconv.ParseInt(b.config.SnapshotName, 0, 0) 185 if err != nil { 186 t.Fatalf("failed to parse int in template: %s", err) 187 } 188 189 } 190 191 func TestBuilderPrepare_ServerName(t *testing.T) { 192 var b Builder 193 config := testConfig() 194 195 warnings, err := b.Prepare(config) 196 if len(warnings) > 0 { 197 t.Fatalf("bad: %#v", warnings) 198 } 199 if err != nil { 200 t.Fatalf("should not have error: %s", err) 201 } 202 203 if b.config.ServerName == "" { 204 t.Errorf("invalid: %s", b.config.ServerName) 205 } 206 207 config["server_name"] = "foobar" 208 b = Builder{} 209 warnings, err = b.Prepare(config) 210 if len(warnings) > 0 { 211 t.Fatalf("bad: %#v", warnings) 212 } 213 if err != nil { 214 t.Fatalf("should not have error: %s", err) 215 } 216 217 config["server_name"] = "foobar-{{timestamp}}" 218 b = Builder{} 219 warnings, err = b.Prepare(config) 220 if len(warnings) > 0 { 221 t.Fatalf("bad: %#v", warnings) 222 } 223 if err != nil { 224 t.Fatalf("should not have error: %s", err) 225 } 226 227 config["server_name"] = "foobar-{{" 228 b = Builder{} 229 warnings, err = b.Prepare(config) 230 if len(warnings) > 0 { 231 t.Fatalf("bad: %#v", warnings) 232 } 233 if err == nil { 234 t.Fatal("should have error") 235 } 236 237 }