Skip to content

Commit 1f79c54

Browse files
committed
fix flaky test: tasks of the same priority must be dequeued in the same order but might complete out of order.
1 parent d719794 commit 1f79c54

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

dbos/queues_test.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"fmt"
77
"os"
8+
"reflect"
89
"sync"
910
"sync/atomic"
1011
"testing"
@@ -1079,9 +1080,33 @@ func TestPriorityQueue(t *testing.T) {
10791080
}
10801081

10811082
mu.Lock()
1082-
expectedOrder := []int{0, 6, 7, 1, 2, 3, 4, 5}
1083-
assert.Equal(t, expectedOrder, wfPriorityList, "expected workflow execution order %v, got %v", expectedOrder, wfPriorityList)
1083+
// Check if the expected order is either {0, 6, 7, ...} or {0, 7, 6, ...}
1084+
// This is because while tasks are dequeued in order, they can run asynchronously
1085+
// and one could set a value in wfPriorityList before the other
1086+
expectedOrder1 := []int{0, 6, 7, 1, 2, 3, 4, 5}
1087+
expectedOrder2 := []int{0, 7, 6, 1, 2, 3, 4, 5}
1088+
1089+
validOrder := false
1090+
if reflect.DeepEqual(wfPriorityList, expectedOrder1) {
1091+
validOrder = true
1092+
} else if reflect.DeepEqual(wfPriorityList, expectedOrder2) {
1093+
validOrder = true
1094+
}
1095+
1096+
assert.True(t, validOrder, "expected workflow execution order to be either %v or %v, got %v",
1097+
expectedOrder1, expectedOrder2, wfPriorityList)
10841098
mu.Unlock()
10851099

1100+
// Verify that handle6 and handle7 workflows were dequeued in FIFO order
1101+
// by checking that their StartedAt time is in the correct order (6 is before 7)
1102+
status6, err := handle6.GetStatus()
1103+
require.NoError(t, err, "failed to get status for workflow 6")
1104+
status7, err := handle7.GetStatus()
1105+
require.NoError(t, err, "failed to get status for workflow 7")
1106+
1107+
assert.True(t, status6.StartedAt.Before(status7.StartedAt),
1108+
"expected workflow 6 to be dequeued before workflow 7, but got 6 started at %v and 7 started at %v",
1109+
status6.StartedAt, status7.StartedAt)
1110+
10861111
require.True(t, queueEntriesAreCleanedUp(dbosCtx), "expected queue entries to be cleaned up after priority queue test")
10871112
}

0 commit comments

Comments
 (0)