github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_datetime_test.go (about) 1 // Unless explicitly stated otherwise all files in this repository are licensed 2 // under the MIT License. 3 // This product includes software developed at Guance Cloud (https://www.guance.com/). 4 // Copyright 2021-present Guance, Inc. 5 6 package funcs 7 8 import ( 9 "testing" 10 "time" 11 12 "github.com/GuanceCloud/cliutils/pipeline/ptinput" 13 "github.com/GuanceCloud/cliutils/point" 14 tu "github.com/GuanceCloud/cliutils/testutil" 15 ) 16 17 func TestDateTime(t *testing.T) { 18 // local timezone: utc+0800 19 cst := time.FixedZone("CST", 8*3600) 20 time.Local = cst 21 22 cases := []struct { 23 name, pl, in string 24 outkey string 25 expect interface{} 26 fail bool 27 }{ 28 { 29 name: "ANSIC s", 30 in: `{"a":{"timestamp": "1638253518", "second":2},"age":47}`, 31 pl: ` 32 json(_, a.timestamp) 33 datetime(a.timestamp, 's', 'ANSIC') 34 `, 35 outkey: "a.timestamp", 36 expect: "Tue Nov 30 14:25:18 2021", 37 }, 38 { 39 name: "ANSIC ms", 40 in: `{"a":{"timestamp": "1638253518000", "second":2},"age":47}`, 41 pl: ` 42 json(_, a.timestamp) 43 datetime(a.timestamp, 'ms', 'ANSIC') 44 `, 45 outkey: "a.timestamp", 46 expect: "Tue Nov 30 14:25:18 2021", 47 }, 48 { 49 name: "UnixDate s", 50 in: `{"a":{"timestamp": "1638253518", "second":2},"age":47}`, 51 pl: ` 52 json(_, a.timestamp) 53 datetime(a.timestamp, 's', 'UnixDate') 54 `, 55 outkey: "a.timestamp", 56 expect: "Tue Nov 30 14:25:18 CST 2021", 57 }, 58 { 59 name: "UnixDate ms", 60 in: `{"a":{"timestamp": "1638253518999", "second":2},"age":47}`, 61 pl: ` 62 json(_, a.timestamp) 63 datetime(a.timestamp, 'ms', 'UnixDate') 64 `, 65 outkey: "a.timestamp", 66 expect: "Tue Nov 30 14:25:18 CST 2021", 67 }, 68 { 69 name: "RubyDate ms", 70 in: `{"a":{"timestamp": "1638253518999", "second":2},"age":47}`, 71 pl: ` 72 json(_, a.timestamp) 73 datetime(a.timestamp, 'ms', 'RubyDate') 74 `, 75 outkey: "a.timestamp", 76 expect: "Tue Nov 30 14:25:18 +0800 2021", 77 }, 78 { 79 name: "RubyDate s", 80 in: `{"a":{"timestamp": "1638253518", "second":2},"age":47}`, 81 pl: ` 82 json(_, a.timestamp) 83 datetime(a.timestamp, 's', 'RubyDate') 84 `, 85 outkey: "a.timestamp", 86 expect: "Tue Nov 30 14:25:18 +0800 2021", 87 }, 88 { 89 name: "RFC822 ms", 90 in: `{"a":{"timestamp": "1638253518999", "second":2},"age":47}`, 91 pl: ` 92 json(_, a.timestamp) 93 datetime(a.timestamp, 'ms', 'RFC822') 94 `, 95 outkey: "a.timestamp", 96 expect: "30 Nov 21 14:25 CST", 97 }, 98 { 99 name: "RFC822 s", 100 in: `{"a":{"timestamp": "1638253518", "second":2},"age":47}`, 101 pl: ` 102 json(_, a.timestamp) 103 datetime(a.timestamp, 's', 'RFC822') 104 `, 105 outkey: "a.timestamp", 106 expect: "30 Nov 21 14:25 CST", 107 }, 108 { 109 name: "RFC822Z ms", 110 in: `{"a":{"timestamp": "1638253518999", "second":2},"age":47}`, 111 pl: ` 112 json(_, a.timestamp) 113 datetime(a.timestamp, 'ms', 'RFC822Z') 114 `, 115 outkey: "a.timestamp", 116 expect: "30 Nov 21 14:25 +0800", 117 }, 118 { 119 name: "RFC822Z s", 120 in: `{"a":{"timestamp": "1638253518", "second":2},"age":47}`, 121 pl: ` 122 json(_, a.timestamp) 123 datetime(a.timestamp, 's', 'RFC822Z') 124 `, 125 outkey: "a.timestamp", 126 expect: "30 Nov 21 14:25 +0800", 127 }, 128 { 129 name: "RFC850 ms", 130 in: `{"a":{"timestamp": "1638253518999", "second":2},"age":47}`, 131 pl: ` 132 json(_, a.timestamp) 133 datetime(a.timestamp, 'ms', 'RFC850') 134 `, 135 outkey: "a.timestamp", 136 expect: "Tuesday, 30-Nov-21 14:25:18 CST", 137 }, 138 { 139 name: "RFC850 s", 140 in: `{"a":{"timestamp": "1638253518", "second":2},"age":47}`, 141 pl: ` 142 json(_, a.timestamp) 143 datetime(a.timestamp, 's', 'RFC850') 144 `, 145 outkey: "a.timestamp", 146 expect: "Tuesday, 30-Nov-21 14:25:18 CST", 147 }, 148 { 149 name: "RFC1123 ms", 150 in: `{"a":{"timestamp": "1638253518999", "second":2},"age":47}`, 151 pl: ` 152 json(_, a.timestamp) 153 datetime(a.timestamp, 'ms', 'RFC1123') 154 `, 155 outkey: "a.timestamp", 156 expect: "Tue, 30 Nov 2021 14:25:18 CST", 157 }, 158 { 159 name: "RFC1123 s", 160 in: `{"a":{"timestamp": "1638253518", "second":2},"age":47}`, 161 pl: ` 162 json(_, a.timestamp) 163 datetime(a.timestamp, 's', 'RFC1123') 164 `, 165 outkey: "a.timestamp", 166 expect: "Tue, 30 Nov 2021 14:25:18 CST", 167 }, 168 { 169 name: "RFC1123Z ms", 170 in: `{"a":{"timestamp": "1638253518999", "second":2},"age":47}`, 171 pl: ` 172 json(_, a.timestamp) 173 datetime(a.timestamp, 'ms', 'RFC1123Z') 174 `, 175 outkey: "a.timestamp", 176 expect: "Tue, 30 Nov 2021 14:25:18 +0800", 177 }, 178 { 179 name: "RFC1123Z s", 180 in: `{"a":{"timestamp": "1638253518", "second":2},"age":47}`, 181 pl: ` 182 json(_, a.timestamp) 183 datetime(a.timestamp, 's', 'RFC1123Z') 184 `, 185 outkey: "a.timestamp", 186 expect: "Tue, 30 Nov 2021 14:25:18 +0800", 187 }, 188 { 189 name: "RFC3339 s", 190 in: `{"a":{"timestamp": "1610960605", "second":2},"age":47}`, 191 pl: ` 192 json(_, a.timestamp) 193 datetime(a.timestamp, 's', 'RFC3339') 194 `, 195 outkey: "a.timestamp", 196 expect: "2021-01-18T17:03:25+08:00", 197 }, 198 { 199 name: "RFC3339 ms", 200 in: `{"a":{"timestamp": "1610960605000", "second":2},"age":47}`, 201 pl: ` 202 json(_, a.timestamp) 203 datetime(a.timestamp, 'ms', 'RFC3339') 204 `, 205 outkey: "a.timestamp", 206 expect: "2021-01-18T17:03:25+08:00", 207 }, 208 { 209 name: "RFC3339Nano s", 210 in: `{"a":{"timestamp": "1610960605", "second":2},"age":47}`, 211 pl: ` 212 json(_, a.timestamp) 213 datetime(a.timestamp, 's', 'RFC3339Nano') 214 `, 215 outkey: "a.timestamp", 216 expect: "2021-01-18T17:03:25+08:00", 217 }, 218 { 219 name: "RFC3339Nano ms", 220 in: `{"a":{"timestamp": "1610960605001", "second":2},"age":47}`, 221 pl: ` 222 json(_, a.timestamp) 223 datetime(a.timestamp, 'ms', 'RFC3339Nano') 224 `, 225 outkey: "a.timestamp", 226 expect: "2021-01-18T17:03:25.001+08:00", 227 }, 228 { 229 name: "Kitchen ms", 230 in: `{"a":{"timestamp": "1610960605001", "second":2},"age":47}`, 231 pl: ` 232 json(_, a.timestamp) 233 datetime(a.timestamp, 'ms', 'Kitchen') 234 `, 235 outkey: "a.timestamp", 236 expect: "5:03PM", 237 }, 238 { 239 name: "Kitchen s", 240 in: `{"a":{"timestamp": "1610960605", "second":2},"age":47}`, 241 pl: ` 242 json(_, a.timestamp) 243 datetime(a.timestamp, 's', 'Kitchen') 244 `, 245 outkey: "a.timestamp", 246 expect: "5:03PM", 247 }, 248 { 249 name: "udef_ms", 250 in: `{"a":{"timestamp": "1610960605000", "second":2},"age":47}`, 251 pl: ` 252 json(_, a.timestamp) 253 datetime(a.timestamp, 'ms', '%Y-%m-%d') 254 `, 255 outkey: "a.timestamp", 256 expect: "2021-01-18", 257 }, 258 { 259 name: "udef_us", 260 in: `{"a":{"timestamp": "1610960605000000", "second":2},"age":47}`, 261 pl: ` 262 json(_, a.timestamp) 263 datetime(a.timestamp, 'us', '%Y-%m-%d %H:%M:%S') 264 `, 265 outkey: "a.timestamp", 266 expect: "2021-01-18 17:03:25", 267 }, 268 { 269 name: "udef_ns", 270 in: `{"a":{"timestamp": "1610960605000000000", "second":2},"age":47}`, 271 pl: ` 272 json(_, a.timestamp) 273 datetime(a.timestamp, 'ns', '%Y-%m-%d %H:%M:%S') 274 `, 275 outkey: "a.timestamp", 276 expect: "2021-01-18 17:03:25", 277 }, 278 { 279 name: "udef_ns_tz_1", 280 in: `{"a":{"timestamp": "1610960605000000000", "second":2},"age":47}`, 281 pl: ` 282 json(_, a.timestamp) 283 datetime(a.timestamp, 'ns', '%Y-%m-%d %H:%M:%S', tz="Asia/Tokyo") 284 `, 285 outkey: "a.timestamp", 286 expect: "2021-01-18 18:03:25", 287 }, 288 { 289 name: "udef_ns_tz_2", 290 in: `{"a":{"timestamp": 1610960605000000000, "second":2},"age":47}`, 291 pl: ` 292 json(_, a.timestamp) 293 datetime(a.timestamp, 'ns', fmt='%Y-%m-%d %H:%M:%S', tz="UTC") 294 `, 295 outkey: "a.timestamp", 296 expect: "2021-01-18 09:03:25", 297 }, 298 } 299 300 for idx, tc := range cases { 301 t.Run(tc.name, func(t *testing.T) { 302 runner, err := NewTestingRunner(tc.pl) 303 if tc.fail && err == nil { 304 t.Error("unknown error") 305 } 306 if err != nil { 307 if tc.fail { 308 t.Logf("[%d]expect error: %s", idx, err) 309 } else { 310 t.Errorf("[%d] failed: %s", idx, err) 311 } 312 return 313 } 314 pt := ptinput.NewPlPoint( 315 point.Logging, "test", nil, map[string]any{"message": tc.in}, time.Now()) 316 errR := runScript(runner, pt) 317 318 if errR != nil { 319 t.Fatal(errR) 320 } 321 322 if tc.fail { 323 t.Logf("[%d]expect error: %s", idx, err) 324 } 325 v, _, _ := pt.Get(tc.outkey) 326 tu.Equals(t, tc.expect, v) 327 t.Logf("[%d] PASS", idx) 328 }) 329 } 330 }