coder/cryptorand/slices_test.go

57 lines
1.3 KiB
Go

package cryptorand_test
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/coder/coder/v2/cryptorand"
)
func TestRandomElement(t *testing.T) {
t.Parallel()
t.Run("Empty", func(t *testing.T) {
t.Parallel()
s := []string{}
v, err := cryptorand.Element(s)
require.Error(t, err)
require.ErrorContains(t, err, "slice must have at least one element")
require.Empty(t, v)
})
t.Run("OK", func(t *testing.T) {
t.Parallel()
// Generate random slices of ints and strings
var (
ints = make([]int, 20)
strings = make([]string, 20)
)
for i := range ints {
v, err := cryptorand.Intn(1024)
require.NoError(t, err, "generate random int for test slice")
ints[i] = v
}
for i := range strings {
v, err := cryptorand.String(10)
require.NoError(t, err, "generate random string for test slice")
strings[i] = v
}
// Get a random value from each 20 times.
for i := 0; i < 20; i++ {
iv, err := cryptorand.Element(ints)
require.NoError(t, err, "unexpected error from Element(ints)")
t.Logf("random int slice element: %v", iv)
require.Contains(t, ints, iv)
sv, err := cryptorand.Element(strings)
require.NoError(t, err, "unexpected error from Element(strings)")
t.Logf("random string slice element: %v", sv)
require.Contains(t, strings, sv)
}
})
}