63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
|
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
|