pkg/utils/utils_test.go
Rama master · réplica de lectura del repositorio original.
package utils
import (
"math/rand"
"os"
"sync"
"testing"
"github.com/stretchr/testify/assert"
)
func TestRandomString(t *testing.T) {
s1 := RandomString(10)
s2 := RandomString(20)
assert.Len(t, s1, 10)
assert.Len(t, s2, 20)
assert.NotEqual(t, s1, s2)
}
func TestRandomStringFast(t *testing.T) {
// Same seed produces reproducible results
rng1 := rand.New(rand.NewSource(42))
rng2 := rand.New(rand.NewSource(42))
s1 := RandomStringFast(rng1, 10)
s2 := RandomStringFast(rng1, 20)
s3 := RandomStringFast(rng2, 10)
s4 := RandomStringFast(rng2, 20)
assert.Len(t, s1, 10)
assert.Len(t, s2, 20)
assert.Equal(t, s1, s3)
assert.Equal(t, s2, s4)
}
func TestRandomStringConcurrentAccess(t *testing.T) {
n := 10000
var wg sync.WaitGroup
wg.Add(n)
ms := make(map[string]struct{})
var mu sync.Mutex
gotDup := false
for i := 0; i < n; i++ {
go func() {
s := RandomString(10)
defer wg.Done()
mu.Lock()
defer mu.Unlock()
if _, ok := ms[s]; ok {
gotDup = true
}
var q struct{}
ms[s] = q
}()
}
wg.Wait()
if gotDup {
t.Fatal("should be unique strings")
}
}
func TestStripPort(t *testing.T) {
d1 := StripPort("localhost")
assert.Equal(t, "localhost", d1)
d2 := StripPort("localhost:8080")
assert.Equal(t, "localhost", d2)
d3 := StripPort("localhost:8080:8081")
assert.Equal(t, "localhost:8080:8081", d3)
}
func TestSplitTrimString(t *testing.T) {
parts1 := SplitTrimString("", ",")
assert.EqualValues(t, []string{}, parts1)
parts2 := SplitTrimString("foo,bar,baz,", ",")
assert.EqualValues(t, []string{"foo", "bar", "baz"}, parts2)
parts3 := SplitTrimString(",,,,", ",")
assert.EqualValues(t, []string{}, parts3)
parts4 := SplitTrimString("foo ,, bar, baz ,", ",")
assert.EqualValues(t, []string{"foo", "bar", "baz"}, parts4)
parts5 := SplitTrimString(" ", ",")
assert.EqualValues(t, []string{}, parts5)
}
func TestFileExists(t *testing.T) {
exists, err := FileExists("/no/such/file")
assert.NoError(t, err)
assert.False(t, exists)
exists, err = FileExists("/etc/hosts")
assert.NoError(t, err)
assert.True(t, exists)
}
func TestAbsPath(t *testing.T) {
home, err := os.UserHomeDir()
assert.NoError(t, err)
assert.NotEmpty(t, home)
assert.Equal(t, home, AbsPath("~"))
foo := AbsPath("foo")
wd, _ := os.Getwd()
assert.Equal(t, wd+"/foo", foo)
bar := AbsPath("~/bar")
assert.Equal(t, home+"/bar", bar)
baz := AbsPath("$HOME/baz")
assert.Equal(t, home+"/baz", baz)
qux := AbsPath("/qux")
assert.Equal(t, "/qux", qux)
quux := AbsPath("////qux//quux/../quux")
assert.Equal(t, "/qux/quux", quux)
}