blob: 7180779cd58d35b85f13d1177bdb2723e6e36d21 [file] [log] [blame]
using System;
using System.Collections.Generic;
using Casbin.Model;
using Casbin.UnitTests.Fixtures;
using Xunit;
namespace Casbin.UnitTests.GenericTests;
[Collection("Model collection")]
public class SupportCountTest
{
[Fact]
public void TestSupportCount()
{
for (int i = 1; i <= 14; i++)
{
IEnforcer enforcer = new Enforcer(DefaultModel.CreateFromText(TestModelFixture.SupportCountModelText));
string policyType = $"p{i}";
string requestType = $"r{i}";
string matcherType = $"m{i}";
if (i is 1)
{
policyType = PermConstants.DefaultPolicyType;
requestType = PermConstants.DefaultRequestType;
matcherType = PermConstants.DefaultMatcherType;
}
enforcer.AddNamedPolicy(policyType, CreateTestPolicy(i));
TestEnforce(enforcer, enforcer.CreateContext(requestType, policyType,
PermConstants.DefaultPolicyEffectType, matcherType), i);
}
}
private static void TestEnforce(IEnforcer enforcer, EnforceContext context, int requestCount)
{
switch (requestCount)
{
case 1:
Assert.True(enforcer.Enforce(context, "value1"));
Assert.True(enforcer.Enforce(context, ["value1"]));
break;
case 2:
Assert.True(enforcer.Enforce(context, "value1", "value2"));
Assert.True(enforcer.Enforce(context, ["value1", "value2"]));
break;
case 3:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3"));
Assert.True(enforcer.Enforce(context, ["value1", "value2", "value3"]));
break;
case 4:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3",
"value4"));
Assert.True(enforcer.Enforce(context, ["value1", "value2", "value3", "value4"]));
break;
case 5:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3",
"value4", "value5"));
Assert.True(enforcer.Enforce(context, ["value1", "value2", "value3", "value4", "value5"]));
break;
case 6:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3",
"value4", "value5", "value6"));
Assert.True(enforcer.Enforce(context,
["value1", "value2", "value3", "value4", "value5", "value6"]));
break;
case 7:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3",
"value4", "value5", "value6", "value7"));
Assert.True(enforcer.Enforce(context,
["value1", "value2", "value3", "value4", "value5", "value6", "value7"]));
break;
case 8:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3",
"value4", "value5", "value6", "value7", "value8"));
Assert.True(enforcer.Enforce(context,
["value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8"]));
break;
case 9:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3",
"value4", "value5", "value6", "value7", "value8", "value9"));
Assert.True(enforcer.Enforce(context,
[
"value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8", "value9"
]));
break;
case 10:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3",
"value4", "value5", "value6", "value7", "value8", "value9",
"value10"));
Assert.True(enforcer.Enforce(context,
[
"value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8", "value9",
"value10"
]));
break;
case 11:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3",
"value4", "value5", "value6", "value7", "value8", "value9",
"value10", "value11"));
Assert.True(enforcer.Enforce(context,
[
"value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8", "value9",
"value10", "value11"
]));
break;
case 12:
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3",
"value4", "value5", "value6", "value7", "value8", "value9",
"value10", "value11", "value12"));
Assert.True(enforcer.Enforce(context,
[
"value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8", "value9",
"value10", "value11", "value12"
]));
break;
case 13:
Assert.True(enforcer.Enforce(context, Request.CreateValues("value1", "value2", "value3",
"value4", "value5", "value6", "value7", "value8", "value9",
"value10", "value11", "value12", "value13")));
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3", "value4", "value5", "value6",
"value7", "value8", "value9", "value10", "value11", "value12", "value13"));
break;
case 14:
Assert.True(enforcer.Enforce(context, Request.CreateValues("value1", "value2", "value3",
"value4", "value5", "value6", "value7", "value8", "value9",
"value10", "value11", "value12", "value13", "value14")));
Assert.True(enforcer.Enforce(context, "value1", "value2", "value3", "value4", "value5", "value6",
"value7", "value8", "value9", "value10", "value11", "value12", "value13", "value14"));
break;
default:
throw new ArgumentOutOfRangeException(nameof(requestCount));
}
}
private static IPolicyValues CreateTestPolicy(int count)
{
List<string> policy = [];
for (int i = 0; i < count; i++)
{
policy.Add($"value{i + 1}");
}
return Policy.ValuesFrom(policy);
}
}