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 }