Skip to content

Commit 081e1bb

Browse files
committed
#9: Added tests
1 parent 30f3919 commit 081e1bb

File tree

4 files changed

+65
-12
lines changed

4 files changed

+65
-12
lines changed

Abstractions/Abstractions.csproj.DotSettings

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
1+
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
22
<s:String x:Key="/Default/CodeInspection/Daemon/ConfigureAwaitAnalysisMode/@EntryValue">Library</s:String>
33
<s:Boolean x:Key="/Default/CodeStyle/Naming/CSharpNaming/ApplyAutoDetectedRules/@EntryValue">False</s:Boolean>
44
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=Constants/@EntryIndexedValue">&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
@@ -39,4 +39,5 @@
3939
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=c85a0503_002D4de2_002D40f1_002D9cd6_002Da4054c05d384/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Any" AccessRightKinds="Any" Description="Properties"&gt;&lt;ElementKinds&gt;&lt;Kind Name="PROPERTY" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
4040
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=c873eafb_002Dd57f_002D481d_002D8c93_002D77f6863c2f88/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Static readonly fields (not private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="READONLY_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="" Suffix="" Style="AaBb" /&gt;&lt;/Policy&gt;</s:String>
4141
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=f9fce829_002De6f4_002D4cb2_002D80f1_002D5497c44f51df/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" WarnAboutPrefixesAndSuffixes="False" Prefix="_" Suffix="" Style="aaBb" /&gt;&lt;/Policy&gt;</s:String>
42+
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EPredefinedNamingRulesToUserRulesUpgrade/@EntryIndexedValue">True</s:Boolean>
4243
</wpf:ResourceDictionary>

Fail2Ban4Win/Fail2Ban4Win.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@
121121
<PackageReference Include="NLog">
122122
<Version>5.5.1</Version>
123123
</PackageReference>
124-
<PackageReference Include="Plugins" Version="0.0.0-beta.3" />
124+
<PackageReference Include="Plugins" Version="0.0.0-beta.4" />
125125
<PackageReference Include="Unfucked">
126126
<Version>0.0.1-beta.31</Version>
127127
</PackageReference>

Fail2Ban4Win/packages.lock.json

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@
6666
},
6767
"Plugins": {
6868
"type": "Direct",
69-
"requested": "[0.0.0-beta.3, )",
70-
"resolved": "0.0.0-beta.3",
71-
"contentHash": "Nt4dKwvs1oz1CU3DtfEMdoORhPxvVsm4iYRchKYfWqdpXRgb6kx2D/sk/IDBko+UhnFwTcdtGk30oLQpA2EZyA=="
69+
"requested": "[0.0.0-beta.4, )",
70+
"resolved": "0.0.0-beta.4",
71+
"contentHash": "XnRjoxTHqi0Q7KYU42FZDB+i5XYLURfkYZZK6cgKR7MLzp75usXV9aqLVO2jBvir68DOg2GV2iuLscHmbwreKA=="
7272
},
7373
"Unfucked": {
7474
"type": "Direct",
@@ -238,6 +238,10 @@
238238
"resolved": "4.6.1",
239239
"contentHash": "+RJT4qaekpZ7DDLhf+LTjq+E48jieKiY9ulJ+BoxKmZblIJfIJT8Ufcaa/clQqnYvWs8jugfGSMu8ylS0caG0w=="
240240
}
241-
}
241+
},
242+
".NETFramework,Version=v4.7.2/win": {},
243+
".NETFramework,Version=v4.7.2/win-arm64": {},
244+
".NETFramework,Version=v4.7.2/win-x64": {},
245+
".NETFramework,Version=v4.7.2/win-x86": {}
242246
}
243247
}

Tests/Services/BanManagerTest.cs

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
#nullable enable
22

33
using Fail2Ban4Win.Config;
4+
using Fail2Ban4Win.Data;
45
using Fail2Ban4Win.Facades;
6+
using Fail2Ban4Win.Plugins;
57
using Fail2Ban4Win.Services;
68
using FakeItEasy;
9+
using Plugins;
710
using System;
811
using System.Collections.Generic;
912
using System.Linq;
@@ -25,9 +28,10 @@ public class BanManagerTest: IDisposable {
2528

2629
private const int MAX_ALLOWED_FAILURES = 2;
2730

28-
private readonly BanManagerImpl banManager;
29-
private readonly EventLogListener eventLogListener = A.Fake<EventLogListener>();
30-
private readonly ITestOutputHelper testOutput;
31+
private readonly BanManagerImpl banManager;
32+
private readonly EventLogListener eventLogListener = A.Fake<EventLogListener>();
33+
private readonly IPluginManager<IFail2Ban4WinPlugin> pluginManager = A.Fake<IPluginManager<IFail2Ban4WinPlugin>>();
34+
private readonly ITestOutputHelper testOutput;
3135

3236
private readonly Configuration configuration = new() {
3337
isDryRun = false,
@@ -48,7 +52,7 @@ public BanManagerTest(ITestOutputHelper testOutput) {
4852
XunitTestOutputTarget.start(testOutput);
4953

5054
A.CallTo(() => firewallFacade.Rules).Returns(firewallRules);
51-
banManager = new BanManagerImpl(eventLogListener, configuration, firewallFacade);
55+
banManager = new BanManagerImpl(eventLogListener, configuration, firewallFacade, pluginManager);
5256
}
5357

5458
[Fact]
@@ -152,7 +156,7 @@ public void dontBanInDryRunMode() {
152156

153157
configuration.isDryRun = true;
154158

155-
BanManagerImpl manager = new(eventLogListener, configuration, firewallFacade);
159+
BanManagerImpl manager = new(eventLogListener, configuration, firewallFacade, pluginManager);
156160

157161
for (int i = 0; i < MAX_ALLOWED_FAILURES + 1; i++) {
158162
eventLogListener.failure += Raise.With(null, SOURCE_ADDRESS);
@@ -175,7 +179,7 @@ public void deleteExistingRulesOnStartup() {
175179

176180
Assert.NotEmpty(firewallRules);
177181

178-
BanManagerImpl manager = new(eventLogListener, configuration, firewallFacade);
182+
BanManagerImpl manager = new(eventLogListener, configuration, firewallFacade, pluginManager);
179183

180184
Assert.NotEmpty(firewallRules);
181185

@@ -280,6 +284,50 @@ public void longDelaysDoNotCrash() {
280284
Assert.NotEmpty(firewallRules);
281285
}
282286

287+
[Fact]
288+
public void pluginBanCallback() {
289+
configuration.banPeriod = TimeSpan.FromHours(1);
290+
291+
IFail2Ban4WinPlugin plugin = A.Fake<IFail2Ban4WinPlugin>();
292+
Captured<BanParams> bans = A.Captured<BanParams>();
293+
A.CallTo(() => pluginManager.Plugins).Returns([plugin]);
294+
A.CallTo(() => plugin.OnSubnetBanned(bans._)).DoesNothing();
295+
296+
for (int i = 0; i < MAX_ALLOWED_FAILURES + 1; i++) {
297+
eventLogListener.failure += Raise.With(null, SOURCE_ADDRESS);
298+
}
299+
300+
Assert.NotEmpty(firewallRules);
301+
BanParams actualBan = bans.GetLastValue();
302+
Assert.Equal(IPNetwork2.Parse("192.0.2.0/24"), actualBan.Subnet);
303+
Assert.Equal(TimeSpan.FromHours(1), actualBan.Duration);
304+
Assert.Equal(1, actualBan.OffenseCount);
305+
Assert.Equal(actualBan.Start, DateTime.Now, TimeSpan.FromSeconds(2));
306+
Assert.Equal(actualBan.End, DateTime.Now + TimeSpan.FromHours(1), TimeSpan.FromSeconds(2));
307+
}
308+
309+
[Fact]
310+
public void pluginUnbanCallback() {
311+
IFail2Ban4WinPlugin plugin = A.Fake<IFail2Ban4WinPlugin>();
312+
Captured<BanParams> bans = A.Captured<BanParams>();
313+
A.CallTo(() => pluginManager.Plugins).Returns([plugin]);
314+
using ManualResetEventSlim callbackFired = new();
315+
A.CallTo(() => plugin.OnBanLifted(bans._)).Invokes(() => callbackFired.Set());
316+
317+
for (int i = 0; i < MAX_ALLOWED_FAILURES + 1; i++) {
318+
eventLogListener.failure += Raise.With(null, SOURCE_ADDRESS);
319+
}
320+
321+
callbackFired.Wait(TimeSpan.FromSeconds(10));
322+
323+
BanParams actualBan = bans.GetLastValue();
324+
Assert.Equal(IPNetwork2.Parse("192.0.2.0/24"), actualBan.Subnet);
325+
Assert.InRange(actualBan.Duration, TimeSpan.Zero, TimeSpan.FromMilliseconds(200));
326+
Assert.Equal(1, actualBan.OffenseCount);
327+
Assert.Equal(actualBan.Start, DateTime.Now, TimeSpan.FromSeconds(2));
328+
Assert.Equal(actualBan.End, DateTime.Now + TimeSpan.FromMilliseconds(200), TimeSpan.FromSeconds(2));
329+
}
330+
283331
private class FakeFirewallRulesCollection: List<FirewallWASRule>, IFirewallWASRulesCollection<FirewallWASRule> {
284332

285333
private readonly object mutex = new();

0 commit comments

Comments
 (0)