namespace ChadSoft.Utils.Pingy.Tests
{
using System;
using System.IO;
using System.Reflection;
using System.Xml;
using ChadSoft.Testing;
using NUnit.Framework;
using Rhino.Mocks;
///
/// The Test Fixture for the class
///
[TestFixture]
public class PingManagerTests : MockBase
{
private const string VALID_PINGERS_FILE = "ChadSoft.Utils.Pingy.Tests.TestData.ValidPingers.xml";
private XmlDocument _ValidPingersXmlDocument;
protected internal XmlDocument ValidPingersXmlDocument
{
get
{
if(_ValidPingersXmlDocument == null)
_ValidPingersXmlDocument = CreateValidPingersXmlDocument();
return _ValidPingersXmlDocument;
}
}
private int _ValidPingersXmlDocumentPingersCount = default(int);
public int ValidPingersXmlDocumentPingersCount
{
get
{
if (_ValidPingersXmlDocumentPingersCount == default(int))
_ValidPingersXmlDocumentPingersCount =
ValidPingersXmlDocument.GetElementsByTagName("Pinger").Count;
return _ValidPingersXmlDocumentPingersCount;
}
}
#region Add
[Test]
public void AddNewPinger()
{
PingManager manager = new PingManager();
int previousPingerCount = manager.Pingers.Count;
manager.Add(Repository.CreateMock());
int expectedPingerCount = previousPingerCount + 1;
Assert.AreEqual(expectedPingerCount, manager.Pingers.Count);
}
#endregion
#region Create
[Test]
public void CreateFromValidStringPath()
{
string expectedLocation = "http://www.infragistics.com/default.aspx";
IPinger pinger = PingManager.Create(expectedLocation);
Assert.AreEqual(expectedLocation, pinger.Path);
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void CreateFromEmptyString()
{
PingManager.Create(String.Empty);
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void CreateFromNullUri()
{
PingManager.Create((Uri)null);
}
[Test]
public void CreateFromValidUri()
{
string expectedLocation = "http://www.infragistics.com/default.aspx";
IPinger pinger = PingManager.Create(new Uri(expectedLocation));
Assert.AreEqual(expectedLocation, pinger.Path);
}
#endregion
#region PingAll
[Test]
public void PingAllForOnePinger()
{
PingManager manager = new PingManager();
IPinger pinger = Repository.CreateMock();
manager.Add(pinger);
using (Repository.Record())
{
Expect.Call(pinger.Ping()).Return(new PingResponse(PingStatus.Exists));
}
using (Repository.Playback())
{
manager.PingAll();
}
}
[Test]
public void PingAllForTenPingers()
{
PingManager manager = new PingManager();
using (Repository.Record())
{
for (int i = 0; i < 10; i++)
{
IPinger pinger = Repository.CreateMock();
Expect.Call(pinger.Ping()).Return(new PingResponse(PingStatus.Exists));
manager.Add(pinger);
}
}
using (Repository.Playback())
{
manager.PingAll();
}
}
#endregion
#region LoadFromXml
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void LoadFromXmlFromStringForNull()
{
new PingManager().LoadFromXml((string)null);
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void LoadFromXmlFromStreamForNull()
{
new PingManager().LoadFromXml((Stream)null);
}
[Test]
[ExpectedException(typeof(ArgumentNullException))]
public void LoadFromXmlFromXmlDocumentForNull()
{
new PingManager().LoadFromXml((XmlDocument)null);
}
[Test]
public void LoadFromXmlFromXmlDocumentForValidPingers()
{
PingManager manager = new PingManager();
Assert.IsTrue(manager.LoadFromXml(ValidPingersXmlDocument));
Assert.AreEqual(ValidPingersXmlDocumentPingersCount, manager.Pingers.Count);
}
[Test]
public void LoadFromXmlFromFileForValidUriPingers()
{
string filename = "ValidUriPingers.xml";
// Save the Valid Pingers doc out to the filename
// so we know it's there
ValidPingersXmlDocument.Save(filename);
// Now try to load it up
PingManager manager = new PingManager();
Assert.IsTrue(manager.LoadFromXml(filename));
Assert.AreEqual(ValidPingersXmlDocumentPingersCount, manager.Pingers.Count);
File.Delete(filename);
}
protected XmlDocument CreateValidPingersXmlDocument()
{
XmlDocument doc = new XmlDocument();
doc.Load(Assembly.GetExecutingAssembly().GetManifestResourceStream(VALID_PINGERS_FILE));
return doc;
}
protected BufferedStream CreateValidPingersXmlStream()
{
BufferedStream stream = new BufferedStream(new MemoryStream());
ValidPingersXmlDocument.Save(stream);
stream.Flush();
stream.Seek(0, SeekOrigin.Begin);
return stream;
}
#endregion
[Test]
public void LoadFromWeb()
{
PingManager manager = new PingManager();
Assert.IsTrue(manager.LoadFromWeb("http://www.infragistics.com/default.aspx"));
}
}
}