Lidarr/src/NzbDrone.Integration.Test/IntegrationTest.cs

158 lines
5.3 KiB
C#
Raw Normal View History

2013-11-13 20:08:37 +00:00
using System;
using System.Collections.Generic;
using System.Threading;
using Microsoft.AspNet.SignalR.Client;
using Microsoft.AspNet.SignalR.Client.Transports;
using NLog;
2013-08-14 05:02:25 +00:00
using NLog.Config;
using NLog.Targets;
using NUnit.Framework;
using NzbDrone.Api.Commands;
using NzbDrone.Api.Config;
2013-09-10 05:39:18 +00:00
using NzbDrone.Api.History;
using NzbDrone.Api.RootFolders;
using NzbDrone.Common.EnvironmentInfo;
2013-11-13 20:08:37 +00:00
using NzbDrone.Common.Serializer;
using NzbDrone.Integration.Test.Client;
2013-11-13 20:08:37 +00:00
using NzbDrone.SignalR;
2013-11-12 03:25:54 +00:00
using NzbDrone.Test.Common;
2013-05-22 05:32:25 +00:00
using NzbDrone.Test.Common.Categories;
using RestSharp;
namespace NzbDrone.Integration.Test
{
[TestFixture]
2013-05-22 05:32:25 +00:00
[IntegrationTest]
public abstract class IntegrationTest
{
protected RestClient RestClient { get; private set; }
protected SeriesClient Series;
protected ClientBase<RootFolderResource> RootFolders;
protected ClientBase<CommandResource> Commands;
protected ReleaseClient Releases;
2013-09-10 05:39:18 +00:00
protected ClientBase<HistoryResource> History;
2013-05-03 05:24:52 +00:00
protected IndexerClient Indexers;
protected EpisodeClient Episodes;
protected ClientBase<NamingConfigResource> NamingConfig;
2013-12-19 08:38:28 +00:00
protected NotificationClient Notifications;
2013-08-14 03:22:28 +00:00
private NzbDroneRunner _runner;
2013-11-13 20:08:37 +00:00
private List<SignalRMessage> _signalRReceived;
private Connection _signalrConnection;
2014-09-02 04:02:55 +00:00
protected static readonly string RootUrl = "http://localhost:8989/";
2013-11-13 20:08:37 +00:00
protected IEnumerable<SignalRMessage> SignalRMessages
{
get
{
return _signalRReceived;
}
}
2013-08-14 03:22:28 +00:00
2013-08-14 05:02:25 +00:00
public IntegrationTest()
{
2013-11-26 06:53:36 +00:00
new StartupContext();
2013-08-14 05:02:25 +00:00
LogManager.Configuration = new LoggingConfiguration();
var consoleTarget = new ConsoleTarget { Layout = "${level}: ${message} ${exception}" };
LogManager.Configuration.AddTarget(consoleTarget.GetType().Name, consoleTarget);
LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, consoleTarget));
}
2013-11-12 06:18:57 +00:00
[TestFixtureSetUp]
public void SmokeTestSetup()
{
2013-08-14 03:22:28 +00:00
_runner = new NzbDroneRunner();
_runner.KillAll();
2013-08-14 03:22:28 +00:00
_runner.Start();
2013-09-21 02:07:42 +00:00
InitRestClients();
// Add Wombles
var wombles = Indexers.Post(new Api.Indexers.IndexerResource
{
EnableRss = true,
ConfigContract = "NullConfig",
Implementation = "Wombles",
Name = "Wombles",
Protocol = Core.Indexers.DownloadProtocol.Usenet,
Fields = new List<Api.ClientSchema.Field>()
});
}
private void InitRestClients()
{
2014-09-02 04:02:55 +00:00
RestClient = new RestClient(RootUrl + "api/");
RestClient.AddDefaultHeader("Authentication", _runner.ApiKey);
2013-09-21 02:07:42 +00:00
Series = new SeriesClient(RestClient, _runner.ApiKey);
Releases = new ReleaseClient(RestClient, _runner.ApiKey);
RootFolders = new ClientBase<RootFolderResource>(RestClient, _runner.ApiKey);
Commands = new ClientBase<CommandResource>(RestClient, _runner.ApiKey);
History = new ClientBase<HistoryResource>(RestClient, _runner.ApiKey);
Indexers = new IndexerClient(RestClient, _runner.ApiKey);
Episodes = new EpisodeClient(RestClient, _runner.ApiKey);
NamingConfig = new ClientBase<NamingConfigResource>(RestClient, _runner.ApiKey, "config/naming");
2013-12-19 08:38:28 +00:00
Notifications = new NotificationClient(RestClient, _runner.ApiKey);
}
2013-11-12 06:18:57 +00:00
[TestFixtureTearDown]
public void SmokeTestTearDown()
{
2013-08-14 03:22:28 +00:00
_runner.KillAll();
}
2013-11-13 20:08:37 +00:00
[TearDown]
public void IntegrationSetup()
{
if (_signalrConnection != null)
{
switch (_signalrConnection.State)
{
case ConnectionState.Connected:
case ConnectionState.Connecting:
{
_signalrConnection.Stop();
break;
}
}
_signalrConnection = null;
_signalRReceived = new List<SignalRMessage>();
}
}
protected void ConnectSignalR()
{
_signalRReceived = new List<SignalRMessage>();
_signalrConnection = new Connection("http://localhost:8989/signalr");
_signalrConnection.Start(new LongPollingTransport()).ContinueWith(task =>
{
if (task.IsFaulted)
{
Assert.Fail("SignalrConnection failed. {0}", task.Exception.GetBaseException());
}
});
var retryCount = 0;
2013-11-13 20:08:37 +00:00
while (_signalrConnection.State != ConnectionState.Connected)
{
if (retryCount > 25)
{
Assert.Fail("Couldn't establish signalr connection. State: {0}", _signalrConnection.State);
}
retryCount++;
Console.WriteLine("Connecting to signalR" + _signalrConnection.State);
2013-11-13 20:08:37 +00:00
Thread.Sleep(200);
}
_signalrConnection.Received += json => _signalRReceived.Add(Json.Deserialize<SignalRMessage>(json)); ;
}
}
}