@@ -48,7 +48,7 @@ func TestNoop_Store(t *testing.T) {
4848func TestNoop_Query (t * testing.T ) {
4949 s := new (Noop )
5050 zero := time .Unix (0 , 0 )
51- r , err := s .Query (testMessage (1 , 2 , 3 ).Ssid (), zero , zero , 10 )
51+ r , err := s .Query (testMessage (1 , 2 , 3 ).Ssid (), zero , zero , nil , 10 )
5252 assert .NoError (t , err )
5353 for range r {
5454 t .Errorf ("Should be empty" )
@@ -81,7 +81,7 @@ func testOrder(t *testing.T, store Storage) {
8181
8282 // Issue a query
8383 zero := time .Unix (0 , 0 )
84- f , err := store .Query ([]uint32 {0 , 1 , 2 }, zero , zero , 5 )
84+ f , err := store .Query ([]uint32 {0 , 1 , 2 }, zero , zero , nil , 5 )
8585 assert .NoError (t , err )
8686
8787 assert .Len (t , f , 5 )
@@ -104,7 +104,7 @@ func testRetained(t *testing.T, store Storage) {
104104
105105 // Issue a query
106106 zero := time .Unix (0 , 0 )
107- f , err := store .Query ([]uint32 {0 , 1 , 2 }, zero , zero , 1 )
107+ f , err := store .Query ([]uint32 {0 , 1 , 2 }, zero , zero , nil , 1 )
108108 assert .NoError (t , err )
109109
110110 assert .Len (t , f , 1 )
@@ -127,7 +127,7 @@ func testRange(t *testing.T, store Storage) {
127127 }
128128
129129 // Issue a query
130- f , err := store .Query ([]uint32 {0 , 1 , 2 }, time .Unix (t0 , 0 ), time .Unix (t1 , 0 ), 5 )
130+ f , err := store .Query ([]uint32 {0 , 1 , 2 }, time .Unix (t0 , 0 ), time .Unix (t1 , 0 ), nil , 5 )
131131 assert .NoError (t , err )
132132
133133 assert .Len (t , f , 5 )
@@ -153,6 +153,37 @@ func Test_configUint32(t *testing.T) {
153153 assert .Equal (t , uint32 (99999999 ), v )
154154}
155155
156+ // Test the StartFromID option for pagination purposes.
157+ func testStartFromID (t * testing.T , store Storage ) {
158+ var fourth message.ID
159+ for i := int64 (0 ); i < 10 ; i ++ {
160+ payload := make ([]byte , 1 )
161+ payload [0 ] = byte (i )
162+ msg := message .New (message.Ssid {0 , 1 , 2 }, []byte ("a/b/c/" ), payload )
163+ msg .TTL = message .RetainedTTL
164+ msg .ID .SetTime (msg .ID .Time () + (i * 10000 ))
165+ assert .NoError (t , store .Store (msg ))
166+ if i == 4 {
167+ fourth = msg .ID
168+ }
169+ }
170+
171+ // Issue a query, starting at the fourth message ID and going back 2.
172+ zero := time .Unix (0 , 0 )
173+ f , err := store .Query ([]uint32 {0 , 1 , 2 }, zero , zero , fourth , 2 )
174+ assert .NoError (t , err )
175+
176+ assert .Len (t , f , 2 )
177+ assert .Equal (t , 2 , int (f [0 ].Payload [0 ]))
178+ assert .Equal (t , 3 , int (f [1 ].Payload [0 ]))
179+
180+ // Issue a query, starting at the first message ID and going back 2.
181+ f , err = store .Query ([]uint32 {0 , 1 , 2 }, zero , zero , f [0 ].ID , 2 )
182+ assert .NoError (t , err )
183+ assert .Equal (t , 0 , int (f [0 ].Payload [0 ]))
184+ assert .Equal (t , 1 , int (f [1 ].Payload [0 ]))
185+ }
186+
156187func testMaxResponseSizeReached (t * testing.T , store Storage ) {
157188 for i := int64 (0 ); i < 10 ; i ++ {
158189 payload := make ([]byte , mqtt .MaxMessageSize / 5 )
@@ -163,7 +194,7 @@ func testMaxResponseSizeReached(t *testing.T, store Storage) {
163194 }
164195
165196 zero := time .Unix (0 , 0 )
166- f , err := store .Query ([]uint32 {0 , 1 , 2 }, zero , zero , 10 )
197+ f , err := store .Query ([]uint32 {0 , 1 , 2 }, zero , zero , nil , 10 )
167198 assert .NoError (t , err )
168199
169200 assert .Len (t , f , 4 )
0 commit comments