public async Task <SiteInfoWrapper> StartSiteMonitoring(bool siteInitiallyAvailable) { var siteUri = new Uri($"http://{Guid.NewGuid()}"); var refreshTime = RefreshPeriod.FromSeconds(3); var statusChecker = (FakeSiteStatusChecker)_serviceProvider.GetService <ISiteStatusChecker>(); if (siteInitiallyAvailable) { statusChecker.MakeAvailable(siteUri); } else { statusChecker.MakeUnavailable(siteUri); } var clientEventDispatcher = _serviceProvider.GetService <IClientOperationsDispatcher>(); await clientEventDispatcher.StartMonitoring(new StartMonitoringModel(siteUri, refreshTime)); var storage = _serviceProvider.GetService <ISiteStorage>(); var createdSiteInfo = (await storage.GetSitesInfo()).Single(x => x.Uri == siteUri); CheckUpdateSiteInfoReceived(); //first event occured when adding site to list var timerAction = _serviceProvider.GetService <ITimerAction>(); await timerAction.Execute(createdSiteInfo.Id, createdSiteInfo.Uri); CheckUpdateSiteInfoReceived(); //second event occured after update status timer tick return(new SiteInfoWrapper(createdSiteInfo.Id, createdSiteInfo.Uri)); }
public async Task ResetAllStatuses_Should_ResetAllSitesStatusToUnknown() { //Arrange var site1Id = Guid.NewGuid(); var site1Uri = new Uri($"http://{site1Id}"); var refreshTime1 = RefreshPeriod.FromSeconds(4); var site2Id = Guid.NewGuid(); var site2Uri = new Uri($"http://{site2Id}"); var refreshTime2 = RefreshPeriod.FromSeconds(3); await _storage.AddSiteInfo(site1Id, site1Uri, refreshTime1); await _storage.AddSiteInfo(site2Id, site2Uri, refreshTime2); await _storage.UpdateStatus(site1Id, SiteStatus.Offline); await _storage.UpdateStatus(site2Id, SiteStatus.Online); //Act await _storage.ResetAllStatuses(); //Assert var sitesIfo = await _storage.GetSitesInfo(); foreach (var siteInfoEntity in sitesIfo) { Assert.Equal(SiteStatus.Unknown, siteInfoEntity.Status); } }
public void Ctor_ShouldFail_IfUriIsNull() { //Arrange var refreshTime = RefreshPeriod.FromSeconds(4); //Act //Assert Assert.Throws <ArgumentNullException>("uri", () => new SiteInfoEntity(Guid.NewGuid(), null, refreshTime)); }
public async Task Start(Guid siteId, Uri uri, RefreshPeriod refreshPeriod) { var job = CreateJobDetail(siteId, uri); var trigger = Create(siteId, refreshPeriod); await _scheduler.ScheduleJob(job, trigger); }
private static ITrigger Create(Guid siteId, RefreshPeriod refreshPeriod) { return(TriggerBuilder.Create() .WithIdentity(siteId.ToString(), _jobGroup) .StartNow() .WithSimpleSchedule(x => x.WithIntervalInSeconds((int)refreshPeriod.Seconds).RepeatForever()) .Build()); }
public void Ctor_ShouldFail_IfIdNotSet() { //Arrange var siteUri = new Uri($"http://{Guid.NewGuid()}"); var refreshTime = RefreshPeriod.FromSeconds(4); //Act //Assert Assert.Throws <ArgumentOutOfRangeException>("id", () => new SiteInfoEntity(Guid.Empty, siteUri, refreshTime)); }
public async Task UpdateSiteInfo_Should_Fail_If_IdNotExist() { //Arrange var siteId = Guid.NewGuid(); var siteUri = new Uri($"http://{siteId}"); var refreshTime = RefreshPeriod.FromSeconds(4); //Act //Assert await Assert.ThrowsAsync <EntityNotExistException>(async() => await _storage.UpdateSiteInfo(siteId, siteUri, refreshTime)); }
public async Task UpdateSiteMonitoring(SiteInfoWrapper site) { var siteUri = new Uri($"http://{Guid.NewGuid()}"); var refreshTime = RefreshPeriod.FromSeconds(100); var clientEventDispatcher = _serviceProvider.GetService <IClientOperationsDispatcher>(); await clientEventDispatcher.UpdateMonitoring(new UpdateMonitoringModel(site.Id, siteUri, refreshTime)); CheckUpdateSiteInfoReceived(); }
public void SecondsProperty_Should_ReturnCreatedValue() { //Arrange var value = 5u; var refreshPeriod = RefreshPeriod.FromSeconds(value); //Act var result = refreshPeriod.Seconds; //Assert Assert.Equal(value, result); }
public Task AddSiteInfo(Guid id, Uri uri, RefreshPeriod refreshPeriod) { lock (_lockObject) { if (_siteData.ContainsKey(id)) { throw new EntityAlreadyExistException(); } _siteData.TryAdd(id, new SiteInfoEntity(id, uri, refreshPeriod)); return(Task.CompletedTask); } }
public void Ctor_Should_CreateEntity_WithUnknownStatus() { //Arrange var siteId = Guid.NewGuid(); var siteUri = new Uri($"http://{siteId}"); var refreshTime = RefreshPeriod.FromSeconds(4); //Act var entity = new SiteInfoEntity(siteId, siteUri, refreshTime); //Assert Assert.Equal(SiteStatus.Unknown, entity.Status); }
public void Ctor_ShouldSavePassedParams() { //Arrange var siteId = Guid.NewGuid(); var siteUri = new Uri($"http://{siteId}"); var refreshTime = RefreshPeriod.FromSeconds(4); //Act var entity = new SiteInfoEntity(siteId, siteUri, refreshTime); //Assert Assert.Equal(siteId, entity.Id); Assert.Equal(siteUri, entity.Uri); Assert.Equal(refreshTime, entity.RefreshTimeInSeconds); }
public Task UpdateSiteInfo(Guid id, Uri uri, RefreshPeriod refreshPeriod) { lock (_lockObject) { if (!_siteData.ContainsKey(id)) { throw new EntityNotExistException(); } var siteInfo = new SiteInfoEntity(id, uri, refreshPeriod); _siteData[id] = siteInfo; return(Task.CompletedTask); } }
public async Task RemoveSiteInfo_Should_RemoveEntityFromStorage() { //Arrange var siteId = Guid.NewGuid(); var siteUri = new Uri($"http://{siteId}"); var refreshTime = RefreshPeriod.FromSeconds(4); await _storage.AddSiteInfo(siteId, siteUri, refreshTime); //Act await _storage.RemoveSiteInfo(siteId); //Assert var siteInfos = await _storage.GetSitesInfo(); Assert.DoesNotContain(siteId, siteInfos.Select(x => x.Id)); }
public void SetStatus_Should_ChangeStatus() { //Arrange var siteId = Guid.NewGuid(); var siteUri = new Uri($"http://{siteId}"); var refreshTime = RefreshPeriod.FromSeconds(4); var entity = new SiteInfoEntity(siteId, siteUri, refreshTime); var oldStatus = entity.Status; var newStatus = SiteStatus.Offline; //Act entity.SetStatus(newStatus); //Assert Assert.NotEqual(oldStatus, newStatus); Assert.Equal(entity.Status, newStatus); }
public async Task UpdateStatus_Should_ApplyNewStatus() { //Arrange var siteId = Guid.NewGuid(); var siteUri = new Uri($"http://{siteId}"); var refreshTime = RefreshPeriod.FromSeconds(4); await _storage.AddSiteInfo(siteId, siteUri, refreshTime); var oldStatus = (await _storage.GetSiteInfo(siteId)).Status; var newStatus = SiteStatus.Offline; //Act await _storage.UpdateStatus(siteId, newStatus); //Assert Assert.NotEqual(oldStatus, newStatus); Assert.Equal(SiteStatus.Offline, newStatus); }
public async Task Execute_ShouldNot_NotifyClients_If_StatusNotChanged() { //Arrange var siteId = Guid.NewGuid(); var siteUri = new Uri($"http://{siteId}"); var siteInfo = new SiteInfoEntity(siteId, siteUri, RefreshPeriod.FromSeconds(3)); siteInfo.SetStatus(SiteStatus.Online); _siteStorageMock.Setup(x => x.GetSiteInfo(siteId)).ReturnsAsync(siteInfo); _siteStatusCheckerMock.Setup(x => x.GetStatus(siteUri)).ReturnsAsync(StatusCheckResult.Success); //Act await _target.Execute(siteId, siteUri); //Assert _clientNotifierMock.Verify(x => x.UpdateSitesInfo(), Times.Never); }
public async Task GetSiteInfo_Should_ReturnAllSiteInfo() { //Arrange var siteId = Guid.NewGuid(); var siteUri = new Uri($"http://{siteId}"); var refreshTime = RefreshPeriod.FromSeconds(4); await _storage.AddSiteInfo(siteId, siteUri, refreshTime); //Act var result = await _storage.GetSiteInfo(siteId); //Assert Assert.Equal(siteId, result.Id); Assert.Equal(siteUri, result.Uri); Assert.Equal(refreshTime, result.RefreshTimeInSeconds); Assert.Equal(SiteStatus.Unknown, result.Status); }
public ClientOperationsDispatcherTests() { _siteStorageMock = new Mock <ISiteStorage>(); _trackingTimerMock = new Mock <ITrackingTimer>(); _clientNotifierMock = new Mock <IClientNotifier>(); var idGeneratorMock = new Mock <IIdGenerator>(); _siteId = Guid.NewGuid(); _siteUri = new Uri($"http://{_siteId}"); _refreshTime = RefreshPeriod.FromSeconds(4); idGeneratorMock.Setup(x => x.Generate()).Returns(_siteId); _target = new ClientOperationsDispatcher.ClientOperationsDispatcher( _siteStorageMock.Object, _trackingTimerMock.Object, idGeneratorMock.Object, _clientNotifierMock.Object); }
public async Task UpdateSiteInfo_Should_ApplyNewInfo() { //Arrange var siteId = Guid.NewGuid(); var siteUri = new Uri($"http://{siteId}"); var refreshTime = RefreshPeriod.FromSeconds(4); await _storage.AddSiteInfo(siteId, siteUri, refreshTime); var siteUri2 = new Uri($"http://{Guid.NewGuid()}"); var refreshTime2 = RefreshPeriod.FromSeconds(5); //Act await _storage.UpdateSiteInfo(siteId, siteUri2, refreshTime2); //Assert var updatedSiteData = await _storage.GetSiteInfo(siteId); Assert.Equal(siteId, updatedSiteData.Id); Assert.Equal(siteUri2, updatedSiteData.Uri); Assert.Equal(refreshTime2, updatedSiteData.RefreshTimeInSeconds); Assert.Equal(SiteStatus.Unknown, updatedSiteData.Status); }
public async Task GetSitesInfo_Should_Return_AllSitesInfo() { //Arrange var site1Id = Guid.NewGuid(); var site1Uri = new Uri($"http://{site1Id}"); var refreshTime1 = RefreshPeriod.FromSeconds(4); var site2Id = Guid.NewGuid(); var site2Uri = new Uri($"http://{site2Id}"); var refreshTime2 = RefreshPeriod.FromSeconds(3); await _storage.AddSiteInfo(site1Id, site1Uri, refreshTime1); await _storage.AddSiteInfo(site2Id, site2Uri, refreshTime2); //Act var result = await _storage.GetSitesInfo(); //Assert Assert.Equal(2, result.Count); Assert.Contains(site1Id, result.Select(x => x.Id)); Assert.Contains(site2Id, result.Select(x => x.Id)); }
public async Task StartTracking_Should_RunTrackingTimers() { //Arrange var site1Id = Guid.NewGuid(); var site1Uri = new Uri($"http://{site1Id}"); var refreshTime1 = RefreshPeriod.FromSeconds(4); var site2Id = Guid.NewGuid(); var site2Uri = new Uri($"http://{site2Id}"); var refreshTime2 = RefreshPeriod.FromSeconds(3); _siteStorageMock.Setup(x => x.GetSitesInfo()).ReturnsAsync(new List <SiteInfoEntity>() { new SiteInfoEntity(site1Id, site1Uri, refreshTime1), new SiteInfoEntity(site2Id, site2Uri, refreshTime2) }); //Act await _target.StartTracking(); //Assert _trackingTimerMock.Verify(x => x.Start(site1Id, site1Uri, refreshTime1), Times.Once); _trackingTimerMock.Verify(x => x.Start(site2Id, site2Uri, refreshTime2), Times.Once); }
public UpdateMonitoringModel(Guid id, Uri uri, RefreshPeriod refreshPeriod) { Id = id != default ? id : throw new ArgumentOutOfRangeException(nameof(id)); Uri = uri ?? throw new ArgumentNullException(nameof(uri)); RefreshTimeInSeconds = refreshPeriod ?? throw new ArgumentNullException(nameof(refreshPeriod)); }
public Task Update(Guid siteId, Uri uri, RefreshPeriod refreshPeriod) { return(Task.CompletedTask); }
public async Task Update(Guid siteId, Uri uri, RefreshPeriod refreshPeriod) { await Stop(siteId); await Start(siteId, uri, refreshPeriod); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await _systemOperationsDispatcher.StartTracking(); await _clientOperationsDispatcher.StartMonitoring(new StartMonitoringModel(new Uri("http://ya.ru"), RefreshPeriod.FromSeconds(3))); await _clientOperationsDispatcher.StartMonitoring(new StartMonitoringModel(new Uri("http://notexisturl1234567890.ru"), RefreshPeriod.FromSeconds(4))); await _clientOperationsDispatcher.StartMonitoring(new StartMonitoringModel(new Uri("http://localhost:5000/alwaysOk"), RefreshPeriod.FromSeconds(5))); await _clientOperationsDispatcher.StartMonitoring(new StartMonitoringModel(new Uri("http://localhost:5000/alwaysFail"), RefreshPeriod.FromSeconds(5))); await _clientOperationsDispatcher.StartMonitoring(new StartMonitoringModel(new Uri("http://localhost:5000/alwaysLong"), RefreshPeriod.FromSeconds(5))); await _clientOperationsDispatcher.StartMonitoring(new StartMonitoringModel(new Uri("http://localhost:5000/random"), RefreshPeriod.FromSeconds(1))); }
public async Task UpdateRecord(Guid id, string uri, ulong refreshTme) { await _availabilityTracker.UpdateMonitoring(new UpdateMonitoringModel(id, new Uri(uri), RefreshPeriod.FromSeconds(refreshTme))); }
public async Task CreateRecord(string uri, ulong refreshTme) { await _availabilityTracker.StartMonitoring(new StartMonitoringModel(new Uri(uri), RefreshPeriod.FromSeconds(refreshTme))); }
public void FromSeconds_ShouldFail_IfValueIsZero() { //Act //Assert Assert.Throws <ArgumentOutOfRangeException>(() => RefreshPeriod.FromSeconds(0)); }
public StartMonitoringModel(Uri uri, RefreshPeriod refreshPeriod) { Uri = uri ?? throw new ArgumentNullException(nameof(uri)); RefreshTimeInSeconds = refreshPeriod ?? throw new ArgumentNullException(nameof(refreshPeriod)); }