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; } } }
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); }
/// <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); }
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"); }
private void Service_ExtenderConfigChanged(object sender, ExtenderConfigChangedEventArgs e) { _extenderConfig = e.ExtenderConfig; _waitHandle.Set(); }