public LimitGroup GetLimitGroup(int iLimitGroupId)
    {
        LimitConfgTable config = TryGetConfig <LimitConfgTable>(ConfigPath_LimitGroupConfig);
        LimitGroup      result = null;

        config.LimitMap.TryGetValue(iLimitGroupId, out result);
        return(result);
    }
        public void GetLimits_ReturnsUserLimitsFromRequestItems_IfFound()
        {
            var userLimits = new LimitGroup();
            var request    = new MockHttpRequest
            {
                Items =
                {
                    [LimitRateAttribute.RequestItemName] = new Limits
                    {
                    User = userLimits
                    }
                }
            };

            var limits = limitProvider.GetLimits(request);

            limits.User.Should().Be(userLimits);
        }
        public LimitProviderBase(ILimitKeyGenerator keyGenerator, IAppSettings appSettings)
        {
            keyGenerator.ThrowIfNull(nameof(keyGenerator));
            appSettings.ThrowIfNull(nameof(appSettings));

            this.keyGenerator = keyGenerator;
            this.appSettings = appSettings;

            // This is purely to ensure that we always have a default limit
            defaultLimits = new LimitGroup
            {
                Limits = new List<LimitPerSecond>
                {
                    new LimitPerSecond { Seconds = 60, Limit = DefaultPerMinute },
                    new LimitPerSecond { Seconds = 3600, Limit = DefaultPerHour }
                }
            };
        }
Exemple #4
0
        public LimitProviderBase(ILimitKeyGenerator keyGenerator, IAppSettings appSettings)
        {
            keyGenerator.ThrowIfNull(nameof(keyGenerator));
            appSettings.ThrowIfNull(nameof(appSettings));

            this.keyGenerator = keyGenerator;
            this.appSettings  = appSettings;

            // This is purely to ensure that we always have a default limit
            defaultLimits = new LimitGroup
            {
                Limits = new List <LimitPerSecond>
                {
                    new LimitPerSecond {
                        Seconds = 60, Limit = DefaultPerMinute
                    },
                    new LimitPerSecond {
                        Seconds = 3600, Limit = DefaultPerHour
                    }
                }
            };
        }
Exemple #5
0
        public void GetLimits_ReturnsUserLimits_FromConfig(IEnumerable <string> userKeys, LimitGroup limitGroup)
        {
            var mockHttpRequest = new MockHttpRequest();

            A.CallTo(() => keyGenerator.GetConfigKeysForUser(mockHttpRequest))
            .Returns(userKeys);
            A.CallTo(() => appSetting.Get <LimitGroup>(userKeys.First())).Returns(limitGroup);

            var limits = limitProvider.GetLimits(mockHttpRequest);

            limits.User.Should().Be(limitGroup);
        }
Exemple #6
0
    //Limit Exec Func
    static public bool HandleLimitExec(HandleTarget Target, int iLimitGroupId, FuncContext context)
    {
        if (null == Target || 0 == iLimitGroupId)
        {
            return(true);
        }

        bool bResult = false;

        LimitGroup limitdataGroup = ConfigManager.Instance.GetLimitGroup(iLimitGroupId);

        if (null == limitdataGroup || null == limitdataGroup.LimitDataList)
        {
            return(bResult);
        }

        //Exec Limit
        LimitData ExecData;

        for (int iLoop = 0; iLoop < limitdataGroup.LimitDataList.Count; ++iLoop)
        {
            ExecData = limitdataGroup.LimitDataList[iLoop];
            if (null == ExecData)
            {
                continue;
            }

            LimitMethodsBase handler = null;
            if (!LimitExec.TryGetValue(ExecData.Id, out handler))
            {
                Debug.LogError("limitId:" + ExecData.Id + " is not found.");
                return(false);
            }

            if (0 == limitdataGroup.Logic)
            {
                // Or-logic
                bResult = handler.LimitExecHandler(Target, ExecData, context);
                if (true == bResult)
                {
                    break;
                }
            }
            else if (1 == limitdataGroup.Logic)
            {
                // And-logic
                bResult = handler.LimitExecHandler(Target, ExecData, context);
                if (false == bResult)
                {
                    break;
                }
            }
            else
            {
                Debug.LogWarning("The limitdataGroup's logic is error!");
                break;
            }
        }

        return(bResult);
    }
        public void GetLimits_ReturnsRequestLimits_FromConfig(IEnumerable<string> requestKeys, LimitGroup limitGroup)
        {
            var mockHttpRequest = new MockHttpRequest();

            A.CallTo(() => keyGenerator.GetConfigKeysForRequest(mockHttpRequest))
                .Returns(requestKeys);
            A.CallTo(() => appSetting.Get<LimitGroup>(requestKeys.First())).Returns(limitGroup);

            var limits = limitProvider.GetLimits(mockHttpRequest);

            limits.Request.Should().Be(limitGroup);
        }