@@ -1013,6 +1013,84 @@ public MockResponse dispatch(RecordedRequest request) {
10131013 Assert .assertTrue (check3 );
10141014 }
10151015
1016+ @ Test
1017+ public void ImpressionPropertiesTest () throws Exception {
1018+ String splits = new String (Files .readAllBytes (Paths .get ("src/test/resources/splits_imp_toggle.json" )), StandardCharsets .UTF_8 );
1019+ List <RecordedRequest > allRequests = new ArrayList <>();
1020+
1021+ Dispatcher dispatcher = new Dispatcher () {
1022+ @ Override
1023+ public MockResponse dispatch (RecordedRequest request ) {
1024+ allRequests .add (request );
1025+ switch (request .getPath ()) {
1026+ case "/api/splitChanges?s=1.1&since=-1" :
1027+ return new MockResponse ().setResponseCode (200 ).setBody (splits );
1028+ case "/api/splitChanges?s=1.1&since=1602796638344" :
1029+ return new MockResponse ().setResponseCode (200 ).setBody ("{\" splits\" : [], \" since\" :1602796638344, \" till\" :1602796638344}" );
1030+ case "/api/testImpressions/bulk" :
1031+ return new MockResponse ().setResponseCode (200 );
1032+ case "/api/testImpressions/count" :
1033+ return new MockResponse ().setResponseCode (200 );
1034+ case "/v1/keys/ss" :
1035+ return new MockResponse ().setResponseCode (200 );
1036+ case "/v1/metrics/usage" :
1037+ return new MockResponse ().setResponseCode (200 );
1038+ case "/v1/metrics/config" :
1039+ return new MockResponse ().setResponseCode (200 );
1040+ }
1041+ return new MockResponse ().setResponseCode (404 );
1042+ }
1043+ };
1044+
1045+ MockWebServer server = new MockWebServer ();
1046+ server .setDispatcher (dispatcher );
1047+
1048+ server .start ();
1049+ String serverURL = String .format ("http://%s:%s" , server .getHostName (), server .getPort ());
1050+ SplitClientConfig config = SplitClientConfig .builder ()
1051+ .setBlockUntilReadyTimeout (10000 )
1052+ .endpoint (serverURL , serverURL )
1053+ .telemetryURL (serverURL + "/v1" )
1054+ .authServiceURL (String .format ("%s/api/auth/enabled" , serverURL ))
1055+ .streamingEnabled (false )
1056+ .featuresRefreshRate (5 )
1057+ .impressionsMode (ImpressionsManager .Mode .DEBUG )
1058+ .build ();
1059+
1060+ SplitFactory factory = SplitFactoryBuilder .build ("fake-api-token" , config );
1061+ SplitClient client = factory .client ();
1062+ client .blockUntilReady ();
1063+
1064+ Assert .assertEquals ("off" , client .getTreatment ("user1" , "without_impression_toggle" , new HashMap <>(), "{\" prop1\" : \" val1\" }" ));
1065+ Assert .assertEquals ("off" , client .getTreatment ("user2" , "impression_toggle_on" , new HashMap <>(), "{\" prop1\" : \" val1\" , \" prop2\" : \" val2\" }" ));
1066+ Assert .assertEquals ("off" , client .getTreatment ("user3" , "impression_toggle_on" , new HashMap <>()));
1067+ client .destroy ();
1068+ boolean check1 = false , check2 = false , check3 = false ;
1069+ for (int i =0 ; i < allRequests .size (); i ++ ) {
1070+ if (allRequests .get (i ).getPath ().equals ("/api/testImpressions/bulk" ) ) {
1071+ String body = allRequests .get (i ).getBody ().readUtf8 ();
1072+ if (body .contains ("user1" )) {
1073+ check1 = true ;
1074+ Assert .assertTrue (body .contains ("without_impression_toggle" ));
1075+ Assert .assertTrue (body .contains ("\" properties\" :\" {\\ \" prop1\\ \" :\\ \" val1\\ \" }\" " ));
1076+ }
1077+ if (body .contains ("user2" )) {
1078+ check2 = true ;
1079+ Assert .assertTrue (body .contains ("impression_toggle_on" ));
1080+ Assert .assertTrue (body .contains ("\" properties\" :\" {\\ \" prop2\\ \" :\\ \" val2\\ \" ,\\ \" prop1\\ \" :\\ \" val1\\ \" }\" " ));
1081+ }
1082+ if (body .contains ("user3" )) {
1083+ check3 = true ;
1084+ Assert .assertTrue (body .contains ("impression_toggle_on" ));
1085+ Assert .assertTrue (body .contains ("\" properties\" :null" ));
1086+ }
1087+ }
1088+ }
1089+ server .shutdown ();
1090+ Assert .assertTrue (check1 );
1091+ Assert .assertTrue (check2 );
1092+ }
1093+
10161094 private SSEMockServer buildSSEMockServer (SSEMockServer .SseEventQueue eventQueue ) {
10171095 return new SSEMockServer (eventQueue , (token , version , channel ) -> {
10181096 if (!"1.1" .equals (version )) {
0 commit comments