summaryrefslogtreecommitdiff
path: root/internal/paging/page_test.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-05-01 12:29:42 +0100
committerLibravatar GitHub <noreply@github.com>2024-05-01 13:29:42 +0200
commiteb61c783ed22f6bf3133487b39bd967b858e0998 (patch)
tree3fd636338e1624b065fb7541244605928d9eb386 /internal/paging/page_test.go
parent[bugfix] further paging mishaps (#2884) (diff)
downloadgotosocial-eb61c783ed22f6bf3133487b39bd967b858e0998.tar.xz
[bugfix] flaky paging test (#2888)
Diffstat (limited to 'internal/paging/page_test.go')
-rw-r--r--internal/paging/page_test.go73
1 files changed, 32 insertions, 41 deletions
diff --git a/internal/paging/page_test.go b/internal/paging/page_test.go
index 3046dfcdd..dcf727aec 100644
--- a/internal/paging/page_test.go
+++ b/internal/paging/page_test.go
@@ -20,16 +20,14 @@ package paging_test
import (
"math/rand"
"slices"
+ "strconv"
"testing"
"time"
- "github.com/oklog/ulid"
+ "github.com/stretchr/testify/assert"
"github.com/superseriousbusiness/gotosocial/internal/paging"
)
-// random reader according to current-time source seed.
-var randRd = rand.New(rand.NewSource(time.Now().Unix()))
-
type Case struct {
// Name is the test case name.
Name string
@@ -63,13 +61,9 @@ func TestPage(t *testing.T) {
// Page the input slice.
out := c.Page.Page(c.Input)
- // Log the results for case of error returns.
- t.Logf("%s\npage=%+v input=%v expect=%v output=%v", c.Name, c.Page, c.Input, c.Expect, out)
-
- // Check paged output is as expected.
- if !slices.Equal(out, c.Expect) {
- t.Error("unexpected paged output")
- }
+ // Check paged output is expected.
+ assert.Equal(t, c.Expect, out,
+ "input=%#v page=%v", c.Input, c.Page)
})
}
}
@@ -80,8 +74,7 @@ var cases = []Case{
slices.SortFunc(ids, ascending)
// Select random indices in slice.
- minIdx := randRd.Intn(len(ids))
- maxIdx := randRd.Intn(len(ids))
+ minIdx, maxIdx, _ := generateParams(len(ids))
// Select the boundaries.
minID := ids[minIdx]
@@ -104,9 +97,7 @@ var cases = []Case{
slices.SortFunc(ids, ascending)
// Select random parameters in slice.
- minIdx := randRd.Intn(len(ids))
- maxIdx := randRd.Intn(len(ids))
- limit := randRd.Intn(len(ids)) + 1
+ minIdx, maxIdx, limit := generateParams(len(ids))
// Select the boundaries.
minID := ids[minIdx]
@@ -116,12 +107,10 @@ var cases = []Case{
expect := slices.Clone(ids)
expect = cutLower(expect, minID)
expect = cutUpper(expect, maxID)
- slices.Reverse(expect)
-
- // Now limit the slice.
if limit < len(expect) {
expect = expect[:limit]
}
+ slices.Reverse(expect)
// Return page and expected IDs.
return ids, &paging.Page{
@@ -135,8 +124,7 @@ var cases = []Case{
slices.SortFunc(ids, ascending)
// Select random parameters in slice.
- minIdx := randRd.Intn(len(ids))
- maxIdx := randRd.Intn(len(ids))
+ minIdx, maxIdx, _ := generateParams(len(ids))
// Select the boundaries.
minID := ids[minIdx]
@@ -160,8 +148,7 @@ var cases = []Case{
slices.SortFunc(ids, descending)
// Select random indices in slice.
- sinceIdx := randRd.Intn(len(ids))
- maxIdx := randRd.Intn(len(ids))
+ sinceIdx, maxIdx, _ := generateParams(len(ids))
// Select the boundaries.
sinceID := ids[sinceIdx]
@@ -183,7 +170,7 @@ var cases = []Case{
slices.SortFunc(ids, descending)
// Select random indices in slice.
- maxIdx := randRd.Intn(len(ids))
+ _, maxIdx, _ := generateParams(len(ids))
// Select the boundaries.
maxID := ids[maxIdx]
@@ -202,7 +189,7 @@ var cases = []Case{
slices.SortFunc(ids, descending)
// Select random indices in slice.
- sinceIdx := randRd.Intn(len(ids))
+ sinceIdx, _, _ := generateParams(len(ids))
// Select the boundaries.
sinceID := ids[sinceIdx]
@@ -221,7 +208,7 @@ var cases = []Case{
slices.SortFunc(ids, ascending)
// Select random indices in slice.
- minIdx := randRd.Intn(len(ids))
+ minIdx, _, _ := generateParams(len(ids))
// Select the boundaries.
minID := ids[minIdx]
@@ -258,32 +245,34 @@ func cutUpper(in []string, bound string) []string {
return in
}
+// random reader according to current-time source seed.
+var randRd = rand.New(rand.NewSource(time.Now().Unix()))
+
+// generateParams ...
+func generateParams(n int) (minIdx int, maxIdx int, limit int) {
+ maxIdx = max(1, randRd.Intn(n))
+ minIdx = randRd.Intn(maxIdx)
+ limit = randRd.Intn(max(1, maxIdx-minIdx)) + 1
+ return
+}
+
// generateSlice generates a new slice of len containing ascending sorted slice.
func generateSlice(len int) []string {
- if len <= 0 {
+ if len <= 1 {
// minimum testable
// pageable amount
len = 2
}
- now := time.Now()
in := make([]string, len)
for i := 0; i < len; i++ {
- // Convert now to timestamp.
- t := ulid.Timestamp(now)
-
- // Create anew ulid for now.
- u := ulid.MustNew(t, randRd)
-
- // Add to slice.
- in[i] = u.String()
-
- // Bump now by 1 second.
- now = now.Add(time.Second)
+ in[i] = strconv.Itoa(i)
}
return in
}
-func ascending(a, b string) int {
+func ascending(sa, sb string) int {
+ a, _ := strconv.Atoi(sa)
+ b, _ := strconv.Atoi(sb)
if a > b {
return 1
} else if a < b {
@@ -292,7 +281,9 @@ func ascending(a, b string) int {
return 0
}
-func descending(a, b string) int {
+func descending(sa, sb string) int {
+ a, _ := strconv.Atoi(sa)
+ b, _ := strconv.Atoi(sb)
if a < b {
return 1
} else if a > b {