public Tuple<bool, string> Ping(NetworkConnection connection)
		{
			_log.Debug(string.Format("Make request to: {0}", connection.Uri));

			var request = (HttpWebRequest)WebRequest.Create(connection.Uri);

			if (connection.HasCredentials)
			{
				request.UseDefaultCredentials = false;
				request.Credentials = connection.GetCredentials();
			
				_log.Debug(string.Format("With credentials username: {0} domain: {1}", connection.GetCredentials().UserName, connection.GetCredentials().Domain));
			}

			try
			{
				using (var response = (HttpWebResponse)request.GetResponse())
				{
					var responseUrl = response.ResponseUri.AbsoluteUri;

					_log.Debug(string.Format("Response url was: {0}", responseUrl));
					_log.Debug(string.Format("Response code: {0}", response.StatusDescription));

					var result = connection.Uri.AbsoluteUri == responseUrl;
					
					return new Tuple<bool, string>(result, response.StatusDescription);
				}
			}
			catch (WebException ex)
			{
				_log.Error(ex);
				return new Tuple<bool, string>(false, ex.Message);
			}
		}
        public void GetCredentials_CredentialsNotSet_ReturnsNull()
        {
            // arrange
            var url = "http://www.test.com/elmah.axd";
            var connection = new NetworkConnection(url);

            // act
            var result = connection.GetCredentials();

            // assert
            Assert.That(result, Is.Null);
        }
        public void GetCredentials_CredentialsIsSet_ReturnsCredentials()
        {
            // arrange
            var url = "http://www.test.com/elmah.axd";
            var connection = new NetworkConnection(url);

            connection.SetCredentials("pelle", "password", "domain1");

            // act
            var result = connection.GetCredentials();

            // assert
            Assert.That(result, Is.Not.Null);
        }
        public void CreateWithCredentials_CreatesNewConnectionAndCopiesCredentialsFromTheOriginal()
        {
            // arrange
            var url = "http://www.test.com/elmah.axd";
            var original = new NetworkConnection(url);

            original.SetCredentials("pelle", "password", "domain1");

            // act
            var copy = original.CopyWithCredentials("http://www.copy.com/elmah.axd");

            // assert
            Assert.That(copy.Uri.AbsoluteUri, Is.EqualTo("http://www.copy.com/elmah.axd"));
            Assert.That(copy.GetCredentials(), Is.EqualTo(original.GetCredentials()));
        }
        public void GetCredentials_CredentialsIsSet_ShouldHaveUsernamePasswordAndDomain()
        {
            // arrange
            var url = "http://www.test.com/elmah.axd";
            var connection = new NetworkConnection(url);

            connection.SetCredentials("pelle", "password", "domain1");

            // act
            var result = connection.GetCredentials();

            // assert
            Assert.That(result.UserName, Is.EqualTo("pelle"));
            Assert.That(result.Password, Is.EqualTo("password"));
            Assert.That(result.Domain, Is.EqualTo("domain1"));
        }
		public string Uri(NetworkConnection	connection)
		{
			string result;

			using (var client = new WebClient())
			{
				if (connection.HasCredentials)
				{
					client.UseDefaultCredentials = false;
					client.Credentials = connection.GetCredentials();
				}

				var response = client.OpenRead(connection.Uri.AbsoluteUri);
				
				// TODO Check content-type is the expected one!
				// TODO Use charset in response Content-Type header
				using (var reader = new StreamReader(response))
				{
					result = reader.ReadToEnd();
				}
			}

			return result;
		}