@@ -2,12 +2,15 @@ package redis
2
2
3
3
import (
4
4
"context"
5
+ "encoding/json"
6
+ "fmt"
5
7
"strings"
6
8
"testing"
7
9
"time"
8
10
9
11
"github.com/cschleiden/go-workflows/backend"
10
12
"github.com/cschleiden/go-workflows/backend/test"
13
+ "github.com/cschleiden/go-workflows/internal/history"
11
14
"github.com/cschleiden/go-workflows/log"
12
15
"github.com/go-redis/redis/v8"
13
16
)
@@ -26,7 +29,7 @@ func Benchmark_RedisBackend(b *testing.B) {
26
29
client := getClient ()
27
30
setup := getCreateBackend (client , true )
28
31
29
- test .SimpleWorkflowBenchmark (b , setup , func (b backend. Backend ) {
32
+ test .SimpleWorkflowBenchmark (b , setup , func (b test. TestBackend ) {
30
33
if err := b .(* redisBackend ).Close (); err != nil {
31
34
panic (err )
32
35
}
@@ -66,8 +69,8 @@ func getClient() redis.UniversalClient {
66
69
return client
67
70
}
68
71
69
- func getCreateBackend (client redis.UniversalClient , ignoreLog bool ) func () backend. Backend {
70
- return func () backend. Backend {
72
+ func getCreateBackend (client redis.UniversalClient , ignoreLog bool ) func () test. TestBackend {
73
+ return func () test. TestBackend {
71
74
// Flush database
72
75
if err := client .FlushDB (context .Background ()).Err (); err != nil {
73
76
panic (err )
@@ -125,3 +128,35 @@ func (nl *nullLogger) With(fields ...interface{}) log.Logger {
125
128
}
126
129
127
130
var _ log.Logger = (* nullLogger )(nil )
131
+
132
+ var _ test.TestBackend = (* redisBackend )(nil )
133
+
134
+ // GetFutureEvents
135
+ func (rb * redisBackend ) GetFutureEvents (ctx context.Context ) ([]history.Event , error ) {
136
+ r , err := rb .rdb .ZRangeByScore (ctx , futureEventsKey (), & redis.ZRangeBy {
137
+ Min : "-inf" ,
138
+ Max : "+inf" ,
139
+ }).Result ()
140
+
141
+ if err != nil {
142
+ return nil , fmt .Errorf ("getting future events: %w" , err )
143
+ }
144
+
145
+ events := make ([]history.Event , 0 )
146
+
147
+ for _ , eventID := range r {
148
+ eventStr , err := rb .rdb .HGet (ctx , eventID , "event" ).Result ()
149
+ if err != nil {
150
+ return nil , fmt .Errorf ("getting event %v: %w" , eventID , err )
151
+ }
152
+
153
+ var event history.Event
154
+ if err := json .Unmarshal ([]byte (eventStr ), & event ); err != nil {
155
+ return nil , fmt .Errorf ("unmarshaling event %v: %w" , eventID , err )
156
+ }
157
+
158
+ events = append (events , event )
159
+ }
160
+
161
+ return events , nil
162
+ }
0 commit comments