public void Revert_MustDisconnect()
        {
            service.Setup(s => s.Disconnect()).Returns(true).Callback(() => runtimeHost.Raise(h => h.ServiceDisconnected += null));
            service
            .Setup(s => s.StopSession(It.IsAny <Guid>()))
            .Returns(new CommunicationResult(true))
            .Callback(() => runtimeHost.Raise(h => h.ServiceSessionStopped += null));

            PerformNormally();

            var result = sut.Revert();

            service.Verify(s => s.Disconnect(), Times.Once);
            Assert.AreEqual(OperationResult.Success, result);
        }
        public void Revert_MustFailIfServiceNotDisconnectedWithinTimeout()
        {
            const int TIMEOUT = 50;

            var after  = default(DateTime);
            var before = default(DateTime);

            sut = new ServiceOperation(logger.Object, runtimeHost.Object, service.Object, sessionContext, TIMEOUT);

            service.Setup(s => s.Disconnect()).Returns(true);
            service
            .Setup(s => s.StopSession(It.IsAny <Guid>()))
            .Returns(new CommunicationResult(true))
            .Callback(() => runtimeHost.Raise(h => h.ServiceSessionStopped += null));

            PerformNormally();

            before = DateTime.Now;
            var result = sut.Revert();

            after = DateTime.Now;

            service.Verify(s => s.Disconnect(), Times.Once);

            Assert.AreEqual(OperationResult.Failed, result);
            Assert.IsTrue(after - before >= new TimeSpan(0, 0, 0, 0, TIMEOUT));
        }
        public void Revert_MustDisconnect()
        {
            service.Setup(s => s.Disconnect()).Returns(true);
            service.Setup(s => s.StopSession(It.IsAny <Guid>())).Returns(new CommunicationResult(true)).Callback(() => serviceEvent.Set());
            service.Setup(s => s.RunSystemConfigurationUpdate()).Returns(new CommunicationResult(true));

            PerformNormally();

            var result = sut.Revert();

            service.Verify(s => s.Disconnect(), Times.Once);

            Assert.AreEqual(OperationResult.Success, result);
        }
        public void Revert_MustFailIfSessionNotStoppedWithinTimeout()
        {
            const int TIMEOUT = 50;

            var after  = default(DateTime);
            var before = default(DateTime);

            service.Setup(s => s.StopSession(It.IsAny <Guid>())).Returns(new CommunicationResult(true));
            sut = new ServiceOperation(logger.Object, runtimeHost.Object, service.Object, sessionContext, TIMEOUT, userInfo.Object);

            PerformNormally();

            before = DateTime.Now;
            var result = sut.Revert();

            after = DateTime.Now;

            service.Verify(s => s.StopSession(It.IsAny <Guid>()), Times.Once);
            service.Verify(s => s.Disconnect(), Times.Once);
            service.Verify(s => s.RunSystemConfigurationUpdate(), Times.Never);

            Assert.AreEqual(OperationResult.Failed, result);
            Assert.IsTrue(after - before >= new TimeSpan(0, 0, 0, 0, TIMEOUT));
        }