Skip to content

Commit

Permalink
Skip tests for broken rand.Reader on Go 1.24+.
Browse files Browse the repository at this point in the history
Tests involving broken rand.Reader are skipped for Go 1.24 and above due to upstream changes that prevent failures. A `getGoVersion` helper function is added to determine the runtime version, ensuring test compatibility and reducing false negatives. Reference: golang/go#66821.
  • Loading branch information
wneessen committed Feb 16, 2025
1 parent c9c8a3b commit a782051
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 0 deletions.
22 changes: 22 additions & 0 deletions helper_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package mail

import (
"runtime"
"strconv"
"strings"
"testing"
)

// getGoVersion returns the current Go runtime version as a float64. It fails the test if the version
// parsing encounters an error.
func getGoVersion(t *testing.T) float64 {
t.Helper()
version := runtime.Version()
version = version[2:]
version = version[:strings.LastIndex(version, ".")]
vernum, err := strconv.ParseFloat(version, 64)
if err != nil {
t.Fatalf("failed to parse Go version: %s", err)
}
return vernum
}
4 changes: 4 additions & 0 deletions msg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5925,6 +5925,10 @@ func TestMsg_WriteTo(t *testing.T) {
}
})
t.Run("WriteTo with S/MIME signing fails with broken rand.Reader", func(t *testing.T) {
version := getGoVersion(t)
if version >= 1.24 {
t.Skip("Go 1.24+ never fails on broken rand Reader. See: https://github.com/golang/go/issues/66821")
}
defaultRandReader := rand.Reader
t.Cleanup(func() { rand.Reader = defaultRandReader })
rand.Reader = &randReader{failon: 1}
Expand Down
4 changes: 4 additions & 0 deletions msgwriter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,10 @@ func TestMsgWriter_writeMsg(t *testing.T) {
}
})
t.Run("msgWriter fails on S/MIME signing with broken rand.Reader", func(t *testing.T) {
version := getGoVersion(t)
if version >= 1.24 {
t.Skip("Go 1.24+ never fails on broken rand Reader. See: https://github.com/golang/go/issues/66821")
}
defaultRandReader := rand.Reader
t.Cleanup(func() { rand.Reader = defaultRandReader })
rand.Reader = &randReader{failon: 1}
Expand Down
12 changes: 12 additions & 0 deletions random_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ func TestRandomStringSecure(t *testing.T) {
}
})
t.Run("randomStringSecure fails on broken rand Reader (first read)", func(t *testing.T) {
version := getGoVersion(t)
if version >= 1.24 {
t.Skip("Go 1.24+ never fails on broken rand Reader. See: https://github.com/golang/go/issues/66821")
}
defaultRandReader := rand.Reader
t.Cleanup(func() { rand.Reader = defaultRandReader })
rand.Reader = &randReader{failon: 1}
Expand All @@ -49,6 +53,10 @@ func TestRandomStringSecure(t *testing.T) {
}
})
t.Run("randomStringSecure fails on broken rand Reader (second read)", func(t *testing.T) {
version := getGoVersion(t)
if version >= 1.24 {
t.Skip("Go 1.24+ never fails on broken rand Reader. See: https://github.com/golang/go/issues/66821")
}
defaultRandReader := rand.Reader
t.Cleanup(func() { rand.Reader = defaultRandReader })
rand.Reader = &randReader{failon: 0}
Expand All @@ -69,6 +77,10 @@ func TestRandomBoundary(t *testing.T) {
}
})
t.Run("randomBoundary fails on broken rand Reader", func(t *testing.T) {
version := getGoVersion(t)
if version >= 1.24 {
t.Skip("Go 1.24+ never fails on broken rand Reader. See: https://github.com/golang/go/issues/66821")
}
defaultRandReader := rand.Reader
t.Cleanup(func() { rand.Reader = defaultRandReader })
rand.Reader = &randReader{failon: 1}
Expand Down

0 comments on commit a782051

Please sign in to comment.