github.phpd.cn/hashicorp/packer@v1.3.2/builder/amazon/ebs/builder_test.go (about) 1 package ebs 2 3 import ( 4 "testing" 5 6 "github.com/hashicorp/packer/packer" 7 ) 8 9 func testConfig() map[string]interface{} { 10 return map[string]interface{}{ 11 "access_key": "foo", 12 "secret_key": "bar", 13 "source_ami": "foo", 14 "instance_type": "foo", 15 "region": "us-east-1", 16 "ssh_username": "root", 17 "ami_name": "foo", 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 "access_key": []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_AMIName(t *testing.T) { 45 var b Builder 46 config := testConfig() 47 48 // Test good 49 config["ami_name"] = "foo" 50 config["skip_region_validation"] = true 51 warnings, err := b.Prepare(config) 52 if len(warnings) > 0 { 53 t.Fatalf("bad: %#v", warnings) 54 } 55 if err != nil { 56 t.Fatalf("should not have error: %s", err) 57 } 58 59 // Test bad 60 config["ami_name"] = "foo {{" 61 b = Builder{} 62 warnings, err = b.Prepare(config) 63 if len(warnings) > 0 { 64 t.Fatalf("bad: %#v", warnings) 65 } 66 if err == nil { 67 t.Fatal("should have error") 68 } 69 70 // Test bad 71 delete(config, "ami_name") 72 b = Builder{} 73 warnings, err = b.Prepare(config) 74 if len(warnings) > 0 { 75 t.Fatalf("bad: %#v", warnings) 76 } 77 if err == nil { 78 t.Fatal("should have error") 79 } 80 } 81 82 func TestBuilderPrepare_InvalidKey(t *testing.T) { 83 var b Builder 84 config := testConfig() 85 86 // Add a random key 87 config["i_should_not_be_valid"] = true 88 warnings, err := b.Prepare(config) 89 if len(warnings) > 0 { 90 t.Fatalf("bad: %#v", warnings) 91 } 92 if err == nil { 93 t.Fatal("should have error") 94 } 95 } 96 97 func TestBuilderPrepare_InvalidShutdownBehavior(t *testing.T) { 98 var b Builder 99 config := testConfig() 100 101 // Test good 102 config["shutdown_behavior"] = "terminate" 103 config["skip_region_validation"] = true 104 warnings, err := b.Prepare(config) 105 if len(warnings) > 0 { 106 t.Fatalf("bad: %#v", warnings) 107 } 108 if err != nil { 109 t.Fatalf("should not have error: %s", err) 110 } 111 112 // Test good 113 config["shutdown_behavior"] = "stop" 114 warnings, err = b.Prepare(config) 115 if len(warnings) > 0 { 116 t.Fatalf("bad: %#v", warnings) 117 } 118 if err != nil { 119 t.Fatalf("should not have error: %s", err) 120 } 121 122 // Test bad 123 config["shutdown_behavior"] = "foobar" 124 warnings, err = b.Prepare(config) 125 if len(warnings) > 0 { 126 t.Fatalf("bad: %#v", warnings) 127 } 128 if err == nil { 129 t.Fatal("should have error") 130 } 131 }