Skip to content

Commit 18dc969

Browse files
committed
Compare method and EqualityComparers for rule
1 parent b75bc64 commit 18dc969

20 files changed

Lines changed: 135 additions & 98 deletions

IPTables.Net.Tests/IpTablesComparisonTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void TestComparisonMultiport()
2727
IpTablesRule r1 = IpTablesRule.Parse(rule, null, chains, 4);
2828
IpTablesRule r2 = IpTablesRule.Parse(rule, null, chains, 4);
2929

30-
Assert.IsTrue(r1.Equals(r2));
30+
Assert.IsTrue(r1.Compare(r2));
3131
}
3232

3333
[Test]
@@ -42,7 +42,7 @@ public void TestLimitComparison()
4242

4343
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
4444

45-
Assert.AreEqual(irule2, irule);
45+
Assert.IsTrue(irule2.Compare(irule));
4646
}
4747

4848
[Test]
@@ -57,7 +57,7 @@ public void TestDifficultCharacters()
5757

5858
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
5959

60-
Assert.AreEqual(irule2, irule);
60+
Assert.IsTrue(irule2.Compare(irule));
6161
}
6262
}
6363
}

IPTables.Net.Tests/IpTablesRestoreSyncTests.cs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ internal void TestApply(IpTablesRuleSet rulesOrig, IpTablesRuleSet rulesSynced,
2626
catch (Exception ex)
2727
{
2828
Console.WriteLine("Sync:");
29-
DumpRuleset(rulesOrig);
29+
DumpRuleset(rulesSynced);
3030
Console.WriteLine("New:");
3131
DumpRuleset(rulesNew);
3232
throw;
@@ -540,6 +540,45 @@ public void TestUpdateMiddle()
540540
}
541541
}
542542

543+
[Test]
544+
public void TestUpdateUnlabelled()
545+
{
546+
var mock = new MockIptablesSystemFactory();
547+
var system = new IpTablesSystem(mock, new MockIpTablesRestoreAdapter());
548+
549+
IpTablesRuleSet rulesOriginal = new IpTablesRuleSet(4, new List<String>()
550+
{
551+
"-A INPUT -p tcp -j DROP -m connlimit --connlimit-above 10",
552+
"-A INPUT -p udp -j DROP -m connlimit --connlimit-above 2",
553+
"-A INPUT -p udp -j DROP -m connlimit --connlimit-above 2",
554+
"-A INPUT -p udp -j DROP -m connlimit --connlimit-above 2"
555+
}, system);
556+
IpTablesRuleSet rulesNew = new IpTablesRuleSet(4, new List<String>()
557+
{
558+
"-A INPUT -p tcp -j DROP -m connlimit --connlimit-above 10",
559+
"-A INPUT -p udp -j DROP -m connlimit --connlimit-above 28",
560+
"-A INPUT -p udp -j DROP -m connlimit --connlimit-above 11",
561+
"-A INPUT -p udp -j DROP -m connlimit --connlimit-above 2"
562+
}, system);
563+
564+
List<String> expectedCommands = new List<String>
565+
{
566+
"*filter", rulesNew.Chains.First().Rules[1].GetActionCommand("-R"), rulesNew.Chains.First().Rules[2].GetActionCommand("-R"), "COMMIT"
567+
};
568+
569+
570+
using (var client = system.GetTableAdapter(4))
571+
{
572+
var sync = new DefaultNetfilterSync<IpTablesRule>();
573+
var rulesSynced = rulesOriginal.DeepClone();
574+
mock.TestSync(client, rulesSynced, rulesNew, sync);
575+
var output = (client as IMockIpTablesRestoreGetOutput).GetOutput();
576+
CollectionAssert.AreEqual(expectedCommands, output);
577+
578+
TestApply(rulesOriginal, rulesSynced, rulesNew, expectedCommands);
579+
}
580+
}
581+
543582

544583
[Test]
545584
public void TestUpdateMiddleTwo()

IPTables.Net.Tests/SingleCommentRuleParseTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void TestDropFragmentedTcpDnsWithCommentEquality()
2828
IpTablesRule irule1 = IpTablesRule.Parse(rule, null, chains, 4);
2929
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
3030

31-
Assert.AreEqual(irule1, irule2);
31+
Assert.IsTrue(irule2.Compare(irule1));
3232
}
3333

3434
[Test]

IPTables.Net.Tests/SingleConnlimitRuleParseTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void TestDropConnectionLimitEquality()
2727
IpTablesRule irule1 = IpTablesRule.Parse(rule, null, chains, 4);
2828
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
2929

30-
Assert.AreEqual(irule1, irule2);
30+
Assert.IsTrue(irule2.Compare(irule1));
3131
}
3232
}
3333
}

IPTables.Net.Tests/SingleConntrackRuleParseTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public void TestParse()
1818
IpTablesRule irule2 = IpTablesRule.Parse(rule2, null, chains, 4);
1919

2020
irule2.Equals(irule1);
21-
Assert.AreEqual(irule1, irule2);
21+
Assert.IsTrue(irule2.Compare(irule1));
2222
}
2323
}
2424
}

IPTables.Net.Tests/SingleCoreRuleParseTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void TestCoreDropingDestinationEquality()
7171
IpTablesRule irule1 = IpTablesRule.Parse(rule, null, chains, 4);
7272
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
7373

74-
Assert.AreEqual(irule1, irule2);
74+
Assert.IsTrue(irule2.Compare(irule1));
7575
}
7676

7777
[Test]
@@ -83,7 +83,7 @@ public void TestCoreDropingInterfaceEquality()
8383
IpTablesRule irule1 = IpTablesRule.Parse(rule, null, chains, 4);
8484
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
8585

86-
Assert.AreEqual(irule1, irule2);
86+
Assert.IsTrue(irule2.Compare(irule1));
8787
}
8888

8989
[Test]
@@ -95,7 +95,7 @@ public void TestCoreDropingSourceEquality()
9595
IpTablesRule irule1 = IpTablesRule.Parse(rule, null, chains, 4);
9696
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
9797

98-
Assert.AreEqual(irule1, irule2);
98+
Assert.IsTrue(irule2.Compare(irule1));
9999
}
100100

101101
[Test]
@@ -107,7 +107,7 @@ public void TestCoreDropingUdpEquality()
107107
IpTablesRule irule1 = IpTablesRule.Parse(rule, null, chains, 4);
108108
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
109109

110-
Assert.AreEqual(irule1, irule2);
110+
Assert.IsTrue(irule2.Compare(irule1));
111111
}
112112

113113
[Test]
@@ -119,7 +119,7 @@ public void TestCoreFragmentingEquality()
119119
IpTablesRule irule1 = IpTablesRule.Parse(rule, null, chains, 4);
120120
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
121121

122-
Assert.AreEqual(irule1, irule2);
122+
Assert.IsTrue(irule2.Compare(irule1));
123123
}
124124
}
125125
}

IPTables.Net.Tests/SingleDnatParseTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public void DnatTest1()
1717
IpTablesRule irule = IpTablesRule.Parse(rule, null, chains, 4);
1818

1919
Assert.AreEqual(rule, irule.GetActionCommand());
20-
Assert.AreEqual(irule, IpTablesRule.Parse(rule, null, chains, 4));
20+
Assert.IsTrue(irule.Compare(IpTablesRule.Parse(rule, null, chains, 4)));
2121
}
2222

2323
}

IPTables.Net.Tests/SingleDnatRuleParseTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void TestDnatRangeSourceAndEquality()
2727
IpTablesRule irule1 = IpTablesRule.Parse(rule, null, chains, 4);
2828
IpTablesRule irule2 = IpTablesRule.Parse(rule, null, chains, 4);
2929

30-
Assert.AreEqual(irule1, irule2);
30+
Assert.IsTrue(irule2.Compare(irule1));
3131
Assert.AreEqual(rule, irule1.GetActionCommand());
3232
Assert.AreEqual(rule, irule2.GetActionCommand());
3333
}

IPTables.Net.Tests/SingleHashlimitRuleParseTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public void TestCompare1()
1313
String rule = "-A ABC -m hashlimit --hashlimit-name aaaaaaaaaaaaaaaaaaaaaa --hashlimit-above 125/second --hashlimit-burst 500 --hashlimit-mode dstip,dstport --hashlimit-srcmask 32 --hashlimit-dstmask 32 --hashlimit-htable-size 65000 --hashlimit-htable-max 30000 --hashlimit-htable-expire 6 --hashlimit-htable-gcinterval 600 -j AVS";
1414
IpTablesChainSet chains = new IpTablesChainSet(4);
1515

16-
Assert.AreEqual(IpTablesRule.Parse(rule, null, chains, 4), IpTablesRule.Parse(rule, null, chains, 4));
16+
Assert.IsTrue(IpTablesRule.Parse(rule, null, chains, 4).Compare(IpTablesRule.Parse(rule, null, chains, 4)));
1717
}
1818

1919
[Test]
@@ -23,7 +23,7 @@ public void TestCompare2()
2323
String rule2 = "-A AAAA -t raw -m hashlimit --hashlimit-above 111/sec --hashlimit-burst 500 --hashlimit-mode dstip,dstport --hashlimit-name synflood_spoofe --hashlimit-htable-size 65000 --hashlimit-htable-max 30000 --hashlimit-htable-gcinterval 600 --hashlimit-htable-expire 6 -g AA";
2424
IpTablesChainSet chains = new IpTablesChainSet(4);
2525

26-
Assert.AreEqual(IpTablesRule.Parse(rule, null, chains, 4), IpTablesRule.Parse(rule2, null, chains));
26+
Assert.IsTrue(IpTablesRule.Parse(rule, null, chains, 4).Compare(IpTablesRule.Parse(rule2, null, chains)));
2727
}
2828
}
2929
}

IPTables.Net.Tests/SingleMarkRuleParseTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public void MatchMarkDec()
1717
IpTablesRule irule = IpTablesRule.Parse(rule, null, chains, 4);
1818

1919
Assert.AreEqual(ruleExpect, irule.GetActionCommand());
20-
Assert.AreEqual(IpTablesRule.Parse(ruleExpect, null, chains, 4), irule);
20+
Assert.IsTrue(IpTablesRule.Parse(ruleExpect, null, chains, 4).Compare(irule));
2121
}
2222

2323
[Test]
@@ -30,7 +30,7 @@ public void MatchMarkHex()
3030
IpTablesRule irule = IpTablesRule.Parse(rule, null, chains, 4);
3131

3232
Assert.AreEqual(ruleExpect, irule.GetActionCommand());
33-
Assert.AreEqual(IpTablesRule.Parse(ruleExpect, null, chains, 4), irule);
33+
Assert.IsTrue(IpTablesRule.Parse(ruleExpect, null, chains, 4).Compare(irule));
3434
}
3535

3636

0 commit comments

Comments
 (0)