public void Start_RespondsToCancellationRequest() { var crdList = new TestCustomResourceList(); _k8sClient.Setup(p => p.ListNamespacedCustomObjectWithHttpMessagesAsync(It.IsAny <CustomResourceDefinition>())) .Returns(Task.FromResult(new HttpOperationResponse <object> { Body = new object(), Response = new HttpResponseMessage { Content = new StringContent(JsonConvert.SerializeObject(crdList)) } })); var watcher = new CustomResourceWatcher <TestCustomResourceList, TestCustomResource>( _logger.Object, _k8sClient.Object, _customResourceDefinition, _cancellationTokenSource.Token, (eventType, item) => { }); watcher.Start(100); Thread.Sleep(150); _cancellationTokenSource.Cancel(); Thread.Sleep(100); _k8sClient.Verify(v => v.ListNamespacedCustomObjectWithHttpMessagesAsync(It.IsAny <CustomResourceDefinition>()), Times.AtLeastOnce()); _logger.VerifyLogging($"No CRD found in type: {_customResourceDefinition.ApiVersion}/{_customResourceDefinition.Kind}", LogLevel.Warning, Times.AtLeastOnce()); _logger.VerifyLogging($"Cancallation requested, CRD watcher stopped.", LogLevel.Information, Times.Once()); }
private async Task BackgroundProcessing(CancellationToken cancellationToken) { _logger.Log(LogLevel.Information, "Job Store Hosted Service is running."); _watcher = new CustomResourceWatcher <JobCustomResourceList, JobCustomResource>( _loggerFactory.CreateLogger <CustomResourceWatcher <JobCustomResourceList, JobCustomResource> >(), _kubernetesClient, CustomResourceDefinition.JobsCrd, cancellationToken, HandleJobEvents); await Task.Run(() => _watcher.Start(_configuration.Value.CrdReadIntervals)); }
protected async Task BackgroundProcessing(CancellationToken stoppingToken) { if (_configuration.Value.ReadAeTitlesFromCrd) { _logger.Log(LogLevel.Information, "Kubernetes CRD Monitor Hosted Service is running."); _configuration.Value.Dicom.Scp.AeTitles.Clear(); _lLocalAeTitleCrdWatcher = new CustomResourceWatcher <ClaraApplicationEntityCustomResourceList, ClaraApplicationEntityCustomResource>( _loggerFactory.CreateLogger <CustomResourceWatcher <ClaraApplicationEntityCustomResourceList, ClaraApplicationEntityCustomResource> >(), _kubernetesClient, CustomResourceDefinition.ClaraAeTitleCrd, stoppingToken, HandleClaraAeTitleEvents); await Task.Run(() => _lLocalAeTitleCrdWatcher.Start(_configuration.Value.CrdReadIntervals)); _configuration.Value.Dicom.Scp.Sources.Clear(); _sourceAeTitleCrdWatcher = new CustomResourceWatcher <SourceApplicationEntityCustomResourceList, SourceApplicationEntityCustomResource>( _loggerFactory.CreateLogger <CustomResourceWatcher <SourceApplicationEntityCustomResourceList, SourceApplicationEntityCustomResource> >(), _kubernetesClient, CustomResourceDefinition.SourceAeTitleCrd, stoppingToken, HandleSourceAeTitleEvents); await Task.Run(() => _sourceAeTitleCrdWatcher.Start(_configuration.Value.CrdReadIntervals)); _configuration.Value.Dicom.Scu.Destinations.Clear(); _destinationAeTitleCrdWatcher = new CustomResourceWatcher <DestinationApplicationEntityCustomResourceList, DestinationApplicationEntityCustomResource>( _loggerFactory.CreateLogger <CustomResourceWatcher <DestinationApplicationEntityCustomResourceList, DestinationApplicationEntityCustomResource> >(), _kubernetesClient, CustomResourceDefinition.DestinationAeTitleCrd, stoppingToken, HandleDestinationAeTitleEvents); await Task.Run(() => _destinationAeTitleCrdWatcher.Start(_configuration.Value.CrdReadIntervals)); } else { _logger.Log(LogLevel.Information, "Reading AE Title from CRD is disabled."); } }
public void Start_HandledCrdEvents() { var crdList1 = TestData1(); var crdList2 = TestData2(); var crdList3 = TestData3(); var crdList4 = TestData4(); var crdList5 = TestData5(); _k8sClient.SetupSequence(p => p.ListNamespacedCustomObjectWithHttpMessagesAsync(It.IsAny <CustomResourceDefinition>())) .Returns(Task.FromResult(new HttpOperationResponse <object> { Body = new object(), Response = new HttpResponseMessage { Content = new StringContent(JsonConvert.SerializeObject(crdList1)) } })) .Returns(Task.FromResult(new HttpOperationResponse <object> { Body = new object(), Response = new HttpResponseMessage { Content = new StringContent(JsonConvert.SerializeObject(crdList2)) } })) .Returns(Task.FromResult(new HttpOperationResponse <object> { Body = new object(), Response = new HttpResponseMessage { Content = new StringContent(JsonConvert.SerializeObject(crdList3)) } })) .Returns(Task.FromResult(new HttpOperationResponse <object> { Body = new object(), Response = new HttpResponseMessage { Content = new StringContent(JsonConvert.SerializeObject(crdList4)) } })) .Returns(Task.FromResult(new HttpOperationResponse <object> { Body = new object(), Response = new HttpResponseMessage { Content = new StringContent(JsonConvert.SerializeObject(crdList5)) } })); var countdownEvent = new CountdownEvent(9); var callCount = 0; var addedCount = 0; var deletedCount = 0; var watcher = new CustomResourceWatcher <TestCustomResourceList, TestCustomResource>( _logger.Object, _k8sClient.Object, _customResourceDefinition, _cancellationTokenSource.Token, (eventType, item) => { Console.WriteLine($"Call #{callCount}"); switch (eventType) { case WatchEventType.Added: Console.WriteLine($"Added {item.Metadata.Name}"); addedCount++; break; case WatchEventType.Deleted: Console.WriteLine($"Deleted {item.Metadata.Name}"); deletedCount++; break; } countdownEvent.Signal(); }); watcher.Start(100); countdownEvent.Wait(); _k8sClient.Verify(v => v.ListNamespacedCustomObjectWithHttpMessagesAsync(It.IsAny <CustomResourceDefinition>()), Times.AtLeastOnce()); _logger.VerifyLogging($"No CRD found in type: {_customResourceDefinition.Namespace}/{_customResourceDefinition.PluralName}", LogLevel.Warning, Times.Never()); Assert.Equal(6, addedCount); Assert.Equal(3, deletedCount); }