@@ -121,19 +121,73 @@ def test_xtrim_with_approximate_option
121
121
assert_equal 0 , redis . xtrim ( 's1' , 2 , approximate : true )
122
122
end
123
123
124
+ def test_xtrim_with_limit_option
125
+ omit_version ( '6.2.0' )
126
+
127
+ begin
128
+ original = redis . config ( :get , 'stream-node-max-entries' ) [ 'stream-node-max-entries' ]
129
+ redis . config ( :set , 'stream-node-max-entries' , 1 )
130
+
131
+ redis . xadd ( 's1' , { f : 'v1' } )
132
+ redis . xadd ( 's1' , { f : 'v2' } )
133
+ redis . xadd ( 's1' , { f : 'v3' } )
134
+ redis . xadd ( 's1' , { f : 'v4' } )
135
+
136
+ assert_equal 1 , redis . xtrim ( 's1' , 0 , approximate : true , limit : 1 )
137
+ error = assert_raises ( Redis ::CommandError ) { redis . xtrim ( 's1' , 0 , limit : 1 ) }
138
+ assert_equal "ERR syntax error, LIMIT cannot be used without the special ~ option" , error . message
139
+ ensure
140
+ redis . config ( :set , 'stream-node-max-entries' , original )
141
+ end
142
+ end
143
+
144
+ def test_xtrim_with_maxlen_strategy
145
+ redis . xadd ( 's1' , { f : 'v1' } , id : '0-1' )
146
+ redis . xadd ( 's1' , { f : 'v1' } , id : '0-2' )
147
+ redis . xadd ( 's1' , { f : 'v1' } , id : '1-0' )
148
+ redis . xadd ( 's1' , { f : 'v1' } , id : '1-1' )
149
+ assert_equal ( 2 , redis . xtrim ( 's1' , 2 , strategy : 'MAXLEN' ) )
150
+ end
151
+
152
+ def test_xtrim_with_minid_strategy
153
+ omit_version ( '6.2.0' )
154
+
155
+ redis . xadd ( 's1' , { f : 'v1' } , id : '0-1' )
156
+ redis . xadd ( 's1' , { f : 'v1' } , id : '0-2' )
157
+ redis . xadd ( 's1' , { f : 'v1' } , id : '1-0' )
158
+ redis . xadd ( 's1' , { f : 'v1' } , id : '1-1' )
159
+ assert_equal ( 2 , redis . xtrim ( 's1' , '1-0' , strategy : 'MINID' ) )
160
+ end
161
+
162
+ def test_xtrim_with_approximate_minid_strategy
163
+ omit_version ( '6.2.0' )
164
+
165
+ redis . xadd ( 's1' , { f : 'v1' } , id : '0-1' )
166
+ redis . xadd ( 's1' , { f : 'v1' } , id : '0-2' )
167
+ redis . xadd ( 's1' , { f : 'v1' } , id : '1-0' )
168
+ redis . xadd ( 's1' , { f : 'v1' } , id : '1-1' )
169
+ assert_equal ( 0 , redis . xtrim ( 's1' , '1-0' , strategy : 'MINID' , approximate : true ) )
170
+ end
171
+
172
+ def test_xtrim_with_invalid_strategy
173
+ omit_version ( '6.2.0' )
174
+
175
+ redis . xadd ( 's1' , { f : 'v1' } )
176
+ error = assert_raises ( Redis ::CommandError ) { redis . xtrim ( 's1' , '1-0' , strategy : '' ) }
177
+ assert_equal "ERR syntax error" , error . message
178
+ end
179
+
124
180
def test_xtrim_with_not_existed_stream
125
181
assert_equal 0 , redis . xtrim ( 'not-existed-stream' , 2 )
126
182
end
127
183
128
184
def test_xtrim_with_invalid_arguments
129
185
if version >= '6.2'
130
186
assert_raises ( Redis ::CommandError ) { redis . xtrim ( '' , '' ) }
131
- assert_raises ( Redis ::CommandError ) { redis . xtrim ( nil , nil ) }
132
187
assert_equal 0 , redis . xtrim ( 's1' , 0 )
133
188
assert_raises ( Redis ::CommandError ) { redis . xtrim ( 's1' , -1 , approximate : true ) }
134
189
else
135
190
assert_equal 0 , redis . xtrim ( '' , '' )
136
- assert_equal 0 , redis . xtrim ( nil , nil )
137
191
assert_equal 0 , redis . xtrim ( 's1' , 0 )
138
192
assert_equal 0 , redis . xtrim ( 's1' , -1 , approximate : true )
139
193
end
0 commit comments