Skip to content

Instantly share code, notes, and snippets.

@SibeeshVenu
Last active August 12, 2023 07:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SibeeshVenu/a92f899949943b044acc644ae3a118fa to your computer and use it in GitHub Desktop.
Save SibeeshVenu/a92f899949943b044acc644ae3a118fa to your computer and use it in GitHub Desktop.
Tests for IpActionFilter
using System.Net;
using NSubstitute;
using Microsoft.Extensions.Logging;
using DotNetIpFilter.Services;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Mvc.Abstractions;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace DotNetIpFilter.Test
{
[TestClass]
public class IpActionFilterTest
{
private readonly ILogger<IpActionFilter> logger;
public IpActionFilterTest()
{
this.logger = Substitute.For<ILogger<IpActionFilter>>();
}
[TestMethod]
public void IpActionFilterTestWhenValidIp()
{
var counter = 0;
var validIps = "127.0.0.1;192.168.1.5";
var IpFilterService = Substitute.For<IIpFilterService>();
IpFilterService.When(x => x.GetAdminSafeIpList()).Do(x => counter++);
IpFilterService.GetAdminSafeIpList().Returns(validIps);
var incomingIp = IPAddress.Parse("127.0.0.1");
var modelState = new ModelStateDictionary();
var actionContext = new ActionContext(
Substitute.For<HttpContext>(),
Substitute.For<RouteData>(),
Substitute.For<ActionDescriptor>(),
modelState
);
var actionExecutingContext = new ActionExecutingContext(
actionContext,
new List<IFilterMetadata>(),
new Dictionary<string, object>(),
Substitute.For<Controller>()
);
actionExecutingContext.HttpContext.Connection.RemoteIpAddress = incomingIp;
var attrib = new IpActionFilter(validIps, this.logger);
attrib.OnActionExecuting(actionExecutingContext);
Assert.AreEqual(1, counter);
}
[TestMethod]
public void IpActionFilterTestWhenInValidIp()
{
var validIps = "127.0.0.1;192.168.1.5";
var IpFilterService = Substitute.For<IIpFilterService>();
IpFilterService.GetAdminSafeIpList().Returns(validIps);
var incomingIp = IPAddress.Parse("127.0.0.5");
var modelState = new ModelStateDictionary();
var actionContext = new ActionContext(
Substitute.For<HttpContext>(),
Substitute.For<RouteData>(),
Substitute.For<ActionDescriptor>(),
modelState
);
var actionExecutingContext = new ActionExecutingContext(
actionContext,
new List<IFilterMetadata>(),
new Dictionary<string, object>(),
Substitute.For<Controller>()
);
actionExecutingContext.HttpContext.Connection.RemoteIpAddress = incomingIp;
var attrib = new IpActionFilter(validIps, this.logger);
attrib.OnActionExecuting(actionExecutingContext);
var statusCode = (actionExecutingContext.Result as StatusCodeResult).StatusCode;
Assert.AreEqual(statusCode, 403);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment