| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- package timeutil
- import (
- "testing"
- "time"
- )
- func Test_DurationString(t *testing.T) {
- testCases := map[string]struct {
- duration time.Duration
- expectedDuration string
- }{
- "1a": {
- duration: 0,
- expectedDuration: "",
- },
- "1b": {
- duration: 24 * time.Hour,
- expectedDuration: "1d",
- },
- "1c": {
- duration: 24*time.Hour + 5*time.Minute,
- expectedDuration: "1445m",
- },
- "1d": {
- duration: 25 * time.Hour,
- expectedDuration: "25h",
- },
- "1e": {
- duration: 25 * time.Hour,
- expectedDuration: "25h",
- },
- "1f": {
- duration: 72 * time.Hour,
- expectedDuration: "3d",
- },
- "1g": {
- duration: 25 * time.Hour,
- expectedDuration: "25h",
- },
- "1h": {
- duration: 24*time.Hour + time.Second,
- expectedDuration: "86401s",
- },
- // Expect empty strings if durations are negative
- "1i": {
- duration: -25 * time.Hour,
- expectedDuration: "",
- },
- }
- for name, test := range testCases {
- t.Run(name, func(t *testing.T) {
- dur := DurationString(test.duration)
- if dur != test.expectedDuration {
- t.Fatalf("DurationOffsetStrings: exp (%s); act (%s)", test.expectedDuration, dur)
- }
- })
- }
- }
- func Test_DurationToPromOffsetString(t *testing.T) {
- testCases := map[string]struct {
- duration time.Duration
- expectedDuration string
- }{
- "1a": {
- duration: 0,
- expectedDuration: "",
- },
- "1b": {
- duration: 24 * time.Hour,
- expectedDuration: "offset 1d",
- },
- "1c": {
- duration: 24*time.Hour + 5*time.Minute,
- expectedDuration: "offset 1445m",
- },
- "1d": {
- duration: 25 * time.Hour,
- expectedDuration: "offset 25h",
- },
- "1e": {
- duration: 25 * time.Hour,
- expectedDuration: "offset 25h",
- },
- "1f": {
- duration: 72 * time.Hour,
- expectedDuration: "offset 3d",
- },
- "1g": {
- duration: 25 * time.Hour,
- expectedDuration: "offset 25h",
- },
- "1h": {
- duration: 24*time.Hour + time.Second,
- expectedDuration: "offset 86401s",
- },
- // Expect empty strings if durations are negative
- "1i": {
- duration: -25 * time.Hour,
- expectedDuration: "",
- },
- }
- for name, test := range testCases {
- t.Run(name, func(t *testing.T) {
- dur := DurationToPromOffsetString(test.duration)
- if dur != test.expectedDuration {
- t.Fatalf("DurationOffsetStrings: exp (%s); act (%s)", test.expectedDuration, dur)
- }
- })
- }
- }
- func Test_FormatStoreResolution(t *testing.T) {
- testCases := map[string]struct {
- duration time.Duration
- expectedDuration string
- }{
- "1a": {
- duration: 0,
- expectedDuration: "0s",
- },
- "1b": {
- duration: 24 * time.Hour,
- expectedDuration: "1d",
- },
- "1c": {
- duration: 24*time.Hour + 5*time.Minute,
- expectedDuration: "1d",
- },
- "1d": {
- duration: 25 * time.Hour,
- expectedDuration: "1d",
- },
- "1e": {
- duration: 25 * time.Hour,
- expectedDuration: "1d",
- },
- "1f": {
- duration: 72 * time.Hour,
- expectedDuration: "3d",
- },
- "1g": {
- duration: 25 * time.Hour,
- expectedDuration: "1d",
- },
- "1h": {
- duration: 24*time.Hour + time.Second,
- expectedDuration: "1d",
- },
- // Expect empty strings if durations are negative
- "1i": {
- duration: -25 * time.Hour,
- expectedDuration: "-25h0m0s",
- },
- }
- for name, test := range testCases {
- t.Run(name, func(t *testing.T) {
- dur := FormatStoreResolution(test.duration)
- if dur != test.expectedDuration {
- t.Fatalf("DurationOffsetStrings: exp (%s); act (%s)", test.expectedDuration, dur)
- }
- })
- }
- }
- func Test_DurationOffsetStrings(t *testing.T) {
- testCases := map[string]struct {
- duration time.Duration
- offset time.Duration
- expectedDuration string
- expectedOffset string
- }{
- "1a": {
- duration: 0,
- offset: 0,
- expectedDuration: "",
- expectedOffset: "",
- },
- "1b": {
- duration: 24 * time.Hour,
- offset: 0,
- expectedDuration: "1d",
- expectedOffset: "",
- },
- "1c": {
- duration: 24*time.Hour + 5*time.Minute,
- offset: 0,
- expectedDuration: "1445m",
- expectedOffset: "",
- },
- "1d": {
- duration: 25 * time.Hour,
- offset: 5 * time.Minute,
- expectedDuration: "25h",
- expectedOffset: "5m",
- },
- "1e": {
- duration: 25 * time.Hour,
- offset: 60 * time.Minute,
- expectedDuration: "25h",
- expectedOffset: "1h",
- },
- "1f": {
- duration: 72 * time.Hour,
- offset: 1440 * time.Minute,
- expectedDuration: "3d",
- expectedOffset: "1d",
- },
- "1g": {
- duration: 25 * time.Hour,
- offset: 1 * time.Second,
- expectedDuration: "25h",
- expectedOffset: "1s",
- },
- "1h": {
- duration: 24*time.Hour + time.Second,
- offset: 1 * time.Second,
- expectedDuration: "86401s",
- expectedOffset: "1s",
- },
- // Expect empty strings if durations are negative
- "1i": {
- duration: -25 * time.Hour,
- offset: -1 * time.Second,
- expectedDuration: "",
- expectedOffset: "",
- },
- }
- for name, test := range testCases {
- t.Run(name, func(t *testing.T) {
- dur, off := DurationOffsetStrings(test.duration, test.offset)
- if dur != test.expectedDuration || off != test.expectedOffset {
- t.Fatalf("DurationOffsetStrings: exp (%s %s); act (%s, %s)", test.expectedDuration, test.expectedOffset, dur, off)
- }
- })
- }
- }
- func Test_ParseDuration(t *testing.T) {
- testCases := map[string]struct {
- input string
- expected time.Duration
- }{
- "expected": {
- input: "3h",
- expected: time.Hour * 3,
- },
- "white space": {
- input: " 4s ",
- expected: time.Second * 4,
- },
- "prom prefix": {
- input: "offset 3m",
- expected: time.Minute * 3,
- },
- "prom prefix white space": {
- input: " offset 3d ",
- expected: 24.0 * time.Hour * 3,
- },
- "ms duration": {
- input: "100ms",
- expected: 100 * time.Millisecond,
- },
- "complex duration": {
- input: "2d3h14m2s",
- expected: (24 * time.Hour * 2) + (3 * time.Hour) + (14 * time.Minute) + (2 * time.Second),
- },
- "negative duration": {
- input: "-2d",
- expected: -48 * time.Hour,
- },
- "zero": {
- input: "0h",
- expected: time.Duration(0),
- },
- "empty": {
- input: "",
- expected: time.Duration(0),
- },
- "bad string": {
- input: "oqwd3dk5hk",
- expected: time.Duration(0),
- },
- "digit": {
- input: "3",
- expected: time.Duration(0),
- },
- "unit": {
- input: "h",
- expected: time.Duration(0),
- },
- }
- for name, test := range testCases {
- t.Run(name, func(t *testing.T) {
- dur, _ := ParseDuration(test.input)
- if dur != test.expected {
- t.Errorf("Expected duration %v did not match result %v", test.expected, dur)
- }
- })
- }
- }
- func Test_CleanDurationString(t *testing.T) {
- testCases := map[string]struct {
- input string
- expected string
- }{
- "white space": {
- input: " 1d ",
- expected: "1d",
- },
- "no change": {
- input: "1d",
- expected: "1d",
- },
- "prefix": {
- input: "offset 1d",
- expected: "1d",
- },
- "prefix white space": {
- input: " offset 1d ",
- expected: "1d",
- },
- "empty": {
- input: "",
- expected: "",
- },
- "random": {
- input: "oqwd3dk5hk",
- expected: "oqwd3dk5hk",
- },
- }
- for name, test := range testCases {
- t.Run(name, func(t *testing.T) {
- res := CleanDurationString(test.input)
- if res != test.expected {
- t.Errorf("Expected output %s did not match result %s", test.expected, res)
- }
- })
- }
- }
- func Test_FormatDurationStringDaysToHours(t *testing.T) {
- testCases := map[string]struct {
- input string
- expected string
- }{
- "1 day": {
- input: "1d",
- expected: "24h",
- },
- "2 days": {
- input: "1d",
- expected: "24h",
- },
- "500 days": {
- input: "500d",
- expected: "12000h",
- },
- "1h": {
- input: "1h",
- expected: "1h",
- },
- "empty": {
- input: "",
- expected: "",
- },
- "no unit": {
- input: "1",
- expected: "1",
- },
- "random": {
- input: "oqwd3dk5hk",
- expected: "oqwd3dk5hk",
- },
- }
- for name, test := range testCases {
- t.Run(name, func(t *testing.T) {
- res, _ := FormatDurationStringDaysToHours(test.input)
- if res != test.expected {
- t.Errorf("Expected output %s did not match result %s", test.expected, res)
- }
- })
- }
- }
|