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  }