示例#1
0
        private void ExtendingService_ExtenderConfigChanged(object sender, ExtenderConfigChangedEventArgs e)
        {
            if (ExtenderConfigChanged == null)
            {
                return;
            }

            lock (_extenderConfigChangedLock)
            {
                try
                {
                    if (e.ExtenderConfig == null)
                    {
                        throw new ArgumentNullException(nameof(e.ExtenderConfig));
                    }

                    Logger.Debug("Sub-service ExtenderConfig changed: " + e.ExtenderConfig + "; Sub-service: " + e.KsiService.ExtenderAddress);
                    _currentExtenderConfigList[e.KsiService] = e.ExtenderConfig;
                    RecalculateExtenderConfig();
                }
                catch (Exception ex)
                {
                    Logger.Warn("HA extender configuration change handling failed", ex);
                    throw;
                }
            }
        }
示例#2
0
        public void HAGetConfigResultsAndRemoveAllTest()
        {
            // A configuration request with 2 successful sub-requests is made.
            // Then a new configuration request is made with 2 unsuccessful sub-requests.
            // Both configuration are removed from cache.
            // ExtenderConfigChanged event handler should get result containing an exception.

            HAKsiService haService = GetHAService(
                new List <PduPayload>()
            {
                GetExtenderConfigResponsePayload(4, new List <string>()
                {
                    "uri-1"
                }, 1136073600, 2136073600)
            },
                new List <PduPayload>()
            {
                GetExtenderConfigResponsePayload(4, new List <string>()
                {
                    "uri-2"
                }, 1136073600, 2136073600)
            });

            haService.GetExtenderConfig();

            // change first service response so that request fails
            ((TestKsiService)haService.ExtendingServices[0]).ExtendingServiceProtocol.RequestResult =
                File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiService_ExtendResponsePdu_RequestId_1043101455));

            // change second service response so that request fails
            ((TestKsiService)haService.ExtendingServices[1]).ExtendingServiceProtocol.RequestResult =
                File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiService_ExtendResponsePdu_RequestId_1043101455));

            ExtenderConfigChangedEventArgs args = null;
            ManualResetEvent waitHandle         = new ManualResetEvent(false);

            haService.ExtenderConfigChanged += delegate(object sender, ExtenderConfigChangedEventArgs e)
            {
                args = e;
                waitHandle.Set();
            };

            HAKsiServiceException ex = Assert.Throws <HAKsiServiceException>(delegate
            {
                haService.GetExtenderConfig();
            });

            Assert.That(ex.Message.StartsWith("Could not get extender configuration"), "Unexpected exception message: " + ex.Message);

            waitHandle.WaitOne(1000);

            Assert.IsNotNull(args, "ExtenderConfigChangedEventArgs cannot be null.");
            Assert.IsNull(args.ExtenderConfig, "ExtenderConfigChangedEventArgs.ExtenderConfig cannot have value.");
            Assert.IsNotNull(args.Exception, "ExtenderConfigChangedEventArgs.Exception cannot be null.");
            Assert.AreEqual(haService, args.KsiService, "Unexpected ExtenderConfigChangedEventArgs.KsiService");
            Assert.That(args.Exception.Message.StartsWith("Could not get extender configuration"), "Unexpected exception message: " + args.Exception.Message);
        }
示例#3
0
        /// <summary>
        /// End get additional extender configuration data (async)
        /// </summary>
        /// <param name="asyncResult"></param>
        /// <returns>Extender configuration data</returns>
        public ExtenderConfig EndGetExtenderConfig(IAsyncResult asyncResult)
        {
            HAAsyncResult haAsyncResult          = GetHAAsyncResult(asyncResult);
            HAExtenderConfigRequestRunner runner = GetRequestRunner <HAExtenderConfigRequestRunner>(haAsyncResult);
            ExtenderConfig config = runner.EndGetExtenderConfig(haAsyncResult);

            if (config == null)
            {
                lock (_extenderConfigChangedLock)
                {
                    _currentExtenderConfigList.Clear();
                    _currentExtenderConfig = null;
                }

                HAKsiServiceException ex = new HAKsiServiceException("Could not get extender configuration.", runner.SubServiceErrors);
                Logger.Warn(ex);
                ExtenderConfigChangedEventArgs extenderConfigChangedEventArgs = new ExtenderConfigChangedEventArgs(ex, this);
                ExtenderConfigChanged?.Invoke(this, extenderConfigChangedEventArgs);
                throw ex;
            }

            // if sub-service config request failed then remove corresponding config from cache
            foreach (HAKsiSubServiceException ex in runner.SubServiceErrors)
            {
                if (ex.ThrownBySubService == null)
                {
                    continue;
                }

                lock (_extenderConfigChangedLock)
                {
                    if (_currentExtenderConfigList.ContainsKey(ex.ThrownBySubService))
                    {
                        _currentExtenderConfigList.Remove(ex.ThrownBySubService);
                        RecalculateExtenderConfig();
                    }
                }
            }

            return(config);
        }
示例#4
0
        public void HAGetConfigResultsAndRemoveOneTest()
        {
            // A configuration request with 2 successful sub-requests is made.
            // Then a new configuration request is made with 1 successful and 1 unsuccessful sub-requests.
            // Unsuccessful service config should be removed from cache and merged config should be recalculated

            HAKsiService haService = GetHAService(
                new List <PduPayload>()
            {
                GetExtenderConfigResponsePayload(4, new List <string>()
                {
                    "uri-1"
                }, 1136073601, 2136073601)
            },
                new List <PduPayload>()
            {
                GetExtenderConfigResponsePayload(4, new List <string>()
                {
                    "uri-2"
                }, 1136073601, 2136073601)
            });

            ManualResetEvent waitHandle = new ManualResetEvent(false);

            haService.ExtenderConfigChanged += delegate
            {
            };

            ExtenderConfig resultConf = haService.GetExtenderConfig();

            waitHandle.WaitOne(1000);

            Assert.AreEqual(4, resultConf.MaxRequests, "Unexpected max requests value");
            Assert.AreEqual(1, resultConf.ParentsUris.Count, "Unexpected parent uri count");
            Assert.AreEqual(1136073601, resultConf.CalendarFirstTime, "Unexpected calendar first time value");
            Assert.AreEqual(2136073601, resultConf.CalendarLastTime, "Unexpected calendar last time value");

            // change first service response so that request fails
            ((TestKsiService)haService.ExtendingServices[0]).ExtendingServiceProtocol.RequestResult =
                File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, Resources.KsiService_ExtendResponsePdu_RequestId_1043101455));

            // change second service response so that a valid configuration is returned
            TestKsiService newService = (TestKsiService)GetService(new List <PduPayload>()
            {
                GetExtendResponsePayload(Resources.KsiService_ExtendResponsePdu_RequestId_1043101455),
                GetExtenderConfigResponsePayload(3, new List <string>()
                {
                    "uri-2-changed"
                }, 1136073602, 2136073600)
            });

            ((TestKsiService)haService.ExtendingServices[1]).ExtendingServiceProtocol.RequestResult = newService.ExtendingServiceProtocol.RequestResult;

            ExtenderConfigChangedEventArgs args = null;

            waitHandle = new ManualResetEvent(false);

            haService.ExtenderConfigChanged += delegate(object sender, ExtenderConfigChangedEventArgs e)
            {
                args = e;
            };

            resultConf = haService.GetExtenderConfig();

            Assert.AreEqual(3, resultConf.MaxRequests, "Unexpected max requests value");
            Assert.AreEqual(1, resultConf.ParentsUris.Count, "Unexpected parent uri count");
            Assert.AreEqual("uri-2-changed", resultConf.ParentsUris[0], "Unexpected parent uri value at position 0");
            Assert.AreEqual(1136073602, resultConf.CalendarFirstTime, "Unexpected calendar first time value");
            Assert.AreEqual(2136073600, resultConf.CalendarLastTime, "Unexpected calendar last time value");

            waitHandle.WaitOne(1000);

            Assert.IsNotNull(args, "ExtenderConfigChangedEventArgs cannot be null.");
            Assert.AreEqual(resultConf, args.ExtenderConfig, "Unexpected ExtenderConfigChangedEventArgs.ExtenderConfig.");
            Assert.IsNull(args.Exception, "ExtenderConfigChangedEventArgs.Exception cannot have value.");
            Assert.AreEqual(haService, args.KsiService, "Unexpected ExtenderConfigChangedEventArgs.KsiService");
        }
示例#5
0
 private void Service_ExtenderConfigChanged(object sender, ExtenderConfigChangedEventArgs e)
 {
     _extenderConfig = e.ExtenderConfig;
     _waitHandle.Set();
 }