17
17
logging .basicConfig (level = logging .DEBUG )
18
18
19
19
# Useful when you just want some placeholder time in your events, saves typing
20
- now = datetime .now (timezone .utc )
20
+ now = datetime .now (tz = timezone .utc )
21
+ td1s = timedelta (seconds = 1 )
21
22
22
23
23
24
def test_get_storage_methods ():
@@ -84,11 +85,11 @@ def test_insert_one(bucket_cm):
84
85
Tests inserting one event into a bucket
85
86
"""
86
87
with bucket_cm as bucket :
87
- l = len (bucket .get ())
88
- event = Event (timestamp = now , duration = timedelta ( seconds = 1 ) , data = {"key" : "val" })
88
+ n_events = len (bucket .get ())
89
+ event = Event (timestamp = now , duration = td1s , data = {"key" : "val" })
89
90
bucket .insert (event )
90
91
fetched_events = bucket .get ()
91
- assert l + 1 == len (fetched_events )
92
+ assert n_events + 1 == len (fetched_events )
92
93
assert isinstance (fetched_events [0 ], Event )
93
94
assert event == fetched_events [0 ]
94
95
logging .info (event )
@@ -111,9 +112,7 @@ def test_insert_many(bucket_cm):
111
112
"""
112
113
num_events = 5000
113
114
with bucket_cm as bucket :
114
- events = num_events * [
115
- Event (timestamp = now , duration = timedelta (seconds = 1 ), data = {"key" : "val" })
116
- ]
115
+ events = num_events * [Event (timestamp = now , duration = td1s , data = {"key" : "val" })]
117
116
bucket .insert (events )
118
117
fetched_events = bucket .get (limit = - 1 )
119
118
assert num_events == len (fetched_events )
@@ -128,9 +127,7 @@ def test_delete(bucket_cm):
128
127
"""
129
128
num_events = 10
130
129
with bucket_cm as bucket :
131
- events = num_events * [
132
- Event (timestamp = now , duration = timedelta (seconds = 1 ), data = {"key" : "val" })
133
- ]
130
+ events = num_events * [Event (timestamp = now , duration = td1s , data = {"key" : "val" })]
134
131
bucket .insert (events )
135
132
136
133
fetched_events = bucket .get (limit = - 1 )
@@ -170,7 +167,7 @@ def test_get_ordered(bucket_cm):
170
167
eventcount = 10
171
168
events = []
172
169
for i in range (10 ):
173
- events .append (Event (timestamp = now + timedelta ( seconds = i ) ))
170
+ events .append (Event (timestamp = now + i * td1s , duration = td1s ))
174
171
random .shuffle (events )
175
172
print (events )
176
173
bucket .insert (events )
@@ -205,32 +202,119 @@ def test_get_event_with_timezone(bucket_cm):
205
202
206
203
207
204
@pytest .mark .parametrize ("bucket_cm" , param_testing_buckets_cm ())
208
- def test_get_datefilter (bucket_cm ):
205
+ def test_get_datefilter_simple (bucket_cm ):
206
+ with bucket_cm as bucket :
207
+ eventcount = 3
208
+ events = [
209
+ Event (timestamp = now + i * td1s , duration = td1s ) for i in range (eventcount )
210
+ ]
211
+ bucket .insert (events )
212
+
213
+ # Get first event, but expect only half the event to match the interval
214
+ fetched_events = bucket .get (
215
+ - 1 ,
216
+ starttime = now - 0.5 * td1s ,
217
+ endtime = now + 0.5 * td1s ,
218
+ )
219
+ assert 1 == len (fetched_events )
220
+
221
+ # Get first two events, but expect only half of each to match the interval
222
+ fetched_events = bucket .get (
223
+ - 1 ,
224
+ starttime = now + 0.5 * td1s ,
225
+ endtime = now + 1.5 * td1s ,
226
+ )
227
+ assert 2 == len (fetched_events )
228
+
229
+ # Get last event, but expect only half to match the interval
230
+ fetched_events = bucket .get (
231
+ - 1 ,
232
+ starttime = now + 2.5 * td1s ,
233
+ endtime = now + 3.5 * td1s ,
234
+ )
235
+ assert 1 == len (fetched_events )
236
+
237
+ # Check approx precision
238
+ fetched_events = bucket .get (
239
+ - 1 ,
240
+ starttime = now - 0.01 * td1s ,
241
+ endtime = now + 0.01 * td1s ,
242
+ )
243
+ assert 1 == len (fetched_events )
244
+
245
+ # Check precision of start
246
+ fetched_events = bucket .get (
247
+ - 1 ,
248
+ starttime = now ,
249
+ endtime = now ,
250
+ )
251
+ assert 1 == len (fetched_events )
252
+
253
+ # Check approx precision of end
254
+ fetched_events = bucket .get (
255
+ - 1 ,
256
+ starttime = now + 2.99 * td1s ,
257
+ endtime = now + 3.01 * td1s ,
258
+ )
259
+ assert 1 == len (fetched_events )
260
+
261
+
262
+ @pytest .mark .parametrize ("bucket_cm" , param_testing_buckets_cm ())
263
+ def test_get_datefilter_start (bucket_cm ):
209
264
"""
210
265
Tests the datetimefilter when fetching events
211
266
"""
212
267
with bucket_cm as bucket :
213
268
eventcount = 10
214
- events = []
215
- for i in range (10 ):
216
- events . append ( Event ( timestamp = now + timedelta ( seconds = i )))
269
+ events = [
270
+ Event ( timestamp = now + i * td1s , duration = td1s ) for i in range (eventcount )
271
+ ]
217
272
bucket .insert (events )
218
273
219
274
# Starttime
220
275
for i in range (eventcount ):
221
- fetched_events = bucket .get (- 1 , starttime = events [i ].timestamp )
276
+ fetched_events = bucket .get (- 1 , starttime = events [i ].timestamp + 0.01 * td1s )
222
277
assert eventcount - i == len (fetched_events )
223
278
279
+
280
+ @pytest .mark .parametrize ("bucket_cm" , param_testing_buckets_cm ())
281
+ def test_get_datefilter_end (bucket_cm ):
282
+ """
283
+ Tests the datetimefilter when fetching events
284
+ """
285
+ with bucket_cm as bucket :
286
+ eventcount = 10
287
+ events = [
288
+ Event (timestamp = now + i * td1s , duration = td1s ) for i in range (eventcount )
289
+ ]
290
+ bucket .insert (events )
291
+
224
292
# Endtime
225
293
for i in range (eventcount ):
226
- fetched_events = bucket .get (- 1 , endtime = events [i ].timestamp )
227
- assert i + 1 == len (fetched_events )
294
+ fetched_events = bucket .get (- 1 , endtime = events [i ].timestamp - 0.01 * td1s )
295
+ assert i == len (fetched_events )
296
+
297
+
298
+ @pytest .mark .parametrize ("bucket_cm" , param_testing_buckets_cm ())
299
+ def test_get_datefilter_both (bucket_cm ):
300
+ """
301
+ Tests the datetimefilter when fetching events
302
+ """
303
+ with bucket_cm as bucket :
304
+ eventcount = 10
305
+ events = [
306
+ Event (timestamp = now + i * td1s , duration = td1s ) for i in range (eventcount )
307
+ ]
308
+ bucket .insert (events )
228
309
229
310
# Both
230
311
for i in range (eventcount ):
231
312
for j in range (i + 1 , eventcount ):
232
313
fetched_events = bucket .get (
233
- starttime = events [i ].timestamp , endtime = events [j ].timestamp
314
+ starttime = events [i ].timestamp + timedelta (seconds = 0.01 ),
315
+ endtime = events [j ].timestamp
316
+ + events [j ].duration
317
+ - timedelta (seconds = 0.01 ),
234
318
)
235
319
assert j - i + 1 == len (fetched_events )
236
320
0 commit comments