public void Perform_MustConnectToService()
        {
            service.Setup(s => s.Connect(null, true)).Returns(true);
            settings.Service.Policy = ServicePolicy.Mandatory;

            sut.Perform();

            service.Setup(s => s.Connect(null, true)).Returns(true);
            settings.Service.Policy = ServicePolicy.Optional;

            sut.Perform();

            service.Verify(s => s.Connect(null, true), Times.Exactly(2));
        }
        public void Perform_MustFailIfSessionNotStartedWithinTimeout()
        {
            const int TIMEOUT = 50;

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

            service.SetupGet(s => s.IsConnected).Returns(true);
            service.Setup(s => s.Connect(null, true)).Returns(true);
            service.Setup(s => s.StartSession(It.IsAny <ServiceConfiguration>())).Returns(new CommunicationResult(true));

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

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

            after = DateTime.Now;

            service.Verify(s => s.StartSession(It.IsAny <ServiceConfiguration>()), Times.Once);

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