11"""Pluggable storage test module."""
2+ import json
3+
24from splitio .models .splits import Split
35from splitio .models import splits , segments
46from splitio .models .segments import Segment
5- from splitio .storage .pluggable import PluggableSplitStorage , PluggableSegmentStorage
7+ from splitio .models .impressions import Impression
8+ from splitio .storage .pluggable import PluggableSplitStorage , PluggableSegmentStorage , PluggableImpressionsStorage
9+ from splitio .client .util import get_metadata , SdkMetadata
610
711from tests .integration import splits_json
812import pytest
@@ -27,6 +31,13 @@ def get_many(self, keys):
2731 def set (self , key , value ):
2832 self ._keys [key ] = value
2933
34+ def push_items (self , key , * value ):
35+ items = []
36+ if key in self ._keys :
37+ items = self ._keys [key ]
38+ [items .append (item ) for item in value ]
39+ self ._keys [key ] = items
40+
3041 def delete (self , key ):
3142 if key in self ._keys :
3243 del self ._keys [key ]
@@ -314,3 +325,78 @@ def test_get(self):
314325# assert('myprefix.SPLITIO.segment.segment2' in self.mock_adapter._keys)
315326# assert(self.mock_adapter._keys['myprefix.SPLITIO.segment.segment2'] == {'key1', 'key2', 'key3'})
316327# assert(self.mock_adapter._keys['myprefix.SPLITIO.segment.segment2.till'] == 123)
328+
329+
330+ class PluggableImpressionsStorageTests (object ):
331+ """In memory impressions storage test cases."""
332+
333+ def setup_method (self ):
334+ """Prepare storages with test data."""
335+ self .mock_adapter = StorageMockAdapter ()
336+ self .metadata = SdkMetadata ('python-1.1.1' , 'hostname' , 'ip' )
337+ self .pluggable_imp_storage = PluggableImpressionsStorage (self .mock_adapter , self .metadata , 'myprefix' )
338+
339+ def test_init (self ):
340+ assert (self .pluggable_imp_storage ._impressions_queue_key == "myprefix.SPLITIO.impressions" )
341+ assert (self .pluggable_imp_storage ._sdk_metadata == self .metadata )
342+
343+ pluggable2 = PluggableImpressionsStorage (self .mock_adapter , self .metadata )
344+ assert (pluggable2 ._impressions_queue_key == "SPLITIO.impressions" )
345+
346+ def test_put (self ):
347+ impressions = [
348+ Impression ('key1' , 'feature1' , 'on' , 'some_label' , 123456 , 'buck1' , 321654 ),
349+ Impression ('key2' , 'feature2' , 'on' , 'some_label' , 123456 , 'buck1' , 321654 ),
350+ Impression ('key3' , 'feature2' , 'on' , 'some_label' , 123456 , 'buck1' , 321654 ),
351+ Impression ('key4' , 'feature1' , 'on' , 'some_label' , 123456 , 'buck1' , 321654 )
352+ ]
353+ self .pluggable_imp_storage .put (impressions )
354+ assert (self .pluggable_imp_storage ._impressions_queue_key in self .mock_adapter ._keys )
355+ assert (self .mock_adapter ._keys ["myprefix.SPLITIO.impressions" ] == self .pluggable_imp_storage ._wrap_impressions (impressions ))
356+
357+ impressions2 = [
358+ Impression ('key5' , 'feature1' , 'off' , 'some_label' , 123456 , 'buck1' , 321654 ),
359+ Impression ('key6' , 'feature2' , 'off' , 'some_label' , 123456 , 'buck1' , 321654 ),
360+ ]
361+ self .pluggable_imp_storage .put (impressions2 )
362+ assert (self .mock_adapter ._keys ["myprefix.SPLITIO.impressions" ] == self .pluggable_imp_storage ._wrap_impressions (impressions + impressions2 ))
363+
364+ def test_wrap_impressions (self ):
365+ impressions = [
366+ Impression ('key1' , 'feature1' , 'on' , 'some_label' , 123456 , 'buck1' , 321654 ),
367+ Impression ('key2' , 'feature2' , 'off' , 'some_label' , 123456 , 'buck1' , 321654 ),
368+ ]
369+ assert (self .pluggable_imp_storage ._wrap_impressions (impressions ) == [
370+ json .dumps ({
371+ 'm' : {
372+ 's' : self .metadata .sdk_version ,
373+ 'n' : self .metadata .instance_name ,
374+ 'i' : self .metadata .instance_ip ,
375+ },
376+ 'i' : {
377+ 'k' : 'key1' ,
378+ 'b' : 'buck1' ,
379+ 'f' : 'feature1' ,
380+ 't' : 'on' ,
381+ 'r' : 'some_label' ,
382+ 'c' : 123456 ,
383+ 'm' : 321654 ,
384+ }
385+ }),
386+ json .dumps ({
387+ 'm' : {
388+ 's' : self .metadata .sdk_version ,
389+ 'n' : self .metadata .instance_name ,
390+ 'i' : self .metadata .instance_ip ,
391+ },
392+ 'i' : {
393+ 'k' : 'key2' ,
394+ 'b' : 'buck1' ,
395+ 'f' : 'feature2' ,
396+ 't' : 'off' ,
397+ 'r' : 'some_label' ,
398+ 'c' : 123456 ,
399+ 'm' : 321654 ,
400+ }
401+ })
402+ ])
0 commit comments