public void WriteScriptExecutionDataStreams(ScriptExecutionDataStreams scriptExecutionDataStreams) { _scriptExecutionStreamsDataLock.EnterWriteLock(); try { _scriptExecutionStreams = scriptExecutionDataStreams; } finally { _scriptExecutionStreamsDataLock.ExitWriteLock(); } }
public void ReadScriptExecutionStreams() { // Arrange var fileSystem = new MockFileSystem(); var scriptExecutionStreams = new ScriptExecutionDataStreams(new DataStreams() { Information = new ScriptExecutionStorage.DataTypes.StreamRecord[] { new ScriptExecutionStorage.DataTypes.StreamRecord { Time = DateTime.Today, Message = "Info" } }, Debug = new ScriptExecutionStorage.DataTypes.StreamRecord[] { new ScriptExecutionStorage.DataTypes.StreamRecord { Time = DateTime.Today, Message = "Debug" } }, Error = new ScriptExecutionStorage.DataTypes.StreamRecord[] { new ScriptExecutionStorage.DataTypes.StreamRecord { Time = DateTime.Today, Message = "Error" } }, Verbose = new ScriptExecutionStorage.DataTypes.StreamRecord[] { new ScriptExecutionStorage.DataTypes.StreamRecord { Time = DateTime.Today, Message = "Verbose" } }, Warning = new ScriptExecutionStorage.DataTypes.StreamRecord[] { new ScriptExecutionStorage.DataTypes.StreamRecord { Time = DateTime.Today, Message = "Warning" } } }); var scriptExecutionJson = JsonConvert.SerializeObject(_scriptExecution); var scriptExecutionStreamsJson = JsonConvert.SerializeObject(scriptExecutionStreams); fileSystem.Directory.CreateDirectory(Path.Combine(_rootFolder, _userId, _scriptId)); fileSystem.File.WriteAllText(Path.Combine(_rootFolder, _userId, _scriptId, ScriptExecutionFileNames.ScriptExecution), scriptExecutionJson); fileSystem.File.WriteAllText(Path.Combine(_rootFolder, _userId, _scriptId, ScriptExecutionFileNames.ScriptExecutionStreams), scriptExecutionStreamsJson); // Act var fileStoreReader = new ScriptExecutionFileReader(_logger, _rootFolder, _userId, _scriptId, fileSystem); var actual = fileStoreReader.ReadScriptExecutionDataStreams(); // Assert Assert.AreEqual(scriptExecutionStreams.Streams.Debug[0].Time, actual.Streams.Debug[0].Time); Assert.AreEqual(scriptExecutionStreams.Streams.Debug[0].Message, actual.Streams.Debug[0].Message); Assert.AreEqual(scriptExecutionStreams.Streams.Information[0].Time, actual.Streams.Information[0].Time); Assert.AreEqual(scriptExecutionStreams.Streams.Information[0].Message, actual.Streams.Information[0].Message); Assert.AreEqual(scriptExecutionStreams.Streams.Warning[0].Time, actual.Streams.Warning[0].Time); Assert.AreEqual(scriptExecutionStreams.Streams.Warning[0].Message, actual.Streams.Warning[0].Message); Assert.AreEqual(scriptExecutionStreams.Streams.Error[0].Time, actual.Streams.Error[0].Time); Assert.AreEqual(scriptExecutionStreams.Streams.Error[0].Message, actual.Streams.Error[0].Message); Assert.AreEqual(scriptExecutionStreams.Streams.Verbose[0].Time, actual.Streams.Verbose[0].Time); Assert.AreEqual(scriptExecutionStreams.Streams.Verbose[0].Message, actual.Streams.Verbose[0].Message); }
public ScriptExecutionDataStreams ReadScriptExecutionDataStreams() { ScriptExecutionDataStreams result = null; if (FileExists(ScriptExecutionFileNames.ScriptExecution)) { var jsonContent = GetFileContent(ScriptExecutionFileNames.ScriptExecutionStreams); try { result = JsonConvert.DeserializeObject <ScriptExecutionDataStreams>(jsonContent); } catch (Exception exc) { _logger.Log(LogLevel.Error, exc.ToString()); } } return(result); }
public void DifferentUserNameFormatsStoreFiles() { foreach (var userId in new[] { "*****@*****.**", "VSPHERE.LOCAL/Administrator", "VSPHERE.LOCAL\\Administrator" }) { // Arrange var fileSystem = new MockFileSystem(); var logger = new Mock <ILogger>(); var rootFolder = "c:\\scripts"; var testId = "testscript"; var fileStoreProvider = new ScriptExecutionFileStoreProvider(logger.Object, rootFolder, userId, testId, fileSystem); var scriptResult = new ScriptResult( new ScriptExecutionResponse( testId, "success", outputObjectCollection: new VMware.ScriptRuntimeService.RunspaceClient.Bindings.Model.OutputObjectCollection("TextResult"), dataStreams: new ScriptRuntimeService.RunspaceClient.Bindings.Model.ScriptExecutionStreams( new List <ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord>(new[] { new ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord { Time = DateTime.Today, Message = "InfoStream" } })))); var scriptExecution = new NamedScriptExecution( "testScript", scriptResult); var scriptExecutionOutput = new ScriptExecutionOutput(scriptResult); var scriptExecutionStreams = new ScriptExecutionDataStreams(scriptResult.Streams); // Act fileStoreProvider.WriteScriptExecution(scriptExecution); fileStoreProvider.WriteScriptExecutionOutput(scriptExecutionOutput); fileStoreProvider.WriteScriptExecutionDataStreams(scriptExecutionStreams); fileStoreProvider.Flush(); // Assert Assert.IsTrue(fileSystem.Directory.Exists(Path.Combine(rootFolder, userId, testId))); Assert.IsTrue(fileSystem.File.Exists(Path.Combine(rootFolder, userId, testId, ScriptExecutionFileNames.ScriptExecution))); Assert.IsTrue(fileSystem.File.Exists(Path.Combine(rootFolder, userId, testId, ScriptExecutionFileNames.ScriptExecutionOutput))); Assert.IsTrue(fileSystem.File.Exists(Path.Combine(rootFolder, userId, testId, ScriptExecutionFileNames.ScriptExecutionStreams))); } }
public void WriteReadDontProduceFiles() { // Arrange var fileSystem = new MockFileSystem(); var logger = new Mock <ILogger>(); var rootFolder = "c:\\scripts"; var userId = "testuser"; var testId = "testscript"; var fileStoreProvider = new ScriptExecutionFileStoreProvider(logger.Object, rootFolder, userId, testId, fileSystem); var scriptResult = new ScriptResult( new ScriptExecutionResponse( testId, "success", outputObjectCollection: new VMware.ScriptRuntimeService.RunspaceClient.Bindings.Model.OutputObjectCollection("TextResult"), dataStreams: new ScriptRuntimeService.RunspaceClient.Bindings.Model.ScriptExecutionStreams( new List <ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord>(new[] { new ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord { Time = DateTime.Today, Message = "InfoStream" } })))); var scriptExecution = new NamedScriptExecution( "testScript", scriptResult); var scriptExecutionOutput = new ScriptExecutionOutput(scriptResult); var scriptExecutionStreams = new ScriptExecutionDataStreams(scriptResult.Streams); // Act fileStoreProvider.WriteScriptExecution(scriptExecution); fileStoreProvider.WriteScriptExecutionOutput(scriptExecutionOutput); fileStoreProvider.WriteScriptExecutionDataStreams(scriptExecutionStreams); fileStoreProvider.ReadScriptExecution(); fileStoreProvider.ReadScriptExecutionOutput(); fileStoreProvider.ReadScriptExecutionDataStreams(); fileStoreProvider.WriteScriptExecution(scriptExecution); fileStoreProvider.WriteScriptExecutionOutput(scriptExecutionOutput); fileStoreProvider.WriteScriptExecutionDataStreams(scriptExecutionStreams); // Assert Assert.IsEmpty(fileSystem.Directory.GetFileSystemEntries(Path.Combine(rootFolder, userId, testId))); }
public void FilesContentIsCorrect() { // Arrange var fileSystem = new MockFileSystem(); var logger = new Mock <ILogger>(); var rootFolder = "c:\\scripts"; var userId = "testuser"; var scriptId = "testscript"; var scriptName = "MyTestScript"; var scriptState = "success"; var scriptReason = "ScriptReason"; var scriptOutputObjectFormat = ScriptExecutionResponse.OutputObjectsFormatEnum.Json; var scriptStreams = new ScriptRuntimeService.RunspaceClient.Bindings.Model.ScriptExecutionStreams( new List <ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord>(new[] { new ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord { Time = DateTime.Today, Message = "InfoStream" } }), new List <ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord>(new[] { new ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord { Time = DateTime.Today, Message = "ErrorStream" } }), new List <ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord>(new[] { new ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord { Time = DateTime.Today, Message = "WarningStream" } }), new List <ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord>(new[] { new ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord { Time = DateTime.Today, Message = "DebugStream" } }), new List <ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord>(new[] { new ScriptRuntimeService.RunspaceClient.Bindings.Model.StreamRecord { Time = DateTime.Today, Message = "VerboseStream" } })); var scriptJsonOutput = new ScriptRuntimeService.RunspaceClient.Bindings.Model.OutputObjectCollection(serializedObjects: new List <string>(new [] { "{'name':'JsonResult'}" })); var fileStoreProvider = new ScriptExecutionFileStoreProvider(logger.Object, rootFolder, userId, scriptId, fileSystem); var scriptResult = new ScriptResult( new ScriptExecutionResponse( scriptId, scriptState, scriptReason, scriptJsonOutput, scriptStreams, scriptOutputObjectFormat)); var scriptExecution = new NamedScriptExecution( scriptName, scriptResult); var scriptExecutionOutput = new ScriptExecutionOutput(scriptResult); var scriptExecutionStreams = new ScriptExecutionDataStreams(scriptResult.Streams); // Act fileStoreProvider.WriteScriptExecution(scriptExecution); fileStoreProvider.WriteScriptExecutionOutput(scriptExecutionOutput); fileStoreProvider.WriteScriptExecutionDataStreams(scriptExecutionStreams); fileStoreProvider.Flush(); // Read Actual Files Content var scriptExecutionFileContent = fileSystem.File.ReadAllText(Path.Combine(rootFolder, userId, scriptId, ScriptExecutionFileNames.ScriptExecution)); var scriptExecutionOutputFileContent = fileSystem.File.ReadAllText(Path.Combine(rootFolder, userId, scriptId, ScriptExecutionFileNames.ScriptExecutionOutput)); var scriptExecutionStreamsFileContent = fileSystem.File.ReadAllText(Path.Combine(rootFolder, userId, scriptId, ScriptExecutionFileNames.ScriptExecutionStreams)); var actualScriptExecution = JsonConvert.DeserializeObject <NamedScriptExecution>(scriptExecutionFileContent); var actualScriptExecutionOutput = JsonConvert.DeserializeObject <ScriptExecutionOutput>(scriptExecutionOutputFileContent); var actualScriptExecutionStreams = JsonConvert.DeserializeObject <ScriptExecutionDataStreams>(scriptExecutionStreamsFileContent); // Assert Assert.AreEqual(scriptExecution.Id, actualScriptExecution.Id); Assert.AreEqual(scriptExecution.Name, actualScriptExecution.Name); Assert.AreEqual(scriptExecution.Reason, actualScriptExecution.Reason); Assert.AreEqual(scriptExecution.State, actualScriptExecution.State); Assert.AreEqual(scriptExecution.OutputObjectsFormat, actualScriptExecution.OutputObjectsFormat); Assert.AreEqual(scriptJsonOutput.SerializedObjects[0], actualScriptExecutionOutput.OutputObjects[0]); Assert.AreEqual(scriptStreams.Information[0].Message, actualScriptExecutionStreams.Streams.Information[0].Message); Assert.AreEqual(scriptStreams.Information[0].Time, actualScriptExecutionStreams.Streams.Information[0].Time); Assert.AreEqual(scriptStreams.Debug[0].Message, actualScriptExecutionStreams.Streams.Debug[0].Message); Assert.AreEqual(scriptStreams.Debug[0].Time, actualScriptExecutionStreams.Streams.Debug[0].Time); Assert.AreEqual(scriptStreams.Error[0].Message, actualScriptExecutionStreams.Streams.Error[0].Message); Assert.AreEqual(scriptStreams.Error[0].Time, actualScriptExecutionStreams.Streams.Error[0].Time); Assert.AreEqual(scriptStreams.Verbose[0].Message, actualScriptExecutionStreams.Streams.Verbose[0].Message); Assert.AreEqual(scriptStreams.Verbose[0].Time, actualScriptExecutionStreams.Streams.Verbose[0].Time); Assert.AreEqual(scriptStreams.Warning[0].Message, actualScriptExecutionStreams.Streams.Warning[0].Message); Assert.AreEqual(scriptStreams.Warning[0].Time, actualScriptExecutionStreams.Streams.Warning[0].Time); }