github.com/orangenpresse/up@v0.6.0/internal/util/util_test.go (about) 1 package util 2 3 import ( 4 "os/exec" 5 "strings" 6 "testing" 7 "time" 8 9 "github.com/tj/assert" 10 ) 11 12 func TestExitStatus(t *testing.T) { 13 t.Run("success", func(t *testing.T) { 14 cmd := exec.Command("echo", "hello", "world") 15 code := ExitStatus(cmd, cmd.Run()) 16 assert.Equal(t, "0", code) 17 }) 18 19 t.Run("missing", func(t *testing.T) { 20 cmd := exec.Command("nope") 21 code := ExitStatus(cmd, cmd.Run()) 22 assert.Equal(t, "?", code) 23 }) 24 25 t.Run("failure", func(t *testing.T) { 26 cmd := exec.Command("sh", "-c", `echo hello && exit 5`) 27 code := ExitStatus(cmd, cmd.Run()) 28 assert.Equal(t, "5", code) 29 }) 30 } 31 32 func TestParseDuration(t *testing.T) { 33 t.Run("day", func(t *testing.T) { 34 v, err := ParseDuration("1d") 35 assert.NoError(t, err, "parsing") 36 assert.Equal(t, time.Hour*24, v) 37 }) 38 39 t.Run("day with faction", func(t *testing.T) { 40 v, err := ParseDuration("1.5d") 41 assert.NoError(t, err, "parsing") 42 assert.Equal(t, time.Duration(float64(time.Hour*24)*1.5), v) 43 }) 44 45 t.Run("week", func(t *testing.T) { 46 v, err := ParseDuration("1w") 47 assert.NoError(t, err, "parsing") 48 assert.Equal(t, time.Hour*24*7, v) 49 50 v, err = ParseDuration("2w") 51 assert.NoError(t, err, "parsing") 52 assert.Equal(t, time.Hour*24*7*2, v) 53 }) 54 55 t.Run("month", func(t *testing.T) { 56 v, err := ParseDuration("1mo") 57 assert.NoError(t, err, "parsing") 58 assert.Equal(t, time.Hour*24*30, v) 59 60 v, err = ParseDuration("1M") 61 assert.NoError(t, err, "parsing") 62 assert.Equal(t, time.Hour*24*30, v) 63 }) 64 65 t.Run("month with faction", func(t *testing.T) { 66 v, err := ParseDuration("1.5mo") 67 assert.NoError(t, err, "parsing") 68 assert.Equal(t, time.Duration(float64(time.Hour*24*30)*1.5), v) 69 }) 70 71 t.Run("default", func(t *testing.T) { 72 v, err := ParseDuration("15m") 73 assert.NoError(t, err, "parsing") 74 assert.Equal(t, 15*time.Minute, v) 75 }) 76 } 77 78 func TestDomain(t *testing.T) { 79 assert.Equal(t, "example.com", Domain("example.com")) 80 assert.Equal(t, "example.com", Domain("api.example.com")) 81 assert.Equal(t, "example.com", Domain("v1.api.example.com")) 82 83 assert.Equal(t, "example.co.uk", Domain("example.co.uk")) 84 assert.Equal(t, "example.co.uk", Domain("api.example.co.uk")) 85 assert.Equal(t, "example.co.uk", Domain("v1.api.example.co.uk")) 86 } 87 88 func TestCertDomainNames(t *testing.T) { 89 assert.Equal(t, []string{"example.com", "*.example.com"}, CertDomainNames("example.com")) 90 assert.Equal(t, []string{"example.com", "*.example.com"}, CertDomainNames("api.example.com")) 91 assert.Equal(t, []string{"api.example.com", "*.api.example.com"}, CertDomainNames("v1.api.example.com")) 92 } 93 94 func TestWildcardMatches(t *testing.T) { 95 assert.True(t, WildcardMatches("*.api.example.com", "v1.api.example.com")) 96 assert.True(t, WildcardMatches("*.example.com", "api.example.com")) 97 assert.False(t, WildcardMatches("example.com", "api.example.com")) 98 assert.False(t, WildcardMatches("*.api.example.com", "api.example.com")) 99 } 100 101 func TestParseSections(t *testing.T) { 102 r := strings.NewReader(`[personal] 103 aws_access_key_id = personal_key 104 aws_secret_access_key = personal_secret 105 [app] 106 aws_access_key_id = app_key 107 aws_secret_access_key = app_secret 108 [foo_bar] 109 aws_access_key_id = foo_bar_key 110 aws_secret_access_key = foo_bar_secret 111 `) 112 113 v, err := ParseSections(r) 114 assert.NoError(t, err) 115 116 assert.Equal(t, []string{"personal", "app", "foo_bar"}, v) 117 } 118 119 func TestEncodeAlias(t *testing.T) { 120 assert.Equal(t, `commit-v1_2_3-beta`, EncodeAlias(`v1.2.3-beta`)) 121 } 122 123 func TestDecodeAlias(t *testing.T) { 124 assert.Equal(t, `v1.2.3-beta`, DecodeAlias(EncodeAlias(`v1.2.3-beta`))) 125 }