better-organized unit tests
parent
98be1c89db
commit
2680405c89
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
import time
|
import time
|
||||||
from pyruse.actions.action_counterRaise import Action
|
from pyruse.actions.action_counterRaise import Action
|
||||||
|
@ -50,3 +50,9 @@ def whenGraceTimeThenCountIs0():
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
raiseAct.act(entry)
|
raiseAct.act(entry)
|
||||||
assert entry["action_counterRaise4"] == 1
|
assert entry["action_counterRaise4"] == 1
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenNonExistingThenRaiseTo1()
|
||||||
|
whenKeepSecondsThenRaiseUntilTimeOut()
|
||||||
|
whenDifferentKeyThenDifferentCounter()
|
||||||
|
whenGraceTimeThenCountIs0()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
import time
|
import time
|
||||||
from pyruse.actions.action_counterReset import Action
|
from pyruse.actions.action_counterReset import Action
|
||||||
|
@ -49,3 +49,9 @@ def whenGraceTimeThenRaiseWorksAtGraceEnd():
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
raiseAct.act(entry)
|
raiseAct.act(entry)
|
||||||
assert entry["action_counterReset4"] == 1
|
assert entry["action_counterReset4"] == 1
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenResetThenCountIs0()
|
||||||
|
whenNoGraceTimeThenRaiseWorks()
|
||||||
|
whenGraceTimeThenRaiseFails()
|
||||||
|
whenGraceTimeThenRaiseWorksAtGraceEnd()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -78,3 +78,8 @@ def whenReportThenNewSetOfMessages():
|
||||||
assert os.path.exists(mail_filename)
|
assert os.path.exists(mail_filename)
|
||||||
os.remove(mail_filename)
|
os.remove(mail_filename)
|
||||||
whenEmailThenCheckContents()
|
whenEmailThenCheckContents()
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenNewDayThenReport()
|
||||||
|
whenEmailThenCheckContents()
|
||||||
|
whenReportThenNewSetOfMessages()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -71,3 +71,7 @@ def whenEmailWithoutSubjectThenCheckContents():
|
||||||
assert toOK
|
assert toOK
|
||||||
assert nbMsg == 1
|
assert nbMsg == 1
|
||||||
os.remove(mail_filename)
|
os.remove(mail_filename)
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenEmailWithSubjectThenCheckContents()
|
||||||
|
whenEmailWithoutSubjectThenCheckContents()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
@ -137,3 +137,11 @@ def whenUnfinishedBanThenTimeoutReset():
|
||||||
assert line == "add element I4 ban {10.0.0.1 timeout 2s}\n", line
|
assert line == "add element I4 ban {10.0.0.1 timeout 2s}\n", line
|
||||||
assert lineCount == 3, lineCount
|
assert lineCount == 3, lineCount
|
||||||
_clean()
|
_clean()
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenBanIPv4ThenAddToIPv4Set()
|
||||||
|
whenBanIPv6ThenAddToIPv6Set()
|
||||||
|
whenBanTwoIPThenTwoLinesInState()
|
||||||
|
whenBanAnewThenNoDuplicate()
|
||||||
|
whenFinishedBanThenAsIfNotThere()
|
||||||
|
whenUnfinishedBanThenTimeoutReset()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
from pyruse.filters.filter_equals import Filter
|
from pyruse.filters.filter_equals import Filter
|
||||||
|
|
||||||
|
@ -14,3 +14,9 @@ def whenEqualDiffTypeThenTrue():
|
||||||
|
|
||||||
def whenLowerThenFalse():
|
def whenLowerThenFalse():
|
||||||
assert not Filter({"field": "v", "value": 2}).filter({"v": 0})
|
assert not Filter({"field": "v", "value": 2}).filter({"v": 0})
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenGreaterThenFalse()
|
||||||
|
whenEqualSameTypeThenTrue()
|
||||||
|
whenEqualDiffTypeThenTrue()
|
||||||
|
whenLowerThenFalse()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
from pyruse.filters.filter_greaterOrEquals import Filter
|
from pyruse.filters.filter_greaterOrEquals import Filter
|
||||||
|
|
||||||
|
@ -17,3 +17,10 @@ def whenEqualDiffTypeThenTrue():
|
||||||
|
|
||||||
def whenLowerThenFalse():
|
def whenLowerThenFalse():
|
||||||
assert not Filter({"field": "v", "value": 2}).filter({"v": 0})
|
assert not Filter({"field": "v", "value": 2}).filter({"v": 0})
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenGreaterPosIntThenTrue()
|
||||||
|
whenGreaterNegFloatThenTrue()
|
||||||
|
whenEqualSameTypeThenTrue()
|
||||||
|
whenEqualDiffTypeThenTrue()
|
||||||
|
whenLowerThenFalse()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
from pyruse.filters.filter_pcre import Filter
|
from pyruse.filters.filter_pcre import Filter
|
||||||
|
|
||||||
|
@ -18,3 +18,9 @@ def whenNamedGroupsThenFoundInEntry():
|
||||||
entry = {"v": "yet another test"}
|
entry = {"v": "yet another test"}
|
||||||
Filter({"field": "v", "re": "^(?P<y>.).* .*(?P<e>.)r .*(?P<s>.).$"}).filter(entry)
|
Filter({"field": "v", "re": "^(?P<y>.).* .*(?P<e>.)r .*(?P<s>.).$"}).filter(entry)
|
||||||
assert entry["y"] + entry["e"] + entry["s"] == "yes"
|
assert entry["y"] + entry["e"] + entry["s"] == "yes"
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenMatchesThenTrue()
|
||||||
|
whenNoMatchThenFalse()
|
||||||
|
whenSaveThenGroupsInEntry()
|
||||||
|
whenNamedGroupsThenFoundInEntry()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
from pyruse.filters.filter_pcreAny import Filter
|
from pyruse.filters.filter_pcreAny import Filter
|
||||||
|
|
||||||
|
@ -13,3 +13,8 @@ def whenNamedGroupsThenFoundInEntry():
|
||||||
entry = {"v": "It works or not"}
|
entry = {"v": "It works or not"}
|
||||||
Filter({"field": "v", "re": ["^(?P<o>It)(?P<k> works)", "(?P<k>or)(?P<o> not)$"]}).filter(entry)
|
Filter({"field": "v", "re": ["^(?P<o>It)(?P<k> works)", "(?P<k>or)(?P<o> not)$"]}).filter(entry)
|
||||||
assert entry["o"] + entry["k"] == "It works"
|
assert entry["o"] + entry["k"] == "It works"
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenMatchesThenTrue()
|
||||||
|
whenNoMatchThenFalse()
|
||||||
|
whenNamedGroupsThenFoundInEntry()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
from pyruse.filters.filter_userExists import Filter
|
from pyruse.filters.filter_userExists import Filter
|
||||||
|
|
||||||
|
@ -8,3 +8,7 @@ def whenUserExistsThenTrue():
|
||||||
|
|
||||||
def whenGarbageThenFalse():
|
def whenGarbageThenFalse():
|
||||||
assert not Filter({"field": "user"}).filter({"user": "auietsnr"})
|
assert not Filter({"field": "user"}).filter({"user": "auietsnr"})
|
||||||
|
|
||||||
|
def unitTests():
|
||||||
|
whenUserExistsThenTrue()
|
||||||
|
whenGarbageThenFalse()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# pyruse is intended as a replacement to both fail2ban and epylog
|
# pyruse is intended as a replacement to both fail2ban and epylog
|
||||||
# Copyright © 2017 Y. Gablin
|
# Copyright © 2017–2018 Y. Gablin
|
||||||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
@ -31,52 +31,16 @@ def main():
|
||||||
import filter_equals, filter_greaterOrEquals, filter_pcre, filter_pcreAny, filter_userExists
|
import filter_equals, filter_greaterOrEquals, filter_pcre, filter_pcreAny, filter_userExists
|
||||||
import action_counterRaise, action_counterReset, action_dailyReport, action_email, action_nftBan
|
import action_counterRaise, action_counterReset, action_dailyReport, action_email, action_nftBan
|
||||||
|
|
||||||
filter_equals.whenGreaterThenFalse()
|
filter_equals.unitTests()
|
||||||
filter_equals.whenEqualSameTypeThenTrue()
|
filter_greaterOrEquals.unitTests()
|
||||||
filter_equals.whenEqualDiffTypeThenTrue()
|
filter_pcre.unitTests()
|
||||||
filter_equals.whenLowerThenFalse()
|
filter_pcreAny.unitTests()
|
||||||
|
filter_userExists.unitTests()
|
||||||
filter_greaterOrEquals.whenGreaterPosIntThenTrue()
|
action_counterRaise.unitTests()
|
||||||
filter_greaterOrEquals.whenGreaterNegFloatThenTrue()
|
action_counterReset.unitTests()
|
||||||
filter_greaterOrEquals.whenEqualSameTypeThenTrue()
|
action_dailyReport.unitTests()
|
||||||
filter_greaterOrEquals.whenEqualDiffTypeThenTrue()
|
action_email.unitTests()
|
||||||
filter_greaterOrEquals.whenLowerThenFalse()
|
action_nftBan.unitTests()
|
||||||
|
|
||||||
filter_pcre.whenMatchesThenTrue()
|
|
||||||
filter_pcre.whenNoMatchThenFalse()
|
|
||||||
filter_pcre.whenSaveThenGroupsInEntry()
|
|
||||||
filter_pcre.whenNamedGroupsThenFoundInEntry()
|
|
||||||
|
|
||||||
filter_pcreAny.whenMatchesThenTrue()
|
|
||||||
filter_pcreAny.whenNoMatchThenFalse()
|
|
||||||
filter_pcreAny.whenNamedGroupsThenFoundInEntry()
|
|
||||||
|
|
||||||
filter_userExists.whenUserExistsThenTrue()
|
|
||||||
filter_userExists.whenGarbageThenFalse()
|
|
||||||
|
|
||||||
action_counterRaise.whenNonExistingThenRaiseTo1()
|
|
||||||
action_counterRaise.whenKeepSecondsThenRaiseUntilTimeOut()
|
|
||||||
action_counterRaise.whenDifferentKeyThenDifferentCounter()
|
|
||||||
action_counterRaise.whenGraceTimeThenCountIs0()
|
|
||||||
|
|
||||||
action_counterReset.whenResetThenCountIs0()
|
|
||||||
action_counterReset.whenNoGraceTimeThenRaiseWorks()
|
|
||||||
action_counterReset.whenGraceTimeThenRaiseFails()
|
|
||||||
action_counterReset.whenGraceTimeThenRaiseWorksAtGraceEnd()
|
|
||||||
|
|
||||||
action_dailyReport.whenNewDayThenReport()
|
|
||||||
action_dailyReport.whenEmailThenCheckContents()
|
|
||||||
action_dailyReport.whenReportThenNewSetOfMessages()
|
|
||||||
|
|
||||||
action_email.whenEmailWithSubjectThenCheckContents()
|
|
||||||
action_email.whenEmailWithoutSubjectThenCheckContents()
|
|
||||||
|
|
||||||
action_nftBan.whenBanIPv4ThenAddToIPv4Set()
|
|
||||||
action_nftBan.whenBanIPv6ThenAddToIPv6Set()
|
|
||||||
action_nftBan.whenBanTwoIPThenTwoLinesInState()
|
|
||||||
action_nftBan.whenBanAnewThenNoDuplicate()
|
|
||||||
action_nftBan.whenFinishedBanThenAsIfNotThere()
|
|
||||||
action_nftBan.whenUnfinishedBanThenTimeoutReset()
|
|
||||||
|
|
||||||
# Integration test
|
# Integration test
|
||||||
wf = workflow.Workflow(conf.asMap().get("actions", {}))
|
wf = workflow.Workflow(conf.asMap().get("actions", {}))
|
||||||
|
@ -100,7 +64,7 @@ def main():
|
||||||
actions.action_dailyReport.Action._hour = 25
|
actions.action_dailyReport.Action._hour = 25
|
||||||
wf.run(entry("bck", "login", "Failed password for root from ::1", 11))
|
wf.run(entry("bck", "login", "Failed password for root from ::1", 11))
|
||||||
for f in ['acted_on.log', 'email.dump', 'nftBan.cmd', 'unfiltered.log']:
|
for f in ['acted_on.log', 'email.dump', 'nftBan.cmd', 'unfiltered.log']:
|
||||||
assert os.path.exists(f)
|
assert os.path.exists(f), "file should exist: " + f
|
||||||
try:
|
try:
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
[ "/usr/bin/bash",
|
[ "/usr/bin/bash",
|
||||||
|
|
Loading…
Reference in New Issue