github.com/angdraug/packer@v1.3.2/builder/digitalocean/builder_test.go (about)

     1  package digitalocean
     2  
     3  import (
     4  	"strconv"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/hashicorp/packer/packer"
     9  )
    10  
    11  func testConfig() map[string]interface{} {
    12  	return map[string]interface{}{
    13  		"api_token":    "bar",
    14  		"region":       "nyc2",
    15  		"size":         "512mb",
    16  		"ssh_username": "root",
    17  		"image":        "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  		"api_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_InvalidKey(t *testing.T) {
    45  	var b Builder
    46  	config := testConfig()
    47  
    48  	// Add a random key
    49  	config["i_should_not_be_valid"] = true
    50  	warnings, err := b.Prepare(config)
    51  	if len(warnings) > 0 {
    52  		t.Fatalf("bad: %#v", warnings)
    53  	}
    54  	if err == nil {
    55  		t.Fatal("should have error")
    56  	}
    57  }
    58  
    59  func TestBuilderPrepare_Region(t *testing.T) {
    60  	var b Builder
    61  	config := testConfig()
    62  
    63  	// Test default
    64  	delete(config, "region")
    65  	warnings, err := b.Prepare(config)
    66  	if len(warnings) > 0 {
    67  		t.Fatalf("bad: %#v", warnings)
    68  	}
    69  	if err == nil {
    70  		t.Fatalf("should error")
    71  	}
    72  
    73  	expected := "sfo1"
    74  
    75  	// Test set
    76  	config["region"] = expected
    77  	b = Builder{}
    78  	warnings, err = b.Prepare(config)
    79  	if len(warnings) > 0 {
    80  		t.Fatalf("bad: %#v", warnings)
    81  	}
    82  	if err != nil {
    83  		t.Fatalf("should not have error: %s", err)
    84  	}
    85  
    86  	if b.config.Region != expected {
    87  		t.Errorf("found %s, expected %s", b.config.Region, expected)
    88  	}
    89  }
    90  
    91  func TestBuilderPrepare_Size(t *testing.T) {
    92  	var b Builder
    93  	config := testConfig()
    94  
    95  	// Test default
    96  	delete(config, "size")
    97  	warnings, err := b.Prepare(config)
    98  	if len(warnings) > 0 {
    99  		t.Fatalf("bad: %#v", warnings)
   100  	}
   101  	if err == nil {
   102  		t.Fatalf("should error")
   103  	}
   104  
   105  	expected := "1024mb"
   106  
   107  	// Test set
   108  	config["size"] = expected
   109  	b = Builder{}
   110  	warnings, err = b.Prepare(config)
   111  	if len(warnings) > 0 {
   112  		t.Fatalf("bad: %#v", warnings)
   113  	}
   114  	if err != nil {
   115  		t.Fatalf("should not have error: %s", err)
   116  	}
   117  
   118  	if b.config.Size != expected {
   119  		t.Errorf("found %s, expected %s", b.config.Size, expected)
   120  	}
   121  }
   122  
   123  func TestBuilderPrepare_Image(t *testing.T) {
   124  	var b Builder
   125  	config := testConfig()
   126  
   127  	// Test default
   128  	delete(config, "image")
   129  	warnings, err := b.Prepare(config)
   130  	if len(warnings) > 0 {
   131  		t.Fatalf("bad: %#v", warnings)
   132  	}
   133  	if err == nil {
   134  		t.Fatal("should error")
   135  	}
   136  
   137  	expected := "ubuntu-14-04-x64"
   138  
   139  	// Test set
   140  	config["image"] = expected
   141  	b = Builder{}
   142  	warnings, err = b.Prepare(config)
   143  	if len(warnings) > 0 {
   144  		t.Fatalf("bad: %#v", warnings)
   145  	}
   146  	if err != nil {
   147  		t.Fatalf("should not have error: %s", err)
   148  	}
   149  
   150  	if b.config.Image != expected {
   151  		t.Errorf("found %s, expected %s", b.config.Image, expected)
   152  	}
   153  }
   154  
   155  func TestBuilderPrepare_StateTimeout(t *testing.T) {
   156  	var b Builder
   157  	config := testConfig()
   158  
   159  	// Test default
   160  	warnings, err := b.Prepare(config)
   161  	if len(warnings) > 0 {
   162  		t.Fatalf("bad: %#v", warnings)
   163  	}
   164  	if err != nil {
   165  		t.Fatalf("should not have error: %s", err)
   166  	}
   167  
   168  	if b.config.StateTimeout != 6*time.Minute {
   169  		t.Errorf("invalid: %s", b.config.StateTimeout)
   170  	}
   171  
   172  	// Test set
   173  	config["state_timeout"] = "5m"
   174  	b = Builder{}
   175  	warnings, err = b.Prepare(config)
   176  	if len(warnings) > 0 {
   177  		t.Fatalf("bad: %#v", warnings)
   178  	}
   179  	if err != nil {
   180  		t.Fatalf("should not have error: %s", err)
   181  	}
   182  
   183  	// Test bad
   184  	config["state_timeout"] = "tubes"
   185  	b = Builder{}
   186  	warnings, err = b.Prepare(config)
   187  	if len(warnings) > 0 {
   188  		t.Fatalf("bad: %#v", warnings)
   189  	}
   190  	if err == nil {
   191  		t.Fatal("should have error")
   192  	}
   193  
   194  }
   195  
   196  func TestBuilderPrepare_PrivateNetworking(t *testing.T) {
   197  	var b Builder
   198  	config := testConfig()
   199  
   200  	// Test default
   201  	warnings, err := b.Prepare(config)
   202  	if len(warnings) > 0 {
   203  		t.Fatalf("bad: %#v", warnings)
   204  	}
   205  	if err != nil {
   206  		t.Fatalf("should not have error: %s", err)
   207  	}
   208  
   209  	if b.config.PrivateNetworking != false {
   210  		t.Errorf("invalid: %t", b.config.PrivateNetworking)
   211  	}
   212  
   213  	// Test set
   214  	config["private_networking"] = true
   215  	b = Builder{}
   216  	warnings, err = b.Prepare(config)
   217  	if len(warnings) > 0 {
   218  		t.Fatalf("bad: %#v", warnings)
   219  	}
   220  	if err != nil {
   221  		t.Fatalf("should not have error: %s", err)
   222  	}
   223  
   224  	if b.config.PrivateNetworking != true {
   225  		t.Errorf("invalid: %t", b.config.PrivateNetworking)
   226  	}
   227  }
   228  
   229  func TestBuilderPrepare_SnapshotName(t *testing.T) {
   230  	var b Builder
   231  	config := testConfig()
   232  
   233  	// Test default
   234  	warnings, err := b.Prepare(config)
   235  	if len(warnings) > 0 {
   236  		t.Fatalf("bad: %#v", warnings)
   237  	}
   238  	if err != nil {
   239  		t.Fatalf("should not have error: %s", err)
   240  	}
   241  
   242  	if b.config.SnapshotName == "" {
   243  		t.Errorf("invalid: %s", b.config.SnapshotName)
   244  	}
   245  
   246  	// Test set
   247  	config["snapshot_name"] = "foobarbaz"
   248  	b = Builder{}
   249  	warnings, err = b.Prepare(config)
   250  	if len(warnings) > 0 {
   251  		t.Fatalf("bad: %#v", warnings)
   252  	}
   253  	if err != nil {
   254  		t.Fatalf("should not have error: %s", err)
   255  	}
   256  
   257  	// Test set with template
   258  	config["snapshot_name"] = "{{timestamp}}"
   259  	b = Builder{}
   260  	warnings, err = b.Prepare(config)
   261  	if len(warnings) > 0 {
   262  		t.Fatalf("bad: %#v", warnings)
   263  	}
   264  	if err != nil {
   265  		t.Fatalf("should not have error: %s", err)
   266  	}
   267  
   268  	_, err = strconv.ParseInt(b.config.SnapshotName, 0, 0)
   269  	if err != nil {
   270  		t.Fatalf("failed to parse int in template: %s", err)
   271  	}
   272  
   273  }
   274  
   275  func TestBuilderPrepare_DropletName(t *testing.T) {
   276  	var b Builder
   277  	config := testConfig()
   278  
   279  	// Test default
   280  	warnings, err := b.Prepare(config)
   281  	if len(warnings) > 0 {
   282  		t.Fatalf("bad: %#v", warnings)
   283  	}
   284  	if err != nil {
   285  		t.Fatalf("should not have error: %s", err)
   286  	}
   287  
   288  	if b.config.DropletName == "" {
   289  		t.Errorf("invalid: %s", b.config.DropletName)
   290  	}
   291  
   292  	// Test normal set
   293  	config["droplet_name"] = "foobar"
   294  	b = Builder{}
   295  	warnings, err = b.Prepare(config)
   296  	if len(warnings) > 0 {
   297  		t.Fatalf("bad: %#v", warnings)
   298  	}
   299  	if err != nil {
   300  		t.Fatalf("should not have error: %s", err)
   301  	}
   302  
   303  	// Test with template
   304  	config["droplet_name"] = "foobar-{{timestamp}}"
   305  	b = Builder{}
   306  	warnings, err = b.Prepare(config)
   307  	if len(warnings) > 0 {
   308  		t.Fatalf("bad: %#v", warnings)
   309  	}
   310  	if err != nil {
   311  		t.Fatalf("should not have error: %s", err)
   312  	}
   313  
   314  	// Test with bad template
   315  	config["droplet_name"] = "foobar-{{"
   316  	b = Builder{}
   317  	warnings, err = b.Prepare(config)
   318  	if len(warnings) > 0 {
   319  		t.Fatalf("bad: %#v", warnings)
   320  	}
   321  	if err == nil {
   322  		t.Fatal("should have error")
   323  	}
   324  
   325  }