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  }