github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/pkg/utils/utils_test.go (about)

     1  package utils
     2  
     3  import (
     4  	"math/rand"
     5  	"os"
     6  	"sync"
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestRandomString(t *testing.T) {
    13  	rand.Seed(42)
    14  	s1 := RandomString(10)
    15  	s2 := RandomString(20)
    16  
    17  	rand.Seed(42)
    18  	s3 := RandomString(10)
    19  	s4 := RandomString(20)
    20  
    21  	assert.Len(t, s1, 10)
    22  	assert.Len(t, s2, 20)
    23  	assert.Len(t, s3, 10)
    24  	assert.Len(t, s4, 20)
    25  
    26  	assert.NotEqual(t, s1, s2)
    27  	assert.Equal(t, s1, s3)
    28  	assert.Equal(t, s2, s4)
    29  }
    30  
    31  func TestRandomStringConcurrentAccess(t *testing.T) {
    32  	n := 10000
    33  	var wg sync.WaitGroup
    34  	wg.Add(n)
    35  
    36  	ms := make(map[string]struct{})
    37  	var mu sync.Mutex
    38  
    39  	gotDup := false
    40  
    41  	for i := 0; i < n; i++ {
    42  		go func() {
    43  			s := RandomString(10)
    44  			defer wg.Done()
    45  			mu.Lock()
    46  			defer mu.Unlock()
    47  			if _, ok := ms[s]; ok {
    48  				gotDup = true
    49  			}
    50  			var q struct{}
    51  			ms[s] = q
    52  		}()
    53  	}
    54  	wg.Wait()
    55  
    56  	if gotDup {
    57  		t.Fatal("should be unique strings")
    58  	}
    59  }
    60  
    61  func TestStripPort(t *testing.T) {
    62  	d1 := StripPort("localhost")
    63  	assert.Equal(t, "localhost", d1)
    64  	d2 := StripPort("localhost:8080")
    65  	assert.Equal(t, "localhost", d2)
    66  	d3 := StripPort("localhost:8080:8081")
    67  	assert.Equal(t, "localhost:8080:8081", d3)
    68  }
    69  
    70  func TestSplitTrimString(t *testing.T) {
    71  	parts1 := SplitTrimString("", ",")
    72  	assert.EqualValues(t, []string{}, parts1)
    73  	parts2 := SplitTrimString("foo,bar,baz,", ",")
    74  	assert.EqualValues(t, []string{"foo", "bar", "baz"}, parts2)
    75  	parts3 := SplitTrimString(",,,,", ",")
    76  	assert.EqualValues(t, []string{}, parts3)
    77  	parts4 := SplitTrimString("foo  ,, bar,  baz  ,", ",")
    78  	assert.EqualValues(t, []string{"foo", "bar", "baz"}, parts4)
    79  	parts5 := SplitTrimString("    ", ",")
    80  	assert.EqualValues(t, []string{}, parts5)
    81  }
    82  
    83  func TestFileExists(t *testing.T) {
    84  	exists, err := FileExists("/no/such/file")
    85  	assert.NoError(t, err)
    86  	assert.False(t, exists)
    87  	exists, err = FileExists("/etc/hosts")
    88  	assert.NoError(t, err)
    89  	assert.True(t, exists)
    90  }
    91  
    92  func TestAbsPath(t *testing.T) {
    93  	home, err := os.UserHomeDir()
    94  	assert.NoError(t, err)
    95  	assert.NotEmpty(t, home)
    96  	assert.Equal(t, home, AbsPath("~"))
    97  	foo := AbsPath("foo")
    98  	wd, _ := os.Getwd()
    99  	assert.Equal(t, wd+"/foo", foo)
   100  	bar := AbsPath("~/bar")
   101  	assert.Equal(t, home+"/bar", bar)
   102  	baz := AbsPath("$HOME/baz")
   103  	assert.Equal(t, home+"/baz", baz)
   104  	qux := AbsPath("/qux")
   105  	assert.Equal(t, "/qux", qux)
   106  	quux := AbsPath("////qux//quux/../quux")
   107  	assert.Equal(t, "/qux/quux", quux)
   108  }