@@ -14,7 +14,7 @@ import (
1414 "github.com/ThreeDotsLabs/watermill/message"
1515)
1616
17- func TestDelayedRequeuer (t * testing.T ) {
17+ func TestPostgreSQLDelayedRequeuer (t * testing.T ) {
1818 t .Parallel ()
1919
2020 db := newPostgreSQL (t )
@@ -81,3 +81,72 @@ func TestDelayedRequeuer(t *testing.T) {
8181 assert .Equal (t , []string {"1" , "3" }, receivedMessages )
8282 }, 1 * time .Second , 100 * time .Millisecond )
8383}
84+
85+ func TestMySQLDelayedRequeuer (t * testing.T ) {
86+ t .Parallel ()
87+
88+ db := newMySQL (t )
89+ schemaAdapter := sql.DefaultMySQLSchema {}
90+ offsetsAdapter := sql.DefaultMySQLOffsetsAdapter {}
91+ publisher , subscriber := newPubSub (t , db , "test" , schemaAdapter , offsetsAdapter )
92+
93+ topic := watermill .NewUUID ()
94+
95+ err := subscriber .(message.SubscribeInitializer ).SubscribeInitialize (topic )
96+ require .NoError (t , err )
97+
98+ delayedRequeuer , err := sql .NewMySQLDelayedRequeuer (sql.DelayedRequeuerConfig {
99+ DB : db ,
100+ RequeueTopic : watermill .NewUUID (),
101+ Publisher : publisher ,
102+ Logger : logger ,
103+ })
104+ require .NoError (t , err )
105+
106+ router := message .NewDefaultRouter (logger )
107+ router .AddMiddleware (delayedRequeuer .Middleware ()... )
108+
109+ var receivedMessages []string
110+
111+ router .AddNoPublisherHandler (
112+ "test" ,
113+ topic ,
114+ subscriber ,
115+ func (msg * message.Message ) error {
116+ payload := string (msg .Payload )
117+ // MySQL and PostgreSQL format JSON with spaces, so we need to check both variants
118+ if payload == `{"error":true}` || payload == `{"error": true}` {
119+ return fmt .Errorf ("error" )
120+ }
121+
122+ receivedMessages = append (receivedMessages , msg .UUID )
123+
124+ return nil
125+ },
126+ )
127+
128+ go func () {
129+ err := router .Run (context .Background ())
130+ require .NoError (t , err )
131+ }()
132+
133+ <- router .Running ()
134+
135+ go func () {
136+ err := delayedRequeuer .Run (context .Background ())
137+ require .NoError (t , err )
138+ }()
139+
140+ err = publisher .Publish (topic , message .NewMessage ("1" , []byte (`{}` )))
141+ require .NoError (t , err )
142+
143+ err = publisher .Publish (topic , message .NewMessage ("2" , []byte (`{"error":true}` )))
144+ require .NoError (t , err )
145+
146+ err = publisher .Publish (topic , message .NewMessage ("3" , []byte (`{}` )))
147+ require .NoError (t , err )
148+
149+ assert .EventuallyWithT (t , func (t * assert.CollectT ) {
150+ assert .Equal (t , []string {"1" , "3" }, receivedMessages )
151+ }, 1 * time .Second , 100 * time .Millisecond )
152+ }
0 commit comments