@@ -140,7 +140,7 @@ func getFactory() SplitFactory {
140
140
impressionObserver , _ := strategy .NewImpressionObserver (500 )
141
141
impressionsCounter := strategy .NewImpressionsCounter ()
142
142
impressionsStrategy := strategy .NewOptimizedImpl (impressionObserver , impressionsCounter , telemetryStorage , false )
143
- impressionManager := provisional .NewImpressionManager (impressionsStrategy )
143
+ impressionManager := provisional .NewImpressionManager (impressionsStrategy ).( * provisional. ImpressionManagerImpl )
144
144
145
145
return SplitFactory {
146
146
cfg : cfg ,
@@ -166,7 +166,7 @@ func getFactoryByFlagSets() SplitFactory {
166
166
impressionObserver , _ := strategy .NewImpressionObserver (500 )
167
167
impressionsCounter := strategy .NewImpressionsCounter ()
168
168
impressionsStrategy := strategy .NewOptimizedImpl (impressionObserver , impressionsCounter , telemetryStorage , false )
169
- impressionManager := provisional .NewImpressionManager (impressionsStrategy )
169
+ impressionManager := provisional .NewImpressionManager (impressionsStrategy ).( * provisional. ImpressionManagerImpl )
170
170
171
171
return SplitFactory {
172
172
cfg : cfg ,
@@ -473,7 +473,7 @@ func TestClientPanicking(t *testing.T) {
473
473
impressionObserver , _ := strategy .NewImpressionObserver (500 )
474
474
impressionsCounter := strategy .NewImpressionsCounter ()
475
475
impressionsStrategy := strategy .NewOptimizedImpl (impressionObserver , impressionsCounter , telemetryMockedStorage , false )
476
- impressionManager := provisional .NewImpressionManager (impressionsStrategy )
476
+ impressionManager := provisional .NewImpressionManager (impressionsStrategy ).( * provisional. ImpressionManagerImpl )
477
477
478
478
factory := SplitFactory {
479
479
cfg : cfg ,
@@ -650,7 +650,7 @@ func getClientForListener() SplitClient {
650
650
impressionObserver , _ := strategy .NewImpressionObserver (500 )
651
651
impressionsCounter := strategy .NewImpressionsCounter ()
652
652
impressionsStrategy := strategy .NewOptimizedImpl (impressionObserver , impressionsCounter , telemetryMockedStorage , true )
653
- impressionManager := provisional .NewImpressionManager (impressionsStrategy )
653
+ impressionManager := provisional .NewImpressionManager (impressionsStrategy ).( * provisional. ImpressionManagerImpl )
654
654
655
655
factory := & SplitFactory {
656
656
cfg : cfg ,
@@ -1372,7 +1372,7 @@ func TestClient(t *testing.T) {
1372
1372
1373
1373
impressionObserver , _ := strategy .NewImpressionObserver (500 )
1374
1374
impressionsStrategy := strategy .NewDebugImpl (impressionObserver , true )
1375
- impressionManager := provisional .NewImpressionManager (impressionsStrategy )
1375
+ impressionManager := provisional .NewImpressionManager (impressionsStrategy ).( * provisional. ImpressionManagerImpl )
1376
1376
1377
1377
factory := & SplitFactory {cfg : cfg , impressionManager : impressionManager }
1378
1378
client := SplitClient {
@@ -2114,6 +2114,105 @@ func TestClientDebug(t *testing.T) {
2114
2114
}
2115
2115
}
2116
2116
2117
+ func TestClientDebugWithImpressionsDisabledTrue (t * testing.T ) {
2118
+ var isDestroyCalled = false
2119
+ var splitsMock , _ = ioutil .ReadFile ("../../testdata/splits_mock_2.json" )
2120
+
2121
+ postChannel := make (chan string , 1 )
2122
+ var count int64
2123
+ ts := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
2124
+ switch r .URL .Path {
2125
+ case "/splitChanges" :
2126
+ fmt .Fprintln (w , string (splitsMock ))
2127
+ return
2128
+ case "/testImpressions/bulk" :
2129
+ if r .Header .Get ("SplitSDKImpressionsMode" ) != commonsCfg .ImpressionsModeDebug {
2130
+ t .Error ("Wrong header" )
2131
+ }
2132
+
2133
+ if isDestroyCalled {
2134
+ rBody , _ := ioutil .ReadAll (r .Body )
2135
+ var dataInPost []map [string ]interface {}
2136
+ err := json .Unmarshal (rBody , & dataInPost )
2137
+ if err != nil {
2138
+ t .Error (err )
2139
+ return
2140
+ }
2141
+ if len (dataInPost ) != 1 {
2142
+ t .Error ("It should send two impressions in optimized mode. Actual: " , len (dataInPost ))
2143
+ }
2144
+ if len (dataInPost [0 ]["i" ].([]interface {})) != 3 {
2145
+ t .Error ("It should send only one impression per featureName" )
2146
+ }
2147
+ }
2148
+
2149
+ fmt .Fprintln (w , "ok" )
2150
+ postChannel <- "finished"
2151
+ case "/testImpressions/count" :
2152
+ atomic .AddInt64 (& count , 1 )
2153
+ case "/events/bulk" :
2154
+ fmt .Fprintln (w , "ok" )
2155
+ case "/segmentChanges" :
2156
+ fallthrough
2157
+ default :
2158
+ fmt .Fprintln (w , "ok" )
2159
+ }
2160
+ }))
2161
+ defer ts .Close ()
2162
+
2163
+ impTest := & ImpressionListenerTest {}
2164
+ cfg := conf .Default ()
2165
+ cfg .LabelsEnabled = true
2166
+ cfg .Advanced .EventsURL = ts .URL
2167
+ cfg .Advanced .SdkURL = ts .URL
2168
+ cfg .Advanced .TelemetryServiceURL = ts .URL
2169
+ cfg .Advanced .AuthServiceURL = ts .URL
2170
+ cfg .Advanced .ImpressionListener = impTest
2171
+ cfg .ImpressionsMode = "Debug"
2172
+
2173
+ factory , _ := NewSplitFactory ("test" , cfg )
2174
+ client := factory .Client ()
2175
+ client .BlockUntilReady (2 )
2176
+
2177
+ // Calls treatments to generate one valid impression
2178
+ time .Sleep (300 * time .Millisecond ) // Let's wait until first call of recorders have finished
2179
+ client .Treatment ("user1" , "DEMO_MURMUR2" , nil )
2180
+ impL1 , _ := ilResult ["DEMO_MURMUR2" ].(map [string ]interface {})
2181
+ if impL1 ["Pt" ].(int64 ) != 0 {
2182
+ t .Error ("Pt should be 0" )
2183
+ }
2184
+ client .Treatment ("user1" , "DEMO_MURMUR2" , nil )
2185
+ impL2 , _ := ilResult ["DEMO_MURMUR2" ].(map [string ]interface {})
2186
+ if impL2 ["Pt" ] != impL1 ["Time" ] {
2187
+ t .Error ("Pt should be equal to previos imp1" )
2188
+ }
2189
+ client .Treatments ("user1" , []string {"DEMO_MURMUR2" }, nil )
2190
+ impL3 , _ := ilResult ["DEMO_MURMUR2" ].(map [string ]interface {})
2191
+ if impL3 ["Pt" ] != impL2 ["Time" ] {
2192
+ t .Error ("Pt should be equal to previos imp2" )
2193
+ }
2194
+
2195
+ client .Treatment ("user1" , "IMPRESSION_TOGGLE_FLAG" , nil )
2196
+ impL4 , _ := ilResult ["IMPRESSION_TOGGLE_FLAG" ].(map [string ]interface {})
2197
+ if impL4 ["Pt" ].(int64 ) != 0 {
2198
+ t .Error ("Pt should be 0" )
2199
+ }
2200
+
2201
+ isDestroyCalled = true
2202
+ client .Destroy ()
2203
+
2204
+ select {
2205
+ case <- postChannel :
2206
+ if atomic .LoadInt64 (& count ) != 1 {
2207
+ t .Error ("Impression Count should be 1. Actual: " , atomic .LoadInt64 (& count ))
2208
+ }
2209
+ return
2210
+ case <- time .After (4 * time .Second ):
2211
+ t .Error ("The test couldn't send impressions to check headers" )
2212
+ return
2213
+ }
2214
+ }
2215
+
2117
2216
func TestUnsupportedMatcherAndSemver (t * testing.T ) {
2118
2217
var isDestroyCalled = false
2119
2218
var splitsMock , _ = ioutil .ReadFile ("../../testdata/splits_mock_3.json" )
@@ -2357,7 +2456,7 @@ func TestTelemetryMemory(t *testing.T) {
2357
2456
t .Error ("It should queue one impression" )
2358
2457
}
2359
2458
if dataInPost .ImpressionsDeduped != 1 {
2360
- t .Error ("It should dedupe one impression" )
2459
+ t .Error ("It should dedupe one impression. " , dataInPost . ImpressionsDeduped )
2361
2460
}
2362
2461
if dataInPost .EventsQueued != 1 {
2363
2462
t .Error ("It should queue one event" )
0 commit comments