2nd shot at automation using service instead of console.

pull/4/head
kay.one 13 years ago
parent 59516c240f
commit 61d6a81446

@ -11,12 +11,15 @@ using OpenQA.Selenium.Remote;
namespace NzbDrone.Web.UI.Automation
{
[Explicit]
public abstract class AutomationTestBase
{
static readonly EnviromentProvider enviromentProvider = new EnviromentProvider();
private static readonly string testFolder;
private static readonly EnviromentProvider enviromentProvider = new EnviromentProvider();
public string AppUrl
private readonly string _clonePackagePath;
private readonly string _masterPackagePath;
protected string AppUrl
{
get
{
@ -24,16 +27,18 @@ namespace NzbDrone.Web.UI.Automation
}
}
public RemoteWebDriver Driver { get; private set; }
static AutomationTestBase()
protected AutomationTestBase()
{
CleanBinFolder();
testFolder = CreatePackage();
StartNzbDrone();
var rawPackagePath = Path.Combine(enviromentProvider.ApplicationPath, "_rawPackage");
_clonePackagePath = Path.Combine(rawPackagePath, "NzbDrone_Automation");
_masterPackagePath = Path.Combine(rawPackagePath, "NzbDrone");
}
protected RemoteWebDriver Driver { get; private set; }
[SetUp]
public void AutomationSetup()
{
@ -62,18 +67,26 @@ namespace NzbDrone.Web.UI.Automation
public void AutomationTestFixtureSetup()
{
StopNzbDrone();
ResetUserData();
StartNzbDrone();
DeleteClone();
ClonePackage();
//StartNzbDrone();
InstallNzbDroneService();
new HttpProvider().DownloadString(AppUrl);
Driver = new FirefoxDriver();
}
[TestFixtureTearDown]
public void AutomationTestFixtureTearDown()
{
Driver.Close();
StopNzbDrone();
File.Copy(Path.Combine(testFolder, "nzbdrone.log"), Path.Combine(Directory.GetCurrentDirectory(), "nzbdrone.log"), true);
}
@ -86,70 +99,90 @@ namespace NzbDrone.Web.UI.Automation
((ITakesScreenshot)Driver).GetScreenshot().SaveAsFile(fileName, ImageFormat.Png);
}
private void ResetUserData()
{
var appDataPath = Path.Combine(testFolder, "NzbDrone.Web", "app_data");
if (Directory.Exists(appDataPath))
Directory.Delete(appDataPath, true);
}
private void StartNzbDrone()
{
StartProcess("nzbdrone.exe", false);
}
private static void CleanBinFolder()
private void StopNzbDrone()
{
var folderName = "Debug";
foreach (var process in Process.GetProcessesByName("nzbdrone"))
{
process.Kill();
process.WaitForExit();
}
if (EnviromentProvider.IsDebug)
foreach (var process in Process.GetProcessesByName("iisexpress"))
{
folderName = "Release";
process.Kill();
process.WaitForExit();
}
var dirs = Directory.GetDirectories(enviromentProvider.ApplicationPath, folderName, SearchOption.AllDirectories);
try
{
StartProcess("ServiceUninstall.exe", true);
}
catch (Exception)
{
}
foreach (var dir in dirs)
{
Directory.Delete(dir, true);
}
private void InstallNzbDroneService()
{
StartProcess("ServiceInstall.exe", true);
}
static void StartNzbDrone()
private void StartProcess(string fileName, bool waitForExit)
{
var startInfo = new ProcessStartInfo
{
FileName = Path.Combine(testFolder, "nzbdrone.exe"),
FileName = Path.Combine(_clonePackagePath, fileName),
RedirectStandardOutput = true,
UseShellExecute = false
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true,
};
var nzbDroneProcess = new Process
{
StartInfo = startInfo
};
nzbDroneProcess.OutputDataReceived +=
delegate(object o, DataReceivedEventArgs args)
{
Console.WriteLine(args.Data);
};
nzbDroneProcess.OutputDataReceived += (o, args) => Console.WriteLine(args.Data);
nzbDroneProcess.ErrorDataReceived += (o, args) => Console.WriteLine(args.Data);
nzbDroneProcess.Start();
nzbDroneProcess.BeginErrorReadLine();
nzbDroneProcess.BeginOutputReadLine();
if (waitForExit)
{
nzbDroneProcess.WaitForExit();
}
}
private void ClonePackage()
{
new DiskProvider().CopyDirectory(_masterPackagePath, _clonePackagePath);
}
public static void StopNzbDrone()
private void DeleteClone()
{
foreach (var process in Process.GetProcessesByName("nzbdrone"))
if (Directory.Exists(_clonePackagePath))
{
process.Kill();
process.WaitForExit();
Directory.Delete(_clonePackagePath, true);
}
}
private static string CreatePackage()
private string CreatePackage()
{
Console.WriteLine("Creating NzbDrone Package");
@ -183,5 +216,32 @@ namespace NzbDrone.Web.UI.Automation
return testFolder;
}
private void ResetUserData()
{
var appDataPath = Path.Combine(_clonePackagePath, "NzbDrone.Web", "app_data");
if (Directory.Exists(appDataPath))
Directory.Delete(appDataPath, true);
}
private static void CleanBinFolder()
{
var folderName = "Debug";
if (EnviromentProvider.IsDebug)
{
folderName = "Release";
}
var dirs = Directory.GetDirectories(enviromentProvider.ApplicationPath, folderName, SearchOption.AllDirectories);
foreach (var dir in dirs)
{
Directory.Delete(dir, true);
}
}
}
}

@ -5,7 +5,6 @@ using NzbDrone.Web.UI.Automation.Fluent;
namespace NzbDrone.Web.UI.Automation
{
[TestFixture]
[Explicit]
public class BasicPageFixture : AutomationTestBase
{

@ -35,10 +35,10 @@
<Reference Include="FluentAssertions">
<HintPath>..\packages\FluentAssertions.1.7.0\Lib\net40\FluentAssertions.dll</HintPath>
</Reference>
<Reference Include="Ionic.Zip">
<Reference Include="Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL">
<HintPath>..\packages\DotNetZip.1.9.1.8\lib\net20\Ionic.Zip.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<Reference Include="Newtonsoft.Json, Version=4.0.6.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.4.0.6\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="nunit.framework">
@ -53,7 +53,6 @@
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WebDriver, Version=2.19.0.0, Culture=neutral, PublicKeyToken=1c2bd1631853048f, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Selenium.WebDriver.2.19.0\lib\net40\WebDriver.dll</HintPath>
</Reference>
</ItemGroup>
@ -85,7 +84,9 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="app.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

@ -4,7 +4,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.7.0" newVersion="4.0.7.0"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.8.0" newVersion="4.0.6.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>

@ -8,8 +8,6 @@ namespace ServiceInstall
static void Main()
{
ServiceHelper.Run(@"/i");
Console.WriteLine("Press any key to continue");
Console.ReadLine();
}
}
}

@ -1,5 +1,4 @@
using System.Linq;
using System;
namespace ServiceUninstall
{
@ -8,8 +7,6 @@ namespace ServiceUninstall
static void Main()
{
ServiceHelper.Run(@"/u");
Console.WriteLine("Press any key to continue");
Console.ReadLine();
}
}
}

Loading…
Cancel
Save