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 }