csc-milter/tests/test_from_header.py

63 lines
1.8 KiB
Python
Raw Normal View History

import ipaddress
import socket
from unittest.mock import Mock
import Milter
import csc_milter.main as csc_milter
def setup_module():
csc_milter.MYNETWORKS = [
ipaddress.ip_network('129.97.134.0/24'),
]
csc_milter.MYORIGIN = 'csclub.uwaterloo.ca'
def teardown_module():
csc_milter.MYNETWORKS = []
csc_milter.MYORIGIN = ''
def get_milter(dst_port):
milter = csc_milter.CSCMilter()
milter.getsymval = Mock(side_effect=lambda s: str(dst_port) if s == '{daemon_port}' else None)
milter._protocol = 18266 # to make the @Milter.noreply work
milter.setreply = Mock()
return milter
def test_local_port_25():
milter = get_milter(25)
ret = milter.connect('caffeine.csclub.uwaterloo.ca', socket.AF_INET, ('129.97.134.17', 10000))
assert ret == Milter.ACCEPT
def test_local_port_587():
milter = get_milter(587)
ret = milter.connect('caffeine.csclub.uwaterloo.ca', socket.AF_INET, ('129.97.134.17', 10000))
assert ret == Milter.ACCEPT
def test_remote_port_25_csc_address():
milter = get_milter(25)
ret = milter.connect('[24.114.29.182]', socket.AF_INET, ('24.114.29.182', 10000))
assert ret == Milter.CONTINUE
milter.envfrom('<user@example.com>')
ret = milter.header('From', '<syscom@csclub.uwaterloo.ca>')
assert ret == Milter.REJECT
def test_remote_port_25_non_csc_address():
milter = get_milter(25)
milter.connect('[24.114.29.182]', socket.AF_INET, ('24.114.29.182', 10000))
milter.envfrom('<user@example.com>')
ret = milter.header('From', 'John Doe <user@example.com>')
assert ret == Milter.CONTINUE
def test_remote_port_587():
milter = get_milter(587)
ret = milter.connect('[24.114.29.182]', socket.AF_INET, ('24.114.29.182', 10000))
assert ret == Milter.ACCEPT