@@ -130,6 +130,83 @@ func TestDiskQueueRoll(t *testing.T) {
130
130
}
131
131
}
132
132
133
+ func TestDiskQueuePeek (t * testing.T ) {
134
+ l := NewTestLogger (t )
135
+ dqName := "test_disk_queue_peek" + strconv .Itoa (int (time .Now ().Unix ()))
136
+ tmpDir , err := ioutil .TempDir ("" , fmt .Sprintf ("nsq-test-%d" , time .Now ().UnixNano ()))
137
+ if err != nil {
138
+ panic (err )
139
+ }
140
+ defer os .RemoveAll (tmpDir )
141
+ msg := bytes .Repeat ([]byte {0 }, 10 )
142
+ ml := int64 (len (msg ))
143
+ dq := New (dqName , tmpDir , 10 * (ml + 4 ), int32 (ml ), 1 << 10 , 2500 , 2 * time .Second , l )
144
+ defer dq .Close ()
145
+ NotNil (t , dq )
146
+ Equal (t , int64 (0 ), dq .Depth ())
147
+
148
+ t .Run ("roll" , func (t * testing.T ) {
149
+ for i := 0 ; i < 10 ; i ++ {
150
+ err := dq .Put (msg )
151
+ Nil (t , err )
152
+ Equal (t , int64 (i + 1 ), dq .Depth ())
153
+ }
154
+
155
+ for i := 10 ; i > 0 ; i -- {
156
+ Equal (t , msg , <- dq .PeekChan ())
157
+ Equal (t , int64 (i ), dq .Depth ())
158
+
159
+ Equal (t , msg , <- dq .ReadChan ())
160
+ Equal (t , int64 (i - 1 ), dq .Depth ())
161
+ }
162
+
163
+ Nil (t , dq .Empty ())
164
+ })
165
+
166
+ t .Run ("peek-read" , func (t * testing.T ) {
167
+ for i := 0 ; i < 10 ; i ++ {
168
+ err := dq .Put (msg )
169
+ Nil (t , err )
170
+ Equal (t , int64 (i + 1 ), dq .Depth ())
171
+ }
172
+
173
+ for i := 10 ; i > 0 ; i -- {
174
+ Equal (t , msg , <- dq .PeekChan ())
175
+ Equal (t , int64 (i ), dq .Depth ())
176
+
177
+ Equal (t , msg , <- dq .PeekChan ())
178
+ Equal (t , int64 (i ), dq .Depth ())
179
+
180
+ Equal (t , msg , <- dq .ReadChan ())
181
+ Equal (t , int64 (i - 1 ), dq .Depth ())
182
+ }
183
+
184
+ Nil (t , dq .Empty ())
185
+ })
186
+
187
+ t .Run ("read-peek" , func (t * testing.T ) {
188
+ for i := 0 ; i < 10 ; i ++ {
189
+ err := dq .Put (msg )
190
+ Nil (t , err )
191
+ Equal (t , int64 (i + 1 ), dq .Depth ())
192
+ }
193
+
194
+ for i := 10 ; i > 1 ; i -- {
195
+ Equal (t , msg , <- dq .PeekChan ())
196
+ Equal (t , int64 (i ), dq .Depth ())
197
+
198
+ Equal (t , msg , <- dq .ReadChan ())
199
+ Equal (t , int64 (i - 1 ), dq .Depth ())
200
+
201
+ Equal (t , msg , <- dq .PeekChan ())
202
+ Equal (t , int64 (i - 1 ), dq .Depth ())
203
+ }
204
+
205
+ Nil (t , dq .Empty ())
206
+ })
207
+
208
+ }
209
+
133
210
func assertFileNotExist (t * testing.T , fn string ) {
134
211
f , err := os .OpenFile (fn , os .O_RDONLY , 0600 )
135
212
Equal (t , (* os .File )(nil ), f )
0 commit comments