github.com/apex/up@v1.7.1/internal/util/util_test.go (about) 1 package util 2 3 import ( 4 "net/http" 5 "os/exec" 6 "strings" 7 "testing" 8 "time" 9 10 "github.com/tj/assert" 11 ) 12 13 func TestExitStatus(t *testing.T) { 14 t.Run("success", func(t *testing.T) { 15 cmd := exec.Command("echo", "hello", "world") 16 code := ExitStatus(cmd, cmd.Run()) 17 assert.Equal(t, "0", code) 18 }) 19 20 t.Run("missing", func(t *testing.T) { 21 cmd := exec.Command("nope") 22 code := ExitStatus(cmd, cmd.Run()) 23 assert.Equal(t, "?", code) 24 }) 25 26 t.Run("failure", func(t *testing.T) { 27 cmd := exec.Command("sh", "-c", `echo hello && exit 5`) 28 code := ExitStatus(cmd, cmd.Run()) 29 assert.Equal(t, "5", code) 30 }) 31 } 32 33 func TestParseDuration(t *testing.T) { 34 t.Run("day", func(t *testing.T) { 35 v, err := ParseDuration("1d") 36 assert.NoError(t, err, "parsing") 37 assert.Equal(t, time.Hour*24, v) 38 }) 39 40 t.Run("day with faction", func(t *testing.T) { 41 v, err := ParseDuration("1.5d") 42 assert.NoError(t, err, "parsing") 43 assert.Equal(t, time.Duration(float64(time.Hour*24)*1.5), v) 44 }) 45 46 t.Run("week", func(t *testing.T) { 47 v, err := ParseDuration("1w") 48 assert.NoError(t, err, "parsing") 49 assert.Equal(t, time.Hour*24*7, v) 50 51 v, err = ParseDuration("2w") 52 assert.NoError(t, err, "parsing") 53 assert.Equal(t, time.Hour*24*7*2, v) 54 }) 55 56 t.Run("month", func(t *testing.T) { 57 v, err := ParseDuration("1mo") 58 assert.NoError(t, err, "parsing") 59 assert.Equal(t, time.Hour*24*30, v) 60 61 v, err = ParseDuration("1M") 62 assert.NoError(t, err, "parsing") 63 assert.Equal(t, time.Hour*24*30, v) 64 }) 65 66 t.Run("month with faction", func(t *testing.T) { 67 v, err := ParseDuration("1.5mo") 68 assert.NoError(t, err, "parsing") 69 assert.Equal(t, time.Duration(float64(time.Hour*24*30)*1.5), v) 70 }) 71 72 t.Run("default", func(t *testing.T) { 73 v, err := ParseDuration("15m") 74 assert.NoError(t, err, "parsing") 75 assert.Equal(t, 15*time.Minute, v) 76 }) 77 } 78 79 func TestDomain(t *testing.T) { 80 assert.Equal(t, "example.com", Domain("example.com")) 81 assert.Equal(t, "example.com", Domain("api.example.com")) 82 assert.Equal(t, "example.com", Domain("v1.api.example.com")) 83 84 assert.Equal(t, "example.co.uk", Domain("example.co.uk")) 85 assert.Equal(t, "example.co.uk", Domain("api.example.co.uk")) 86 assert.Equal(t, "example.co.uk", Domain("v1.api.example.co.uk")) 87 } 88 89 func TestCertDomainNames(t *testing.T) { 90 assert.Equal(t, []string{"example.com", "*.example.com"}, CertDomainNames("example.com")) 91 assert.Equal(t, []string{"example.com", "*.example.com"}, CertDomainNames("api.example.com")) 92 assert.Equal(t, []string{"api.example.com", "*.api.example.com"}, CertDomainNames("v1.api.example.com")) 93 } 94 95 func TestWildcardMatches(t *testing.T) { 96 assert.True(t, WildcardMatches("*.api.example.com", "v1.api.example.com")) 97 assert.True(t, WildcardMatches("*.example.com", "api.example.com")) 98 assert.False(t, WildcardMatches("example.com", "api.example.com")) 99 assert.False(t, WildcardMatches("*.api.example.com", "api.example.com")) 100 } 101 102 func TestParseSections(t *testing.T) { 103 r := strings.NewReader(`[personal] 104 aws_access_key_id = personal_key 105 aws_secret_access_key = personal_secret 106 [app] 107 aws_access_key_id = app_key 108 aws_secret_access_key = app_secret 109 [foo_bar] 110 aws_access_key_id = foo_bar_key 111 aws_secret_access_key = foo_bar_secret 112 `) 113 114 v, err := ParseSections(r) 115 assert.NoError(t, err) 116 117 assert.Equal(t, []string{"personal", "app", "foo_bar"}, v) 118 } 119 120 func TestEncodeAlias(t *testing.T) { 121 assert.Equal(t, `commit-v1_2_3-beta`, EncodeAlias(`v1.2.3-beta`)) 122 } 123 124 func TestDecodeAlias(t *testing.T) { 125 assert.Equal(t, `v1.2.3-beta`, DecodeAlias(EncodeAlias(`v1.2.3-beta`))) 126 } 127 128 func TestFixMultipleSetCookie(t *testing.T) { 129 h := http.Header{} 130 h.Add("Set-Cookie", "first=tj") 131 h.Add("Set-Cookie", "last=holowaychuk") 132 h.Add("set-cookie", "pet=tobi") 133 FixMultipleSetCookie(h) 134 assert.Len(t, h, 3) 135 assert.Equal(t, []string{"last=holowaychuk"}, h["Set-cookie"]) 136 assert.Equal(t, []string{"pet=tobi"}, h["sEt-cookie"]) 137 assert.Equal(t, []string{"first=tj"}, h["set-cookie"]) 138 } 139 140 func TestBinaryCase(t *testing.T) { 141 var variations []string 142 143 // create variations 144 for i := 0; i < 50; i++ { 145 variations = append(variations, BinaryCase("set-cookie", i)) 146 } 147 148 // ensure none are malformed 149 for _, v := range variations { 150 assert.Equal(t, "set-cookie", strings.ToLower(v)) 151 } 152 153 // ensure none are duplicates 154 for i, a := range variations { 155 for j, b := range variations { 156 if i != j { 157 assert.NotEqual(t, a, b) 158 } 159 } 160 } 161 }