public void VerifyConnectionFilterSort([Values(true, false)] bool filterEnabled, [Values(true, false)] bool isWhitelisted)
{
Mock<ICoreSettings> settings = new Mock<ICoreSettings>();
settings.SetupGet(m => m.FilteringEnabled).Returns(filterEnabled);
ProxyFilter filter = new ProxyFilter(settings.Object);
List<IConnectionFilter> filters = new List<IConnectionFilter>();
Mock<IHttpRequest> requestArgs = new Mock<IHttpRequest>();
requestArgs.SetupAllProperties();
Mock<IWhitelistEvaluator> whiteLister = new Mock<IWhitelistEvaluator>();
whiteLister.Setup(m => m.IsWhitlisted(requestArgs.Object, "whatever")).Returns(isWhitelisted);
List<IWhitelistEvaluator> whitelistEvaluators = new List<IWhitelistEvaluator>();
whitelistEvaluators.Add(whiteLister.Object);
Mock<IConnectionFilter> mockFilter = new Mock<IConnectionFilter>();
mockFilter.SetupGet( s => s.FilterSpeedType ).Returns( FilterSpeedType.Remote );
Mock<IConnectionFilter> mockFilter2 = new Mock<IConnectionFilter>();
mockFilter2.SetupGet( s => s.FilterSpeedType ).Returns( FilterSpeedType.LocalAndFast );
mockFilter2.Setup( s => s.EvaluateFilter( requestArgs.Object, It.IsAny<string>() ) ).Returns( "Foo" );
filters.Add( mockFilter.Object );
filters.Add( mockFilter2.Object );
filter.ConnectionFilters = filters;
filter.WhitelistEvaluators = whitelistEvaluators;
byte[] output = filter.EvaluateConnectionFilters( requestArgs.Object, "whatever" );
if (filterEnabled && !isWhitelisted)
{
Assert.That(output,
Is.EqualTo(
Encoding.UTF8.GetBytes( "HTTP/ 200 OK\r\nConnection: close\r\nContent length: 93\r\nContent-Type: text/html\r\n\r\n<html><head><title>Gallatin Proxy - Connection Rejected</title></head><body>Foo</body></html>")));
}
else
{
Assert.That( output, Is.Null );
}
}