public void StartInitializesRunningScriptWithNameAndId()
        {
            // Arrange
            ILogger logger       = new Mock <ILogger>().Object;
            var     scriptId     = "testScriptId";
            var     scriptName   = "testScriptName";
            var     runspaceMock = new Mock <IRunspace>();

            var runningScriptExecutionResultMock = new Mock <IScriptExecutionResult>();

            runningScriptExecutionResultMock.Setup(m => m.State).Returns(ScriptState.Running);
            runningScriptExecutionResultMock.Setup(m => m.OutputObjectCollection).Returns(new OutputObjectCollection());

            var completeScriptExecutionResultMock = new Mock <IScriptExecutionResult>();

            completeScriptExecutionResultMock.Setup(m => m.State).Returns(ScriptState.Success);
            completeScriptExecutionResultMock.Setup(m => m.OutputObjectCollection).Returns(new OutputObjectCollection());

            runspaceMock.Setup(m => m.GetScript(scriptId)).Returns(() => {
                return(runningScriptExecutionResultMock.Object);
            });

            var scriptExecutionWriterMock = new Mock <IScriptExecutionStoreProvider>();

            var runningNamedScriptExecution = new NamedScriptExecutionMock {
                Name  = scriptName,
                Id    = scriptId,
                State = ScriptState.Running
            };

            scriptExecutionWriterMock.Setup(m => m.WriteScriptExecution(runningNamedScriptExecution)).Verifiable();

            var testObject = new PollingScriptExecutionPersister(logger);

            // Act
            testObject.Start(runspaceMock.Object, scriptId, scriptName, scriptExecutionWriterMock.Object);

            // Assert
            scriptExecutionWriterMock.Verify(x => x.WriteScriptExecution(runningNamedScriptExecution), Times.AtLeastOnce());
        }
Exemple #2
0
        public void PollsScriptsStateUntilComplete()
        {
            // Arrange
            ILogger logger       = new Mock <ILogger>().Object;
            var     scriptId     = "testScriptId";
            var     scriptName   = "testScriptName";
            var     runspaceMock = new Mock <IRunspace>();
            var     pollCount    = 0;
            long    completed    = 0;

            var runningScriptExecutionResultMock = new Mock <IScriptExecutionResult>();

            runningScriptExecutionResultMock.Setup(m => m.State).Returns(ScriptState.Running);
            runningScriptExecutionResultMock.Setup(m => m.OutputObjectCollection).Returns(new OutputObjectCollection());

            var completeScriptExecutionResultMock = new Mock <IScriptExecutionResult>();

            completeScriptExecutionResultMock.Setup(m => m.State).Returns(ScriptState.Success);
            completeScriptExecutionResultMock.Setup(m => m.OutputObjectCollection).Returns(new OutputObjectCollection());

            runspaceMock.Setup(m => m.GetScript(scriptId)).Returns(() => {
                Interlocked.Increment(ref pollCount);
                if (pollCount < 3)
                {
                    return(runningScriptExecutionResultMock.Object);
                }
                else
                {
                    return(completeScriptExecutionResultMock.Object);
                }
            });

            var scriptExecutionWriterMock   = new Mock <IScriptExecutionStoreProvider>();
            var runningNamedScriptExecution = new NamedScriptExecutionMock {
                Name  = scriptName,
                State = ScriptState.Running
            };

            scriptExecutionWriterMock.Setup(m => m.WriteScriptExecution(runningNamedScriptExecution)).Verifiable();
            var completeNamedScriptExecution = new NamedScriptExecutionMock {
                Name  = scriptName,
                State = ScriptState.Success
            };

            scriptExecutionWriterMock.Setup(m => m.WriteScriptExecution(completeNamedScriptExecution)).Verifiable();

            var testObject = new PollingScriptExecutionPersister(logger);

            // Act
            testObject.ScriptResultPersisted += (object sender, ScriptResultStoredEventArgs e) => {
                Interlocked.Exchange(ref completed, 1);
            };
            testObject.Start(runspaceMock.Object, scriptId, scriptName, scriptExecutionWriterMock.Object);

            while (Interlocked.Read(ref completed) == 0)
            {
                Thread.Sleep(500);
            }

            // Assert
            Assert.IsTrue(pollCount >= 3);
            scriptExecutionWriterMock.Verify(x => x.WriteScriptExecution(runningNamedScriptExecution), Times.Exactly(2));
            scriptExecutionWriterMock.Verify(x => x.WriteScriptExecution(completeNamedScriptExecution), Times.Exactly(1));
        }