def testSetRules(self):
     firewall = MessageFirewall()
     message = TaggedMessage([])
     firewall.setRules("stop as NEW")
     return firewall.analyze(message, getDefaultDomain()).addCallback(
         lambda result: self.assertEquals("NEW", result)
     )
    def testDebug(self):
        firewall = MessageFirewall(
            "do ruleTrue() mark xxx\nif not xxx do ruleFalse() mark zzz\nskip to 100\n200: stop as C\n100: if yyyy stop as D\nif xx stop as A\nstop as B"
        )
        message = TaggedMessage([])

        def logCallback(log):
            self.fwLog = log

        return firewall.analyze(message, getDefaultDomain(), debug=True, logCallback=logCallback).addCallback(
            lambda _: self.assertEquals(
                [
                    "[ENTER]: do ruleTrue() mark xxx",
                    "Result: True",
                    "[ENTER]: if not xxx do ruleFalse() mark zzz",
                    "Result: False",
                    "Tagged message with tags: ['zzz'], current tags are: ['zzz']",
                    "[ENTER]: skip to 100",
                    "Skipping to 100",
                    "Labels for skip don't match 100 != 200",
                    "Stopped skip to at label 100",
                    "[ENTER]: 100: if yyyy stop as D",
                    "[ENTER]: if xx stop as A",
                    "[ENTER]: stop as B",
                    "Stopping firewall with result: B",
                ],
                self.fwLog,
            )
        )
    def testPickling(self):
        import pickle

        fw = MessageFirewall()
        self.assertEquals("", pickle.loads(pickle.dumps(fw)).getRules())

        fw.setRules("stop as OK")
        self.assertEquals("stop as OK", pickle.loads(pickle.dumps(fw)).getRules())
    def testAnalyze5(self):
        firewall = MessageFirewall("10: do ruleTrue()\nskip to 10")
        message = TaggedMessage([])

        def checkSkipFall(failure):
            failure.trap(errors.SkipToFallthroughError)

        return (
            firewall.analyze(message, getDefaultDomain())
            .addCallback(lambda _: self.assert_(False))
            .addErrback(checkSkipFall)
        )
 def testCompile(self):
     firewall = MessageFirewall()
     self.assertEqual(
         [
             SkipFirewallStatement(skip_label=345, if_tags=None, if_inverted=False, label=None),
             DoFirewallStatement(
                 func_name="ruleTrue",
                 func_args={"a": 3, "b": "ddd"},
                 markers=["spam"],
                 if_tags=["analyzed", "skipped"],
                 if_inverted=False,
                 label=None,
             ),
             StopFirewallStatement(stop_marker="SPAM", if_tags=["a", "b", "c"], if_inverted=True, label=345),
         ],
         firewall.compile(
             firewall.parse(
                 'skip to 345\nif analyzed, skipped do ruleTrue(a=3, b="ddd") mark spam\n345: if not a, b, c stop as SPAM'
             )
         ),
     )
class FirewallRulesSetCommandTestCase(unittest.TestCase):
    """
    Тест на L{spamfighter.api.message.firewall.FirewallRulesSetCommand}.
    """

    def setUp(self):
        self.c = FirewallRulesSetCommand()
        self.firewall = MessageFirewall()
        getDefaultDomain().set('testFIREWALL', self.firewall)

    def tearDown(self):
        getDefaultDomain().delete('testFIREWALL')

    def testRun(self):
        self.c.params.getUnserialized({'partner' : None, 'firewall' : 'testFIREWALL', 'rules' : 'stop as TEST'})
        return self.c.run().addCallback(lambda _: self.assertEquals('stop as TEST', self.firewall.getRules()))

    def testRun(self):
        self.c.params.getUnserialized({'partner' : None, 'firewall' : 'testFIREWALL', 'rules' : 'YYYY'})
        return self.c.run().addCallback(lambda _: self.assert_(False)).addErrback(lambda failure: failure.trap('spamfighter.core.commands.errors.FirewallSyntaxError'))
    def testSyntaxCheck(self):
        firewall = MessageFirewall()

        firewall.syntaxCheck("stop as Y")
        self.assertRaises(SyntaxError, firewall.syntaxCheck, "XXXX")
    def testGetRules(self):
        firewall = MessageFirewall()
        self.assertEquals("", firewall.getRules())

        firewall = MessageFirewall("stop as X")
        self.assertEquals("stop as X", firewall.getRules())
 def testAnalyze7(self):
     firewall = MessageFirewall("do ruleTrue() mark xxx\nif xx stop as A\nstop as B")
     message = TaggedMessage([])
     return firewall.analyze(message, getDefaultDomain()).addCallback(lambda result: self.assertEquals("B", result))
 def testAnalyze6(self):
     firewall = MessageFirewall("skip to 20\nstop as OK\n20: stop as SPAM")
     message = TaggedMessage([])
     return firewall.analyze(message, getDefaultDomain()).addCallback(
         lambda result: self.assertEquals("SPAM", result)
     )
 def testAnalyze4(self):
     firewall = MessageFirewall("do ruleTrue() mark spammed\nif spammed stop as SPAM")
     message = TaggedMessage([])
     return firewall.analyze(message, getDefaultDomain()).addCallback(
         lambda result: self.assertEquals("UNKNOWN", result)
     )
 def testAnalyze1(self):
     firewall = MessageFirewall()
     message = Message([])
     return firewall.analyze(message, getDefaultDomain()).addCallback(
         lambda result: self.assertEquals("UNKNOWN", result)
     )
 def setUp(self):
     self.c = FirewallRulesSetCommand()
     self.firewall = MessageFirewall()
     getDefaultDomain().set('testFIREWALL', self.firewall)
 def setUp(self):
     self.c = FirewallRulesCheckCommand()
     self.firewall = MessageFirewall('stop as SPAM')
     getDefaultDomain().set('testFIREWALL', self.firewall)