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")); } } }