github.com/askholme/packer@v0.7.2-0.20140924152349-70d9566a6852/packer/config_template_test.go (about)

     1  package packer
     2  
     3  import (
     4  	"fmt"
     5  	"math"
     6  	"os"
     7  	"strconv"
     8  	"testing"
     9  	"time"
    10  )
    11  
    12  func TestConfigTemplateProcess_env(t *testing.T) {
    13  	tpl, err := NewConfigTemplate()
    14  	if err != nil {
    15  		t.Fatalf("err: %s", err)
    16  	}
    17  
    18  	_, err = tpl.Process(`{{env "foo"}}`, nil)
    19  	if err == nil {
    20  		t.Fatal("should error")
    21  	}
    22  }
    23  
    24  func TestConfigTemplateProcess_isotime(t *testing.T) {
    25  	tpl, err := NewConfigTemplate()
    26  	if err != nil {
    27  		t.Fatalf("err: %s", err)
    28  	}
    29  
    30  	result, err := tpl.Process(`{{isotime}}`, nil)
    31  	if err != nil {
    32  		t.Fatalf("err: %s", err)
    33  	}
    34  
    35  	val, err := time.Parse(time.RFC3339, result)
    36  	if err != nil {
    37  		t.Fatalf("err: %s", err)
    38  	}
    39  
    40  	currentTime := time.Now().UTC()
    41  	if currentTime.Sub(val) > 2*time.Second {
    42  		t.Fatalf("val: %d (current: %d)", val, currentTime)
    43  	}
    44  }
    45  
    46  // Note must format with the magic Date: Mon Jan 2 15:04:05 -0700 MST 2006
    47  func TestConfigTemplateProcess_isotime_withFormat(t *testing.T) {
    48  	tpl, err := NewConfigTemplate()
    49  	if err != nil {
    50  		t.Fatalf("err: %s", err)
    51  	}
    52  
    53  	// Checking for a too-many arguments error
    54  	// Because of the variadic function, compile time checking won't work
    55  	_, err = tpl.Process(`{{isotime "20060102" "huh"}}`, nil)
    56  	if err == nil {
    57  		t.Fatalf("err: cannot have more than 1 input")
    58  	}
    59  
    60  	result, err := tpl.Process(`{{isotime "20060102"}}`, nil)
    61  	if err != nil {
    62  		t.Fatalf("err: %s", err)
    63  	}
    64  
    65  	ti := time.Now().UTC()
    66  	val := fmt.Sprintf("%04d%02d%02d", ti.Year(), ti.Month(), ti.Day())
    67  
    68  	if result != val {
    69  		t.Fatalf("val: %s (formated: %s)", val, result)
    70  	}
    71  }
    72  
    73  func TestConfigTemplateProcess_pwd(t *testing.T) {
    74  	tpl, err := NewConfigTemplate()
    75  	if err != nil {
    76  		t.Fatalf("err: %s", err)
    77  	}
    78  
    79  	pwd, err := os.Getwd()
    80  	if err != nil {
    81  		t.Fatalf("err: %s", err)
    82  	}
    83  
    84  	result, err := tpl.Process(`{{pwd}}`, nil)
    85  	if err != nil {
    86  		t.Fatalf("err: %s", err)
    87  	}
    88  
    89  	if result != pwd {
    90  		t.Fatalf("err: %s", result)
    91  	}
    92  }
    93  
    94  func TestConfigTemplateProcess_timestamp(t *testing.T) {
    95  	tpl, err := NewConfigTemplate()
    96  	if err != nil {
    97  		t.Fatalf("err: %s", err)
    98  	}
    99  
   100  	result, err := tpl.Process(`{{timestamp}}`, nil)
   101  	if err != nil {
   102  		t.Fatalf("err: %s", err)
   103  	}
   104  
   105  	val, err := strconv.ParseInt(result, 10, 64)
   106  	if err != nil {
   107  		t.Fatalf("err: %s", err)
   108  	}
   109  
   110  	currentTime := time.Now().UTC().Unix()
   111  	if math.Abs(float64(currentTime-val)) > 10 {
   112  		t.Fatalf("val: %d (current: %d)", val, currentTime)
   113  	}
   114  
   115  	time.Sleep(2 * time.Second)
   116  
   117  	result2, err := tpl.Process(`{{timestamp}}`, nil)
   118  	if err != nil {
   119  		t.Fatalf("err: %s", err)
   120  	}
   121  
   122  	if result != result2 {
   123  		t.Fatalf("bad: %#v %#v", result, result2)
   124  	}
   125  }
   126  
   127  func TestConfigTemplateProcess_user(t *testing.T) {
   128  	tpl, err := NewConfigTemplate()
   129  	if err != nil {
   130  		t.Fatalf("err: %s", err)
   131  	}
   132  
   133  	tpl.UserVars["foo"] = "bar"
   134  
   135  	result, err := tpl.Process(`{{user "foo"}}`, nil)
   136  	if err != nil {
   137  		t.Fatalf("err: %s", err)
   138  	}
   139  
   140  	if result != "bar" {
   141  		t.Fatalf("bad: %s", result)
   142  	}
   143  }
   144  
   145  func TestConfigTemplateProcess_uuid(t *testing.T) {
   146  	tpl, err := NewConfigTemplate()
   147  	if err != nil {
   148  		t.Fatalf("err: %s", err)
   149  	}
   150  
   151  	result, err := tpl.Process(`{{uuid}}`, nil)
   152  	if err != nil {
   153  		t.Fatalf("err: %s", err)
   154  	}
   155  
   156  	if len(result) != 36 {
   157  		t.Fatalf("err: %s", result)
   158  	}
   159  }
   160  
   161  func TestConfigTemplateProcess_upper(t *testing.T) {
   162  	tpl, err := NewConfigTemplate()
   163  	if err != nil {
   164  		t.Fatalf("err: %s", err)
   165  	}
   166  
   167  	tpl.UserVars["foo"] = "bar"
   168  
   169  	result, err := tpl.Process(`{{user "foo" | upper}}`, nil)
   170  	if err != nil {
   171  		t.Fatalf("err: %s", err)
   172  	}
   173  
   174  	if result != "BAR" {
   175  		t.Fatalf("bad: %s", result)
   176  	}
   177  }
   178  
   179  func TestConfigTemplateProcess_lower(t *testing.T) {
   180  	tpl, err := NewConfigTemplate()
   181  	if err != nil {
   182  		t.Fatalf("err: %s", err)
   183  	}
   184  
   185  	tpl.UserVars["foo"] = "BAR"
   186  
   187  	result, err := tpl.Process(`{{user "foo" | lower}}`, nil)
   188  	if err != nil {
   189  		t.Fatalf("err: %s", err)
   190  	}
   191  
   192  	if result != "bar" {
   193  		t.Fatalf("bad: %s", result)
   194  	}
   195  }
   196  
   197  func TestConfigTemplateValidate(t *testing.T) {
   198  	tpl, err := NewConfigTemplate()
   199  	if err != nil {
   200  		t.Fatalf("err: %s", err)
   201  	}
   202  
   203  	// Valid
   204  	err = tpl.Validate(`{{user "foo"}}`)
   205  	if err != nil {
   206  		t.Fatalf("err: %s", err)
   207  	}
   208  
   209  	// Invalid
   210  	err = tpl.Validate(`{{idontexist}}`)
   211  	if err == nil {
   212  		t.Fatal("should have error")
   213  	}
   214  }