public string ScreenRecordingTestSettingsFile(string JobName) { var TestSettingsFile = ""; if (RecordScreen != null) { var TestSettingsId = Guid.NewGuid(); // Create test settings. TestSettingsFile = TestRunner.TestsResultsPath + "\\" + JobName + ".testsettings"; TestCleanupUtils.CopyOnWrite(TestSettingsFile); File.WriteAllText(TestSettingsFile, @"<?xml version=""1.0"" encoding=""UTF-8""?> <TestSettings id=""" + TestSettingsId + @""" name=""JobName"" xmlns=""http://microsoft.com/schemas/VisualStudio/TeamTest/2010""> <Description>Run " + JobName + @" With Screen Recording.</Description> <NamingScheme baseName=""ScreenRecordings"" appendTimeStamp=""false"" useDefault=""false""/> <Execution> <AgentRule name=""LocalMachineDefaultRole""> <DataCollectors> <DataCollector uri=""datacollector://microsoft/VideoRecorder/1.0"" assemblyQualifiedName=""Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder.VideoRecorderDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.VideoRecorder, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"" friendlyName=""Screen and Voice Recorder""> <Configuration> <MediaRecorder sendRecordedMediaForPassedTestCase=""false"" xmlns=""""/> </Configuration> </DataCollector> </DataCollectors> </AgentRule> </Execution> </TestSettings> "); } return(TestSettingsFile); }
string ProgressFeedback(StreamReader reader) { var result = ""; string writePath = Environment.ExpandEnvironmentVariables(ProgressFeedbackFilePath); TestCleanupUtils.WaitForFileUnlock(writePath); TestCleanupUtils.CopyOnWrite(writePath); string startMessageText = $"Starting pull at {DateTime.Now.ToLongTimeString()} on {DateTime.Now.ToLongDateString()}:"; var startMessage = Encoding.UTF8.GetBytes(startMessageText); File.WriteAllText(writePath, startMessageText); using (var fileWriteStream = new FileStream(writePath, FileMode.Open, FileAccess.Write, FileShare.Read)) { fileWriteStream.Position = startMessage.Length; while (!reader.EndOfStream) { var readChar = (char)reader.Read(); result += readChar; fileWriteStream.WriteByte((byte)readChar); } byte[] finishedMessage = Encoding.UTF8.GetBytes($"Finished pull at {DateTime.Now.ToLongTimeString()} on {DateTime.Now.ToLongDateString()}."); fileWriteStream.Write(finishedMessage, 0, finishedMessage.Length); } return(result); }
public string DotCoverRunner(string JobName, List <string> TestAssembliesDirectories) { // Write DotCover Runner XML var DotCoverSnapshotFile = Path.Combine(TestRunner.TestsResultsPath, $"{JobName} DotCover Output.dcvr"); TestCleanupUtils.CopyOnWrite(DotCoverSnapshotFile); var DotCoverArgs = @"<AnalyseParams> <TargetExecutable>" + TestRunner.TestsResultsPath + "\\..\\Run " + JobName + @".bat</TargetExecutable> <Output>" + DotCoverSnapshotFile + @"</Output> <Scope>"; foreach (var TestAssembliesDirectory in TestAssembliesDirectories) { DotCoverArgs += @" <ScopeEntry>" + TestAssembliesDirectory + @"\*.dll</ScopeEntry> <ScopeEntry>" + TestAssembliesDirectory + @"\*.exe</ScopeEntry>"; } DotCoverArgs += @" </Scope> <Filters> <ExcludeFilters> <FilterEntry> <ModuleMask>*.tests</ModuleMask> <ModuleMask>*.specs</ModuleMask> </FilterEntry> </ExcludeFilters> <AttributeFilters> <AttributeFilterEntry> <ClassMask>System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute</ClassMask> </AttributeFilterEntry> </AttributeFilters> </Filters> </AnalyseParams>"; var DotCoverRunnerXMLPath = Path.Combine(TestRunner.TestsResultsPath, JobName + " DotCover Runner.xml"); TestCleanupUtils.CopyOnWrite(DotCoverRunnerXMLPath); File.WriteAllText(DotCoverRunnerXMLPath, DotCoverArgs); // Create full DotCover argument string. var DotCoverLogFile = TestRunner.TestsResultsPath + "\\DotCover.xml.log"; TestCleanupUtils.CopyOnWrite(DotCoverLogFile); var FullArgsList = $" cover \"{DotCoverRunnerXMLPath}\" /LogFile=\"{DotCoverLogFile}\""; // Write DotCover Runner Batch File var DotCoverRunnerPath = $"{TestRunner.TestsResultsPath}\\Run {JobName} DotCover.bat"; TestCleanupUtils.CopyOnWrite(DotCoverRunnerPath); File.WriteAllText(DotCoverRunnerPath, $"\"{DotCoverPath}\"{FullArgsList}"); return(DotCoverRunnerPath); }
public void StartStudio() { if (string.IsNullOrEmpty(StudioPath)) { throw new FileNotFoundException("Cannot find Warewolf Studio. To run the studio provide a path to the Warewolf Studio exe file as a commandline parameter like this: -StudioPath"); } var StudioLogFile = Environment.ExpandEnvironmentVariables("%LocalAppData%\\Warewolf\\Studio Logs\\Warewolf Studio.log"); TestCleanupUtils.CopyOnWrite(StudioLogFile); if (!ApplyDotCover) { Process.Start(StudioPath); } else { var StudioBinDir = Path.GetDirectoryName(StudioPath); var RunnerXML = @" <AnalyseParams> <TargetExecutable>" + StudioPath + @"</TargetExecutable> <Output>" + Environment.ExpandEnvironmentVariables("%LocalAppData%") + @"\Warewolf\Studio Logs\dotCover.dcvr</Output> <Scope> <ScopeEntry>" + StudioBinDir + @"\*.dll</ScopeEntry> <ScopeEntry>" + StudioBinDir + @"\*.exe</ScopeEntry> </Scope> <Filters> <ExcludeFilters> <FilterEntry> <ModuleMask>*.tests</ModuleMask> <ModuleMask>*.specs</ModuleMask> </FilterEntry> </ExcludeFilters> <AttributeFilters> <AttributeFilterEntry> <ClassMask>System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute</ClassMask> </AttributeFilterEntry> </AttributeFilters> </Filters> </AnalyseParams> "; var DotCoverRunnerXMLPath = TestRunner.TestsResultsPath + "\\Studio DotCover Runner.xml"; TestCleanupUtils.CopyOnWrite(DotCoverRunnerXMLPath); File.WriteAllText(DotCoverRunnerXMLPath, RunnerXML); Process.Start(DotCoverPath, "cover \"" + DotCoverRunnerXMLPath + "\" /LogFile=\"" + TestRunner.TestsResultsPath + "\\StudioDotCover.log\""); } try { WaitForStudioStart(Path.GetDirectoryName(StudioPath)); } catch (Exception) { if (!ApplyDotCover) { Process.Start(StudioPath); } else { Process.Start(DotCoverPath, "cover \"" + TestRunner.TestsResultsPath + "\\Studio DotCover Runner.xml\" /LogFile=\"" + TestRunner.TestsResultsPath + "\\StudioDotCover.log\""); } WaitForStudioStart(Path.GetDirectoryName(StudioPath)); } }
public void InstallServer() { //Find Server if (string.IsNullOrEmpty(ServerPath)) { bool foundServer = TryFindWarewolfServerExe(out string serverPath); if (foundServer) { ServerPath = serverPath; } else { throw new ArgumentException($"No server found. Make sure your server is compiled and try again."); } } else { if (!File.Exists(ServerPath)) { throw new ArgumentException($"No server found at {ServerPath}. Make sure your server is compiled and try again."); } } Console.WriteLine("Will now stop any currently running Warewolf servers and studios. Resources will be backed up to " + TestRunner.TestsResultsPath + "."); if (string.IsNullOrEmpty(ResourcesType)) { Console.WriteLine("\nWhat type of resources would you like to install the server with?"); var options = new[] { "[u]UITests: Use these resources for running UI Tests. (This is the default)", "[s]ServerTests: Use these resources for running everything except unit tests and Coded UI tests.", "[r]Release: Use these resources for Warewolf releases.", "[l]Load: Use these resources for Desktop UI Load Testing." }; foreach (var option in options) { Console.WriteLine(); var originalColour = Console.ForegroundColor; Console.ForegroundColor = ConsoleColor.Yellow; Console.Write(option.Substring(0, 3)); Console.ForegroundColor = originalColour; Console.Write(option.Substring(3, option.Length - 3)); } Console.WriteLine("\n\nOr Press Enter to use default (UITest)..."); ResourcesType = WindowUtils.PromptForUserInput(); if (ResourcesType == "" || ResourcesType.ToLower() == "u") { ResourcesType = "UITests"; } if (ResourcesType.ToLower() == "s") { ResourcesType = "ServerTests"; } if (ResourcesType.ToLower() == "r") { ResourcesType = "Release"; } if (ResourcesType.ToLower() == "l") { ResourcesType = "Load"; } } string resourcesPath = Path.Combine(Path.GetDirectoryName(ServerPath), $"Resources - {ResourcesType}"); if (!Directory.Exists(resourcesPath)) { throw new ArgumentException($"Invalid resource type. Folder not found {resourcesPath}"); } if (!StartServerAsConsole) { var ServerService = ServiceController.GetServices().Any(serviceController => serviceController.ServiceName.Equals("Warewolf Server")); if (!ApplyDotCover) { if (!ServerService) { Process.Start("sc.exe", "create \"Warewolf Server\" binPath= \"" + ServerPath + "\" start= demand"); } else { Console.WriteLine("Configuring service to " + ServerPath); Process.Start("sc.exe", "config \"Warewolf Server\" binPath= \"" + ServerPath + "\" start= demand"); } } else { var ServerBinDir = Path.GetDirectoryName(ServerPath); var RunnerXML = @"<AnalyseParams> <TargetExecutable>" + ServerPath + @"</TargetExecutable> <Output>" + Environment.ExpandEnvironmentVariables("%ProgramData%") + @"\Warewolf\Server Log\dotCover.dcvr</Output> <Scope> <ScopeEntry>" + ServerBinDir + @"\*.dll</ScopeEntry> <ScopeEntry>" + ServerBinDir + @"\*.exe</ScopeEntry> </Scope> <Filters> <ExcludeFilters> <FilterEntry> <ModuleMask>*.tests</ModuleMask> <ModuleMask>*.specs</ModuleMask> </FilterEntry> </ExcludeFilters> <AttributeFilters> <AttributeFilterEntry> <ClassMask>System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute</ClassMask> </AttributeFilterEntry> </AttributeFilters> </Filters> </AnalyseParams>"; var DotCoverRunnerXMLPath = TestRunner.TestsResultsPath + "\\Server DotCover Runner.xml"; TestCleanupUtils.CopyOnWrite(DotCoverRunnerXMLPath); File.WriteAllText(DotCoverRunnerXMLPath, RunnerXML); RunServerWithDotcoverScript = "\\\"" + DotCoverPath + "\\\" cover \\\"" + DotCoverRunnerXMLPath + "\\\" /LogFile=\\\"" + TestRunner.TestsResultsPath + "\\ServerDotCover.log\\\""; if (!ServerService) { Process.Start("sc.exe", "create \"Warewolf Server\" binPath= \"" + RunServerWithDotcoverScript + "\" start= demand"); } else { Console.WriteLine("Configuring service to " + RunServerWithDotcoverScript); Process.Start("sc.exe", "config \"Warewolf Server\" binPath= \"" + RunServerWithDotcoverScript + "\""); } } } if (!string.IsNullOrEmpty(ServerUsername) && string.IsNullOrEmpty(ServerPassword)) { Process.Start("sc.exe", "config \"Warewolf Server\" obj= \"" + ServerUsername + "\""); } if (!string.IsNullOrEmpty(ServerUsername) && !string.IsNullOrEmpty(ServerPassword)) { Process.Start("sc.exe", "config \"Warewolf Server\" obj= \"" + ServerUsername + "\" password= \"" + ServerPassword + "\""); } var ResourcePathSpecs = new List <string>(); foreach (var ServerPathSpec in ServerPathSpecs) { if (ServerPathSpec.EndsWith(ServerExeName)) { ResourcePathSpecs.Add(ServerPathSpec.Replace(ServerExeName, "Resources - " + ResourcesType)); } } var ResourcesDirectory = FindFileInParent(ResourcePathSpecs); if (ResourcesDirectory != "" && ResourcesDirectory != Path.GetDirectoryName(ServerPath) + "\\" + Path.GetFileName(ResourcesDirectory)) { RecursiveFolderCopy(ResourcesDirectory, Path.GetDirectoryName(ServerPath)); } }