55from splitio .models import splits , segments
66from splitio .models .segments import Segment
77from splitio .models .impressions import Impression
8- from splitio .storage .pluggable import PluggableSplitStorage , PluggableSegmentStorage , PluggableImpressionsStorage
8+ from splitio .models .events import Event , EventWrapper
9+ from splitio .storage .pluggable import PluggableSplitStorage , PluggableSegmentStorage , PluggableImpressionsStorage , PluggableEventsStorage
910from splitio .client .util import get_metadata , SdkMetadata
1011
1112from tests .integration import splits_json
@@ -403,4 +404,80 @@ def test_wrap_impressions(self):
403404 'm' : 321654 ,
404405 }
405406 })
406- ])
407+ ])
408+
409+ class PluggableEventsStorageTests (object ):
410+ """In memory events storage test cases."""
411+
412+ def setup_method (self ):
413+ """Prepare storages with test data."""
414+ self .mock_adapter = StorageMockAdapter ()
415+ self .metadata = SdkMetadata ('python-1.1.1' , 'hostname' , 'ip' )
416+ self .pluggable_events_storage = PluggableEventsStorage (self .mock_adapter , self .metadata , 'myprefix' )
417+
418+ def test_init (self ):
419+ assert (self .pluggable_events_storage ._events_queue_key == "myprefix.SPLITIO.events" )
420+ assert (self .pluggable_events_storage ._sdk_metadata == {
421+ 's' : self .metadata .sdk_version ,
422+ 'n' : self .metadata .instance_name ,
423+ 'i' : self .metadata .instance_ip ,
424+ })
425+
426+ pluggable2 = PluggableEventsStorage (self .mock_adapter , self .metadata )
427+ assert (pluggable2 ._events_queue_key == "SPLITIO.events" )
428+
429+ def test_put (self ):
430+ events = [
431+ EventWrapper (event = Event ('key1' , 'user' , 'purchase' , 10 , 123456 , None ), size = 32768 ),
432+ EventWrapper (event = Event ('key2' , 'user' , 'purchase' , 10 , 123456 , None ), size = 32768 ),
433+ EventWrapper (event = Event ('key3' , 'user' , 'purchase' , 10 , 123456 , None ), size = 32768 ),
434+ EventWrapper (event = Event ('key4' , 'user' , 'purchase' , 10 , 123456 , None ), size = 32768 ),
435+ ]
436+ self .pluggable_events_storage .put (events )
437+ assert (self .pluggable_events_storage ._events_queue_key in self .mock_adapter ._keys )
438+ assert (self .mock_adapter ._keys ["myprefix.SPLITIO.events" ] == self .pluggable_events_storage ._wrap_events (events ))
439+
440+ events2 = [
441+ EventWrapper (event = Event ('key5' , 'user' , 'purchase' , 10 , 123456 , None ), size = 32768 ),
442+ EventWrapper (event = Event ('key6' , 'user' , 'purchase' , 10 , 123456 , None ), size = 32768 ),
443+ ]
444+ self .pluggable_events_storage .put (events2 )
445+ assert (self .mock_adapter ._keys ["myprefix.SPLITIO.events" ] == self .pluggable_events_storage ._wrap_events (events + events2 ))
446+
447+ def test_wrap_events (self ):
448+ events = [
449+ EventWrapper (event = Event ('key1' , 'user' , 'purchase' , 10 , 123456 , None ), size = 32768 ),
450+ EventWrapper (event = Event ('key2' , 'user' , 'purchase' , 10 , 123456 , None ), size = 32768 ),
451+ ]
452+ assert (self .pluggable_events_storage ._wrap_events (events ) == [
453+ json .dumps ({
454+ 'e' : {
455+ 'key' : 'key1' ,
456+ 'trafficTypeName' : 'user' ,
457+ 'eventTypeId' : 'purchase' ,
458+ 'value' : 10 ,
459+ 'timestamp' : 123456 ,
460+ 'properties' : None ,
461+ },
462+ 'm' : {
463+ 's' : self .metadata .sdk_version ,
464+ 'n' : self .metadata .instance_name ,
465+ 'i' : self .metadata .instance_ip ,
466+ }
467+ }),
468+ json .dumps ({
469+ 'e' : {
470+ 'key' : 'key2' ,
471+ 'trafficTypeName' : 'user' ,
472+ 'eventTypeId' : 'purchase' ,
473+ 'value' : 10 ,
474+ 'timestamp' : 123456 ,
475+ 'properties' : None ,
476+ },
477+ 'm' : {
478+ 's' : self .metadata .sdk_version ,
479+ 'n' : self .metadata .instance_name ,
480+ 'i' : self .metadata .instance_ip ,
481+ }
482+ })
483+ ])
0 commit comments