Exemplo n.º 1
0
        public override T GetFlagValue <T>(string key, T defaultValue, FlagDTO flag, bool userExposed = true)
        {
            const string functionName = "getFlag.value";

            if (flag == null)
            {
                Log.LogInfo(Config, string.Format(Constants.GET_FLAG_MISSING_ERROR, key), functionName);
                return(defaultValue);
            }

            if (flag.Value == null && defaultValue != null)
            {
                if (userExposed)
                {
                    _ = UserExposed(key, defaultValue, flag);
                }
                Log.LogInfo(Config, string.Format(Constants.GET_FLAG_CAST_ERROR, key), functionName);
                return(defaultValue);
            }

            if (!Utils.Utils.HasSameType(flag.Value, defaultValue))
            {
                Log.LogInfo(Config, string.Format(Constants.GET_FLAG_CAST_ERROR, key), functionName);
                return(defaultValue);
            }

            if (userExposed)
            {
                _ = UserExposed(key, defaultValue, flag);
            }

            return((T)flag.Value);
        }
Exemplo n.º 2
0
 public override Task UserExposed <T>(string key, T defaultValue, FlagDTO flag)
 {
     return(Task.Factory.StartNew(() =>
     {
         Log("UserExposed");
     }));
 }
Exemplo n.º 3
0
 protected override async Task SendActivate(FlagDTO flag)
 {
     try
     {
         await TrackingManager.SendActive(Visitor, flag);
     }
     catch (Exception ex)
     {
         Log.LogError(Config, ex.Message, "UserExposed");
         Visitor.GetStrategy().CacheHit(flag);
     }
 }
Exemplo n.º 4
0
        public void CacheHitActivateTest()
        {
            var hitCache  = new Mock <IHitCacheImplementation>();
            var visitorId = visitorDelegate.VisitorId;

            visitorDelegate.Config.HitCacheImplementation = hitCache.Object;

            var defaultStrategy = new DefaultStrategy(visitorDelegate);

            var flag = new FlagDTO
            {
                CampaignId       = "campaignId",
                CampaignType     = "ab",
                IsReference      = true,
                Key              = "key",
                Value            = "value",
                VariationGroupId = "varGrID",
                VariationId      = "varID"
            };

            var hitData = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.ACTIVATE,
                    Content     = flag,
                    Time        = DateTime.Now
                }
            };

            var hitDataJson = JObject.FromObject(hitData);

            defaultStrategy.CacheHit(flag);

            hitCache.Verify(x => x.CacheHit(visitorId, It.Is <JObject>(y =>
                                                                       y["Data"]["Type"].Value <int>() == ((int)HitCacheType.ACTIVATE) &&
                                                                       y["Data"]["Content"].Value <JObject>().ToString() == JObject.FromObject(flag).ToString()
                                                                       )), Times.Once());

            var error = new Exception("CacheHit error");

            hitCache.Setup(x => x.CacheHit(visitorId, It.IsAny <JObject>())).Throws(error);

            defaultStrategy.CacheHit(flag);

            fsLogManagerMock.Verify(x => x.Error(error.Message, "CacheHit"), Times.Once());
        }
Exemplo n.º 5
0
        public override async Task UserExposed <T>(string key, T defaultValue, FlagDTO flag)
        {
            const string functionName = "UserExposed";

            if (flag == null)
            {
                Log.LogError(Config, string.Format(Constants.GET_FLAG_ERROR, key), functionName);
                return;
            }
            if (flag.Value != null && !Utils.Utils.HasSameType(flag.Value, defaultValue))
            {
                Log.LogError(Config, string.Format(Constants.USER_EXPOSED_CAST_ERROR, key), functionName);
                return;
            }

            await SendActivate(flag);
        }
Exemplo n.º 6
0
        public virtual async void CacheHit(FlagDTO flagDTO)
        {
            try
            {
                var hitCacheInstance = Config?.HitCacheImplementation;
                if (hitCacheInstance == null || Config.DisableCache)
                {
                    return;
                }

                var hitDataString = BuildHitCacheData(flagDTO, HitCacheType.ACTIVATE);

                await hitCacheInstance.CacheHit(Visitor.VisitorId, hitDataString);
            }
            catch (Exception ex)
            {
                Logger.Log.LogError(Config, ex.Message, "CacheHit");
            }
        }
Exemplo n.º 7
0
        public async Task SendActive(VisitorDelegateAbstract visitor, FlagDTO flag)
        {
            var url            = $"{Constants.BASE_API_URL}activate";
            var requestMessage = new HttpRequestMessage(HttpMethod.Post, url);

            requestMessage.Headers.Add(Constants.HEADER_X_API_KEY, Config.ApiKey);
            requestMessage.Headers.Add(Constants.HEADER_X_SDK_CLIENT, Constants.SDK_LANGUAGE);
            requestMessage.Headers.Add(Constants.HEADER_X_SDK_VERSION, Constants.SDK_VERSION);
            requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(Constants.HEADER_APPLICATION_JSON));

            var postData = new Dictionary <string, object>
            {
                [Constants.VISITOR_ID_API_ITEM]         = visitor.VisitorId,
                [Constants.VARIATION_ID_API_ITEM]       = flag.VariationId,
                [Constants.VARIATION_GROUP_ID_API_ITEM] = flag.VariationGroupId,
                [Constants.CUSTOMER_ENV_ID_API_ITEM]    = Config.EnvId
            };

            if (!string.IsNullOrWhiteSpace(visitor.AnonymousId) && !string.IsNullOrWhiteSpace(visitor.VisitorId))
            {
                postData[Constants.VISITOR_ID_API_ITEM] = visitor.VisitorId;
                postData[Constants.ANONYMOUS_ID]        = visitor.AnonymousId;
            }
            else
            {
                postData[Constants.VISITOR_ID_API_ITEM] = visitor.AnonymousId ?? visitor.VisitorId;
                postData[Constants.ANONYMOUS_ID]        = null;
            }

            var postDatajson = JsonConvert.SerializeObject(postData);

            var stringContent = new StringContent(postDatajson, Encoding.UTF8, Constants.HEADER_APPLICATION_JSON);

            requestMessage.Content = stringContent;

            await HttpClient.SendAsync(requestMessage);
        }
Exemplo n.º 8
0
 public override void CacheHit(FlagDTO flagDTO)
 {
     //
 }
Exemplo n.º 9
0
 abstract public T GetFlagValue <T>(string key, T defaultValue, FlagDTO flag, bool userExposed);
Exemplo n.º 10
0
 abstract public Task UserExposed <T>(string key, T defaultValue, FlagDTO flag);
Exemplo n.º 11
0
 abstract protected Task SendActivate(FlagDTO flag);
Exemplo n.º 12
0
 public override T GetFlagValue <T>(string key, T defaultValue, FlagDTO flag, bool userExposed = true)
 {
     Log("Flag.value");
     return(defaultValue);
 }
Exemplo n.º 13
0
        public void LookupHitsTest()
        {
            var hitCache  = new Mock <IHitCacheImplementation>();
            var visitorId = visitorDelegate.VisitorId;

            visitorDelegate.Config.HitCacheImplementation = hitCache.Object;

            var defaultStrategy = new DefaultStrategy(visitorDelegate);

            var screenHit = new Screen(string.Concat(Enumerable.Repeat("Home", 1000000)));

            var hitData = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.SCREENVIEW,
                    Content     = screenHit,
                    Time        = DateTime.Now
                }
            };

            var pageHit = new Page(string.Concat(Enumerable.Repeat("Home", 1000000)));

            var hitData2 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.PAGEVIEW,
                    Content     = pageHit,
                    Time        = DateTime.Now
                }
            };

            var batchHit = new Batch()
            {
                Hits = new Collection <HitAbstract>()
                {
                    pageHit,
                    screenHit
                },
            };

            var hitData3 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.BATCH,
                    Content     = batchHit,
                    Time        = DateTime.Now
                }
            };

            var transactionHit = new Transaction("transactionID", "aff");

            var hitData4 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.TRANSACTION,
                    Content     = transactionHit,
                    Time        = DateTime.Now
                }
            };

            var eventHit = new Event(EventCategory.USER_ENGAGEMENT, "aff");

            var hitData5 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.EVENT,
                    Content     = eventHit,
                    Time        = DateTime.Now
                }
            };

            var itemHit = new Item("transID", "name", "code");

            var hitData6 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.ITEM,
                    Content     = itemHit,
                    Time        = DateTime.Now
                }
            };

            var flag = new FlagDTO
            {
                CampaignId       = "campaignCacheHitId",
                CampaignType     = "ab",
                IsReference      = true,
                Key              = "key",
                Value            = "value",
                VariationGroupId = "varGrID",
                VariationId      = "varID"
            };

            var hitData7 = new HitCacheDTOV1
            {
                Version = 1,
                Data    = new HitCacheData
                {
                    VisitorId   = visitorDelegate.VisitorId,
                    AnonymousId = visitorDelegate.AnonymousId,
                    Type        = HitCacheType.ACTIVATE,
                    Content     = flag,
                    Time        = DateTime.Now
                }
            };

            var array = new JArray()
            {
                JObject.FromObject(hitData),
                JObject.FromObject(hitData2),
                JObject.FromObject(hitData3),
                JObject.FromObject(hitData4),
                JObject.FromObject(hitData5),
                JObject.FromObject(hitData6),
                JObject.FromObject(hitData7),
            };

            hitCache.Setup(x => x.LookupHits(visitorId)).Returns(Task.FromResult(array));

            defaultStrategy.LookupHits();

            trackingManagerMock.Verify(x => x.SendActive(visitorDelegate, It.Is <FlagDTO>(
                                                             y => y.CampaignId == flag.CampaignId &&
                                                             y.CampaignType == flag.CampaignType &&
                                                             y.IsReference == flag.IsReference &&
                                                             y.Key == flag.Key &&
                                                             y.Value == flag.Value &&
                                                             y.VariationGroupId == flag.VariationGroupId &&
                                                             y.VariationId == flag.VariationId)), Times.Once());

            Func <HitAbstract, bool> checkHit = (HitAbstract hitAbstract) =>
            {
                switch (hitAbstract.Type)
                {
                case HitType.PAGEVIEW:
                    var page = (Page)hitAbstract;
                    return(page.DocumentLocation == pageHit.DocumentLocation);

                case HitType.SCREENVIEW:
                    var screen = (Screen)hitAbstract;
                    return(screen.DocumentLocation == screenHit.DocumentLocation);

                case HitType.TRANSACTION:
                    var transaction = (Transaction)hitAbstract;
                    return(transaction.TransactionId == transactionHit.TransactionId && transaction.Affiliation == transactionHit.Affiliation);

                case HitType.ITEM:
                    var item = (Item)hitAbstract;
                    return(item.TransactionId == itemHit.TransactionId && item.Code == itemHit.Code && item.Name == itemHit.Name);

                case HitType.EVENT:
                    var eventObject = (Event)hitAbstract;
                    return(eventObject.Category == eventHit.Category && eventObject.Action == eventHit.Action);

                case HitType.BATCH:
                    var batch = (Batch)hitAbstract;
                    return(batch.Hits.Count == 2);

                default:
                    break;
                }
                return(false);
            };

            trackingManagerMock.Verify(x => x.SendHit(It.Is <Batch>(y => y.Hits.Any(checkHit))), Times.Exactly(4));
        }