Exemple #1
0
        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));
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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());
 }
Exemple #6
0
        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));
        }
Exemple #7
0
        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));
        }
Exemple #8
0
        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);
            }
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
            }
        }
Exemple #14
0
        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));
        }
Exemple #15
0
        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);
        }
Exemple #16
0
        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);
        }
Exemple #17
0
        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);
        }
Exemple #18
0
        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);
        }
Exemple #19
0
        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);
        }
Exemple #20
0
        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);
        }
Exemple #21
0
        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));
        }
Exemple #22
0
        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));
 }
Exemple #24
0
 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));
 }
Exemple #30
0
 public StartMonitoringModel(Uri uri, RefreshPeriod refreshPeriod)
 {
     Uri = uri ?? throw new ArgumentNullException(nameof(uri));
     RefreshTimeInSeconds = refreshPeriod ?? throw new ArgumentNullException(nameof(refreshPeriod));
 }