package cryptorand_test import ( "crypto/rand" "io" "testing" "testing/iotest" "github.com/stretchr/testify/require" "github.com/coder/coder/v2/cryptorand" ) // TestRandError checks that the code handles errors when reading from // the rand.Reader. // // This test replaces the global rand.Reader, so cannot be parallelized // //nolint:paralleltest func TestRandError(t *testing.T) { origReader := rand.Reader t.Cleanup(func() { rand.Reader = origReader }) rand.Reader = iotest.ErrReader(io.ErrShortBuffer) t.Run("Int63", func(t *testing.T) { _, err := cryptorand.Int63() require.ErrorIs(t, err, io.ErrShortBuffer, "expected Int63 error") }) t.Run("Intn_32bit", func(t *testing.T) { _, err := cryptorand.Intn(100) require.ErrorIs(t, err, io.ErrShortBuffer, "expected Intn error") }) t.Run("Intn_64bit", func(t *testing.T) { _, err := cryptorand.Intn(int(1 << 35)) require.ErrorIs(t, err, io.ErrShortBuffer, "expected Intn error") }) t.Run("Float64", func(t *testing.T) { _, err := cryptorand.Float64() require.ErrorIs(t, err, io.ErrShortBuffer, "expected Float64 error") }) t.Run("StringCharset", func(t *testing.T) { _, err := cryptorand.HexString(10) require.ErrorIs(t, err, io.ErrShortBuffer, "expected HexString error") }) }