· 7 years ago · Oct 21, 2018, 03:58 PM
1import unittest
2import ipaddressextractor
3
4class IPAddressExtractorTests(unittest.TestCase):
5 def setUp(self):
6 self.header = []
7
8 def test_mineSenderFromEdgeServerRecordInMailHeaders(self):
9 self.mail_from("67.205.47.130", "agileindia.org").ReceivedBy("75.119.213.4", "mails.agileindia.org")
10 self.mail_from(None, "mail-vw0-f172.google.com").ReceivedBy("67.205.47.130", "agileindia.org")
11 self.assertSenderIPIs("209.85.212.172", "agileindia.org")
12
13 def test_mineSenderFromEdgeServerRecordIdentifiedBySldMatchOfRecipientDomain(self):
14 self.mail_from("67.205.47.130", "agileindia.org").ReceivedBy("75.119.213.4", "mails.agileindia.org")
15 self.mail_from(None, "mail-vw0-f172.google.com").ReceivedBy("67.205.47.131", "mx1.agileindia.org")
16 self.assertSenderIPIs("209.85.212.172", "agileindia.org")
17
18 def test_useSenderIPForInvalidSenderEdgeServerDomainName(self):
19 self.mail_from("67.205.47.130", "agileindia.org").ReceivedBy("75.119.213.4", "mails.agileindia.org")
20 self.mail_from("209.85.212.172", "cannot-exist.agilefaqs.com").ReceivedBy("67.205.47.130", "agileindia.org")
21 self.assertSenderIPIs("209.85.212.172", "cannot-exist.agilefaqs.com")
22
23 def test_senderNameCanBeIPAddress(self):
24 self.mail_from(None, "209.85.212.172").ReceivedBy("67.205.47.130", "agileindia.org")
25 self.assertSenderIPIs("209.85.212.172", "agileindia.org")
26
27 def test_matchMXRecordIPWithReceiver(self):
28 self.mail_from("", "mail-vw0-f172.google.com").ReceivedBy("67.205.47.130", "apache2-echo.robin.dreamhost.com")
29 self.assertSenderIPIs("209.85.212.172", "apache2-echo.robin.dreamhost.com")
30
31 def test_skipHeaderRecordsThatDontCrossEdgeServers(self):
32 self.mail_from("192.168.1.47", "smtp.gmail.com").ReceivedBy("75.119.213.4", "mail.gmail.com")
33 self.mail_from("192.168.1.3", "192.168.6.242").ReceivedBy("192.168.1.47", "smtp.gmail.com")
34 self.assertSenderIPIs(None, "gmail.com")
35
36 def ReceivedBy(self, ip, domainName):
37 self.header.append(ipaddressextractor.ReceiveFromByHeaders(ip, self.fromIp, domainName, self.fromDomain))
38
39 def mail_from(self, ip, domainName):
40 self.fromIp = ip
41 self.fromDomain = domainName
42 return self
43
44 def assertSenderIPIs(self, senderIP, recipientDomain):
45 senderIp = ipaddressextractor.extractSenderIP(self.header, recipientDomain)
46 self.assertEquals(senderIP, senderIp)
47
48if __name__ == '__main__':
49 suite = unittest.TestLoader().loadTestsFromTestCase(IPAddressExtractorTests)
50 unittest.TextTestRunner(verbosity=2).run(suite)